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 :

Débutant : Problème de Condition ou de bouclage


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Inscrit en
    Septembre 2005
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 30
    Points : 28
    Points
    28
    Par défaut Débutant : Problème de Condition ou de bouclage
    Bonjour a tous,

    Je dois faire un programme qui dois vous paraitre simple mais j'ai un problème
    C'est un programme de vote ou le votant rentre un numéro de carte pour ne pas voté 2 fois et quand je rentre le numéro de carte justement il me dis que j'ai déjà voté :

    Voici le code :

    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
     
    #include <stdio.h>
    #include <stdlib.h>
     
    #define C 5
     
    int main(void)
    {
         int i,k,oui,nul,num,non,nbre,quitter;
         char choix;
         bool resultat;
         oui=0;
         non=0;
         nul=0;
         long tab[C],j=0;
     
         //Initialisation du tableau//
     
         for(j=0;j<C;j++)
         {
          tab[j]=0;
         }
     
         printf("Combien y a t-il de votants ? \n");
         scanf("%d",&nbre);
     
         for (i=0;i<nbre;i++)
     
             {
             printf ("Quel est le numero du votant ? \n\n");
             scanf ("%d",&num);
             resultat=false;
             j=0;
             while(j==i||num==tab[j])
     
                {
     
                   if (num==tab[j])
     
                       {
                       resultat=true;
                       }
     
                   else
     
                       {
                       tab[i]=num;
                       }
     
                 j++;
     
                 }
     
             if (resultat=true)
     
                 {
                 printf("Vous avez deja vote\n");
                 }
     
             else
     
                 {
                 printf ("Quel est le choix du votant ? Ecrit o=oui  ou  n=non ou u=nul\n\n");
                 scanf ("%s",&choix);
     
                 if ( (choix=='o')  || (choix == 'O') ) oui=oui+1;
                 if ( (choix=='n')  || (choix == 'N') ) non=non+1;
                 if ( (choix=='u')  || (choix == 'U') ) nul=nul+1;
                 }
     
                 }
     
     
         printf("Les Resultats sont  OUI : %d NON : %d  NUL :%d \n",oui,non,nul);
     
         for (j=0;j<C;j++)
     
             {
             printf("%d\n",tab[j]);
             }
     
         printf ("Saisir un chiffre pour quitter\n");
         scanf ("%d",&quitter);
     
    }
    Merci à tous ceux qui regarde ce mail et qui m'aideront. Et aussi je suis débutant donc pas trop de solutions compliquées.

    @+ Jérémy

  2. #2
    Membre éprouvé
    Avatar de Freed0
    Profil pro
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    635
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 635
    Points : 953
    Points
    953
    Par défaut
    Désolé je ne vais pas t'aider à résoudre ton problème mais juste 2-3 petites remarques :

    1) C'est du C que tu as écrit, il serait donc plus judicieux de le mettre dans la section appropriée
    2) oui = oui + 1; revient à écrire oui++;. Ca s'appelle l'incrémentation
    3) à la dernière ligne, tu n'es pas obligé d'utiliser scanf vu que le resultat n'est pas traité... remplace la ligne par un getch(); ce qui sera beaucoup plus simple

  3. #3
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Août 2004
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 63
    Points : 34
    Points
    34
    Par défaut
    slt,

    1) Il n'y a pas de "bool" en C , utilise un "int"

  4. #4
    Membre éprouvé
    Avatar de Freed0
    Profil pro
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    635
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 635
    Points : 953
    Points
    953
    Par défaut
    Encore une chose : tu peux initialiser un tableau sans faire de boucle

    tab[] = {0};

  5. #5
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Août 2004
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 63
    Points : 34
    Points
    34
    Par défaut
    re,

    Ha mon avis l'erreur bien de la:
    if (resultat=true) ==> il manque un "=" !

  6. #6
    Membre éprouvé
    Avatar de Freed0
    Profil pro
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    635
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 635
    Points : 953
    Points
    953
    Par défaut
    Ah ué, bien vu

  7. #7
    Membre habitué
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Décembre 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Décembre 2005
    Messages : 109
    Points : 161
    Points
    161
    Par défaut
    Quelques remarques :
    1/ En C++, on préfère l'utilisation des en-têtes cstdio et cstdlib à stdio.h et stdlib.h. De même, je te conseil de regarder du coté de iostream et cin/cout pour la lecture au claiver et l'affichage.

    2/ Un fflush(stdout); entre un printf et un scanf serait très appréciable. De cette manière tu t'assure que la question est bien affichée, et donc l'utilisateur sait qu'on lui demande quelque chose.

    3/ Pour éviter ton erreur, et pour les tests d'une manière générale, il est préférable de placer la constante à gauche de l'opérateur ==. De cette manière, si on oublie un '=', le compilateur remarque l'erreur. Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (variable == 5);
    // devient
    if (5 == variable);
    // et avec l'erreur :
    if (5 = variable);



    4/ Il y a une erreur d'algorithme ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
             while(j==i||num==tab[j])
                {
                   if (num==tab[j])
                       {
                       resultat=true;
                       }
                   else
                       {
                       tab[i]=num;
                       }
                 j++;
                 }
    Il ne fait pas ce que je pense qu'il devrait faire. Tu devrais le reprendre/refaire, sans chercher à l'optimiser trop rapidement
    Exemple de saisie qui mène à un comportement inatendu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Nombre de votants :
    5
    Numéro du votant : 11
    Numéro du votant : 12
    Numéro du votant : 14
    Numéro du votant : 12 // vote accepté, doublon non remarqué par le programme !
    Numéro du votant : 13

  8. #8
    Nouveau membre du Club
    Inscrit en
    Septembre 2005
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 30
    Points : 28
    Points
    28
    Par défaut
    Merci à vous j'ai réussi à résoudre un problème mais il m'en reste un autree, et comme c'est du C je vais le mettre dans la rubrique C.

    Merci à vous tous.

    @+ jérémy

Discussions similaires

  1. Réponses: 3
    Dernier message: 12/03/2009, 18h08
  2. Débutant - Petit problème de condition
    Par RalGrana dans le forum PL/SQL
    Réponses: 4
    Dernier message: 26/12/2008, 16h36
  3. [Débutant] Problème de condition à l'affichage
    Par chipster45 dans le forum Ruby on Rails
    Réponses: 2
    Dernier message: 09/06/2008, 09h26
  4. [débutant] problème de condition dans une requete
    Par banker dans le forum Access
    Réponses: 5
    Dernier message: 22/03/2006, 13h52
  5. Réponses: 11
    Dernier message: 02/09/2003, 14h20

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