Algorithmique et Programmation, IMA - CRIStALgrisoni/IMA/Cours03_fonctions.pdf · Algorithmique et...

of 33/33
Algorithmique et Programmation, IMA Cours 3 : Actions, Procédures Université Lille 1 - Polytech Lille
  • date post

    14-Sep-2018
  • Category

    Documents

  • view

    239
  • download

    3

Embed Size (px)

Transcript of Algorithmique et Programmation, IMA - CRIStALgrisoni/IMA/Cours03_fonctions.pdf · Algorithmique et...

  • Algorithmique et Programmation, IMA

    Cours 3 : Actions, Procdures

    Universit Lille 1 - Polytech Lille

  • Conception Structure Descendante

    Les Fonctions

    Les Actions / les Procdures

    Rsum

  • Conception Structure Descendante

    Les Fonctions

    Les Actions / les Procdures

    Rsum

  • Conception Structure descendante - 1

    Dcouper lalgorithme (action) en sous-algorithmes(sous-actions) plus simples, jusqu des oprations

    considres primitives. Buts :

    Simplification

    Abstraction (ignorer les dtails)

    Structuration

    Rutilisation

  • Conception Structure descendante - 2

    Exemple : slectionner les entiers selon un certain critre une fonction de slection qui dit "oui" ou "non" et qui peut

    tre plus ou moins complique ;

    un appel dans le "main".

    Outil : actions et fonctions paramtres.

  • Conception Structure Descendante

    Les Fonctions

    Les Actions / les Procdures

    Rsum

  • Fonctions - Dfinition

    Une fonction est un sous-programme qui partir de donnesproduit un (et un SEUL) rsultat.

    Syntaxe Algo (exemple)

    Fonction max(a,b) : entierD: a,b : entiers {Donnes}L: m : entier {Variable locale}Si a

  • Fonctions - Appel de fonction

    Un appel de fonction est une expression du type de retour dela fonction.

    Exemple :

    x max(3,43)Que se passe-t-il lors de lappel ?

    Les donnes sont remplaces par des valeurs (ou desexpressions)

    Le code de la fonction est excut jusquau premier return.

    Le rsultat retourn par la fonction est la valeur delexpression du return.

    Ce rsultat (valeur) est rcupr dans la variable x ici.

  • Fonctions en C - Syntaxe

    Dfinition

    type_de_retour nom_fonction(liste-params) {

    liste-declarations (optionnelle)

    liste_instructions

    }

    La liste dinstructions comprend au moins une instructionreturn (du type type_de_retour).

    Appel

    nom_fonction(liste-expressions)

  • Fonctions en C - Exemple

    Dfinition dune fonctioni n t max ( i n t a , i n t b ){

    i n t m;i f ( a>b ) m=a ; else m=b ;

    return (m) ;}

    attention au type de retour !

    Appelt o t o = max( 3 , 4 5 ) ; / / i n t d e c l a r e a v a n t !

  • Fonctions en C - Exercices

    Bons entiers Modifier le programme de slection des entiers infrieurs

    100 pour utiliser la fonction dentte :

    bool bon_ent ie r ( i n t n )

    crire la fonction bon_entier de faon slectionner lesentiers multiples de 3.

  • Fonctions en C - Erreurs courantes

    Oubli du ; dans le if :

    toto.c:9:17: error: expected ; after expression

    if ( a>b ) m=a else m=b ;

    ^

    Oubli du return :

    toto.c:11:1: warning: control reaches end of non-void

    function [-Wreturn-type]

    }

    ^

    appel avec des arguments du mauvais type : par exemplemax("tsoin",4) :

    toto.c:42:18: warning: incompatible pointer to integer conversion passingchar [6] to parameter of type int [-Wint-conversion]

    int toto = max("tsoin",4);^~~~~~~

    toto.c:6:15: note: passing argument to parameter a hereint max ( int a , int b )

  • Conception Structure Descendante

    Les Fonctions

    Les Actions / les Procdures

    Rsum

  • Les actions - dfinition

    Une action ne retourne pas de rsultat.

    Action maxproc(a,b,maxi)D: a,b : entiers {Donnes}R: maxi : entier {Rsultat}Si a

  • Les actions - Utilisation (1)

    Lappel dune action est une instruction. Les paramtresformels sont TOUS remplacs par des paramtres effectifs demme type

    Une donne par une valeur (ou une expression qui a unevaleur)

    Un rsultat par une variable dans laquelle la procdure doitranger le rsultat

    Une Donne/Rsultat par une variable value.

  • Les actions - Utilisation (2)

    Exempleresu : entier ;

    maxproc(3,43,resu);

    Aprs lappel, la variable resu contient le max des deuxentiers.

    Les actions/procdures sont surtout utiles pour :

    imprimer des valeurs, des structures, des messages . . . modifier des paramtres qui ne peuvent tre retourns

    (tableaux, paires, structures compliques) : ceux-ci sont

    alors appels Donnes/Rsultats ou entres/sorties.

  • Les actions en C - procdures

    En C les actions/procdures sont des fonctions qui ne

    retournent rien (mot clef void).void pr in tmaxproc ( i n t a , i n t b ){ / / i m p r e s s i o n du max

    i n t maxi ;i f ( a

  • Procdures en C - Syntaxe

    Dfinition

    void nom_action(liste-params) {

    liste-declarations (optionnelle)

    liste_instructions

    }

    Appel

    nom_action(liste-expressions)

    on ne rcupre pas le rsultat dune procdure, il ny en aPAS.

  • Procdures en C - Exemples

    crire les procdures suivantes :

    Impression du maximum de 3 entiers en paramtres Impression des 100 premiers termes de la suite suivante :

    u0 = 32 un = 3 un1 + 19

    Impression des k premiers termes de la suite, avec kpass en paramtre.

  • Conception Structure Descendante

    Les Fonctions

    Les Actions / les Procdures

    Rsum

  • Les fonctions

    Une fonction retourne un et un seul rsultat.Fonction ajoute_un(a) : Entier

    D: a : EntierRetourner a+1

    FFonctionAppel :Programme Main

    L: x,y :Entiersx 12y ajoute_un(x)Imprimer(y)

    Retourner 0FProgramme

  • Les actions

    Une action ne retourne pas de rsultat.

    Action imprime_succ(a)D: a : EntierImprime(a+1)

    FActionAppel :Programme Main

    L: x :Entierx 12imprime_succ(x)

    Retourner 0FProgramme

  • Et si ?

    Et si je veux modifier un paramtre dentre ?Action inc(a)

    D/R: a : Entiera a+1

    FAction

    Programme MainL: x :Entierx 12inc(x)

    Imprime(x)

    Retourner 0FProgramme

  • Et si ?

    Et si je veux retourner deux rsultats ?Action quotient_et_reste(a,b,q,r)

    D: a,b : EntiersR: q,r : Entiers.....

    (calcul de q et r)

    FAction

    Programme MainL: x,y,vq,vr :Entiersx 37y 7quotient_et_reste(x,y,vq,vr)

    Imprime(vq,vr)

    Retourner 0FProgramme

  • Algorithmique et Programmation, IMACours 3c - Rcursivit

    Universit Lille 1 - Polytech Lille

  • Dfinition

    Un algorithme (une fonction, une procdure) est dit rcursif sisa dfinition (son code) contient un appel lui-mme.

    Un algorithme qui nest pas rcursif est dit itratif.

  • Utilisations usuelles

    Utilisations varies (liste non exhaustive) : Calcul de suite rcursive (numrique, graphique. . . ) Calcul de type diviser pour rgner : recherche, tri, . . . Calcul sur des structures de donnes inductives (listes,

    arbres, . . . ) Prog avancee (S6). Dans tous les cas, une version itrative est possible.

  • Quelques exemples classiques - 1

    Factorielle : n! = n.(n 1)!Fonction fact(n) : entier

    D: n : entier positif ou nulSi n=0 alors

    Retourner 1Sinon

    Retourner n*fact(n-1) {Appel rcursif}Fsi

    FFonction Attention au type de retour et lorthographe du nom de lafonction. Drouler ! Complexit en nb dappels ?

  • Quelques exemples classiques - 2

    Fibonacci : Fibo(n) = Fibo(n 1) + Fibo(n 2)Fonction fibo(n) : entier

    D: n : entier positif ou nulSi n=0 alors

    Retourner 1Sinon

    Si n=1 alorsRetourner 1

    SinonRetourner fibo(n-1)+fibo(n-2) {Appel rcursif}

    FsiFsi

    FFonction Drouler ! Complexit en nb dappels ? Limplmentation imprative est meilleure, pourquoi ?

  • Quelques exemples classiques - 3

    Que calcule somme(5,0) ?Fonction somme (n,r) :entier

    D: n,r : entier positifs ou nulSi n = 1 alors

    Retourner r + 1Sinon

    Retourner somme (n -1 , r + n )Fsi

    FFonction r est appel paramtre daccumulation.

  • Rcursivit terminale (ou pas ?)

    Un algorithme rcursif est dit rcursif terminal si lappelrcursif est la dernire instruction ralise. Stockage non ncessaire de la valeur obtenue parrcursivit.

    Factorielle : fact(n 1) puis multiplication par n, donc nonrcursif terminal.

    Somme : rcursif terminal :somme(5, 0) = somme(4, 5) = somme(...) . . . = 15

  • Drcursivons !

    La factorielle :Fonction fact(n) : entier

    D: n : entier positif ounul

    Si n=0 alorsRetourner 1

    SinonRetournern*fact(n-1)

    FsiFFonction

    Fonction fact(n) : entierD: n : entier positif ou nulL: i,f :entierf 1Pour i de 0 n Faire

    f f*iFpourRetourner f

    FFonction

  • Attention

    Toujours bien vrifier que votre algorithme termine !

    Conception Structure DescendanteLes FonctionsLes Actions / les ProcduresRsum