Algorithmes, programmes et ordinateurs 1 Gratin dauphinois Ingrédients (pour 5 personnes) : 1 kg de pommes de terre belle de Fontenay 1 litre de crème liquide 2 gousses d'ail sel, poivre Préparation : Éplucher et couper les pommes de terres en rondelles. Presser l'ail. Disposer dans un plat à gratin en commençant par napper le fond de crème. Alterner une couche de pommes de terres, crème, ail, sel, poivre, jusqu'à épuisement des ingrédients. Terminer en nappant de crème, sel, poivre. Mettre à four moyen (thermostat 4) pendant au moins une heure. 2 Algorithme « Gratin dauphinois » Problème: Préparer un gratin dauphinois Données : 1 kg de pommes de terre belle de Fontenay 1 litre de crème liquide 2 gousses d'ail sel + poivre Algorithme : Éplucher et couper les pommes de terres en rondelles. Presser l'ail. Disposer dans un plat à gratin en commençant par napper le fond de crème. Alterner une couche de pommes de terres, crème, ail, sel, poivre, jusqu'à épuisement des ingrédients. Terminer en nappant de crème, sel, poivre. Mettre à four moyen (thermostat 4) pendant au moins une heure. 3 Algorithmes Al-khowarizmi : mathématicien et astronome arabe du IX siècle qui a rédigé des textes sur les nombres et les équations Algorithme : séquence d'instructions organisés décrivant le processus a suivre pour résoudre un problème Début Calculs Processus Décision Affichage Fin 4 Étapes DEFINIR LE PROBLEME Le problème a besoin d'une définition claire et précise ANALYSE DU PROBLEME. DEFINIR: Les données à l'entrée L'information à produire à la sortie Les méthodes et formules nécessaires pour traiter les données CREATION DE L'ALGORITHME Établir le point de départ Bien défini, général et non ambigu Fini en taille et en temps d'exécution Conception de l'algorithme Test en papier : simuler les instructions en papier afin de vérifier son comportement et corriger les erreurs (BOGUES) 5 ENTREES Information Données SORTIE Algorithme 6 Une tâche simple... Exemple Demander à une personne son âge. En fonction de l'âge, afficher un message qui indiquera si elle est encore mineure ou pas... C'est simple ! 7 Exemple d'algorithme simple... Demandeur d'âge DEBUT âge : valeur entière AFFICHER « Quelle est ton âge ? » LIRE âge SI âge ≥ 18 ALORS AFFICHER “Tu est déjà grand ! ” FINSI AFFICHER “fin de l'algorithme” FIN 8 Un problème de maths Calculer les racines d'une équation de 2ème degrée: ax2 + bx + c = 0 Peut-on toujours les calculer ? Est-ce qu'il y a des cas exceptionnels ? 9 Petit rappel de maths Cours de maths pour calculer les racines de ax2 + bx + c = 0 : Si a est égale à 0... pas de chance ! Sinon calculer le discriminant : b2 – 4 a c Les racines x sont x1,2 = ( -b ± √discriminant ) / 2a 10 Algorithme Problème : calculer les racines de ax2 + bx + c = 0 Données : Coefficients a, b et c : valeurs numériques Algorithme : DEBUT SI a est égale à 0... on termine SINON calculer le discriminant : b2 – 4 a c Calculer les racines: x1,2 = ( -b ± √discriminant ) / 2a AFFICHER les racines FIN 11 Algorithmes, programmes et ordinateurs Algorithme : recette de cuisine pour résoudre un problème Programme : réalisation d'un algorithme dans un langage de programmation Langage de programmation : permet de communiquer avec un ordinateur pour lui faire exécuter des programmes 12 Algorithmes, programmes et ordinateurs Communication facile avec une machine ? « Je veux que tu calcules les racines des équations de 2ème dégrée... » 10110100111010 10011101010011 10101101010011 10101001011101 01101010011101 01101010... ? 13 Brève histoire de la programmation des ordinateurs ENIAC 1946 : 19 000 tubes 14 “Programmation” de l'ENIAC 15 Deux opératrices en train de câbler un "programme" sur l'ENIAC 15 Programme de l'ENIAC Programme cablé ! 16 Bugs dans MARK1 (1945) Programme cablé ! 17 18 Programmation par logiciel 10110100111010 11110110100011 1010001 1948 Programmation en binaire 1950 Assembleur add cmp jmp set bx, 4 [adr], 3 address dx, 5 1957 : FORTRAN 1er langage de programmation 1968 : langage PASCAL // Addition dans un registre // Comparaison avec un registre // Saut à une adresse // Addition dans un registre // Comparaison avec une variable // Saut à une adresse // Assignation dans un registre a=a+4 // Addition dans une variable IF(a.lt.3) // Comparaison avec une variable THEN b=5 ELSE GOTO address // Saut à une adresse a:=a+4; // Addition if(a<3) then begin b:=5 end; 1971-1973 : langage C 1986 : Langage PERL a=+4 if(a<3){ b=5 } $a=+4; $b=5 if $a<3; // Decision // Addition // Decision // Addition 19 // Decision Langage compilé et intérpreté Compilateur FORTRAN Programme source REAL A,B,C, X1, X2, DISC READ (5,*) A,B,C IF (A.EQ.0.0) STOP DISC = B*B - 4.0*A*C X1 = (-B + SQRT (DISC))/ (2.0*A) X2 = (-B - SQRT (DISC))/ (2.0*A) WRITE (6,*) X1, X2 END Programme objet (binaire) Execution ! 1010010101010 1001010101010 0001010001000 1100000000001 1010101001010 1001001000101 1001010010010 1010010000000 0000000000101 1000010100101 Racines de l'équation de 2ème degrée 20 Langage compilé et intérpreté Interprète PERL Programme source Une ligne objet à la fois, puis execution $a = <STDIN>; $b = <STDIN>; $c = <STDIN>; 1010010101010 exit if ($a == 0) ; $disc = $b*$b - 4*$a*$c ; $x1 = (-$b + sqrt($disc))/(2*$a) ; $x2 = (-$b - sqrt($disc))/(2*$a) ; print $x1, $x2 ; 21 Racines de l'équation de 2ème degrée Langage compilé et intérpreté Caractéristiques des compilateurs Exécution plus rapide Les erreurs sont listés à la fin de la compilation La programmation n'est pas interactive Caractéristiques des interprètes Exécution moins rapide Les erreurs sont reperées immediatement Programmation interactive 22 Origines de Perl Assembleur Fortran Cobol Algol Bcpl B Pascal 31/08/05 ACLN Ete 2004 RUBY 23