Partage
  • Partager sur Facebook
  • Partager sur Twitter

l'espion est démasqué! aide france ioi

    11 décembre 2020 à 16:04:22

    Bonjour a tous je suis un peu bloqué a cette exo 

    Grâce à un certain nombre d'informateurs plus ou moins fiables, le chef de la police a recueilli des indications qui devraient lui permettre enfin de démasquer cet espion qui lui échappe depuis des semaines. La population de la ville étant relativement importante, il vous demande votre aide afin d'automatiser un peu les choses. Vous devez estimer la probabilité qu'une personne soit un espion.

    Ce que doit faire votre programme :

    Votre programme doit lire entier : un nombre de personnes à considérer. Ensuite, pour chaque personne, il doit lire son signalement sous la forme de cinq entiers : sa taille en centimètres, son âge en années, son poids en kilogrammes, un entier valant 1 si la personne possède un cheval et 0 sinon, et un entier valant 1 si la personne à les cheveux bruns et 0 sinon.

    On veut déterminer pour chaque personne à quel point elle correspond aux 5 critères suivants :

    • il aurait une taille supérieure ou égale à 178 cm et inférieure ou égale à 182 cm ;
    • il aurait au moins 34 ans ;
    • il pèserait strictement moins de 70 kg ;
    • il n'a pas de cheval ;
    • il a les cheveux bruns.

    Lorsque cela n'est pas précisé explicitement, les inégalités sont au sens large.

    Pour chaque personne, vous devez tester tous les critères. S'ils sont vérifiés tous les 5, vous devez afficher « Très probable ». Si seulement 3 ou 4 sont vérifiés, vous devez afficher « Probable ». Si aucun n'est vérifié, vous devez afficher « Impossible », et dans les autres cas, vous devez afficher « Peu probable ».

    Exemple

    entrée :

    1
    180
    40
    65
    0
    1

    sortie :

    Très probable
    #include <stdio.h>
    #define repeat(nb) for (int _loop = 1, _max = (nb); _loop <= _max; _loop++)
    #include <stdbool.h>
    
    
    
    int nbPersonnes;
    int taille;
    int  age;
    int  poids;
    int Cheval;
    int CheveuxBruns;   
    int  piste=0;
    
    int main()
    {
          scanf("%d", &nbPersonnes);
       
    
       repeat (nbPersonnes) 
       {
       scanf("%d %d %d %d %d",&taille,&age,&poids,&Cheval,&ChevalBruns);
       
       if(taille>=178 && taille<=182)
       {
          piste++
       }
       if(age<=34)
       {
          piste++;
       }
       
       if(poids<70)
       {
          piste++;
       }
       if(Cheval==true)
       {
          piste++;
       }
       
      if(ChevalBruns==false)
      {
         piste++;
       }
       
      } 
       
       if(piste==5)
       {
          printf("Très probable");
          
       }
       
       else if(piste==3&& piste==4)
       {
          printf("Probable");
       }
       
       else if(piste==0)
       {
          printf("Impossible");
       }
       
       
      else{
            printf("Peu probable");
           }
            
    
       
    }      
          

    il met une erreur de déclaration  sur ChevalBruns  ?

    • Partager sur Facebook
    • Partager sur Twitter
      11 décembre 2020 à 16:10:23

      CheveuxBruns

      Edit: le test ligne 55 n'est pas correct et, perso, j'aurais fait un switch

      Et indente convenablement ton code tdb

      -
      Edité par edgarjacobs 11 décembre 2020 à 16:26:29

      • Partager sur Facebook
      • Partager sur Twitter

      On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

        11 décembre 2020 à 16:39:33

        #include <stdio.h>
        #define repeat(nb) for (int _loop = 1, _max = (nb); _loop <= _max; _loop++)
        #include <stdbool.h>
        
        
        
        int nbPersonnes;
        int taille;
        int  age;
        int  poids;
        int Cheval;
        int  piste=0;   
        int CheveuxBruns;
        
        
        
        int main()
        {
            scanf("%d", &nbPersonnes);
        
        
           repeat (nbPersonnes) 
           {
           
           scanf("%d %d %d %d %d",&taille,&age,&poids,&Cheval,&CheveuxBruns);
        
           if(taille>=178 && taille<=182)
           {
              piste++;
           }
           if(age>=34)
           {
              piste++;
           }
        
           if(poids<70)
           {
              piste++;
           }
           if(Cheval==0)
           {
              piste++;
           }
        
          if(CheveuxBruns==1)
          {
             piste++;
           }
           
         
           
           if(piste==5)
           {
              printf("Très probable\n");
        
           }
        
           else if((piste==3) || (piste==4))
           {
              printf("Probable\n");
           }
        
           else if(piste==0)
           {
              printf("Impossible\n");
           }
        
        
          else 
           {
                printf("Peu probable\n");
               }
        
        }
        
        }
              
           

        merci d'avoir répondu j'ai rectifier mon code je suis la 67% je vois pas ou est le restant .
        on peut pas a ce niveaux 1 utiliser le switch .
        • Partager sur Facebook
        • Partager sur Twitter
          11 décembre 2020 à 16:44:15

          doub01 a écrit:

          on peut pas a ce niveaux 1 utiliser le switch .


          Mais si:

          switch(piste) {
          	case 5: 
          		printf("Très probable\n");
          		break;
          	case 3:
          	case 4:
          		printf("Probable\n");
          		break;
          	case 0:
          		printf("Impossible\n");
          		break;
          	default:
                  printf("Peu probable\n");
          		break;
          }
           


          Edit: pour l'indentation de ton code, rien de neuf.... >_<

          -
          Edité par edgarjacobs 11 décembre 2020 à 16:49:51

          • Partager sur Facebook
          • Partager sur Twitter

          On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

            11 décembre 2020 à 17:11:39

            doub01 a écrit:

            merci d'avoir répondu j'ai rectifier mon code je suis la 67% je vois pas ou est le restant .
            on peut pas a ce niveaux 1 utiliser le switch .


            Hello,

            et que vaut piste quand tu recommences ?

            Indente ton code …

            Pas de switch ? Et un tableau ?

            const char *resultat[] = {
                [0] = "Impossible",
                [1] = "Peu probable",
                [2] = "Peu probable",
                [3] = "Probable",
                [4] = "Probable",
                [5] = "Très probable",
            };
            
            ....
            
                puts(resultat[piste]);
            ....
            



            -
            Edité par White Crow 11 décembre 2020 à 17:26:43

            • Partager sur Facebook
            • Partager sur Twitter
              11 décembre 2020 à 17:25:33

              edgarjacobs a écrit:

              doub01 a écrit:

              on peut pas a ce niveaux 1 utiliser le switch .



              Je n'avais pas capté que le switch() était interdit. C'est quoi c'est sites à la con qui imposent leurs règles sous peine de..... de quoi au fait ?

              -
              Edité par edgarjacobs 11 décembre 2020 à 17:26:22

              • Partager sur Facebook
              • Partager sur Twitter

              On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

                11 décembre 2020 à 17:29:18

                edgarjacobs a écrit:

                edgarjacobs a écrit:

                doub01 a écrit:

                on peut pas a ce niveaux 1 utiliser le switch .



                Je n'avais pas capté que le switch() était interdit. C'est quoi c'est sites à la con qui imposent leurs règles sous peine de..... de quoi au fait ?

                -
                Edité par edgarjacobs il y a moins de 30s


                En fait France IOI ne l'interdit pas. Sur les premiers problèmes pour débutants/apprenants ils y vont doucement, et là ça doit-être la partie conditionnelle juste avant le «mais on peut faire plus simple avec un switch». Il n'y a aucune sanction ou pénalité.

                Edit: http://www.france-ioi.org/algo/task.php?idChapter=648&idTask=1982

                -
                Edité par White Crow 11 décembre 2020 à 17:32:17

                • Partager sur Facebook
                • Partager sur Twitter
                  11 décembre 2020 à 17:38:04

                  Ou bien le prof veut forcer les gens à se creuser les méninges, ou bien il ne veut pas qu'ils progressent ...
                  Le truc de White Crow est bien. Je l'utilise constamment en Python.
                  Je n'ai pas de prof pour m'emmerder, donc j'aurais préféré le switch.
                  Mais le truc du tableau de messages est sans doute un peu plus rapide (pour ce queça vaut ...)
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Le Tout est souvent plus grand que la somme de ses parties.

                    11 décembre 2020 à 17:41:02

                    @White Crow: merci pour l'explication. Mais quand j'ai appris à programmer (il y a longtemps), on ne m'a pas obligé à utiiliser une macro repeat, mais on m'a appris à utiliser un for, un while et un do while....
                    • Partager sur Facebook
                    • Partager sur Twitter

                    On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

                      11 décembre 2020 à 17:43:00

                      edgarjacobs a écrit:

                      @White Crow: merci pour l'explication. Mais quand j'ai appris à programmer (il y a longtemps), on ne m'a pas obligé à utiiliser une macro repeat, mais on m'a appris à utiliser un for, un while et un do while....


                      lol pareil, mais bon je ne suis pas pédagogue ; je ne sais pas ce que cette méthode vaut.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        11 décembre 2020 à 19:13:16

                        Si j'ai bien compris, il ne faut pas utiliser 'switch' parce que cette instruction n'a pas été vue en cours. Bien sûr que la solution de White Crow est mieux, mais est-elle réalisable par quelqu'un qui en est au tout début ? (Mais je ne me plains pas : c'est pour lire ce genre de réponse que je viens ici.)
                        • Partager sur Facebook
                        • Partager sur Twitter
                          11 décembre 2020 à 19:44:20

                          Moi également, je me suis souvent plaint de la macro repeat().
                          Il faut donner des exercices en fonction des connaissances déja acquises, pas forcer les étudiants d'aller 3 cours plus loin et revenir pour l'exercice.
                          Je pense que c'est au prof d'être pédagogue, pas à l'étudiant.
                          Et ça vaut même si le prof est France IOI.
                          • Partager sur Facebook
                          • Partager sur Twitter

                          Le Tout est souvent plus grand que la somme de ses parties.

                            1 août 2021 à 15:13:53

                            • bonjour je relance le sujet je reprend france ioi la je trouver pas cette solution 

                            • #include <stdio.h>
                              #define repeat(nb) for (int _loop = 1, _max = (nb); _loop <= _max; _loop++)
                              #include <stdbool.h>
                              
                              
                              
                              int nbPersonnes;
                              int taille;
                              int  age;
                              int  poids;
                              int Cheval;
                              int  piste=0;   
                              int CheveuxBruns;
                              
                              
                              
                              int main()
                              {
                                  scanf("%d", &nbPersonnes);
                              
                              
                                 repeat (nbPersonnes) 
                                 {
                                 
                                 scanf("%d %d %d %d %d",&taille,&age,&poids,&Cheval,&CheveuxBruns);
                              
                                 if(taille>=178 && taille==182)
                                 {
                                    piste++;
                                 }
                                 if(age<34)
                                 {
                                    piste++;
                                 }
                              
                                 if(poids<70)
                                 {
                                    piste++;
                                 }
                                 if(Cheval==0)
                                 {
                                    piste++;
                                 }
                              
                                if(CheveuxBruns==1)
                                {
                                   piste++;
                                 }
                                 
                               
                                 
                                 if(piste==5)
                                 {
                                    printf("Très probable\n");
                              
                                 }
                              
                                 else if((piste==3) || (piste==4))
                                 {
                                    printf("Probable\n");
                                 }
                              
                                 else if(piste==0)
                                 {
                                    printf("Impossible\n");
                                 }
                              
                              
                                else 
                                 {
                                      printf("Peu probable\n");
                                     }
                              
                              }
                              
                              }
                                    
                                 
                            • Partager sur Facebook
                            • Partager sur Twitter
                              1 août 2021 à 15:36:13

                              Hello,

                              Quand je dis qu'initialiser une variable lors de la déclaration, ce n'est pas (souvent) nécessaire. Tu oublies de mettre piste à zéro à la fin du do....while. Tu ferais mieux de ne pas l'initialiser et de lui donner la valeur zéro en ligne 24 (ou 26). Tu peux même en faire une variable locale au do....while

                              -
                              Edité par edgarjacobs 1 août 2021 à 15:37:15

                              • Partager sur Facebook
                              • Partager sur Twitter

                              On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

                                1 août 2021 à 16:48:31

                                Bonjour,

                                En plus de piste non remis à zéro.
                                Ton code ne correspond plus à l'énoncé. Les lignes 27 et 31 sont incorrectes alors qu'elles l'étaient dans ton 2nd post.

                                • Partager sur Facebook
                                • Partager sur Twitter

                                En recherche d'emploi.

                                  1 août 2021 à 18:47:20

                                  if(taille>=178 && taille==182)
                                  C'est ça inférieur ou égal à 182 ?
                                  Au lieu d'une suite de  if ... else if ... else  pour l'affichage, ici j'aurais utilisé un switch, c'est tout à fait approprié.
                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  Le Tout est souvent plus grand que la somme de ses parties.

                                    1 août 2021 à 23:49:12

                                    Moi le truc qui me choque ,ce sont les variables global !
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      2 août 2021 à 1:36:14

                                      Tout à fait d'accord, c'est stupide d'avoir des variables globales dans ce contexte. Un couper-coller est si simple.
                                      Je n'aime guère mieux la macro repeat. Pourquoi n'apprend-on pas aux gens à faire des boucles for?
                                      Et si ce n'est pas trop pour le PO:
                                      Puisque les messages sont groupés 0, 1-2, 3-4, 5, on pourrait faire un tableau de chaînes comme suit:
                                      (indentation préservée)
                                      -
                                      #include <stdio.h>
                                      int main(void) {
                                          char *message[4] = {
                                              "Impossible",
                                              "Peu probable",
                                              "Probable",
                                              "Très probable"
                                          };
                                          for(int piste=0; piste<=5; piste++)
                                              printf("%s\n", message[(piste+1)/2]);
                                      }
                                      • Partager sur Facebook
                                      • Partager sur Twitter

                                      Le Tout est souvent plus grand que la somme de ses parties.

                                      l'espion est démasqué! aide france ioi

                                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                      • Editeur
                                      • Markdown