ALGORITHMIQUE : UTILISATION D’UNE BOUCLE POUR…DE…A ET DES VARIABLES DU TYPE LISTE I. Boucle POUR…DE…A Il est possible de demander à un ordinateur de répéter une même tâche autant de fois que l’on veut. Cela se fait grâce à ce qu’on appelle en informatique une boucle. Exemple On souhaite créer un algorithme qui affiche la racine carrée de tous les entiers allant de 1 jusqu’à 50. On pourrait commencer l’algorithme comme ci-contre, en allant jusqu’à sqrt(50). On se rend compte immédiatement que cette méthode est beaucoup trop longue :on serait obligés de répéter 50 fois le même genre de lignes de codes. Grâce à une boucle POUR…DE…A, on peut faire un algorithme beaucoup plus court comme indiqué ci-contre. Explications : Il faut introduire une nouvelle variable n qui va servir à représenter tous les entiers de 1 à 50 (n est appelé compteur de la boucle). Voici comment l’ordinateur interprète le code de la boucle elle-même : 1ère étape : l’ordinateur affecte à la variable n la valeur 1. Puis il effectue les opérations comprises entre DEBUT_POUR et FIN_POUR en remplaçant n par 1. Autrement dit, racine va prendre la valeur sqrt(1) et l’ordinateur affiche le résultat. 2ème étape : l’ordinateur augmente automatiquement de 1 la valeur de n qui vaut maintenant 2. Puis il effectue à nouveau les opérations comprises entre DEBUT_POUR et FIN_POUR en remplaçant n par 2. Autrement dit, racine va prendre la valeur sqrt(2) et l’ordinateur affiche le résultat. L’ordinateur continue ainsi le processus jusqu’à ce qu’il ait traite le cas où n vaut 50. On obtient bien ainsi la liste des racines carrées des entiers de 1 jusqu’à 50. II. Variables du type LISTE Les listes AlgoBox sont des listes numérotées de nombres. Si on sélectionne pour variable une variable du type LISTE, il faut indiquer dans le champ rang du terme de la liste le numéro du terme de la liste auquel on souhaite affecter une valeur. Exemple On souhaite créer un algorithme qui affiche la liste des racines carrées de tous les entiers allant de 1 jusqu’à 50 en utilisant une variable du type LISTE et une boucle POUR…DE…A. Un algorithme possible est indiqué ci-contre. list[n] représente le nième terme de la liste. n est le rang du terme du nième terme de la liste. Voici comment l’ordinateur interprète cet algorithme : 1ère étape : l’ordinateur affecte à la variable n la valeur 1. Puis il remplace n par 1. Autrement dit, list[1] (c’est-à-dire le 1er terme de la liste) va prendre la valeur sqrt(1) et l’ordinateur affiche le résultat. 2ème étape : l’ordinateur augmente automatiquement de 1 la valeur de n qui vaut maintenant 2. Puis il remplace n par 2. Autrement dit, list[2] (c’est-à-dire le 2ème terme de la liste) va prendre la valeur sqrt(2) et l’ordinateur affiche le résultat. L’ordinateur continue ainsi le processus jusqu’à ce qu’il ait traite le cas où n vaut 50. On obtient bien ainsi la liste des racines carrées des entiers de 1 jusqu’à 50. Décodage d’un message en utilisant l’analyse fréquentielle 1. Voici un algorithme qui calcule les pourcentages d’apparition de chaque lettre d’un texte codé. La variable textecode représente le message codé. La variable longueur représente le nombre de lettres du message codé. La variable stat est une liste de 26 nombres : le 1er terme de la liste sera le nombre d’apparition du A, le 2ème sera le nombre d’apparitions du B, etc. Regardons ce que fait l’ordinateur si le texte codé est ABACA. Cette boucle permet d’initialiser la liste stat. On attribue la valeur 0 à chaque terme de la liste stat. Cette instruction demande de taper le texte codé (en lettres majuscules, sans espace). Ces instructions permettent d’attribuer le nombre de lettres du message codé à la variable longueur. Pour chaque lettre du texte codé : on détermine son code ascii (textecode.charCodeAt(0) donne le code ascii de la 1ère lettre, …, textecode.charCodeAt(longueur-1) donne le code ascii de la dernière lettre) ; puis on calcule p qui représente le rang de la lettre dans l’alphabet. stat[p] représente le nombre d’apparitions de la p-ième lettre du texte codé. Pour le rang de chaque lettre de l’alphabet : on détermine la lettre qu’il représente, puis le pourcentage d’apparition de cette lettre dans le message codé. 2. Voici le message trouvé sur le papier froissé : V EV FXQULD FJO OD EV YLEED VJ QXIO MXLIU MQDIOQD EV ODJCLDTD FXQULD QXJEDQ UXJU OQXLU MDIOVIU ODJC PLEXTDUQDF VJ MQDTLDQ SDJ UXJQIDQ V HVJZWD QXJEDQ ZLIB PLEXTDUQDF DIYLQXI VQQLYD VJ ZWVUDVJ ODVJ MQDIOQD ED ZWDTLI ZXTTJIVE V OQXLUD UQXLFLDTD TVLFXI FJQ EV HVJZWD Taper, puis lancer l’algorithme précédent. Compléter alors le tableau suivant (les pourcentages seront arrondis à 10-2) : Lettre Pourcentage d’apparition Lettre Pourcentage d’apparition A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 3. Des études statistiques sur un ensemble de textes permettent de mettre en évidence le pourcentage d’utilisation de chaque lettre. Voici les résultats obtenus : Lettre Pourcentage d’utilisation Lettre Pourcentage d’utilisation A B C D E F G H I J K L M 8,40 1,06 3,03 4,18 17,26 1,12 1,27 0,92 7,34 0,31 0,05 6,01 2,96 N O P Q R S T U V W X Y Z 7,13 5,26 3,01 0,99 6,55 8,08 7,07 5,74 1,32 0,04 0,45 0,30 0,12 A l’aide des deux tableaux précédents, décrypter le message. Exercices d’algorithmique Exercice 1 Écrire un algorithme qui affiche la liste des carrés des entiers naturels allant de 5 à 35. On utilisera une boucle POUR…DE…A. La liste devra être présentée en colonne. Exercice 2 Écrire un algorithme qui demande de saisir les valeurs de deux entiers relatifs n et p avec n p et qui affiche la somme de tous les entiers compris entre n et p.