ULCO-IUT GTE 2012-2013 TP informatique DUT FI 1 Résumé du TP 2 (Boucles et hasard) 1. Boucles Il est fréquent en programmation d avoir besoin de répéter les mêmes instructions plusieurs fois en boucle jusqu à ce qu une certaine condition soit vérifiée. C est à cela que servent les instructions while et for. 1.1. Boucles while. La syntaxe d une boucle while est la suivante. Syntaxe de la boucle while Voici un premier exemple, le programme suivant demande à l utilisateur un nombre entre 10 et 100, puis insiste tant que la réponse obtenue n est pas satisfaisante. Le programme suivant demande un entier à l utilisateur, puis en affiche la table de multiplication :
2 Le programme précédent aurait pu être écrit de la manière suivante pour éviter d avoir à le relancer lorsqu on souhaite afficher plusieurs tables : 1.2. Boucles for. La syntaxe de la boucle for est la suivante :
3 Par exemple, le programme suivant est le strict équivalent de celui, avec une boucle while, permettant d afficher la table demandée par l utilisateur : À remarquer que ce programme aurait pu être écrit de la manière suivante : Le programme suivant utilise deux boucles for imbriquées l une dans l autre pour afficher d un seul coup toutes les tables de multiplication.
4 Le programme suivant va utiliser une troisième boucle imbriquée de manière à afficher les tables sur plusieurs colonnes (le nombre de colonnes étant spécifié par l utilisateur). On remarque qu il y a un défaut d affichage avec le programme précédent : les colonnes sont mal alignées. Voici par exemple le résultat obtenu avec un affichage sur quatre colonnes :
5 Ceci a pour cause le décalage d un espace qui s accumule à chaque fois que le résultat d une multiplication est un nombre à deux chiffres. Pour pallier ce défaut, on va d abord remarquer que le programme précédent est équivalent au suivant (où un quatrième niveau d imbrication des boucles a été ajouté). Il n y a plus qu à écrire que lorsque le résultat d une multiplication est à deux chiffres, on souhaite placer quatre espaces entre les colonnes, cinq sinon :
6 Voici le résultat obtenu pour quatre colonnes : 2. Simuler le hasard Il est fréquent qu on ait besoin d écrire des programmes dont l exécution va dépendre du hasard. Dans le domaine des jeux par exemple cette situation est très fréquente, ne serait-ce que si l on souhaite simuler un lancé de dés ou la distribution de cartes. Ceci est particulièrement problématique car il est impossible d écrire un programme qui retourne des nombres véritablement au hasard. Cependant, il existe des fonctions { f : N N telles que les termes successifs u 0 N u 0, u 1, u n, de la suite définie par récurrence par présentent toutes les caractéristiques u n+1 = f(u n ) d une séquence de nombres au hasard. Une telle fonction f est implémentée en langage c par la fonction rand dont les appels successifs retournent dans l ordre les entiers u 1, u 2, u n,. Le programme suivant par exemple affiche les vingt premiers termes de u 1 jusqu à u 20.
7 Le défaut du programme précédent est que chaque exécution retourne la même séquence de nombres. Une première manière de contourner cela consiste à modifier l entier u 0 (appelé la graine). C est précisément à cela que sert la fonction srand comme l illustre le programme suivant : Il existe une astuce communément utilisée pour choisir automatiquement une valeur de graine : cela consiste à utiliser l heure courante. C est ce que fait le programme suivant : Un autre défaut, plus subtil, apparaît lorsqu on exécute plusieurs fois de suite le programme précédent : Les valeurs de u 1, bien que différentes d une exécution à la suivante, restent anormalement voisines (essayer!). On remarque que cet effet s estompe si au lieu de comparer entre elles les valeurs des u 1, on compare par exemple les valeurs des termes u 100. Aussi est-il recommandé de faire tourner à vide la fonction rand avant de l utiliser. C est ce que fait le programme suivant par exemple :
8 Voici un programme qui simule vingt lancés successifs d un dé et affiche les résultats : Pour finir, un jeu qui consiste à deviner le nombre entre 0 et 100 qu a choisi l ordinateur :