Fonctions1 Fonctions et programmmationLa programmation d’un probl`eme est une taˆche complexe difficile a` maitriser globalement.Pour limiter les erreurs et la taille des programmes (donc du code objet), on va chercher`a identifier des sous-tˆaches qui correspondent `a des calculs bien d´etermin´es qu’on est amen´e a`r´ep´eter plusieurs fois dans le programme.Cela permet de raisonner de mani`ere plus abstraite sur l’ensemble du programme et de seconcentrersurlaprogrammationdepartiesplussimplesetpluscourtes.L’exp´eriencemontrequ’unprogrammeur standard ne peut maitriser qu’un programme de 2-3 pages, soit 200-300 lignes, cequi impose de d´ecouper les programmes plus complexes en parties plus simples `a ´ecrire. Pour lesapplications de taille importante -par exemple le noyau Unix- on utilisera en plus des techniqueset des outils de g´enie logiciel.Exemple 1 : calculer le minimum de deux entiersDans les calculs num´eriques, on a souvent besoin de prendre le maximum de deux nombres.Plutotqueder´ep´eterlesinstructionsquipermettentdecalculercemax,onvautiliserunefonction:fonction min (a: reel,b:reel):reelsi a > b alors retourner bsinon retourner a fsiEn fait, vous avez d´eja` utilis´e des fonctions des librairies : print, input sont des fonctionsprogramm´ees dans les librairies python (et leur code est suffisamment compliqu´e pour essayer `atout prix de ne pas le r´e´ecrire!).Exercice 1 Le programme de r´esolution d’une ´equation de degr´e 2 vu au premier cours ...
1 Fonctionset programmmation Laprogrammationd’unproble`meestunetˆachecomplexedifficilea`maitriserglobalement. Pour limiter les erreurs et la taille des programmes (donc du code objet), on va chercher `aidentifierdessoustˆachesquicorrespondenta`descalculsbiende´termine´squ’onestamen´ea` r´epe´terplusieursfoisdansleprogramme. Celapermetderaisonnerdemanie`replusabstraitesurl’ensembleduprogrammeetdese concentrersurlaprogrammationdepartiesplussimplesetpluscourtes.L’expe´riencemontrequ’un programmeur standard ne peut maitriser qu’un programme de 23 pages, soit 200300 lignes, ce quiimposedede´couperlesprogrammespluscomplexesenpartiesplussimplesa`´ecrire.Pourles applications de taille importante par exemple le noyau Unix on utilisera en plus des techniques etdesoutilsdeg´enielogiciel.
Exemple 1: calculer le minimum de deux entiers Danslescalculsnum´eriques,onasouventbesoindeprendrelemaximumdedeuxnombres. Plutotqueder´ep´eterlesinstructionsquipermettentdecalculercemax,onvautiliserunefonction:
fonction min (a: reel,b:reel):reel si a> b alors retourner b sinon retourner a fsi
Enfait,vousavezde´j`autilise´desfonctionsdeslibrairies:print, inputsont des fonctions programm´eesdansleslibrairiespython(etleurcodeestsuffisammentcomplique´pouressayer`a toutprixdenepaslere´´ecrire!).
Exemple 2: calculer la factorielle. fonction fact (n: entier):entier si n<=0 alorsretourner 1 sinon retourner (n*fact(n1)) fsi La fonction ici estceru´risevleeltiutniaot´ieefinnnacfoonnncdteiloitnoofcnal`:adlapple mˆeme:lapartiefact(n1)’ledondeladeexpressigien.nr`irele Exercice 2Donner (sous forme algorithmique) une fonctionrsiv´ecurecalculant la somme des npremiers entiers.
1
2 Principes 2.1 Unexemple Leprogrammepythoncontenudanslefichierpuissance.pycontientlad´efinitiondelafonction puis(x, n) qui calcule la fonction x, n xn (x, n entiers) et un script d’utilisation de cette fonction. #la definition de la fonction defpuis(x,n):#x,nparame`tresdelafonction "calcule x**n"#commentaires pour la documentation #d´ebutducorpsdelafonction p=1 #p,ivariables locales i=1 while (i<=n): p=p*x i=i+1 returnp#renvoidelavaleurcalcule´e
#un script i=0 while (i<10): x=puis(2,i)#appeldelafonctionaveclesparame`tres #effectifs 2 et i print ’la puissance’,i,’eme de 2 est’, x i=i+1
2.2Parame`tres Enprogrammation,lesargumentsd’unefonctions’appellentlesparame`tres.Ilyadeuxtypes deparame`tres: –Lesparam`etresformelssontlesidentificateursquisontutilis´espourde´finirlafonction.Il n’ontpasdevaleurde´termine´eetcorrespondent`adesvariablesmathe´matiquesutilis´eespour n lade´finitioncommexoundanspuis:x, n→x –Lesparame`treseffectifssontlesvaleursutilis´eeslorsdel’appeldelafonctionquicalculealors lavaleurdelafonctionapr`essubstitutiondesparame`tresformelscorrespondants.Ainsi2 estleparam`etreeffectifdel’appelpuis(2,1) qui calculepuisdnoietsbututiprass`expar 2 etndnetioie´nfislad1danparpuis. Unparame`treformelesttoujoursunnomdevariable,unparam`etreeffectifpeuteˆtreune expression. Par exemplepuis(y+ 2, zis´eutorondi(`acseat)ffetaaimesde´ectleuqnoitmargorpe valeurs`ayetzavant cet appel).
2.3 Profild’une fonction Enmathe´matiques,unede´finitiondefonctionestintroduiteparuneformulationdelaforme + log:R →R quidonnelenomdelafonctionetsondomaineded´epartetsondomained’arrive´e.Cesdomaines d´eterminentleprofilsdeare´pslpcaratlmoefssneodaoinn.eEsndcotmieo,rlmeantiiqnufTypeset
2
on parlera par exemple de la fonctionf loor:f loat→intdol)ntrembeer´(parter’dnuoneineite` le profil est doncf loat→int´eelppdur´type.Lessaitsuaatetselutype de retourEn python, les typesn’e´tantpasexplicites(leprogrammeurneles´ecritpas),ilestplusdifficiled’appre´hender leprofild’unefonction.Deplusunedifficult´eli´ee`al’informatique,estquelestypessontli´es`a desquestionsderepre´sentationetl’ensembledestypespossibleestpauvre.Ainsiladivisionsera parexemplede´finieavecunprofilf loat, f loat→f loatdtechencl´eneauerexceptionsi elle est utilis´eeavecundiviseur´egala`0.Leslangagesmodernescommepythoncontiennentunegestion des exceptions, mais nous ne verrons pas ce point dans le cadre du cours.
2.4 Structured’une fonction Lad´efinitiondelafonctionsede´composeensonentˆetedede´finitionquidonnelenomet lesparame`tresformelsutilis´esparlafonction,suivid’uneligne(facultative)decommentairede descriptiondelafonctionpuisducorpsdelafonctionquide´critlescalculseffectu´esparcelleci.
2.5Calculdelavaleurretourne´e L’ex´ecutiondel’instructionreturn exp 1.e´valueexp, 2.stoppel’e´valuationdelafonction, 3.retournelavaleurdeexpcommer´esultatdel’appelcourant`alafonctionappelante. Le type de retour de la fonction et celui de exp doivent correspondre. Une fonction peut contenir plusieurs instructionsreturnx´ecutioee`al’´e´avela´ueslusereondnetu.n Danslade´finitionfonctionpuisetvoturnonreuctisnrtluieenesylua,ieuqpousezuverv´erifi n lavaleurretourn´eecorrespondbien`ax(sinest positif ou nul). def echo (char c) #affiche son argument sur la sortie standard print(c) L’int´erˆetd’unetellefonctionestleseffetsdebordsqu’elleproduit(c’est`adirelamodification del’environnementproduitparl’exe´cutiondelafonction).Iciceteffetdebordestl’impression d’uncaracte`resurlasortiestandard. PIEGE:ne´gnera´eneluncfoontiaiuqptigfferaedtemmraogprduesbliaravsedefiidomdrobe (les variablesglobalesefedctonic.Sypetlsul)niotinfipnoietutilis´clnoc¸euoientsamad´eoirl,v celaestlasourced’erreursdeprogrammationdifficiles`aidentifier. Unprogrammepythonn’estriend’autrequ’unesuccessionded´efinitiondefonctions(etil estinterditd’imbriquerlesd´efinitions:onnepeutpasd´efinirunefonctiona`l’inte´rieurd’une d´efinitiondefonction). Exercice 3nrEntnareepnoeesnceitmmedonn´leprogra??pourpuissneuqxoitsndpoaure´e,r 1.Quellessontlesvariableslocales,param`etresettypederetourdelafonctionpuis? 2.Quellessontlesvariableslocales,param`etresettypederetourdelafonctionmain? 2.6 Appelde la fonction Unappeldelafonctionestl’invocationdelafonctionsurdesvaleursparticuli`eres.L’appel renvoieunr´esultatquiestutilise´parlafonctionappelantemainouuneautrefonctionquia demand´ecetappel.Usuellementcelasefaitdansuneaffectationx=f(e1, .., en) avecxune variable de la fonction appelante.