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).

PDF - 474.3 ko
cours 06 EI
version écran
PDF - 295.4 ko
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]