Ecrire un programme langage C

Résolu
rachel -  
xav3601 Messages postés 3390 Statut Membre -
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

  1. xav3601 Messages postés 3390 Statut Membre 312
     
    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...
    4
  2. xav3601 Messages postés 3390 Statut Membre 312
     
    As tu déjà fais un début de code?
    1
  3. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    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
  4. xav3601 Messages postés 3390 Statut Membre 312
     
    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 ;)
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. rachel
     
    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à!!
    0
  7. xav3601 Messages postés 3390 Statut Membre 312
     
    #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!!
    0
  8. samar83 Messages postés 70 Date d'inscription   Statut Membre 2
     
    #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;
    }
    0
  9. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    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
    0
  10. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    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
    0
  11. xav3601 Messages postés 3390 Statut Membre 312
     
    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 ;)
    0
  12. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    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.
    ;)
    0
  13. xav3601 Messages postés 3390 Statut Membre 312
     
    Certes mais concretement en entreprise qui s'interesse a l'esthetique de l'algo :P
    0