La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Initiation à la programmation impérative et algorithmique

Présentations similaires


Présentation au sujet: "Initiation à la programmation impérative et algorithmique"— Transcription de la présentation:

1 Initiation à la programmation impérative et algorithmique
Cours 5 – Entrées/Sorties et Fonctions Largement inspiré des cours : Vercouter, Del Mondo & Delestre, Hérault, Mainguenaud (INSA de Rouen) Elodie Laine –

2 Blocs d’instructions séquentielles
De la programmation impérative… instruction 1 instruction 2 instruction 3 si condition a vérifiée: instruction conditionnelle a1 instruction conditionnelle a2 instruction 4 . Blocs d’instructions séquentielles variables sélections boucles types de données … à la programmation fonctionnelle Fonction f(paramètres d’entrée): instruction f1 instruction f2 retourne valeur de sortie Programme principal: instruction 1 si condition a vérifiée: appel de la fonction f(paramètres d’entrée) fonctions entrées/sorties fichiers récursivité Elodie Laine –

3 Exemple de pseudo-code
Declaration : effectif, taux, gain : Reel ; an, anMax : Entier effectif ← 100 anMax ← 20 taux ← 0.05 an ← 0 gain ← 0 tant que an < anMax faire gain ← gain + effectif * taux effectif ← effectif * (1+taux) an ← an + 1 fintantque afficher ‘La population a gagne’, gain, ‘individus.’ Données à entrer Données à sortir Une population a un effectif initial de 100 individus et croit de 5% tous les ans. On veut connaître le gain de population au bout de 20 ans. Pour écrire un algorithme générique visant à résoudre un problème, il est nécessaire de considérer plusieurs sources et destinations de données. Elodie Laine –

4 Entrées et sorties Informatique = Traitement de l’information
Les traitements sont réalisés par les instructions du programme Les données fournies en entrée de l’instruction subissent un traitement Un traitement produit des informations qui sont les sorties de l’instruction Indépendance vis-à-vis de l’IHM L’instruction lire est associée à un périphérique d’entrée spécifique : le clavier L’instruction ecrire est associée à un périphérique de sortie spécifique : l’écran En python, on lit au clavier avec la fonction raw_input() >> a=raw_input() 10 >> print a Ou bien la fonction input en python 3 >> user_input = input(‘Give me a number: ‘) Give me a number: 10 >> user_input ‘10’ >> type(user_input) <class ‘str’> Elodie Laine –

5 Exemple de pseudo-code
Pourquoi concevoir des algorithmes les plus génériques possibles ? => Pour optimiser leur transférabilité & modularité, et ainsi pouvoir les réutiliser d’un problème à l’autre Declaration : an : Entier Entree : effectif, taux : Reel ; anMax : Entier Sortie : gain : Reel an ← 0 gain ← 0 tant que an < anMax faire gain ← gain + effectif * taux effectif ← effectif * (1+taux) an ← an + 1 fintantque Formulation d’un algorithme général où on identifie les entrées et les sorties. Insister sur l’intérêt de ne pas codé en dur les valeurs des paramètres d’entrée : on peut maintenant faire varier l’effectif initial, le taux de croissance et la durée d’observation selon le problème posé Elodie Laine –

6 Programmation structurée
B A Définition de la fonction C code répété C B Appel de la fonction B D Étape supplémentaire : on s’est affranchi des paramètres, maintenant on introduit de la modularité dans le code. On evite de répéter les instructions D Elodie Laine –

7 Programmation structurée
Structure d’un programme Un programme est composé de sous-programmes L’exécution débute par le sous-programme principal L’exécution se déroule par des appels successifs de sous- programmes Les sous-programmes interagissent par le passage de données en entrée et en sortie Faire un petit schema au tableau illustrant les différents sous-programmes par des blocs rectangulaires avec des liens entre eux Elodie Laine –

8 Les fonctions Les fonctions sont des sous-programmes admettant des paramètres d’entrée et retournant un seul résultat (comme les fonctions mathématiques y = f(x,…)). - les paramètres d’entrée sont en nombre fixe - le type de valeur retournée par une fonction est unique - la valeur de retour est spécifiée par l’instruction retourner Les fonctions peuvent aussi modifier l’état du programme sans retourner de valeur. La modification peut concerner plusieurs variables. Généralement, le nom d’une fonction est soit un substantif (par ex. minimum), soit une question (par ex. isEmpty) , soit un verbe (ex. move). Elodie Laine –

