Cours 06 while, conditions booléennes et éléments d’algorithmes

photo By-Nc-Sa par davecobb

, par Pierre

Le cours 6 portait sur l’introduction de la boucle while, l’écriture de conditions booléennes et quelques éléments d’algorithmique (quels outils utiliser pour quels problèmes).

cours 06 EI
version écran
cours 06 EI
version pour impression

Parmi les exemples de boucle while, nous avons :
- cherché un diviseur à un nombre pour savoir s’il est premier (voir Test de primalité)
- utilisé une boucle while pour interagir avec l’utilisateur (boucle événementielle). Le programme utilisé propose deux nombres pris au hasard à l’utilisateur et lui demande d’en calculer mentalement l’addition. Ce petit jeu de calcul mental continue tant que l’utilisateur le souhaite (grâce à la boucle while). Le code complet est fourni plus bas.
- utilisé une boucle while pour programmer une attente active : attendre qu’une certaine condition ayant des paramètres extérieurs au programme (ici l’heure système) devienne vraie.

Calcul mental (boucle évenementielle)

  1. #include <stdlib.h> /* EXIT_SUCCESS */
  2. #include <stdio.h> /* printf, scanf */
  3. #include <time.h> /* time */
  4.  
  5. /* declaration de constantes et types utilisateurs */
  6. #define TRUE 1
  7. #define FALSE 0
  8. #define NBMAX 100
  9. /* declaration de fonctions utilisateurs */
  10.  
  11. int main()
  12. {
  13.     int x; /* nombre au hasard */
  14.     int y; /* autre nombre au hasard */
  15.     int choix; /* choix de l'utilisateur */
  16.     int continuer = TRUE; /* TRUE s'il faut continuer a jouer */
  17.     int essais = 0; /* nombre d'essais */
  18.     int succes = 0; /* nombre de reponses justes */
  19.     int debut; /* debut en temps standard */
  20.     int duree; /* duree en secondes */
  21.  
  22.     /* initialisation du generateur de nombres pseudo-aleatoires */
  23.     srand(time(NULL)); /* a ne faire qu'une fois */
  24.  
  25.     /* bienvenue */
  26.     printf("Teste ton aptitude au calcul mental en faisant des additions !\n");
  27.  
  28.     /* partie */
  29.     debut = time(NULL);
  30.  
  31.     while(continuer) /* le joueur veut faire un nouvel essai */
  32.     {
  33.         essais = essais + 1;
  34.         /* tirage de x */
  35.         x = rand() % NBMAX + 1; /* entre 1 et NBMAX inclus */
  36.         /* tirage de y */
  37.         y = rand() % NBMAX + 1; /* entre 1 et NBMAX inclus */
  38.  
  39.         /* question */
  40.         printf("%d + %d = ", x, y);
  41.         scanf("%d",&choix);
  42.  
  43.         if(x + y == choix) /* trouve */
  44.         {
  45.             printf("Bravo c'est bien %d\n", choix);
  46.             succes = succes + 1;
  47.         }
  48.         else /* pas trouve */
  49.         {
  50.             printf("Faux, %d + %d = %d (pas %d)\n", x, y, x + y, choix);        
  51.         }
  52.         /* fin d'essai */
  53.         printf("Continuer (1) ou arreter (0) ?\n");
  54.         scanf("%d", &choix);
  55.         if (choix == 0)
  56.         {
  57.             continuer = FALSE;
  58.         }
  59.     }
  60.     /* fin */
  61.  
  62.     /* affichage du score */
  63.     duree = time(NULL) - debut;
  64.     printf("Votre score : %d justes sur %d essais en %d secondes\n", succes, essais, duree);
  65.     printf("Sayonara\n");
  66.  
  67.     return EXIT_SUCCESS;
  68. }
  69.  
  70. /* Definition des fonctions utilisateurs */

Télécharger

Tic tac boum (attente active)

Les lignes 24 à 51 servent simplement à faire tic tac... pour que le programme soit plus amusant, vous pouvez en omettre l’étude en première lecture.

  1. #include <stdlib.h> /* EXIT_SUCCESS, rand, srand */
  2. #include <stdio.h> /* printf, scanf */
  3. #include <time.h> /* time */
  4.  
  5. /* declaration de constantes et types utilisateurs */
  6. #define TRUE 1
  7. #define FALSE 0
  8. #define TIC 1
  9. #define TAC 2
  10.  
  11. /* declaration de fonctions utilisateurs */
  12.  
  13. int main()
  14. {
  15.     int debut; /* debut en temps standard */
  16.     int duree; /* duree en secondes */
  17.     int tictac = TAC;
  18.  
  19.     printf("Auto-destruction en cours, ctrl-C pour desamorcer !\n");
  20.     debut = time(NULL); /* date de debut (secondes depuis 1/1/1970) */
  21.     while(duree < 10) /* pas encore 10 secondes */
  22.     {
  23.         duree = time(NULL) - debut; /* duree depuis debut (secondes) */
  24.         if (duree % 2 == 0) /* duree paire: faire un tic */
  25.         {
  26.             if (tictac == TAC) /* le precedent tictac est un tac */
  27.             {
  28.                 /* faisons tic */
  29.                 printf("tic...\n");
  30.                 tictac = TIC;
  31.             }      
  32.         }
  33.         else /* duree impaire : faire un tac */
  34.         {
  35.             if (tictac == TIC) /* le precedent tictac est un tic */
  36.             {
  37.                 /* faisons tac */
  38.                 printf("tac...\n");
  39.                 tictac = TAC;
  40.             }      
  41.         }
  42.     } /* fin des 10 secondes */
  43.     printf("** BOUM ! **\n");
  44.  
  45.     return EXIT_SUCCESS;
  46. }
  47.  
  48. /* Definition des fonctions utilisateurs */

Télécharger

Revenu et logement, Je livre ici quelques éléments de comparaison concernant mon niveau de vie, pour couper court à quelques idées reçues, et un condensé de nombreuses (...)
Revenu et travail d’un enseignant-chercheur, Cet article complète l'article Revenu et logement, en détaillant un peu le budget de mon ménage, mon parcours d'enseignant-chercheur en terme de (...)
Cybersyn (el systemo synco), Au café, mardi 5 avril 2011, j'ai bien vu que, mis à part Antoine Allombert, personne ne connaissait l'histoire de l'extraordinaire projet chilien (...) [jpg, jpg, png]