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 :

Aide, petit programme


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 29
    Par défaut Aide, petit programme
    Bonjour,

    J'ai un petit exercice sous la main en C mais je ne vois pas comment m'y prendre pour le réaliser !

    Voici l'énoncé :

    Ecrire un programme qui affiche le minimum et maximum d'une suite d'entiers naturels rentrée par l'utilisateur (-1 pour fin de saisie). Ces entiers ne sont pas stockés dans un tableau.

    Je précise juste que j'ai un niveau plutôt débutant en C et que je m'entraîne !

    Merci pour vos remarques, avis, aides ...

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 477
    Par défaut
    Bonjour,

    • while() pour saisir tes entiers un à un tant que l'entier lu n'est pas égal à -1 ;
    • Deux variables mini et maxi ;
    • Un scanf() pour lire tes entiers (ou fgets() et strtol()) ;
    • Les opérateurs de comparaison < et > dans un if() pour les comparer à tes variables mini et maxi, que tu mets à jour au besoin.


    Et c'est tout ! :-)

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 29
    Par défaut
    Merci. Mais si on entre par exemple 123456 je ne vois pas comment faire pour trouver l'entier le plus grand et le plus petit ...

    En plus je la stocke dans une seule variable cette suite alors j'ai du mal à voir ou alors je me suis trompé ..

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 477
    Par défaut
    Citation Envoyé par rromain Voir le message
    En plus je la stocke dans une seule variable cette suite alors j'ai du mal à voir ou alors je me suis trompé ..
    L'idée est de ne pas stocker toute la suite pour la ré-analyser en entier depuis le début, ce qui est idiot, mais de maintenir en temps réel une variable nommée « maximum », par exemple, et de remplacer le contenu de cette variable par la valeur que tu viens de lire s'il s'avère que celle-ci est plus grande que celle de la variable.

    Même chose pour la variable « minimum ».

    Ça veut dire aussi qu'il faut également mettre le résultat de ton scanf() ou strtol() dans une variable aussi mais, dans tous les cas, tu n'en maintiens jamais que trois.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 29
    Par défaut
    Oui, effectivement ça paraît déjà plus judicieux et plus cohérent !

    Mais bon, ça ne vient pas tout seul au début faut croire ...

    Mais je n'y arrive toujours pas parce que au passage de la première itération si n>max alors max=n mais pour le min je ne vois pas comment faire puisque si n<max ce n'est pas forcément min ...

  6. #6
    Membre éclairé
    Inscrit en
    Avril 2010
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : Avril 2010
    Messages : 66
    Par défaut
    Citation Envoyé par rromain Voir le message
    mais pour le min je ne vois pas comment faire puisque si n<max ce n'est pas forcément min ...
    Si n < min, non ?
    Mais pour connaître la valeur initiale de min, tu dois lui attribuer une valeur très grande, créé éventuellement un "unsigned int" (un entier non-signé, ce qui veut dire qu'il ne peut pas avoir de valeur négative), et tu mets sa valeur à -1. Lorsque l'on attribue un nombre négatif à un unsigned int, la valeur de la variable devient le nombre maximum que peut contenir un unsigned int. Ainsi, ta variable sera bien assez grande. A moins évidemment que tu peux t'imposes déjà une valeur limite.

  7. #7
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Joa,

    Pour faire ce genre de truc, on distingue généralement le traitement de la première entrée par rapport aux autres :

    * première entrée : min et max sont mis à cette valeur

    * les autres :
    - traiter si sortie demandée (dans ton cas, puisqu'une valeur spéciale est réservée pour ça),
    - sinon mettre à jour min et max

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 29
    Par défaut
    J'ai finalement réussis mon programme mais je ne m'attarde pas trop, faut que je vois d'autres choses ...

    En revanche là, je ne connais rien sur la fonction rand() et j'ai le jeu de la devinette à faire pour ceux qui connaissent ..

    Je ne recrée pas de sujet juste pour un autre exo ...

  9. #9
    Membre éclairé
    Inscrit en
    Avril 2010
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : Avril 2010
    Messages : 66
    Par défaut
    Ce que tu dois savoir sur la fonction rand(), c'est juste qu'elle doit fonctionner préalablement avec srand(), qui prend en paramètre un seed (en général le retour de la fonction time()), ce qui te donne srand(time(0)), à partir de là tu peux utiliser rand() autant de fois que tu veux.
    L'autre petite astuce est juste que pour "limiter" ton rand à une valeur maximum, il te suffit de faire rand() % nbMax. Pour le reste, "man rand"

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 29
    Par défaut
    Merci Hoder ! J'ai trouvé quelques infos en cherchant sur le net !

    Je poste mon bout de code, peut-être que ce sera plus facile pour communiquer et pour que vous preniez compte de mon soucis ... Il y a peut-être d'autres soucis mais là il m'affiche sans arrêt " Le nombre est plus grand " à la suite sans s'arrêter ... Surement un soucis de boucle ...


    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
    #include <stdio.h>
    #include <stdlib.h>
     
    int main (void){
     
      int n,m,i;
      int rand();
     
    srand(time(NULL));
     
     n=0+rand()%100;
     
     printf("Jeu de la Devinette : Tenter de trouver le nombre ! (Vous avez 5 tentatives) \n");
     printf("Entrez un nombre : ");
     scanf ("%d",&m);
     
     while (n!=m){
     
     for (i=0;i<=4;i++){
       if(m<n)
         printf("Le nombre mystère est plus grand ! \n");
       if (m>n)
         printf("Le nombre mystère est plus petit ! \n");
     }
     }
     
     printf("Bravo !! Vous êtes pas mauvais !");
     
     return EXIT_SUCCESS;
     
    }

  11. #11
    Membre éclairé
    Inscrit en
    Avril 2010
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : Avril 2010
    Messages : 66
    Par défaut
    Bon, pour commencer, la prochaine fois que tu mets ton code, utilise les balises [CO DE][/CO DE] (sans l'espace au milieu)

    Pourquoi un "0+" ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    scanf ("%d",&m);
     
    while (n!=m){
     
    for (i=0;i<=4;i++){
    if(m<n)
    printf("Le nombre mystère est plus grand ! \n");
    if (m>n)
    printf("Le nombre mystère est plus petit ! \n");
    }
    }
    Mmm, regardes où tu as mis ton scanf() A cet endroit l'utilisateur n'a qu'un seul essai. Et tu peux "compresser" un peu tout ça en utilisant une seule boucle principale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int i = 0;
    while (n != m && i < 5) { //code; i++}
    Mais surtout replace ton scanf, ça devrait mieux fonctionner.

Discussions similaires

  1. Besoin d'aide petit Programme Python
    Par Esteban96 dans le forum Général Python
    Réponses: 9
    Dernier message: 21/10/2013, 11h22
  2. aide petit programme flash
    Par endelium dans le forum Flash
    Réponses: 1
    Dernier message: 08/11/2009, 23h44
  3. Besoin d'aide pour un petit programme
    Par Nico35 dans le forum C
    Réponses: 13
    Dernier message: 25/05/2006, 22h21
  4. aide petit programme pour débutant
    Par kartp0rqx dans le forum C
    Réponses: 16
    Dernier message: 14/10/2005, 19h31

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