Cours 8 : retour sur le while et indécidabilité de l’arrêt

, par Pierre

Les deux programmes vus au sujet du while.

  1. /* Declaration de fonctionnalites supplementaires */
  2. #include <stdlib.h> /* pour EXIT_SUCCESS */
  3. #include <stdio.h> /* pour printf() */
  4.  
  5. /* Declaration des constantes et types utilisateur */
  6. #define N 5
  7. #define FALSE 0
  8. #define TRUE 1
  9.  
  10. /* Declaration des fonctions utilisateur */
  11.  
  12. /* Fonction principale */
  13. int main()
  14. {
  15. /* Declaration et initialisation des variables */
  16. int x; /* saisie utilisateur */
  17. double somme = 0;
  18. int n = 0; /* nombre d'elements positifs */
  19.  
  20. /* mode d'emploi */
  21. printf("Saisir une série d'entiers positifs, entrer un nombre négatif ou nul pour terminer la saisie.");
  22.  
  23. /* demander un nombre */
  24. printf("Donner le premier nombre\n");
  25. scanf("%d", &x);
  26.  
  27. /* tant que le nombre saisie est positif */
  28. while (x > 0)
  29. {
  30. /* ajout à la somme */
  31. somme = somme + x;
  32.  
  33. /* incremente le nombre d'elements positifs */
  34. n = n + 1;
  35.  
  36. /* demander un nouveau nombre */
  37. printf("Donner le nombre suivant\n");
  38. scanf("%d", &x);
  39. }
  40.  
  41. if (n > 0) /* il y a des elements */
  42. {
  43. /* calcul de la moyenne */
  44. printf("moyenne des nombres positifs saisis : %g\n", somme / n);
  45. }
  46. else /* pas d'elements */
  47. {
  48. printf("Il n'y a pas d'elements positifs dans la serie saisie\n");
  49. }
  50.  
  51. /* Valeur fonction */
  52. return EXIT_SUCCESS;
  53. }
  54.  
  55. /* Definition des fonctions utilisateur */

Télécharger

  1. /* Declaration de fonctionnalites supplementaires */
  2. #include <stdlib.h> /* pour EXIT_SUCCESS */
  3. #include <stdio.h> /* pour printf() */
  4.  
  5. /* Declaration des constantes et types utilisateur */
  6. #define N 5
  7. #define FALSE 0
  8. #define TRUE 1
  9.  
  10. /* Declaration des fonctions utilisateur */
  11.  
  12. /* Fonction principale */
  13. int main()
  14. {
  15. /* Declaration et initialisation des variables */
  16. int t[N]={1,3,4,190,-34};
  17. int pas_trouve = TRUE;
  18. int x; /* nombre recherche */
  19. int i = 0; /* var. de boucle */
  20.  
  21. /* Demander le nombre recherche a l'utilisateur */
  22. printf("Donner un nombre entier\n");
  23. scanf("%d", &x);
  24.  
  25. /* parcourir le tableau tant qu'une case contenant ce nombre n'est
  26.   * pas trouvée */
  27. while( (i < N) && pas_trouve )
  28. {
  29. if (t[i] == x) /* la case contient x */
  30. {
  31. pas_trouve = FALSE;
  32. }
  33. i = i + 1;
  34. }
  35.  
  36. /* Afficher le resultat de la recherche */
  37. if (pas_trouve)
  38. {
  39. printf("Le nombre %d n'est pas dans le tableau\n", x);
  40. }
  41. else
  42. {
  43. printf("Le nombre %d est dans le tableau\n", x);
  44. }
  45.  
  46. /* Valeur fonction */
  47. return EXIT_SUCCESS;
  48. }
  49.  
  50. /* Definition des fonctions utilisateur */

Télécharger

La preuve de l’indécidabilité de la terminaison des programmes a été présentée à l’aide des transparents en document annexe.

Documents joints

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]