Ecrire un programme langage C

Résolu
Bonjour,
j'ai un exercice qui consiste à ecrire un algorithme qui demande à l'utilisateur un nombre compris entre 0 et 20 jusqu'a ce que la réponse convienne. cette partie j ai reussi à faire mais après pour traduire cet algorithme en programme C je n 'y arrive plus !!!merci de bien vouloir m'aider!!

voilà ce que j ai fais pour l'algorithme:

algorithme
% demande à l'utilisateur un nombre compris entre 0 et 20
%declaration de variable
flottant : n
debut : %du traitement
tant que (n<0 ou n>20)faire
afficher ("erreur entrer un nombre compris entre 0 et 20 )
lire(n)
fin tant que
afficher ("saisie correcte")
fin
Configuration: Windows Vista
Internet Explorer 7.0

13 réponses

  • Votes
  • Date
  • Date décroissante
  1. Merci pour ces petites correction bien necessaire (apres 1 ans sans C on oublie quelque truc :P)

    Sinon tu peux essayer ma version poster un peu plus haut qui est un peu moins gourmande!
    j'avais utiliser des cout et cin il faut les remplacer par des printf et scanf...
    1. Contributeur
      Salut,
      Il manque une ligne à ton algo, tu dois rajouter "lire(n)" avant tant que.
      Sinon, le reste est bon.
      Pour la partie C, je te laisse voir avec xav3601 ;)
      1. Moi j'aurais une possibilite un peu differente de ton algo proposé afin de réduire le nombre d'événement...

        float saisie()
        {
        float n;
        while(1)
        {
        cout>>"Veuillez saisir une valeur entre 0 et 20\n"<<endl;
        cin<<n;
        if(n<20 && n>0) return n,
        }
        }

        Voila!
        c'est une fonction qui te retourne la valeur saisie quand elle est bonne ;)
        1. oui mais lorsque je rentre le programme dans l ordinateur ça me met plein d 'ereur
          je vous transmet ce que j ai fais !(j'utilise le logisiel dev C++)

          #include<stdio.h>
          #include<stdlib.h>
          #include<string.h>

          int main()
          {
          //demande à l'utilisateur un nombre compris entre 0 et 20
          //declaration de variable
          float n;

          //debut du traitement
          while{
          if (n<0 & n>20) break;
          printf ("erreur entrer un nombre entre 0 et 20);
          scanf ( n%d,&n);
          système ("pause");
          return0;
          //fin du traitement
          }//fin du programme

          voilà!!
          1. #include<stdio.h>
            #include<stdlib.h>
            #include<string.h>

            int main()
            {
            //demande à l'utilisateur un nombre compris entre 0 et 20
            //declaration de variable
            float n;

            //debut du traitement

            //on demande d'entrer une premiere fois le nombre
            printf ("entrer un nombre entre 0 et 20");
            scanf ( n%f,&n);

            //tant que le nombre n'est pas dans l'intervalle on recommence
            while(n<0 && n>20)
            {
            printf ("erreur entrer un nombre entre 0 et 20");
            scanf ( n%f,&n);
            }

            //quand on a une bonne valeur on l'affiche
            printf ("la valeur de n est : %f",n);
            //fin du traitement
            }//fin du programme

            voila je pense que ca devrait marcher!!
            1. #include<stdio.h>
              #include<stdlib.h>

              int main()
              {
              int n, ok=0;

              while (ok==0)
              {
              scanf("%d",&n);
              if (n<0 & n>20)
              {
              printf ("erreur entrer un nombre entre 0 et 20);
              }
              else
              { ok=1;}
              }
              printf ( "%d",n);
              système ("pause");
              return0;
              }
              1. Contributeur
                Je corrige les petites coquilles qui traînent dans le programme donné par xav:
                L'instruction : scanf ( n%f,&n); est erronée.
                La bonne est :
                scanf ("%f",&n);


                Et enfin, il ne faut pas oublier à la fin :
                return 0;

                Cdlt
                1. Contributeur
                  Ta deuxième version est bien plus jolie je trouve. Car le coup du while(1) et un joli return en plein milieu c'est du code spaghetti ^^. Algorithmiquement ta première version est nickel ;)
                  Ce qui donne (après correction et indentation ) :
                  #include<stdio.h>
                  
                  int main(void)
                  {
                     //demande à l'utilisateur un nombre compris entre 0 et 20
                     //declaration de variable
                     float n;
                  
                     //debut du traitement
                     //on demande d'entrer une premiere fois le nombre
                     printf ("entrer un nombre entre 0 et 20");
                     scanf ("%f",&n);
                  
                     //tant que le nombre n'est pas dans l'intervalle on recommence
                     while(n<0 && n>20)
                     {
                        printf ("erreur entrer un nombre entre 0 et 20");
                        scanf ("%f",&n);
                     }
                  
                     //quand on a une bonne valeur on l'affiche
                     printf ("la valeur de n est : %f\n",n);
                     return 0;
                     //fin du traitement
                  }
                  

                  Cdlt
                  1. comme dis precement le code donne en premier est moins gourmand en memoire...
                    le return en milieu n'est pas du code spaghetti mais du code economique ;)
                    1. Contributeur
                      Salut,
                      Encore faut-il comparer ton code (qui se fait en une passe) avec l'autre version en une passe également.
                      Par exemple, il faudrait comparer ta version :

                      #include <stdio.h>
                      
                      int main(void){
                          float n;
                          while(1){
                              puts("saisir valeur entre 0 et 20");
                              scanf("%f",&n);
                              if(n<20 && n>0) return n;
                          }
                      
                          return 0;
                      }
                      


                      avec l'autre version :
                      #include <stdio.h>
                      
                      int main(void){
                          float n;
                          do{
                              puts("saisir valeur entre 0 et 20");
                              scanf("%f",&n);
                          }while(n>20 || n<0);
                      
                          return 0;
                      }
                      

                      Non seulement on économise 3 caractères de plus dans ta version "spaghetti". Et en plus le compilateur ne peut pas optimiser aussi bien qu'avec l'autre version. L'inconvénient des boucles infinis avec un break ou return, c'est qu'algorithmiquement c'est moins beau, et en plus le compilateur est moins efficace.
                      ;)
                      1. Certes mais concretement en entreprise qui s'interesse a l'esthetique de l'algo :P