Notions de base 1. Qu’est-ce qu’un algorithme ? ■ Définition ■ Un algorithme est une succession d’instructions à enchaîner dans un ordre bien précis, permettant de résoudre un problème de façon systématique. Il est écrit dans un langage compréhensible par tous. Remarque : Un algorithme peut prendre en entrée une ou plusieurs valeurs, et donner en sortie une ou plusieurs valeurs, en réponse au problème. ■ Construction d’un algorithme ■ Un problème posé est décomposé en une succession de problèmes plus simples, jusqu’à obtenir une succession d’instructions élémentaires, par exemple de type suivant : – affecter une valeur ; entrer une valeur ; afficher une valeur ; – additionner, soustraire, multiplier, diviser deux valeurs ; – comparer deux valeurs. Pour relier les différentes instructions élémentaires, on peut utiliser : – une condition : Si … alors, Si … alors … sinon. – une boucle, c’est-à-dire une répétition d’un certain nombre d’actions : Pour … faire, Tant que … faire. Remarque : La lisibilité d’un algorithme est très importante : lorsqu’on rédige un algorithme, il faut toujours avoir à l’idée que toute personne ne l’ayant pas conçu doit être capable de comprendre comment il s’exécute, et à quel problème il répond. 2. Instructions élémentaires ■ Affectation ■ Il s’agit d’affecter une valeur à une variable, valeur qui peut être de plusieurs types : numérique (entier ou réel), alphanumérique (texte), booléen (vrai ou faux). Syntaxe : var ← val ; on affecte la valeur val à la variable var . ■ Exemple : a ← 2 ; on affecte la valeur 2 à la variable a. b ← a + 3 ; on affecte à la variable b le contenu de la variable a auquel on ajoute 3, c’est-à-dire 5. ■ Entrée d’une valeur ■ Au moment de l’exécution de l’algorithme, l’utilisateur affecte une valeur à une variable. Lors du fonctionnement de l’algorithme, celui-ci s’arrête à cette instruction et ne se poursuit que lorsque l’utilisateur a entré une valeur. Syntaxe : Entrer ( var ) ; lorsque l’utilisateur a entré une valeur, celle-ci est stockée dans la variable var . Remarque : Lorsqu’on souhaite entrer plusieurs variables, on les sépare par des virgules. ■ Exemple : Entrer (a , b) . À l’exécution de l’algorithme, l’utilisateur saisira deux valeurs. La première sera stockée dans la variable a, la deuxième dans la variable b. ■ Affichage d’une valeur ■ Il s’agit d’afficher la valeur d’une variable. Syntaxe : Afficher ( var ) . Remarque : Lorsqu’on souhaite afficher plusieurs variables, on les sépare par des virgules. Lorsqu’on souhaite afficher du texte, on le place entre des guillemets « … ». ■ Exemple : Afficher ( « La valeur de x est » , x ) . 10 Méthode Rédaction d’un algorithme Afin qu’un algorithme puisse être compréhensible pour tout lecteur qui le découvre, il doit être rédigé de façon claire et selon quelques règles. Un algorithme comporte deux parties : la déclaration des variables et le corps de l’algorithme. ■ Quelques règles pour rédiger la déclaration des variables ■ • La déclaration des variables est introduite par le terme « Variables ». • Les variables utilisées dans l’algorithme sont accompagnées par leur type (entier (relatif), réel, texte ou booléen (vrai ou faux). Le nom des variables est séparé de leur type par deux points. • Si plusieurs variables sont de même type, on les déclare sur la même ligne en les séparant par une virgule. • Chaque déclaration se termine par un point-virgule et un passage à la ligne. Remarques : 1. Cette partie est facultative, mais rend l’algorithme plus compréhensible. 2. Lorsque l’algorithme a été exécuté, les valeurs des variables ne sont pas conservées pour les exécutions suivantes. Conseils : 1. Cette partie s’écrit une fois l’algorithme mis en place pour être sûr de n’avoir oublié aucune variable. 2. On essayera le plus possible de choisir des noms « adaptés » pour les variables. ■ Quelques règles pour rédiger le corps de l’algorithme ■ Le corps de l’algorithme comprend la suite des instructions à exécuter. Celui-ci débute par « Début » et se termine par « Fin ». Chaque instruction se termine par un point-virgule et un passage à la ligne. Pour plus de lisibilité, on utilise des retraits gauches en alignant les instructions de même niveau. Conseils : Une fois l’algorithme écrit, on le teste à la main en le faisant fonctionner avec quelques valeurs pour éventuellement le corriger. On doit se poser les deux questions suivantes : – Le résultat est-il bien celui que l’on attend ? – L’algorithme s’arrête-t-il ? (on dit : l’algorithme se termine-t-il ?). Si la réponse est positive à ces deux questions, on dit que l’algorithme est correct. ■ Applications ■ 1. Calculer l’image d’un réel par la fonction f définie sur R par : f ( x ) = x 2 + 5 . 2. Calculer la moyenne arithmétique des notes de deux devoirs. Voici un algorithme possible : Voici un algorithme possible : Algorithme CalculImage Variables : x , y : réels ; Début Afficher ( « Entrer la valeur de x » ) ; Entrer ( x ) ; y ← x2 + 5 ; Afficher ( « L’image de x est » , y ) ; Fin. Algorithme Moyenne Variables : note1, note2, m : réels ; Début Entrer ( note1 , note2 ) ; m ← ( note1 + note2 ) ⁄ 2 ; Afficher ( « La moyenne est » , m ) ; Fin. Notions de base 3. Instructions conditionnelles ■ Condition Si … alors ■ • Syntaxe : Si proposition alors ActionsSi ; FinSi ; – proposition est de type booléen (vrai ou faux) ; – ActionsSi est une instruction élémentaire ou une succession d’instructions élémentaires. • Si la proposition est vraie, l’algorithme effectue ActionsSi puis passe à la suite de l'algorithme. Dans le cas contraire, il passe directement à la suite de l’algorithme. ■ Condition Si … alors … sinon ■ • Syntaxe : Si proposition alors ActionsSi ; sinon ActionsSinon ; FinSi ; – proposition est de type booléen (vrai ou faux) ; – ActionsSi et ActionsSinon sont des instructions ou des successions d’instructions élémentaires. • Si la proposition est vraie, l’algorithme effectue ActionsSi. Dans le cas contraire, il effectue ActionsSinon. Ensuite, il passe à la suite de l’algorithme. ■ Exemple : L’algorithme ci-contre renvoie le signe du nombre entré. Quelques compléments • On peut demander que deux ou plusieurs conditions soient réalisées simultanément en utilisant la syntaxe et . Exemple : Si ( x > 0 ) et ( x < 3 ) alors Afficher (« x appartient à ]0 ; 3[ ») ; FinSi ; • On peut demander qu’une condition (au moins) parmi plusieurs soit réalisée en utilisant la syntaxe ou . Algorithme Signe Variables : x : réels ; Début Entrer ( x ) ; 0 ) alors Si ( x Afficher ( x , « est positif ») ; sinon Afficher ( x , « est négatif ») ; FinSi ; Fin. • Les tests peuvent être imbriqués les uns dans les autres. 4. Boucles et itérations ■ Boucle Pour … faire ■ • Syntaxe : Pour i allant de début à fin faire Actionsi ; FinPour ; – début et fin sont deux entiers. – i est une variable entière. – Actionsi est une instruction ou une succession d’instructions élémentaires, pouvant dépendre de i (ou non). • Déroulement de la boucle i prend la valeur début. On effectue Actionsdébut . i augmente de 1 (on dit « s’incrémente de 1 »), on effectue donc Actionsi . Puis i augmente encore de 1, on effectue alors de nouveau Actionsi . Et ainsi de suite jusqu’à ce que i prenne la valeur fin, où l’on effectue pour la dernière fois Actionsi . On passe alors à la suite de l’algorithme. Vocabulaire : i s’appelle le compteur, la suite d’instructions Actionsi s’appelle suite d’itérations. 12 Notions de base Commentaires – Si début > fin, aucune itération n’est réalisée. – L’incrémentation du compteur se fait de façon automatique dans une boucle Pour … faire. – Le nombre d’itérations est : fin – début + 1. – L’utilisation de cette boucle présuppose que l’on connaisse le nombre d’itérations à faire. Remarque Une variante de la boucle Pour … faire consiste à décrémenter (c’est-à-dire à diminuer de 1) le compteur i. La syntaxe est alors : Pour i descendant de début à fin faire … FinPour . ■ Exemple : Faire la somme des n premiers entiers non nuls. L’algorithme suivant calcule la somme des premiers entiers non nuls : Phase d’initialisation L’algorithme calcule de proche en proche cette somme et l’affecte à S Voir l’exercice résolu 1 pour le fonctionnement pas à pas. Algorithme SommeEntiers Variables : n , i , S : entiers ; Début Entrer ( n ) ; S←0 ; Pour i allant de 1 à n faire S←S+i ; FinPour ; Afficher (S) Fin. ■ Boucle Tant que … faire ■ • Syntaxe : Tant que proposition faire ActionsTantQue ; FinTantQue ; – proposition est de type booléen (vrai ou faux), – ActionsTantQue est une instruction élémentaire ou une succession d’instructions élémentaires. • Déroulement de la boucle On teste la proposition. Si elle est vraie, on effectue ActionsTantQue. Puis on teste de nouveau la proposition. Si elle est encore vraie, on effectue de nouveau ActionsTantQue. Et ainsi de suite jusqu’à ce que la proposition soit fausse, auquel cas on passe à la suite de l’algorithme. Vocabulaire : la suite d’instructions ActionsTantQue s’appelle suite d’itérations. Commentaires – Le nombre d’itérations est a priori inconnu. – Il est indispensable qu’à un moment donné, l’une des instructions de ActionsTantQue rende proposition fausse, sinon l’algorithme ne s’arrête jamais. On dit alors que l’algorithme effectue une boucle infinie. ■ Exemple : Faire la somme des n premiers entiers non nuls. (2e construction possible) L’algorithme suivant calcule la somme des premiers entiers non nuls : L’instruction i ← i + 1 incrémente le compteur i. L’oubli de cette instruction serait dramatique : i serait bloqué à la valeur 1, et la proposition « i ⱕ n » serait toujours vraie : l’algorithme tournerait indéfiniment ! Algorithme SommeEntiersBis Variables : n , i , S : entiers ; Début Entrer ( n ) ; S←0 ; i←1 ; TantQue i ⱕ n faire S←S+i ; i←i+1 ; FinTantQue ; Afficher (S) Fin. Commentaire Une boucle « TantQue » dans laquelle on connaît le nombre d’itérations peut remplacer une boucle « Pour », comme dans l’exemple ci-dessus : il suffit d’introduire un compteur. En revanche la réciproque est fausse ! (voir l’exercice résolu 2) 13