9 Déclaration de fonction
Fonction renvoyant une valeur fonction nom_fonction (parametres_entree) : type_valeur_retournee Declaration variables_locales debut instructions_de_la_fonction retourner valeur fin Fonction ne renvoyant pas de valeur fonction nom_fonction (parametres_entree) : None Declaration variables_locales debut instructions_de_la_fonction fin Elodie Laine –

10 Exemple de fonction (1) fonction minimum2 (a, b : Entier) : Entier
Declaration res : Entier debut si a ≥ b alors res ← b sinon res ← a finsi retourner res fin On cherche le minimum entre deux entiers (d’où le nom minimum2) Elodie Laine –

11 Exemple de fonction (2) Declaration : an : Entier
Entree : effectif, taux : Reel anMax : Entier Sortie : gain : Reel an ← 0 gain ← 0 tant que an < anMax faire gain ← gain + effectif * taux effectif ← effectif * (1+taux) an ← an + 1 fintantque fonction gainDePopulation (effectif, taux: Reel ; anMax: Entier) : Reel Declaration an : Entier ; gain : Reel debut an ← 0 gain ← 0 tant que an < anMax faire gain ← gain + effectif * taux effectif ← effectif * (1+taux) an ← an + 1 fintantque retourner gain fin On reprend l’algorithme général et on le transforme en une fonction : bien identifier où se trouvent maintenant les entrées et les sorties Elodie Laine –

12 Appel de fonction L’exécution d’une fonction A se fait par un appel dans un sous-programme B. L’appel s’effectue par une instruction en utilisant le nom de la fonction A Lors de l’appel, une valeur est affectée à chaque paramètre d’entrée de A A la fin de A, l’exécution reprend après l’appel de A dans le sous-programme B La valeur retournée peut être utilisée dans B pour une affectation, un calcul… Elodie Laine –

13 Exemple d’appel Dans un programme principal :
Declaration : unEntier, min : Entier debut unEntier ← lire("Donnez un entier") min ← minimum2(unEntier, 0) ecrire(‘Le minimum avec 0 est :’, min) fin Dans une fonction : fonction minimum3 (a,b,c : Entier) : Entier debut retourner minimum2(a,minimum2(b,c)) fin Elodie Laine –

14 Paramètres et signature
Les paramètres Pour qu’un sous programme B appelle un sous-programme A, il faut : Que les informations données à A, lors de la définition de son algorithme, soient identifiées/nommées pour pouvoir être utilisées : paramètres formels (paramètres) Que B donne des instructions à A lors de l’appel : paramètres effectifs (arguments) La signature Une fonction est désignée de manière unique dans un programme par sa signature, composée de : Son nom Ses paramètres formels d’entrée Son type de retour Les paramètres formels sont ceux définis au niveau de la déclaration de A, les paramètres effectifs sont ceux donnés à A par B lors de son appel Insister sur l’intérêt de la signature en tant qu’identifiant unique d’une fonction Elodie Laine –

15 Exercice 1/4 Cycle cellulaire Ecrire :
Une fonction qui renvoie l’étape du cycle dans laquelle est une cellule à un âge donné, exprimé en heures Une fonction qui détermine si un âge est valide pour une cellule Un programme principal qui demande la saisie d’un âge pour une cellule et affiche le stade cellulaire dans lequel elle se trouve (12h) (18h) (0h) (22h) 1 2 3 4 Le cycle cellulaire est l’ensemble des modifications qu’une cellule subit entre sa formation par division à partir d’une cellule mère et le moment où cette cellule a fini de se diviser en deux cellules filles. La durée du cycle cellulaire varie d’une espèce à l’autre et d’un type cellulaire à l’autre. Des cellules humaines en culture se divisent environ toutes les 24 heures tandis qu’une levure bourgeonnante mettra seulement 90 minutes à faire le tour de son cycle. On distingue au microscope deux stades à ce cycle cellulaire : La mitose qui est la division de la cellule en deux cellules filles L’interphase qui est la période entre deux mitoses. Pendant l’interphase les chromosomes sont décondensés et distribués dans tout le noyau. Au niveau moléculaire, l’interphase est la période pendant laquelle croissance cellulaire et réplication de l’ADN s’effectuent de manière coordonnée en vue de la division cellulaire. La cellule grossit progressivement pendant toute l’interphase, la plupart doublant de taille entre leur naissance et leur division en deux cellules filles. Trois phases se succèdent pendant l’interphase : une phase de croissance de la cellule (G1), une phase de réplication de l’ADN (S) et une phase de croissance et de préparation à la mitose (G2). A la fin de la phase G1 et de la phase G2, il existe ce qu’on appelle des points de contrôle, ou "checkpoint", où la cellule contrôle que tout est parfaitement mis en place pour que respectivement la réplication de l’ADN et la mitose se déroulent normalement. Elodie Laine –

16 Exercice 2/4 Fonction qui renvoie l’étape du cycle dans laquelle est une cellule à un âge donné fonction stadeCellulaire(age : Entier) : Chaîne de caractères Declaration etape : Chaîne de caractères debut si (age ≤ 12) alors etape ← “G1” sinon si (age ≤ 18) alors etape ← “S” si (age ≤ 22) alors etape ← “G2” etape ← “M” finsi retourner etape fin Etant donné un cycle cellulaire de 24 heures, on cherche à déterminer à quel stade de développement est une cellule au bout de x heures après la dernière division cellulaire. Elodie Laine –

17 Exercice 3/4 Fonction qui détermine si un âge est valide pour une cellule fonction estUnAgeValide(age : Entier) : Booleen debut retourner (age > 0 ) et (age ≤ 24) fin Etant donné un cycle cellulaire de 24 heures, on cherche à déterminer à quel stade de développement est une cellule au bout de x heures après la dernière division cellulaire. Elodie Laine –

18 Exercice 4/4 Programme principal Declaration: age : Entier debut
age ← lire("Quel est votre age ?") si estUnAgeValide(age) alors ecrire(‘Cette cellule est dans le stade cellulaire ’, stadeCellulaire(age)) finsi fin Comment faire pour généraliser l’algorithme à différents types cellulaires ? Généralisation : il faut rentrer en paramètre la durée totale d’un cycle et déterminer les étapes à partir d’une fraction de la durée totale, provided that cette fraction est la même pour tous les types cellulaires. Elodie Laine –

19 Les fonctions en Python
En python, une fonction est définie à l’aide du mot clé def, suivi du nom de la fonction, puis de la liste de ses paramètres formels. Le corps de la fonction doit être indenté. def nom_fonction (paramètres_d_entree): instructions_de_la_fonction_reperees_par_l_indentation Généralement, les premières lignes de la fonction sont dédiées à des commentaires de documentation de la fonction, appelés ‘Docstring’. Déclaration et définition..? Elodie Laine –

20 Les fonctions en Python
En Python, les fonctions retournent toujours unevaleur, soit explicite, soit implicite. Pour retourner une valeur explicite, la dernière instruction qui est exécutée dans le corps de la fonction doit être return valeur. Si aucune valeur de retour n’est spécifiée, la valeur prédéfinie None lui sera substituée. Déclaration et définition..? Elodie Laine –

21 Exemple de fonction en Python
def prem (x): n = 2 while n < x: d = 2 while d < n: if n % d == 0: print n, “=”, d, “*”, n/d break else: d = d + 1 if d == n: print(n, “est premier”) n = n + 1 Déclaration de la fonction 1er niveau d’indentation: corps de la fonction 2ème niveau d’indentation: boucle 3ème niveau d’indentation: boucle 4ème niveau d’indentation: sélection simple 3ème niveau d’indentation: sortie du bloc if 4ème niveau d’indentation: sélection alternative prem(20) n=2 ; d=void n=3 ; d=2 ; 3%2=1 ; 3 est premier n=4 ; d=2 ; 4%2=0 ; 4=2*2 et on s’arrete puisqu’il suffit de trouver un diviseur (d’où le break) n=5 ; d=2 ; 5%2=1 ; d=3 ; 5%3=2 ; d=4 ; 5%4=1 ; 5 est premier 2ème niveau d’indentation: sortie de la boucle 3ème niveau d’indentation: sélection simple 2ème niveau d’indentation: sortie du bloc if Elodie Laine –

22 Portée des variables en Python (1)
def carre(x): y = x * x a = 15 carre(a) print(“Le carré de ”, a, “ est égal à ”, y, “ .”) def carre(x): y = x * x return(y) a = 15 b=carre(a) Print(“Le carré de ”, a, “ est égal à ”, b, “ .”) => Erreur : y n’est pas défini ! => Le carré de 15 est égal à 225. Elodie Laine –

