Olivier Baudon - Marc Zeitoun Université Bordeaux & CNRS INTRODUCTION À L’INFORMATIQUE QU’EST-CE QUE L’INFORMATIQUE ? QU’EST-CE QUE L’INFORMATIQUE ? Étymologie: du latin informare : donner forme. QU’EST-CE QUE L’INFORMATIQUE ? Étymologie: du latin informare : donner forme. Science QU’EST-CE QUE L’INFORMATIQUE ? Étymologie: du latin informare : donner forme. Information Traitement automatique, mécanique Calcul Science QU’EST-CE QUE L’INFORMATIQUE ? Étymologie: du latin informare : donner forme. Information Traitement automatique, mécanique Représentation Calcul Science Codage, décodage QU’EST-CE QUE L’INFORMATIQUE ? Étymologie: du latin informare : donner forme. Information Traitement automatique, mécanique Représentation Technologie Calcul Science Codage, décodage Ordinateur QU’EST-CE QUE L’INFORMATIQUE ? Étymologie: du latin informare : donner forme. Information Traitement automatique, mécanique Représentation Calcul Science Codage, décodage Bug Technologie Ordinateur QU’EST-CE QUE L’INFORMATIQUE ? On pense souvent à l’aspect technique seulement, ou à des mots passés dans le langage courant. Algorithme Programme Code Binaire Systèmes Logiciel Mémoire vive Ordinateur Écran C2I Python Réseau Clavier Technologie Électronique Bureautique QU’EST-CE QUE N’EST PAS L’INFORMATIQUE ? «L'informatique n'est pas plus la science des ordinateurs que l'astronomie n'est celle des télescopes.» [M. R. Fellows, I. Parberry] L’informatique n’est pas un ensemble de technologies. Relations similaires : informatique thermodynamique bureautique/web/téléphonie réfrigérateur. UNE VIEILLE HISTOIRE QUI S’EMBALLE D. Hilbert J. von Neumann B. Pascal A. Turing Idée de la mécanisation du calcul ancienne: Pascal, Babbage. Idée de la mécanisation des mathématiques: Hilbert 1900. Objectif de Hilbert montré impossible à atteindre par Turing Années 30-45: théorie informatique. Turing, von Neumann, Mauchly, Eckert, Shannon, Church, Kleene. MACHINES DE TURING ET DE VON NEUMANN UNE SCIENCE QUI IMPRÈGNE LA SOCIÉTÉ L’informatique partout: Santé, communication, finance, transports, énergie. Bugs aux conséquences parfois dramatiques. Activité fortement créatrice d’emplois (cf. OCDE). Activité clé à maîtriser, comme la lecture et l’écriture. Nouvelles problématiques juridiques et sociétales. QUELQUES DOMAINES DE L’INFORMATIQUE QUELQUES DOMAINES DE L’INFORMATIQUE AU LABRI, À BORDEAUX ■ Combinatoire et Algorithmique ■ Image et Son ■ Méthodes Formelles ■ Modèles et algorithmes pour la Bioinformatique et la Visualisation d'informations ■ Programmation, Réseaux et Systèmes ■ Supports et AlgoriThmes pour les Applications Numériques hAutes performanceS REPRÉSENTATION ET CODAGE LA NUMÉRISATION Point clé : l’information est représentée de façon numérique. Codage: 1ère étape en informatique avant traitement. Codage Algorithmes Machine Programmes NOTRE ENVIRONNEMENT NUMÉRISÉ Textes, livres Musique, son Images Films Structures 3D ... 0100101010 0100111101 0010010100 0010011010 0010100111 REPRÉSENTER La représentation de l’information est déjà présente dans le langage. mot = représentation codée d’un objet ou concept. La représentation est avant tout sonore. Certains mots sont des représentations de concepts qui euxmêmes sont des abstractions. Exemple : les nombres. L’écriture d’un mot est une autre représentation, un autre codage, par une suite de symboles: lettres ou chiffre. Ex. «11» ou «onze». LE BINAIRE POUR REPRÉSENTER En informatique: information codée par des suites de 0 et 1 Un bit est soit 0 soit 1. Jouent le même rôle que les chiffres de 0 à 9. bit = binary digit. Chaque nombre s’écrit comme une suite de chiffres. Chaque nombre s’écrit aussi comme une suite de bits. Écriture unique (aux 0 de tête près). LE PLUS «SIMPLE»: LES NOMBRES Représentation d’un nombre ≠ nombre Représentation base 10: 2013 = 2x103 + 0x102 + 1x101 + 3x100 Représentation base 2: 2013 s’écrit 11111011101 car c’est 1x210 + 1x29 + 1x28 + 1x27 + 1x26 + 0x25 + 1x24 + 1x23 + 1x22 + 0x21 + 1x20 Intérêt de la représentation en base 2: codage avec 0 et 1. Calculer cette représentation se fait de façon algorithmique. LE CODAGE Du théorème à l’algorithme... et de l’algorithme au programme QUELQUES ALGORITHMES NÉCESSITANT DU CODAGE Coloriage de cartes Jeux de Nim Compression des fichiers d2 r1 Codage pour corriger d4 d3 d1 r3 Transformation d’images r2 QUELQUES ALGORITHMES NÉCESSITANT DU CODAGE Coloriage de cartes Jeux de Nim Compression des fichiers d2 r1 Codage pour corriger d4 d3 d1 r3 Transformation d’images r2 LA REPRÉSENTATION EN BASE 2 EXEMPLE D’APPLICATION Quelques approches simples: http://csunplugged.org/ Un jeu utilisant cette décomposition: jeu de Nim (Marienbad). 2 joueurs, chacun enlève à son tour autant d’allumettes qu’il veut dans une rangée. Le premier qui ne peut pas jouer perd la partie. On montre qu’une position est perdante si la «somme colonne» des représentations base 2 est 0, avec 1+1=0+0=0 et 0+1=1+0=1 (OU exclusif). Stratégie optimale = ramener la somme à 0 Ici: 1 + 11 + 101 + 111 fait effectivement 0. EXEMPLE 2 : COMPRESSION DE TEXTE Codex Leicester Texte = suite de caractères. Codage très répandu: ASCII. Chaque caractère du jeu ASCII est codé sur un octet (8 bits). Exemple: da Vinci représenté par 01100100 01100001 00100000 01010110 d a V ...... Comment changer le codage pour que le texte prenne moins d’espace ? CODAGE DE HUFFMAN Idée: représenter les caractères sur un nombre variable de bits Caractères fréquents: représentation courte. Caractères rares: représentation longue. Comment choisir cette représentation ? Comment la construire (en assurant l’unicité du décodage) ? Comment décoder ? Simple en ASCII: 8 bits = 1 caractère. Moins facile si la longueur des codes est variable. CODAGE DE HUFFMAN: ALGORITHME 1è étape: statistiques sur les lettres apparaissant dans le texte Exemple de texte: Un ananas Poids (fréquences) : (U 1) (‘ ‘ 1) (s 1) (a 3) (n 3) On construit un arbre comme suit: on choisit 2 caractères parmi les moins fréquents. On les groupe en un arbre, dont le poids est la somme de leurs poids. (U 2 ‘‘ ( (s 1) (a 3) (n 3) CODAGE DE HUFFMAN: ALGORITHME (2) (U 2 ‘‘ ( (s 1) (a 3) (n 3) ... Et on recommence jusqu’à ne plus avoir qu’un arbre. 0 0 U 0 1 1 1 s 0 a 1 n ‘‘ Codage d’une lettre obtenu en lisant la suite 0/1 depuis la racine. Un ananas codé par 000 11 001 10 11 10 11 10 01, 20 bits au lieu de 72 CODAGE HUFFMAN Nécessite de comprendre : Codage des caractères. L’arbre assure l’unicité de décodage Tri (des fréquences de caractères). Manipulation de tableaux. Représentation d’un arbre (dans un tableau par exemple). AUTRES EXEMPLES POUR COMMENCER À PROGRAMMER Cryptage d’un texte. Codes correcteurs: comment ajouter (un peu) de redondance pour pouvoir supporter des erreurs de transmission en détection. en correction. CODES CORRECTEURS Détecter les erreurs (transformation d’un 0 en 1 ou vice-versa)... ... et les corriger, en ajoutant de la redondance Exemple 1: bit de parité d1 d2 d3 d4 (d1 + d2 + d3 + d4) Exemple 2: redondance. Au lieu de 1, transmettre 111. CODE DE HAMMING (7,4) Ajout de 3 bits de redondance r1 r2 r3 par message de 4 bits. r1 = d1 + d2 + d4 modulo 2. d1 d2 d3 d4 d1 d2 d3 d4 r1 r2 r3 Détecte une erreur parmi les l’un des 7 bits transmis. d2 r1 d4 d1 r3 r2 d3 REPRÉSENTATION DES IMAGES Une image peut être codée comme une matrice de pixels. Chaque pixel (x,y) peut être codé par sa couleur. En niveaux de gris, la couleur est simplement un entier dans [0, 255]. 0 = noir, 255 = blanc. Manipulation d’image: revient à travailler sur tableau à 2 dimensions. UN PROJET IMAGE Lire un fichier image Remerciements à Anne Vialard qui a fourni cet exemple En faire une représentation comme matrice. Appliquer des transformations aux images: contraste, flou, médian… Restituer l’image. UN PROJET IMAGE Lire un fichier image Remerciements à Anne Vialard qui a fourni cet exemple En faire une représentation comme matrice. Appliquer des transformations aux images: contraste, flou, médian… Restituer l’image. UN PROJET IMAGE Lire un fichier image Remerciements à Anne Vialard qui a fourni cet exemple En faire une représentation comme matrice. Appliquer des transformations aux images: contraste, flou, médian… Restituer l’image. UN PROJET IMAGE Lire un fichier image Remerciements à Anne Vialard qui a fourni cet exemple En faire une représentation comme matrice. Appliquer des transformations aux images: contraste, flou, médian… Restituer l’image. UN PROJET IMAGE Lire un fichier image Remerciements à Anne Vialard qui a fourni cet exemple En faire une représentation comme matrice. Appliquer des transformations aux images: contraste, flou, médian… Restituer l’image. UN PROJET IMAGE Lire un fichier image Remerciements à Anne Vialard qui a fourni cet exemple En faire une représentation comme matrice. Appliquer des transformations aux images: contraste, flou, médian… Restituer l’image. CODAGE DES IMAGES Représentation, numérisation de l’information. Manipulation de tableaux à deux dimensions. Complexité des algorithmes. ALGORITHMES ET PROGRAMMES ALGORITHMES ET PROGRAMMES Al-Khawarizmi, ~783 - ~850. Algorithme: description par étape d’un enchaînement d’instructions décrivant une tâche. Un algorithme est fait pour travailler sur une entrée générique A partir de cette entrée, un résultat est calculé par l’algorithme. ALGORITHMES ET PROGRAMMES Entrée Algorithme Résultat Ex. Algorithme qui calcule le résultat 2n + 5 à partir de l’entrée n. Algorithme qui prend en entrée une carte et la colorie. ALGORITHMES ET PROGRAMMES Entrée Algorithme Résultat Ex. Algorithme qui calcule le résultat 2n + 5 à partir de l’entrée n. Algorithme qui prend en entrée une carte et la colorie. Algorithme ALGORITHMES ET PROGRAMMES Un algorithme est souvent décrit en langage naturel. On l’écrit dans un langage de programmation. Pour nous: Python. "Apprendre à programmer avec Python" de Gérard Swinnen. QUALITÉS D’UN ALGORITHME Correct... Mais On ne peut pas prouver automatiquement la correction Efficace: Évaluer le temps de calcul en fonction de la taille de l’entrée Un algorithme qui fait 2n opérations sur une entrée de taille n est considéré comme impraticable. EFFICACITÉ: EXEMPLE Construire une ville de 15 maisons en évitant aux livreurs qui suivent les rues un trajet trop long depuis la pizzeria. Organisation 1: linéaire, numéros croissants, pizzeria au n. 1. 1 2 15 Organisation 2: embranchements. A l’ouest de la maison k, numéros < k. A l’est de la maison k, numéros > k. 8 4 12 2 1 6 3 5 10 7 9 14 11 13 15 EFFICACITÉ PAR L’ORGANISATION DES DONNÉES Dans les 2 organisations, le livreur a une méthode simple pour trouver une maison en partant de la pizzeria. Question : et une organisation en étoile ? On suppose qu’il faut 1s pour parcourir un tronçon de rue. Quel est au pire le temps mis par un livreur ? Nombre de maisons Organisation 1 Organisation 2 15 14s 3s 1023 17mn 9s 1073741823 N 34 ans: pizza périmée N-1 . 29s: pizza chaude log(N) .. TEMPS DE CALCUL Temps de calcul (ou complexité) d’un algorithme = fonction qui à un entier N associe le nombre maximal d’instructions élémentaires que l’algorithme effectue, lorsqu’il travaille sur des objets de taille N. En pratique, on se contente d’un ordre de grandeur. Exemples d’opérations élémentaires : additionner, soustraire, multiplier ou diviser deux nombres, tester si une valeur est égale à une autre valeur, affecter une valeur à une variable. DIFFÉRENCE ENTRE N ET LOG(N) log(n) est proportionnel au nombre de chiffres de n. Si n = 106, alors log n ≈ 20, (50 000 fois moins). Si n = 109, alors log n ≈ 30, (30 000 000 fois moins). 100 n log_2(n) 80 60 40 20 0 10 20 30 40 50 60 70 80 90 100 OBJECTIFS DU COURS Apprendre quelques algorithmes par la programmation. Prendre conscience des enjeux de l’informatique. Différencier science informatique et aspects technologiques BASES DE LA PROGRAMMATION. LE LANGAGE PYTHON POURQUOI PYTHON ? Sauf exception, on ne programme plus avec les langages compréhensibles directement par les machines car: 1. Ils sont spécifiques à chaque machine 2. Ils possèdent des jeux d’instructions très basiques, et les programmes seraient donc très longs et illisibles. On utilise des langages «de haut niveau» comme Python. 1. Faciles à apprendre et à mémoriser. 2. Permettent d’écrire de façon concise. 3. Traduits en langage machine sans qu’on ait à s’en soucier. POURQUOI PYTHON ? Python est un langage interprété. Cela signifie que le programmeur dispose d’un interprète qui traduit son programme à la volée. Bien que simple et pédagogique, Python a la même puissance que n’importe quel langage de programmation. Des travaux de Turing résulte en effet que tous les langages actuels peuvent effectuer les mêmes tâches. COMMENT PYTHON ? Python est un langage interprété. Cela signifie que le programmeur dispose d’un interprète qui traduit son programme à la volée. Nous utilisons Idle qui interprète nos instructions. COMMENT PYTHON ? Python est un langage interprété. Cela signifie que le programmeur dispose d’un interprète qui traduit son programme à la volée. Nous utilisons Idle qui interprète nos instructions. COMMENT PYTHON ? Python est un langage interprété. Cela signifie que le programmeur dispose d’un interprète qui traduit son programme à la volée. Nous utilisons Idle qui interprète nos instructions. On peut aussi, grâce à Idle, écrire un programme dans un fichier, et demander qu’il soit lu et interprété en entier. ctrl-N permet de créer un nouveau fichier python. F5 permet de sauver et interpréter le programme. 1. LES EXPRESSIONS LES PROGRAMMES Un programme est composé d’une suite d’instructions. Ces instructions seront exécutées dans l’ordre d’écriture. Anticipant sur l’affectation, les suites d’instructions x=0 x=1 et x=1 x=0 ne sont pas équivalentes: • à la fin de la première suite, la variable x vaut 1. • à la fin de la seconde, elle vaut 0. LES EXPRESSIONS LES EXPRESSIONS Python calcule avec plusieurs types de données. LES EXPRESSIONS Python calcule avec plusieurs types de données. Un type de données est défini par un ensemble de valeurs et les opérations qu’on peut faire avec. LES EXPRESSIONS Python calcule avec plusieurs types de données. Un type de données est défini par un ensemble de valeurs et les opérations qu’on peut faire avec. Exemple: entiers, avec opérations +, -, *, //, %. LES EXPRESSIONS Python calcule avec plusieurs types de données. Un type de données est défini par un ensemble de valeurs et les opérations qu’on peut faire avec. Exemple: entiers, avec opérations +, -, *, //, %. L’expression (1+2)*5 vaut 15. LES EXPRESSIONS Python calcule avec plusieurs types de données. Un type de données est défini par un ensemble de valeurs et les opérations qu’on peut faire avec. Exemple: entiers, avec opérations +, -, *, //, %. L’expression (1+2)*5 vaut 15. Ne pas confondre expression (= calcul) et instruction. LE TYPE «ENTIERS» Entiers: représentent les entiers usuels une constante se note comme d’habitude: 0, 7, -42. Opérations: addition +, soustraction -, multiplication *, division entière //, reste %, division /, puissance **. 17 3 2 5 17 // 3 vaut 5 17 % 3 vaut 2 17 / 3 vaut 5.666666666666667 LE TYPE «FLOTTANTS» (NOMBRES À VIRGULE) Flottants représentent des nombres pas nécessairement entiers. une constante se note avec un . qui dénote la virgule: -0.1 et -.1 désignent 0,1. 7.0 et 7. désignent 7. Opérations: addition +, soustraction -, multiplication *, division /, puissance **. Python fait des erreurs d’arrondi sur les calculs en flottants: >>> 3*0.1 0.30000000000000004 LE TYPE «BOOLÉENS» Le type Booléen n’a que 2 valeurs: vrai et faux. Vrai se note $ True, Faux se note $False. Les opérations principales sont: le et logique $ and. le ou logique $or. la négation !not. LES BOOLÉENS Le type Booléen sert à tester des conditions. Certains opérateurs, sur les entiers par exemple, calculent un Booléen (une valeur vraie ou fausse). Opérateurs de comparaison: égalité ==, inégalité !=, tests de grandeur <, >, <=, >=. Exemple: 299+1 est-il divisible par 3 ? >>> (2**99+1) % 3 == 0 True LE TYPE «CHAÎNES DE CARACTÈRES» Les chaînes représentent une suite de caractères. On les représente entre guillemets '...' ou "..." Chaîne sur plusieurs lignes: on triple les guillemets '''Un exemple''' La longueur d’une chaîne s’obtient par la fonction len. len ('I have a dream') vaut 14. LE TYPE «CHAÎNES DE CARACTÈRES» Ne pas confondre une chaîne d’un caractère représentant un chiffre avec l’entier que le caractère représente: >>> '1' == 1 False >>> type(1) <class 'int'> >>> type('1') <class 'str'> Python indique que '1' et 1 ne sont pas égaux. '1' ne représente pas le nombre 1 mais le «mot» 1. LE TYPE «CHAÎNES DE CARACTÈRES» La concaténation (jonction) de chaînes se note +. >>> 'Hello ' + 'world!' 'Hello world!' Si une chaîne est mémorisée dans une variable x, on peut accéder à des morceaux de la chaîne x. >>> >>> 'H' >>> 'lo x = 'Hello world!' x[0] x[3:7] w' LES LISTES Une liste représente une suite de valeurs. se note entre crochets [...], les valeurs séparées par des virgules ,. Exemple: [1,2,3], [‘toto’,0], [] (liste vide). On peut mettre des listes dans des listes. Ne pas confondre une liste d’un seul élément et cet élément >>> [1] == 1 False LES LISTES Comme pour les chaînes len permet de calculer la longueur d’une liste. Les listes se concatènent avec +: >>> [1] + [3,5,7] [1, 3, 5, 7] On peut accéder aux éléments individuels ou à des souslistes: >>> x = [1,2,'trois',4] >>> x[2] 'trois' >>> x[1:3] [2, 'trois'] LES LISTES Utiliser list() et range() permet de générer des listes: >>> list(range(10)) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> list(range(3,8)) [3, 4, 5, 6, 7] >>> list(range(99,80,-3)) [99, 96, 93, 90, 87, 84, 81] range (départ, stop, pas) où départ et pas sont optionnels et valent 0 et 1 s’ils ne sont pas précisés. 2. LES VARIABLES ET L’AFFECTATION LA NOTION DE VARIABLE Variable = emplacement où on mémorise une valeur de n’importe quel type (entier, chaîne, liste, Booléen). Même rôle qu’une mémoire dans une calculatrice. A chaque instant, une variable ne contient qu’une valeur. Une variable a un nom qui commence par une lettre. Exemple: x, x1, toto, resultat. L’AFFECTATION Affecter une valeur à une variable se fait avec le symbole =. Il n’a pas la même signification qu’en mathématiques. x = 3 signifie: ranger 3 dans la variable x. L’ancienne valeur de x est perdue. L’AFFECTATION De façon générale variable = expression signifie: 1. calculer l’expression 2. ranger le résultat dans la variable. L’AFFECTATION: EXEMPLES >>> x = 4 >>> x = 2*x - 1 >>> x 7 >>> y = ['un', 2, 'III'] >>> y = y + y >>> y ['un', 2, 'III', 'un', 2, 'III'] 3. LES CONDITIONNELLES LES CONDITIONNELLES Il est fréquent qu’on ne connaisse pas la valeur d’une variable Pour effectuer des instructions à condition que quelque chose soit vrai, on utilise l’instruction if. if a != 0: c = b/a Si a est non nul, on calcule b/a et on range la valeur dans c. Sinon, le test est faux, et on ne fait rien (on passe à la suite). Ne pas oublier: les : après la condition, et l’indentation. LES CONDITIONNELLES if condition: instruction 1 instruction 2 ... instruction n 1. calcule la condition qui doit valoir True ou False. a) si la condition est True (donc vraie), on effectue les instructions 1 à n, dans l’ordre. b) sinon, on n’en effectue aucune: on passe à l’instruction du même niveau d’indentation que le if. LES CONDITIONNELLES ! ! if condition: bloc d’instructions 1 ! ! else: ! ! ! ! bloc d’instructions 2 où blocs = instructions de même niveau d’indentation 1. calcule la condition qui doit valoir True ou False. a) si la condition est True , on effectue le bloc d’instructions 1 mais pas le bloc d’instructions 2. b) sinon, on effectue le bloc d’instruction 2 seulement. LES CONDITIONNELLES ! ! ! ! ! ! ! ! ! ! if condition 1: bloc d’instructions 1 elif condition 2: ! ! bloc d’instructions 2 ... else: ! ! bloc d’instructions n+1 Effectue seulement les instructions du 1er bloc dont la condition est vraie ou celles du bloc n+1 si toutes les conditions 1,...,n sont fausses. 4. LA BOUCLE WHILE LA BOUCLE WHILE La boucle while permet de répéter un bloc d’instructions à condition que quelque chose soit vrai. >>> i = 0 >>> while i < 3: ! ! print(i) ! ! ! i = i + 1 ! 0 1 2 LA BOUCLE WHILE while condition: instruction 1 instruction 2 ... instruction n 1. calcule la condition qui doit valoir True ou False. a) si la condition est True (donc vraie), i) on effectue les instructions 1 à n, dans l’ordre ii) puis on revient à l’étape 1: c’est la différence avec if. b) sinon, on n’en effectue aucune: on passe à l’instruction du même niveau d’indentation que le while. 5. LA RÉPÉTITION FOR LA RÉPÉTITION FOR Répète aussi plusieurs fois une suite d’instructions en changeant la valeur d’une variable à chaque répétition. >>> for i in range(1,5): ! ! print (i) ! 1 2 3 4 6. CONSTRUCTIONS PLUS AVANCÉES LES INSTRUCTIONS CONTINUE ET BREAK A l’intérieur des instructions d’une boucle, on peut: quitter la boucle grâce à l’instruction break passer au test ou à l’itération suivante grâce à l’instruction continue INCRÉMENTS ET AL. Souvent, on modifie une variable à partir de sa valeur courante, par exemple en lui ajoutant 1 (on dit: en l’incrémentant). Cela peut se faire par x = x + 1. Cette opération fréquente a un raccourci: x += 1. += signifie augmenter la variable à gauche de += par la valeur se trouvant à droite du signe +=. De même: -=, *=, /=, //=, %=, **=,... 7. LES FONCTIONS OU COMMENT ÉCRIRE LES ALGORITHMES LES FONCTIONS Intérêt: rendre réutilisable des morceaux de programme. Éviter le copier-coller qui est source d’erreurs. Une fonction permet de définir un algorithme. Cet algorithme sera réutilisable dans d’autres fonctions. LES FONCTIONS Il faut bien distinguer 2 aspects: 1. la définition d’une fonction. 2. l’utilisation d’une fonction. DÉFINITION DE FONCTION Pour définir une fonction, on 1. lui donne un nom, 2. nomme ses données d’entrée, sur lesquelles elle travaille, 3. écrit ses instructions. DÉFINITION DE FONCTION Entrées Fonction Résultat L’en-tête de la fonction sert à la nommer et à choisir des noms pour les arguments (ou paramètres): def f(a, b, c): nomme la fonction f, et ses arguments a, b et c. Au moment où on définit la fonction, on ne sait pas encore avec quelles valeurs concrètes de a, b et c elle sera utilisée. DÉFINITION DE FONCTION Entrées Fonction Résultat Les instructions de la fonction suivent l’en-tête. Elles sont indentées par rapport à l’en-tête. Le mot-clé return permet de renvoyer le résultat voulu. def f(a, b, c): ! ! ! return a + b * c Sur cet exemple, il n’y a qu’une instruction. L’INSTRUCTION RETURN L’instruction return indique que la fonction en cours a fini de calculer, et qu’elle doit « rendre la main » à la fonction qui l’avait appelée, et éventuellement un résultat. L’instruction termine donc l’appel de fonction en cours. return est suivi d’une valeur que la fonction a calculée. ... ou pas. UTILISATION D’UNE FONCTION Pour utiliser une fonction, il faut l’avoir définie avant. On l’utilise en remplaçant les paramètres par des valeurs concrètes (des expressions). Tout se passe comme si on attribuait ces valeurs aux paramètres, et on exécutait les instructions de la fonction. >>> def f(a, b, c): ! ! return a + b * c # ici f est définie, on peut l’utiliser >>> x = f(2,3,4) >>> print(x) 14 8. LA RÉCURSIVITÉ LA RÉCURSIVITÉ Idée de la récursivité: pour décrire algorithme de calcul qui dépend d’un entier positif n, on peut expliquer comment faire le calcul pour n petit, 0 ou 1. expliquer comment faire pour n+1 en supposant qu’on sait déjà faire pour n. LA RÉCURSIVITÉ Marcher de façon non récursive: tant qu’on n’est pas arrivé, faire un pas. Marcher de façon récursive: si on n’est pas arrivé, faire un pas et recommencer. LA RÉCURSIVITÉ Itératif def descente(n): ! while (n > 0): ! ! print(n) ! ! n -= 1 Récursif def descente(n): ! if n == 0: ! ! return ! print(n) ! descente(n-1)