Partage
  • Partager sur Facebook
  • Partager sur Twitter

en difficulté dans un exercice France IOI

    19 juin 2017 à 16:16:59

    Bonjour,

    J'ai un souci avec l'exercice "Étude de marché", ci-dessous le libellé de l'exercice:



    Afin de partir dans un long voyage, à la recherche de produits exotiques, les marchands prévoient toujours d'emmener avec eux des produits locaux afin de les vendre au cours du trajet. Pour décider quels produits emmener, ils ont fait une petite étude de marché auprès de la population, en demandant à chaque personne d'indiquer LE produit qu'elle serait prête à acheter (celui qu'elle préfère donc).
    Ce que doit faire votre programme :

    On vous donne le numéro du produit préféré par différentes personnes. Écrivez un programme qui indique pour chaque numéro de produit, le nombre de personnes dont c'est le produit préféré.
    Entrée

    Les deux premiers entiers à lire sont le nombre total de produits nbProduits et le nombre de personnes nbPersonnes (nbPersonnes <= 1000) ayant exprimé leur souhait.

    On lit ensuite nbPersonnes entiers : les numéros des produits préférés des différentes personnes. Les produits sont numérotés de 0 à nbProduits - 1.
    Sortie

    Vous devez afficher nbProduits entiers : pour chaque produit dans l'ordre de leur numéro, affichez le nombre de personnes qui le préfèrent.

    Je n'arrive pas à additionner les avis des personnes qui préfèrent les produits.

    À priori j'ai le début, mes boucles semblent correctes mais je rame pour obtenir le résultat espéré.

    Une âme charitable pourrait-elle m'assister?

    Merci.


    int main(int argc, char* argv[])
    {
    int nbPersonnes, nbProduits, numProduits=0, i=0, avis=0;
    int tableau[0] = {0};
    
    scanf("%d%d", &nbProduits, &nbPersonnes);
    
    for (i=0; i<nbPersonnes; i++)
        {
         scanf("%d", &avis);
        }
    
    for (i=0; i<nbProduits; i++)
        for (avis=0; avis<nbPersonnes; avis++)
    
    printf("%d \n", tableau[avis]);
    return 0;
    }


    • Partager sur Facebook
    • Partager sur Twitter
    https://openclassrooms.com/forum/sujet/help-recherche-mentor
      19 juin 2017 à 16:32:57

      Bonjour,

      ligne 4: un tableau de taille 0 ne peut rien contenir! le compilo aurait du afficher un avertissement...

      Ligne 6 il faut un espace entre les %d: scanf("%d %d", ...) sinon le scanf ne peut pas distinguer les deux nombres correctement.

      ligne 10: un petit printf avant histoire de voir a quelle numero est rendu la saisie est un plus (et permet de détecter le probleme de la ligne 6 aussi!)

      (ps: pas lu ce que demandes l'exercice, juste regardé le code)

      -
      Edité par breizhbugs 19 juin 2017 à 16:36:46

      • Partager sur Facebook
      • Partager sur Twitter
      ** La doc, c'est comme le PQ: ça sert à se démerder tout seul **
        20 juin 2017 à 0:15:26

        breizhbugs a écrit:

        Ligne 6 il faut un espace entre les %d: scanf("%d %d", ...) sinon le scanf ne peut pas distinguer les deux nombres correctement.

        Avec ou sans espace, ça revient au même.
        • Partager sur Facebook
        • Partager sur Twitter
          20 juin 2017 à 9:21:34

          Salut

          Il faudrait deja que tu stockes les avis dans un tableau, la ton programme retient que le dernier (perso je remplacerais avis par numPdtPrefere).Puis tu trie ton tableau et en parcourant le tableau tu affiche pour chaque valeur le nbre de fois ou elle apparait.

          C'est comme ca que je ferais mais il doit y avoir d'autre solutions (ptetre meilleures).

          • Partager sur Facebook
          • Partager sur Twitter
            20 juin 2017 à 14:24:12

            Bonjour,

            Merci pour vos réponses.

            @thetui, comment fait-on justement pour afficher le npmbre de fois où apparaissent les valeurs?

            • Partager sur Facebook
            • Partager sur Twitter
            https://openclassrooms.com/forum/sujet/help-recherche-mentor
              20 juin 2017 à 17:50:17

              tu crée un compteur qui vaut 1 et un entier pour stocker le numero de la premiere case

              tu parcours ton tableau a partir de la deuxieme case:

              tant que tu trouves le meme numero tu incrementes ton compteur

              si c'est un nouveau numero tu le stocke tu affiche le compteur et tu le remet a 1

              • Partager sur Facebook
              • Partager sur Twitter
                21 juin 2017 à 9:47:40

                Bonjour et Merci,

                ça donnerait quelque chose comme ça?

                int main(int argc, char* argv[])
                {
                int nbPersonnes, nbProduits, numProduits=0, i=0, j=0, compteur=0;
                int tableau[1000] = {0};
                
                scanf("%d%d", &nbProduits, &nbPersonnes);
                
                for (i=0; i<nbPersonnes; i++)
                    {
                     scanf("%d", &tableau[numProduits]);
                    }
                
                for (i=0; i<nbProduits; i++)
                    {
                        for (numProduits=0; numProduits<=nbProduits; numProduits++)
                        {
                            if (tableau[numProduits]==i)
                            compteur++;
                        }
                
                        printf("%d \n", tableau[numProduits]);
                    }
                
                return 0;
                }
                



                • Partager sur Facebook
                • Partager sur Twitter
                https://openclassrooms.com/forum/sujet/help-recherche-mentor
                  21 juin 2017 à 9:52:32

                  C'est pas ce que je proposais mais ta solution me parait bonne.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    22 juin 2017 à 8:56:37

                    Bonjour,

                    Il doit cependant manquer quelque chose, ça n'additionne rien...

                    • Partager sur Facebook
                    • Partager sur Twitter
                    https://openclassrooms.com/forum/sujet/help-recherche-mentor
                      22 juin 2017 à 9:19:41

                      Ligne 22 il faut afficher la variable compteur puis tu la remet a zero au debut de ta boucle.

                      Mais dans ton programmes tu compte le nbre de produit pour tout les numero a partie de zero, alors que tu doit compter que pour les numero de produit presents.

                      -
                      Edité par thetui 22 juin 2017 à 9:23:32

                      • Partager sur Facebook
                      • Partager sur Twitter
                        22 juin 2017 à 10:24:51

                        même en mettant la valeur à  1 je n'obtiens pas les bons résultats.

                        for (i=0; i<nbProduits; i++)
                            {
                                for (numProduits=1; numProduits<nbPersonnes; numProduits++)
                                {
                                    if (tableau[numProduits]==i)
                                    compteur++;
                                }
                                printf("%d \n", compteur);
                            }



                        • Partager sur Facebook
                        • Partager sur Twitter
                        https://openclassrooms.com/forum/sujet/help-recherche-mentor
                          22 juin 2017 à 10:41:02

                          for (i=0; i<nbProduits; i++)
                              {
                                  compteur = 0;
                                  for (numProduits=0; numProduits<nbPersonnes; numProduits++)
                                  {
                                      if (tableau[numProduits]==i)
                                      compteur++;
                                  }
                                  if(compteur != 0) //pour n'afficher que les numéros de produit existant
                                      printf("%d \n", compteur);
                              }

                           Et dans ton poste des hier a 9h47 c'est &tableau[i] dans ton scanf() a la ligne 10

                          -
                          Edité par thetui 22 juin 2017 à 10:43:29

                          • Partager sur Facebook
                          • Partager sur Twitter

                          en difficulté dans un exercice 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