23 Portée des variables en Python (2)
Lors de son exécution, une fonction génère une table de symboles qui sera utilisée pour ses variables locales. A chaque fois qu’un nom de variable apparaît à gauche d’un signe d’affectation, une variable locale est créée. Une variable déclarée dans une fonction n’est pas visible depuis les autres sous-programmes. Toute référence à une variable apparaissant à droite d’un signe d’affectation déclenche une recherche de la variable selon l’ordre de priorité Local- Global-Integrated (LGI), soit (1) dans la table locale, (2) dans la table globale, (3) dans la table des noms intégrés. Ainsi, on peut faire référence à une variable globale dans une fonction, mais on ne peut pas lui affecter une valeur. Pour outrepasser cette interdiction, on utilise le mot clé global dans le corps de la fonction. Elodie Laine –

24 Portée des variables en Python (3)
def carre(x): global y y = x * x a = 15 carre(a) Print(“Le carré de ”, a, “ est égal à ”, y, “ .”) def carre(x): y = x * x return(y) a = 15 b=carre(a) Print(“Le carré de ”, a, “ est égal à ”, b, “ .”) => Le carré de 15 est égal à 225. => Le carré de 15 est égal à 225. Elodie Laine –

25 Portée des variables en Python (4)
def hello(prenom): print("Bonjour", prenom) hello("Patricia") print(x) x = 10 def hello(prenom): print("Bonjour", prenom) hello("Patricia") print(x) Bonjour Patricia Erreur : x n’est pas défini ! Bonjour Patricia 10 x = 10 def hello(prenom): print("Bonjour", prenom) print(x) hello("Patricia") x = 10 def hello(prenom): x = 42 print("Bonjour", prenom) print(x) hello("Patricia") A vérifier ! Bonjour Patricia 10 Bonjour Patricia 42 10 Elodie Laine –

26 Paramètres par défaut La liste d’appel d’une fonction peut contenir un nombre variable d’arguments. Il est possible d’affecter une valeur par défaut à certains paramètres d’entrée, de sorte de le nombre de paramètres effectifs (arguments) donnés lors de l’appel de la fonction sera inférieur au nombre de paramètres formels (paramètres) qui apparaissent dans sa définition. def afficheAB(a=‘10’,b=“salut”): print(“a : ”, a, “ ; b : ”, b) afficheAB() afficheAB(“bonjour”,“monsieur”) afficheAB(“je te dis”) => a : 10 ; b : salut => a : bonjour ; b : monsieur => a : je te dis ; b : salut Elodie Laine –

27 Paramètres par défaut ! La valeur par défaut est évaluée une fois et une seule lors de la définition de la fonction val = ‘10’ def afficheAB(a=val,b=“salut”): print(“a : ”, a, “ ; b : ”, b) afficheAB() val = ‘20’ => a : 10 ; b : salut => a : 10 ; b : salut Elodie Laine –

28 Paramètres par défaut ! La valeur par défaut est évaluée une fois et une seule lors de la définition de la fonction Dans le cas d’un objet modifiable, les changements qui lui ont été faits sont conservés. val = ‘10’ def afficheAB(a=val,b=[]): print(“a : ”, a, “ ; b : ”, b) a = “Maintenant a vaut 20” b.append(“salut”) afficheAB() => a : 10 ; b : [] => a : 10 ; b : salut Elodie Laine –

29 Dans ce type d’appel, l’ordre des arguments est sans importance.
Appel par mot clé Il est aussi possible de faire référence à une liste d’appel de fonction par mot clé, c’est-à-dire en utilisant le nom des paramètres formels de la fonction val = ‘10’ def afficheABC(c,a=val,b=[]): print(“a : ”, a, “ ; b : ”, b, “ ; c : ”, c) afficheABC(a=“hello you”,1974) afficheAB(“bouh”) => a : hello you ; b : [] ; c : 1974 => a : 10 ; b : [] ; c : bouh Dans ce type d’appel, l’ordre des arguments est sans importance. Elodie Laine –

30 Appel par mot clé ! Il est cependant impératif que, dans la définition de la fonction, les paramètres qui reçoivent une valeur par défaut apparaissent après ceux qui n’en reçoivent pas. val = ‘10’ def afficheABC(a=val,c,b=[]): print(“a : ”, a, “ ; b : ”, b, “ ; c : ”, c) afficheABC(a=“hello you”,1974) => Erreur : un argument sans valeur par défaut suit un argument avec valeur par défaut Elodie Laine –

