problème boucle programme en C
Répondre à la discussion
Affichage des résultats 1 à 3 sur 3

problème boucle programme en C



  1. #1
    invite5bc905d4

    problème boucle programme en C


    ------

    Bonjour à tous,

    Je débute dans la programmation en C, (j'utilise Code Blocks), et il y a un exercice sur les boucles que je n'arrive pas à résoudre : il s'agit de faire deviner à l'utilisateur un nombre secret X choisi par l'ordinateur entre les valeurs 1 et 1000, le programme affiche "trop petit" tant que la valeur Y entrée par l'utilisateur est inférieure au nombre secret choisi par l'ordinateur, et "trop grand" quand c'est l'inverse. Le jeu s'arrête quand l'utilisateur trouve le nombre secret, et affiche "Ok!".
    Donc j'ai écrit l'algorithme avec la boucle, et le programme en C qui donne :

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    int main(srand)


    {
    int X,Y;
    X =(rand()/RAND_MAX)*1000;
    printf("Entrez un nb entre 0 et 1000 : \n");
    scanf("%d\n", &Y);

    if(Y!=X)


    while(Y<X)

    {
    printf("Trop petit !\n");

    }

    printf("Trop grand !\n");

    else

    {
    printf("Ok !\n");

    }


    return 0;

    }


    Donc déjà j'ai un pb, je ne sais pas comment faire pour caller la fenêtre sur 1-1000 au lieu de 0-1000.
    Ensuite, quand le programme s'affiche, il n'affiche pas trop grand ou trop petit à chaque essai de l'utilisateur, je pense que je ne devrais pas mettre "if" et que "while" mais pourquoi c'est faux avec "if" ?
    Qu'est ce qu'il faut changer ?
    Merci d'avance !!!

    -----

  2. #2
    invite4492c379

    Re : problème boucle programme en C

    Citation Envoyé par Mona Lisa Voir le message
    Bonjour à tous,

    Je débute dans la programmation en C, (j'utilise Code Blocks), et il y a un exercice sur les boucles que je n'arrive pas à résoudre : il s'agit de faire deviner à l'utilisateur un nombre secret X choisi par l'ordinateur entre les valeurs 1 et 1000, le programme affiche "trop petit" tant que la valeur Y entrée par l'utilisateur est inférieure au nombre secret choisi par l'ordinateur, et "trop grand" quand c'est l'inverse. Le jeu s'arrête quand l'utilisateur trouve le nombre secret, et affiche "Ok!".
    Donc j'ai écrit l'algorithme avec la boucle, et le programme en C qui donne :
    Hello. Tu as bien fait, il faut toujours commencer par écrire un algo

    Citation Envoyé par Mona Lisa Voir le message
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    int main(srand)


    {
    int X,Y;
    X =(rand()/RAND_MAX)*1000;
    printf("Entrez un nb entre 0 et 1000 : \n");
    scanf("%d\n", &Y);

    if(Y!=X)


    while(Y<X)

    {
    printf("Trop petit !\n");

    }

    printf("Trop grand !\n");

    else

    {
    printf("Ok !\n");

    }


    return 0;

    }


    Donc déjà j'ai un pb, je ne sais pas comment faire pour caller la fenêtre sur 1-1000 au lieu de 0-1000.
    Ensuite, quand le programme s'affiche, il n'affiche pas trop grand ou trop petit à chaque essai de l'utilisateur, je pense que je ne devrais pas mettre "if" et que "while" mais pourquoi c'est faux avec "if" ?
    Qu'est ce qu'il faut changer ?
    Merci d'avance !!!
    OK, si ce code est la traduction de ton algo, c'est que ton algo est faux. Peux-tu nous donner l'algo ?

    Sinon la méthode générale pour sortir un pseudo aléatoire sur 1-n est simple. Tu en prends un dans 0-(n-1) et tu lui ajoute 1.

  3. #3
    Xoxopixo

    Re : problème boucle programme en C

    Bonjour,

    l'algorithme n'est pas au point.

    Déja, le scanf devrait être inclu dans une boucle, sinon l'utilisateur ne va rentrer la valeur qu'une seule fois.
    Ensuite effectivement le if(Y!=X) n'est pas adapté, puisqu'il ne permet pas de produire une boucle, le IF ne permet de tester qu'une seule fois une valeur.
    On pourrait penser le remplacer par un while(Y!=X). (ou par une boucle de type repeat until mais ça dépend de ce que l'on veut faire)

    Ici, pour cet algorithme très simple, si je l'ai bien déduit, on ne sort pas de la boucle, tant que la valeur n'a pas été trouvée.
    Donc, si on sort de la boucle...c'est que la valeur a été trouvée.
    Le résultat printf("OK !\n") peut donc être placé après la boucle du While(Y!=X).

    Dans la boucle au contraire, le while(Y<X) est inadapté, il faut tester les deux conditions en utilisant des IF, soit IF(Y<X) et IF(Y>X).
    Attention, si tu testes IF(Y<X), la condition non réalisée ne signifie pas que Y>X mais peut aussi bien signifier que Y=X ou Y>X.
    Il te faut donc tester si Y<X puis Y>X, le test Y=X n'étant pas necessaire si il est effectué au niveau de la boucle While(Y!=X).

    Evidement le scanf("%d\n", &Y); doit être placé avant ces deux tests.
    En bon vivant, rien ne vaut un bonne logique ternaire.

Discussions similaires

  1. forcer un programme matlab à sortir d'une boucle
    Par inviteb8477130 dans le forum Mathématiques du supérieur
    Réponses: 4
    Dernier message: 25/05/2011, 20h04
  2. programme tourne en boucle alors qu'il n'y a pas de while
    Par amoniaque dans le forum Électronique
    Réponses: 4
    Dernier message: 22/11/2010, 16h27
  3. Probleme boucle for ou boucle do...while imbriquées
    Par Pilou81 dans le forum Électronique
    Réponses: 8
    Dernier message: 09/06/2010, 10h32
  4. Problème boucle while en java
    Par thundertom dans le forum Logiciel - Software - Open Source
    Réponses: 8
    Dernier message: 23/10/2009, 16h56
  5. Probleme de boucle FOR-Next
    Par zanzeoo dans le forum Électronique
    Réponses: 8
    Dernier message: 17/08/2004, 12h25