Cours 3 : la boucle while

Photo en CC-By-Nc-Sa lecasio
, par
Algorithmique et programmation : supports, exemples et exercices du troisième cours, où il est beaucoup question de la boucle while.
Les supports du cours :
La feuille d’exercice :
Les programmes donnés dans le cours en exemple :
Tester si un nombre est premier. Dans ce programme l’utilisateur saisit des nombres et le programme dit s’ils sont premiers. Pour tester la primalité de n on itère sur les diviseurs potentiels de n parmi 2 , ..., n - 1 et on stop si un diviseur est trouvé. L’itération est réalisée à l’aide d’un while qui simule exactement un for (d = 2 ; d < n ; d = d + 1) mais en ajoutant une condition de sortie prématurée (valeur du booléen premier).
- /* Declaration de fonctionnalites supplementaires */
- #include <stdlib.h> /* pour EXIT_SUCCESS */
- #include <stdio.h> /* pour printf() */
- /* Declaration des constantes et types utilisateur */
- #define TRUE 1
- #define FALSE 0
- /* Declaration des fonctions utilisateur */
- /* Fonction principale */
- int main()
- {
- /* Declaration et initialisation des variables */
- int n = 1;
- int d;
- int premier = TRUE;
- int continuer = TRUE;
- while (continuer)
- {
- if (n == 0)
- {
- continuer = FALSE;
- }
- else
- {
- /* test de primalite */
- d = 2;
- while ( premier && (d < n) ) /* sans diviseur < d */
- {
- if (n % d == 0) /* d divise n */
- {
- premier = FALSE;
- }
- d = d + 1; /* candidat diviseur suivant */
- }
- if (premier)
- {
- }
- else
- {
- }
- }
- }
- /* Valeur fonction */
- return EXIT_SUCCESS;
- }
- /* Definition des fonctions utilisateur */
Jouer à effectuer des additions. On tire au hasard des nombres et l’utilisateur doit effectuer les additions.
- #include <stdlib.h> /* EXIT_SUCCESS */
- #include <stdio.h> /* printf, scanf */
- #include <time.h> /* time */
- /* declaration de constantes et types utilisateurs */
- #define TRUE 1
- #define FALSE 0
- #define NBMAX 100
- /* declaration de fonctions utilisateurs */
- int main()
- {
- int x; /* nombre au hasard */
- int y; /* autre nombre au hasard */
- int choix; /* choix de l'utilisateur */
- int continuer = TRUE; /* TRUE s'il faut continuer a jouer */
- int essais = 0; /* nombre d'essais */
- int succes = 0; /* nombre de reponses justes */
- int debut; /* debut en temps standard */
- int duree; /* duree en secondes */
- /* initialisation du generateur de nombres pseudo-aleatoires */
- /* bienvenue */
- /* partie */
- while(continuer) /* le joueur veut faire un nouvel essai */
- {
- essais = essais + 1;
- /* tirage de x */
- /* tirage de y */
- /* question */
- if(x + y == choix) /* trouve */
- {
- succes = succes + 1;
- }
- else /* pas trouve */
- {
- }
- /* fin d'essai */
- if (choix == 0)
- {
- continuer = FALSE;
- }
- }
- /* fin */
- /* affichage du score */
- return EXIT_SUCCESS;
- }
- /* Definition des fonctions utilisateurs */
Tic Tac ... BOUM !
- #include <stdlib.h> /* EXIT_SUCCESS, rand, srand */
- #include <stdio.h> /* printf, scanf */
- #include <time.h> /* time */
- /* declaration de constantes et types utilisateurs */
- #define TRUE 1
- #define FALSE 0
- #define TIC 1
- #define TAC 2
- /* declaration de fonctions utilisateurs */
- int main()
- {
- int debut; /* debut en temps standard */
- int duree = 0; /* duree en secondes, attention les artificiers
- * amateurs noteront qu'il est nécessaire
- * d'initialiser sa valur à 0. Ne pas tester sans
- * initialisation ! */
- int tictac = TAC;
- while(duree < 10) /* pas encore 10 secondes */
- {
- if (duree % 2 == 0) /* duree paire: faire un tic */
- {
- if (tictac == TAC) /* le precedent tictac est un tac */
- {
- /* faisons tic */
- tictac = TIC;
- }
- }
- else /* duree impaire : faire un tac */
- {
- if (tictac == TIC) /* le precedent tictac est un tic */
- {
- /* faisons tac */
- tictac = TAC;
- }
- }
- } /* fin des 10 secondes */
- return EXIT_SUCCESS;
- }
- /* Definition des fonctions utilisateurs */
Les programmes de la feuille d’exercice :
- #include <stdlib.h> /* EXIT_SUCCESS, rand, srand */
- #include <stdio.h> /* printf */
- #include <time.h> /* time */
- #define NB_MAX 15 /* nombre secret entre 0 et NB_MAX inclus */
- int main()
- {
- int nombre_secret; /* nombre secret à deviner */
- /* initialisation du générateur de nombres pseudo-aléatoires */
- /* tirage du nombre secret */
- /* exploitation du secret */
- return EXIT_SUCCESS;
- }