31 Quelques fonctions standards
Importer un module de fonctions Importer le contenu d’un module import math b = math.sqrt(a) Importer une partie d’un module from math import sqrt Importer tout un module fom math import * (tous les identifiants du module sont chargés) Lister le contenu d’un module La fonction standard dir() permet de lister le contenu d’un module. dir(math) ['__doc__', '__file__', '__name__', 'acos', 'asin', 'atan‘, 'atan2', 'ceil', 'cos', 'cosh', 'degrees', 'e', 'exp', 'fabs‘, 'floor', 'fmod', 'frexp', 'hypot', 'ldexp', 'log', 'log10‘, 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan‘, 'tanh'] La fonction help() est la fonction d’aide en ligne de python help(math) Elodie Laine –

32 Quelques fonctions standards
Fonctions mathématiques abs(x) renvoie la valeur ABSolue d’un entier ou d’un réel math.cos(x) renvoie le COSinus de l’argument exprimé en radians math.exp(x) renvoie la valeur de e élevée à la puissance de l’argument math.log(x[,base]) renvoie le LOGarithme népérien de l’argument avec deux arguments, on peut préciser la base souhaitée math.pow(x,y) renvoie l’argument x à la puissance y round(x[,ndigits]) arRONDit l’argument x à ndigits chiffre après la virgule Si ndigits est omis, l’arrondi se fait à l’entier le plus proche sin(x) renvoie le SINus de l’argument exprimé en radians sqrt(x) renvoie la racine carrée de l’argument math.trunc(x) renvoie la partie entière d’un nombre réel x Elodie Laine –

33 Quelques fonctions standards
Fonctions pour les caractères chr(i) renvoie un caractère à partir de son code ASCII ord(c) renvoie un entier représentant le code ASCII d’un caractère Fonctions pour les caractères et chaînes de caractères len(S) renvoie la longueur de la chaîne de caractères S str.lower(S) renvoie une copie de S, avec les majuscules en minuscules str.upper(S) renvoie une copie de S, avec les minuscules en majuscules Fonctions pour les entrées/sorties input([prompt]) affiche l’argument à l’écran, renvoie ce qui est au clavier print([object, ...]… ) affiche object(s) à l’écran, avec retour à la ligne open(file[, mode='r‘…) ouvre le fichier file en mode lecture (‘r’), écriture (‘w’)… Qu’est-ce qu’un itérateur en python, est-ce qu’on peut rapprocher ce concept d’un énuméré ? What about les méthodes du module string qui sont deprecated et disparaaisent avec python 3.0 ? he print statement has been replaced with a print() function in Python 3 print([object, ...][, sep=' '][, end='\n'][, file=sys.stdout] ) open(file[, mode='r'[, buffering=None[, encoding=None[, errors=None[, newline=None[, closefd=True]]]]]]) Elodie Laine –

34 Fonctions anonyme et fermeture
Au moyen du mot clé lambda, il est possible de définir des fonctions anonymes. x = lambda a,b : a+b z = x(3,5) print(z) => 8 Une fonction s’exécute toujours dans le contexte dans lequel elle a été définie. def ferm (val): def fonc(nb): return val + nb return fonc x = ferm(100) y = ferm(200) print(“appel de x :”, x(50)) print(“appel de y :”, y(50)) => appel de x : 150 => appel de y : 250 Elodie Laine –

35 Fonction callback Une fonction callback est une fonction particulière qui, une fois définie, sera utilisée en argument d’une autre fonction. def mettre_au_carre(x):     return x ** 2    def appliquer_fonction(fonc, valeur):     return fonc(valeur) print appliquer_fonction(mettre_au_carre, 3) => 9 Comment traduire callbask et faire passer le concept ? Une bonne transition vers la récursivité…? En pratique, rien ne permet de différencier les fonctions callback des autres en Python. Elodie Laine –

36 Conclusion La prise en compte de différentes sources et destinations de données permet de généraliser un algorithme visant à résoudre un problème. Un programme est conposé de sous programmes, autrement dit des fonctions. Les fonctions admettent des paramètres d’entrée (arguments) et retournent une seule valeur ou bien modifient l’état du programme (sans retour de valeur). La bibliothèque python comporte de nombreux modules, où sont définies un certain nombre de fonctions. Elodie Laine –


Télécharger ppt "Initiation à la programmation impérative et algorithmique"

Présentations similaires


Annonces Google