L’objectif de ces quelques pages est simplement de commencer à réfléchir sur ce qu’est un algorithme, sans aucun formalisme au niveau de la rédaction. On dira que les algorithmes sont écrits en langage courant. La seule exigence est que les instructions permettent au lecteur de faire tourner l’algorithme "à la main" sans difficultés. Une première étape de formalisation interviendra en écrivant les algorithmes en pseudo code puis une troisième en les traduisant dans divers langages de programmation. Des algorithmes en langage courant Voici 10 algorithmes issus de problèmes que nos élèves pourront rencontrer entre la classe de troisième et celle de terminale. 1. programme de calcul (1) - 2. programme de calcul (2) choisir un nombre réel, L’élever au carré, Retrancher 4, Multiplier par 2, Afficher le résultat final. - choisir un nombre réel, Prendre son opposé, ajouter 4, élever au carré, retrancher 3, Afficher le résultat final. 3. programme de calcul (3) - x 0, Calculer x 2 , Retrancher 3x , Ajouter 2, Afficher la valeur de x et le résultat obtenu dans un tableau, Si x 10 , l’algorithme est terminé, Sinon, ajouter 1 à x, et recommencer depuis à la deuxième ligne. 4. Milieu d’un segment - Entrer les coordonnées d’un point A, Entrer les coordonnées d’un point B, Calculer la demi somme des abscisses de A et B, Calculer la demi somme des ordonnées de A et B, Afficher les résultats obtenus. Stage Algorithmique- LFLNI-18 au 20 octobre 2010 1/8 5. PGCD : Algorithme d’Euclide - Choisir deux entiers naturels a et b tels que a b , Effectuer la division euclidienne de a par b, Si le reste est nul, b est le PGCD, Sinon, remplacer a par b et b par le reste, Recommencer jusqu’à ce que le reste devienne nul, Le PGCD est le dernier reste non nul. 6. PGCD : Algorithme des soustractions - Choisir deux entiers naturels a et b tels que a b , Effectuer la soustraction a b , Si a b 0 alors PGCD a, b a b , l’algorithme est terminé, Sinon, remplacer a par le plus grand des deux nombres b et a b et b par le plus petit, Recommencer à partir de la deuxième ligne. 7. Tri simple L’objectif est de déterminer le plus grand nombre parmi trois réels deux à deux distincts. - Choisir trois nombres réels a, b et c deux à deux distincts, Si a b et si a c , s prend la valeur a, Si a b et si a c , s prend la valeur c, Si b a et b c , s prend la valeur b, Si b a et c b , s prend la valeur c, Afficher s Remarque : cet algorithme qui devra être amélioré servira pour de nombreux problèmes relatifs aux triangles mais nous verrons qu’il est déjà présent par l’intermédiaire des fonctions max et min dans la plupart des langages de programmation. Stage Algorithmique- LFLNI-18 au 20 octobre 2010 2/8 8. Dichotomie On suppose qu’on dispose d’une fonction f continue et strictement croissante sur un intervalle a; b et qui s’annule entre a et b. L’objectif est de trouver un encadrement d’amplitude maximale e (donnée) de la racine. - ab . 2 Si f a f c 0 , remplacer b par c. Sinon, remplacer a par c. Tant que b a e , recommencer au début. Afficher les valeurs finales de a et b. Calculer c 9. Approximation de la courbe d’une fonction par la méthode d’Euler Lorsqu‘on connaît la dérivée f ' d’une fonction f sur un intervalle I de et une valeur particulière de f (condition initiale : f x0 y0 , où x0 et y0 sont des réels donnés, x0 I ), on ne peut pas toujours en déduire explicitement une expression de f. La méthode d’Euler permet toutefois de construire une approximation de la courbe représentative de la fonction f cherchée, à l’aide d’approximations affines locales. Voici un exemple d’algorithme : - Placer le point M0 x0 ; y0 , Choisir un pas h, Construire le point de coordonnées: x1 x0 h et y1 y0 hf ' x0 , - Remplacer x0 par la valeur de x1 et y0 par la valeur de y1 , Recommencer autant de fois que l’on veut de points 10. Simulation d’un jeu de dé On veut lancer un dé un certain nombre de fois et compter le nombre d’apparition de chaque face. Faire tourner l’algorithme à la main signifie aussi qu’on lance un vrai dé. - Choisir le nombre de lancer, soit n ce nombre, Lancer le dé n fois et compter le nombre d’apparition de chaque face, Stage Algorithmique- LFLNI-18 au 20 octobre 2010 3/8 Du langage courant au pseudo code Ecrire un algorithme en pseudo code, c’est le présenter sous une forme plus proche des langages de programmation mais sans les exigences de syntaxe de ces derniers. Il n’existe donc pas de langage "pseudo code" à proprement parler, mais nous allons essayer à travers les exemples suivants de respecter les principes suivants : - toutes les variables seront déclarées, même si elles ne sont que des variables auxiliaires, - les algorithmes seront divisés en quatre parties : la déclaration des variables, les entrées, le traitement puis les sorties. On ajoutera toutefois l’initialisation si l’on utilise des boucles. - Pour affecter une valeur à une variable, c’est la flèche " " qui est utilisée ici (dans certains manuels on trouve b a à la place de a b ; mais il va de soi que cela signifie la même chose, à savoir "b prend la valeur a"…). Remarque : nous n’utiliserons ici que des variables numériques mais il existe bien des possibilités… 1. programme de calcul (1) - - Variable : a nombre Entrée : saisir a Traitement : 2 a2 4 a ou - Sortie : Afficher a - Variable : a nombre Entrée : saisir a Traitement : a2 a a4a 2 a a Sortie : Afficher a 2. programme de calcul (2) - Variable : a nombre Entrée : saisir a Traitement : 2 4 a 3 a Sortie : Afficher a Stage Algorithmique- LFLNI-18 au 20 octobre 2010 ou - - Variables : a, b, c, d nombres Entrée : saisir a Traitement : 4a b b2 c c 3 d Sortie : Afficher d 4/8 3. programme de calcul (3) - - Variables : x, y nombres Entrées : pas d’entrée ici Traitement : Pour x allant de 0 à 10 par pas de 1 faire x 2 3x 2 y Ecrire x et y dans la i ième ligne du tableau Fin Pour Sorties : (les sorties sont faites au fur et à mesure que la boucle s’effectue) 4. Milieu d’un segment - - Il existe un très grand nombre de variantes pour ce type de problème… Attention : on ne demande pas nécessairement de construire le tableau mais de faire afficher les résultats sous forme d’une ligne par valeur de x Variables : xa, ya, xb, yb, xi, yi nombres Entrées : saisir l’abscisse de A : xa saisir l’ordonnée de A : ya saisir l’abscisse de B : xb saisir l’ordonnée de B : yb Traitement : xa xb / 2 xi ya yb / 2 yi - Sorties : Afficher xi, yi 5. PGCD : Algorithme d’Euclide - - Variables : a, b, r nombres Entrées : saisir a, b Initialisation br Traitement : Tant que r 0 faire mod a, b r ba r b Fin Tant Que Sortie : Afficher a Stage Algorithmique- LFLNI-18 au 20 octobre 2010 L’instruction mod retourne le reste dans la division euclidienne. Elle existe sous cette forme où une autre dans la plupart des langages mais elle peut être remplacée en utilisant la partie entière du quotient a/b puis une soustraction… 5/8 6. PGCD : Algorithme des soustractions - Variables : a, b, d nombres Entrées : saisir a, b Initialisation a b d Traitement : Tant que d 0 faire a b d Si d b Alors d a Sinon ba d b - FinSi Fin Tant Que Sortie : Afficher a 7. Tri simple - - Variables : a, b, c, s nombres Entrée : saisir a, b, c Traitement : Si a b Si a c Alors a s Sinon c s FinSi Sinon Si b c Alors b s Sinon c s Finsi Finsi Sortie : Afficher "le plus grand est ", s Stage Algorithmique- LFLNI-18 au 20 octobre 2010 6/8 8. Dichotomie On suppose qu’on utilise une fonction f connue. Suivant le langage de programmation utilisé, nous verrons que la fonction peut être définie indépendamment de l’algorithme Cela est particulièrement pratique car il n’est pas nécessaire de changer le programme si l’on change de fonction… - Variables : a, b, c, e nombres Entrées : Saisir a, b,e Traitement : Tant Que b a e faire a b / 2 c Si f a f c 0 Alors c b Sinon c a - De nombreuses versions de cet algorithme peuvent être réalisées, avec notamment un contrôle de la cohérence des valeurs de départ de a et b ou un compteur du nombre de boucles… Finsi FinTant Que Sorties : Afficher a, b 9. Approximation de la courbe d’une fonction par la méthode d’Euler - - Variables : x, y, n, h, i nombres Entrées : saisir x, y, n, h Initialisation 1i Traitement : Tant que i n faire Ecrire x et y dans la i ième ligne du tableau y h f ' x y xh x 1 i i Fin Tant Que Sortie : (les sorties sont faites au fur et à mesure que la boucle s’effectue) Stage Algorithmique- LFLNI-18 au 20 octobre 2010 7/8 10. Simulation d’un jeu de dé - Variables : a, b, c, d, e, f, n, i, r nombres Entrées : saisir n (nombre de lancers) Initialisation : a, b, c, d, e, f, i prennent la valeur 0 Traitement : Tant Que i n faire Int 6×Rand - +1 r si r 1 , alors 1 a a Sinon Si r 2 , alors 1 b b Sinon Si r 3 , alors 1 c c Sinon Si r 4 , alors 1 d d Sinon Si r 5 , alors 1 e e Sinon 1 f f Finsi Finsi Finsi Finsi Finsi 1 i i Fin Tant Que Sorties : Afficher a, b, c, d, e, f Stage Algorithmique- LFLNI-18 au 20 octobre 2010 8/8