IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Probléme de boucle?


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 54
    Par défaut Probléme de boucle?
    Bonjour , voila j'ai un probléme avec mon programme en C

    Voila deja l'enoncer :

    Ecrire un programme qui verifie la connaissance des tables de multiplication par l'ordinateur.

    Pour cela, l'ordinateur proposera 5 enoncés du type "A X B=", un à la fois; A et B représentent des nombes entiers choisis au hassard entre 1 et 20.
    L'utilisateur fournira une réponse.
    Si celle-ci est correcte, l'ordinateur félicitera l'utilisateur, sinon il donnera la reponse correcte.

    Remarque : le prof nous a dit d'utiliser la fonction rand() de la bibliotheque stdlib.h.


    Le probléme que j'ai c'est que tout va , mise a part la boucle qui doit effectuer 5 calculer different a la suite de l'autre.Qund j'eecute mon programme il s'arrete dés la fin du premier calcul.Si quelqu'un a une idée.
    Je vous met mon Pseudo code et en langage C

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    DEBUT
     nombre_enonces := 1
     nombre1 := RANDOM 1 20
     nombre2 := RANDOM 1 20
     resultat := nombre1 * nombre2
     
     REPETER
     
      ECRIRE nombre1 " x " nombre2
      ECRIRE "proposition : "
     
      SI resultat = proposition
       ECRIRE "Bravo ! La reponse est correcte !"
       nombre_enonces := nombre_enonces + 1
      SINON
       ECRIRE "La reponse correcte est " resultat
       nombre_enonces := nombre_enonces + 1
      FIN SI
     
     JUSQU A nombre_enonces = 5
     
    FIN

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>// librairie de creation de nombre aleatoire
     
    int main()
    {
    long int nombre1 = 0 , nombre2 = 0 , niveau = 0 , resultat = 0 ,
    proposition = 0 ,nbressais ;
    const long MAX = 20 , MIN = 0 ;
    //generation des 2 nombres
     
    srand (time(NULL));
    nombre1 = (rand() % (MAX - MIN + 1)) + MIN;
    nombre2 = (rand() % (MAX - MIN + 1)) + MIN ;
    resultat= nombre1 * nombre2;
    nbressais = 1;
     
    do
    {
    //on montre le calcul a effectuer
    printf("%ld X %ld = ",nombre1,nombre2);
    //on verifie le resultat avec la proposition
    nbressais = nbressais + 1 ;
    scanf("%ld",&proposition);
     
     
     
     
    if(resultat == proposition)
    {
    //la reponse est correcte
    printf("BRAVO LA REPONSE EST CORECTE");
    }
     
     
    else
    {
     
    printf("non la reponse corecte est %ld \n", resultat);
     
    }
     
     
     
    }while (nbressais > 5);
     
     
     
    system("PAUSE");
    return 0;
    }
    Voila merci d'avance pour votre aide car la je comprend vraiment pas car j'ai fais un boucle et j'ai mis un compteur (nbressais).

  2. #2
    Membre confirmé Avatar de tchalkost
    Inscrit en
    Juillet 2006
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 102
    Par défaut
    As-tu essayé :
    Je crois qu'avec le Do...While il faut penser à l'envers. Enfin c'est ce que je me dis pour ne pas m'embrouiller.

  3. #3
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Voilà ce qu'il faut faire pour 5 tours de boucle:
    D'ailleurs je te conseil d'utiliser getchar () pour ta pause à la fin du programme car ce que t'utilises n'est pas portable !

    Un des prototypes correctes de main (pour respecter la norme tout de même):
    D'après mon compilateur, tu n'utilises pas la variable niveau donc si elle sert à rien ... à virer !

    Pour finir, tu as oublié quelque chose, si tu répond correctement, tu devrais sortir de la boucle, un petit break serait donc pas mal
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 54
    Par défaut
    Oui , c'est juste il faut penser à l'envers pour le langage c, j'ai teste et ca marche, enfin pas comme je le voudrais.

    Il me marque 5 fois les meme enoncer avec les reponse mais il me met pas un enoncer different a la fois comme on me l'a demander. je pige pas pourquoi c'est bizarre

  5. #5
    Membre Expert Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    //on montre le calcul a effectuer
    printf("%ld X %ld = ",nombre1,nombre2);
    //on verifie le resultat avec la proposition
    nbressais = nbressais + 1 ;
    scanf("%ld",&proposition);
    stdout étant "bufferisée", ton printf ne s'affichera pas forcément. Il faudrait forcer l'affichage avec un petit fflush(stdout)...

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    À ta place, j'éviterais scanf(), mais bon.
    1. Pour commencer, mets un test d'erreur sur le résultat de scanf(). La valeur retournée doit être 1, sinon tu dis "Erreur" et tu quittes ou tu reboucles.
    2. Il faut purger le buffer d'entrée après l'appel à scanf():
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      /* Fonction pour purger une ligne d'un flux
         ---------------------------------------- */
      void PurgeStream(FILE *s)
      {
      int c;
      /* On lit des caractères jusqu'à tomber sur \n ou EOF. */
      while((c = fgetc(s)) != '\n' && c != EOF)
      	{}
      /* Ça y est, la ligne est vide. */
      }
      Avec ce code, tu n'as plus qu'à rajouter PurgeStream(stdin); après ton appel à scanf() (AVANT MÊME de vérifier le résultat de scanf()).
      Tu peux aussi remplacer system("PAUSE") par cette ligne au lieu de getchar(), pour attendre un appui sur Entrée...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 54
    Par défaut
    petite rectification , il m'affiche bien les 5 enoncer et s'arrete bien apres les 5.
    Mais les probléme c'est que c'est 5 enoncer identique qu'il m'affiche et pas 5 enoncer different comme c'est demander.
    Pourtant la boucle est effectuer avec les nombres aléatoire non?

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 54
    Par défaut
    J'ai résolu le probléme , j'avais pas mis la partie qu'il calcule les chiffre aléatoire dans la partie répétive (do).

    Un grand merci pour vos explication , vous m'avais remis sur le droit chemin lolll

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 54
    Par défaut
    Citation Envoyé par Médinoc
    À ta place, j'éviterais scanf(), mais bon.
    1. Pour commencer, mets un test d'erreur sur le résultat de scanf(). La valeur retournée doit être 1, sinon tu dis "Erreur" et tu quittes ou tu reboucles.
    2. Il faut purger le buffer d'entrée après l'appel à scanf():
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      /* Fonction pour purger une ligne d'un flux
         ---------------------------------------- */
      void PurgeStream(FILE *s)
      {
      int c;
      /* On lit des caractères jusqu'à tomber sur \n ou EOF. */
      while((c = fgetc(s)) != '\n' && c != EOF)
      	{}
      /* Ça y est, la ligne est vide. */
      }
      Avec ce code, tu n'as plus qu'à rajouter PurgeStream(stdin); après ton appel à scanf() (AVANT MÊME de vérifier le résultat de scanf()).
      Tu peux aussi remplacer system("PAUSE") par cette ligne au lieu de getchar(), pour attendre un appui sur Entrée...
    Ok , mais je comprend pas encore ce que tu utilise car je suis qu'au debut de mon apprentisage pour le langage C.
    en fait j'ai appris avec printf et pas scanf.

  10. #10
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par conceicao
    Ok , mais je comprend pas encore ce que tu utilise car je suis qu'au debut de mon apprentisage pour le langage C.
    en fait j'ai appris avec printf et pas scanf.
    Ca te permet de vider le buffer du clavier (stdin). Avec scanf si tu entres des données en plus hé bin ca peut parasiter le comportement de ton programme, surtout si tu ne récupère pas toute la saisie d'un seul coup !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 54
    Par défaut
    a oui je comprend ce que tu veux dire , mon prof m'a aussi deconseiller le scanf , c'st pour ca qu'on utilise le printf mais peut etre pas pour les meme raison que ce que tu m'explique.Merci pour ses précisions

  12. #12
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    fgetc() lit un caractère du flux.

    scanf( ...) correspond à fscanf(stdin, ...) sachant que stdin est le "flux d'entrée".

    Donc, fgetc(stdin) correspond à getchar().
    Ma fonction fait fgetc(stdin) pour récupérer tous les caractères qui n'ont pas été lus par scanf(), jusqu'à tomber sur la fin de la ligne (\n), et retourne juste après.
    Quant à EOF, ça signale la fin ou une erreur, donc si on tombe sur EOF, ma fonction s'arrête.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  13. #13
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    En fait, une erreur commune est de croire que scanf() est une fonction pour les débutants.
    scanf() n'est PAS une fonction pour les débutants, et il faut une grande maîtrise pour s'en servir correctement.
    Il y a ici un tutoriel sur scanf(), qui indique un peu sa complexité:
    http://xrenault.developpez.com/tutoriels/c/scanf/
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  14. #14
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par conceicao
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>// librairie de creation de nombre aleatoire
    Un fichier d'entête n'est pas une bibliothèque, mais sert à déclarer les fonctions disponibles comme points d'entrée dans une bibliothèque. Et <time.h> n'a rien a voir avec les nombres aléatoires même si il est pratique courante de se servir de la fonction time() pour fournir l'amorce du générateur de nombres pseudo-aléatoires fournit par la bibliothèque standard du C.

    Citation Envoyé par conceicao
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int main()
    {
    long int nombre1 = 0 , nombre2 = 0 , niveau = 0 , resultat = 0 ,
    L'utilisation du type long int n'est pas nécessaire ici. nombre1 et nombre2 varie entre 0 et 20, résultat vaut au plus 400. Ce n'est pas très important, mais j'utiliserais simplement le type int.

    Citation Envoyé par conceicao
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
        proposition = 0 ,nbressais ;
        const long MAX = 20 , MIN = 0 ;
        //generation des 2 nombres
     
        srand (time(NULL));
        nombre1 = (rand() % (MAX - MIN + 1)) + MIN;
        nombre2 = (rand() % (MAX - MIN + 1)) + MIN ;
        resultat= nombre1 * nombre2;
        nbressais = 1;
     
        do
        {
            //on montre le calcul a effectuer
            printf("%ld X %ld = ",nombre1,nombre2);
            //on verifie le resultat avec la proposition
            nbressais = nbressais + 1 ;
            scanf("%ld",&proposition);
     
            if(resultat == proposition)
            {
                //la reponse est correcte
                printf("BRAVO LA REPONSE EST CORECTE");
            }
            else
            {
                printf("non la reponse corecte est %ld \n", resultat);
            }
        } while (nbressais > 5); /* Ne s'effectue QUE 4 fois ici */
     
        system("PAUSE");
        return 0;
    }
    Il y a quelque chose que je ne comprend pas. Tu génères aléatoirement nombre1 et nombre2 au début de ton programme. Ensuite, dans la boucle, tu soumets le calcul à l'utilisateur qui doit entrer sa réponse (Au passage: tu devrais sécuriser tes entrées, car si tu tombe sur quelqu'un comme moi qui a tendance à entrer n'importe quoi... Personnellement scanf, c'est trop fort pour moi -> fgets et sscanf). Si la réponse entrée par l'utilisateur est correcte, tu le félicites. Dans le cas contraire, tu lui donne la bonne réponse et tu passes au test suivant.

    Si j'ai bien compris ton code, tu passes à l'itération suivante au sein de la boucle sans générer de nouveaux nombres aléatoires. L'utilisateur va retrouver la même question au 2ème essai, alors qu'il aura déjà eu la réponse au 1er tour. Même moi, j'arrive à trouver la réponse correcte dans ce cas de figure.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  15. #15
    Membre Expert Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Par défaut
    Citation Envoyé par conceicao
    a oui je comprend ce que tu veux dire , mon prof m'a aussi deconseiller le scanf , c'st pour ca qu'on utilise le printf mais peut etre pas pour les meme raison que ce que tu m'explique.
    peut-être une petite confusion, non ?
    scanf permet de lire, et printf d'écrire...

  16. #16
    Membre Expert Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Par défaut
    Citation Envoyé par mujigka
    Même moi, j'arrive à trouver la réponse correcte dans ce cas de figure.

  17. #17
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par conceicao
    Ok , mais je comprend pas encore ce que tu utilise car je suis qu'au debut de mon apprentisage pour le langage C.
    en fait j'ai appris avec printf et pas scanf.
    On ne devrait jamais enseigner scanf à des débutants... C'est pourtant pas plus compliqué d'enseigner l'utilisation de fgets couplé à sscanf et de sensibiliser les étudients aux problèmes liés aux entrées/sorties bufferisées?

    Pour bien comprendre la problématique liée aux entrées/sorties, voici un lien très formateur:

    http://emmanuel-delahaye.developpez.com/inputs.htm

    Salutations

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  18. #18
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par Médinoc
    En fait, une erreur commune est de croire que scanf() est une fonction pour les débutants.
    scanf() n'est PAS une fonction pour les débutants, et il faut une grande maîtrise pour s'en servir correctement.
    Il y a ici un tutoriel sur scanf(), qui indique un peu sa complexité:
    http://xrenault.developpez.com/tutoriels/c/scanf/
    Malgré ce tutoriel que je trouve très bien écrit, je déconseille l'utilisation de cette fonction aux débutants. La lecture de ce document est toutefois formatrice et permet effectivement de prendre conscience des problèmes qui peuvent survenir.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  19. #19
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par conceicao
    Je vous met mon Pseudo code et en langage C
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    DEBUT
     nombre_enonces := 1
     nombre1 := RANDOM 1 20
     nombre2 := RANDOM 1 20
     resultat := nombre1 * nombre2
     
     REPETER
     
      ECRIRE nombre1 " x " nombre2
      ECRIRE "proposition : "
     
      SI resultat = proposition
       ECRIRE "Bravo ! La reponse est correcte !"
       nombre_enonces := nombre_enonces + 1
      SINON
       ECRIRE "La reponse correcte est " resultat
       nombre_enonces := nombre_enonces + 1
      FIN SI
     
     JUSQU A nombre_enonces = 5
     
    FIN
    Hum, je reconnais mon écriture, et je me souviens t'avoir signalé (c'était hier, je ne sais plus où) que cet algorithme ne répondait pas à l'énoncé. C'est pas peine de le coder en C tant qu'il est faux. Fait travailler ton cerveau et essaye de comprendre pourquoi il ne fonctionne pas.

    • Vérifie si le nombre de tours est correct.
    • Vérifie si les variables du problème sont bien tirées au hasard à chaque tour...

    Je t'ai parlé aussi d'une possible 'factorisation du code'.

    Et je viens de voir qu'il manque la saisie explicite du résultat
    ou
    Bref, on écrit pas un algorithme par ce que le prof l'a demandé, mais parce que c'est un véritable outil de travail et de reflexion.

    Le codage, c'est rien (enfin, presque...).

  20. #20
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par conceicao
    mon prof m'a aussi deconseiller le scanf ,
    +1
    c'st pour ca qu'on utilise le printf

Discussions similaires

  1. Problème de boucles imbriquées
    Par Gnux dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 09/12/2005, 20h26
  2. [Tableaux] Problème avec boucle
    Par MYster dans le forum Langage
    Réponses: 6
    Dernier message: 11/11/2005, 18h39
  3. Problème de boucle
    Par TheUltimaSephiroth dans le forum C
    Réponses: 8
    Dernier message: 10/10/2005, 13h58
  4. Problème de boucle
    Par Louis-Guillaume Morand dans le forum Langage SQL
    Réponses: 3
    Dernier message: 25/09/2005, 09h10
  5. Problème de boucle
    Par basclln dans le forum C++
    Réponses: 19
    Dernier message: 02/04/2005, 09h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo