Partage
  • Partager sur Facebook
  • Partager sur Twitter

Multiplier les valeurs d'un tableau

Sujet résolu
    6 avril 2021 à 18:58:36

    Bonjour je suis les cours en ligne et j'essaye de faire un exercice le problème c'est que je n'arrive pas à multiplier les valeurs de mon tableau puis la conserver dans ma variable résultat.

    #include <stdio.h>
    
    #include <stdlib.h>
    
    double moyenneTableau(int tableau[], int tailleTableau);
    
    int main()
    
    {
    
        int tableau[4] = {15, 13, 9, 10, 11};
    
        moyenneTableau(tableau, 4);
    
        printf("%d", moyenneTableau);
    
        return 0;
    
    }
    
    double moyenneTableau(int tableau[], int tailleTableau)
    
    {
    
        double resultat;
    
        for (int i = 0 ; i < tailleTableau ; i++)
    
        {
    
            resultat *=tableau[i];
    
        }
    
        return resultat;
    
    }



    Et ça me donne comme résultat

    4199848



    -
    Edité par EIgrind 6 avril 2021 à 19:10:03

    • Partager sur Facebook
    • Partager sur Twitter
      6 avril 2021 à 19:08:09

      // Utilises le bouton code </> du forum pour poster ton code ! (tu peux modifier ton post, lien modifier en haut à droite du post).

          printf("%f", moyenneTableau);

      Tu sais ce que tu affiches ici ? L'adresse de la fonction ! Une révision des fonctions s'impose, avant de s'attaquer aux tableaux !

      Dans ta fonction tu fais des calculs avec la variable résultat, sans l'avoir initialisée !

      Tu initialise un tableau de taille 4 avec 5 valeurs !

      Pourquoi tu appelles ta fonction moyenne si tu veux multiplier les éléments de ton tableau ?

      etc...

      -
      Edité par rouloude 6 avril 2021 à 19:14:23

      • Partager sur Facebook
      • Partager sur Twitter
        6 avril 2021 à 20:01:27

        Par ce que après je dois en faire une moyenne mais merci de tes conseils je débute, je vais reprendre les fonctions.

        Et le 0 compte donc j'ai donné 5 valeurs non ?

        Merci

        -
        Edité par EIgrind 6 avril 2021 à 20:03:55

        • Partager sur Facebook
        • Partager sur Twitter
          6 avril 2021 à 20:39:05

          Delcloque Clément a écrit:

          Et le 0 compte donc j'ai donné 5 valeurs non ?

              int tableau[4] = {15, 13, 9, 10, 11};

          Il n'y a pas de 0, mais oui, tu as donné 5 valeurs or ton tableau a une taille de 4, il ne peux donc pas loger la 5eme.

          Delcloque Clément a écrit:

          Par ce que après je dois en faire une moyenne

          Ah, parce que tu multiplies les nombres pour en faire la moyenne ? 




          • Partager sur Facebook
          • Partager sur Twitter
            6 avril 2021 à 22:18:07

            Merci pour tes conseils, ça m'a beaucoup aidé.

            Je me suis planté sur la moyenne c'est l'addition, je sais pas pourquoi j'ai pensé à la multiplication. Je me sens un peu con du coup xD.

            -------

            Bon problème résolu j'ai tous repris depuis le début et je me suis aider d'autre sujet.

            #include <stdio.h>
            #include <stdlib.h>
            
            double sommeTableau (double tableau[], double tailleTableau, double *resultat);
            static double moyenne;
            
            int main()
            {
                double tableau[4] = {15.0, 3.0, 9.0, 10.0};
                double resultat = 0;
                double *monPointeur = &resultat;
            
                sommeTableau(tableau, 4, monPointeur);
            
            
                printf("TOTAL : %f\n\n", moyenne);
            }
            
            double sommeTableau(double tableau[], double tailleTableau, double *resultat)
            {
                long i = 0;
                while (i < tailleTableau)
                {
                    *resultat += tableau[i];
                    i++;
                }
                moyenne = *resultat / tailleTableau;
            }
            

            Merci à toi Rouloude pour avoir pointé du doigt mes lacunes bonne journée

            -
            Edité par EIgrind 7 avril 2021 à 11:13:38

            • Partager sur Facebook
            • Partager sur Twitter
              7 avril 2021 à 13:11:11

              Houlà, ne t'en va pas ! Je pense que ça marche, mais ce n'est pas une façon correcte de faire (la fonction somme Tableau de type 'double' ne retourne rien, elle calcule une moyenne ce qui contredit son nom, le retour de la fonction est simulé par une variable globale, le pointeur envoyé en troisième argument ne sert à rien...). Ça suggère de probables confusions (je soupçonne que tu n'as pas compris le concept de variable locale dans une fonction).

              -
              Edité par robun 7 avril 2021 à 13:12:46

              • Partager sur Facebook
              • Partager sur Twitter
                7 avril 2021 à 14:50:08

                Ça fonctionne, mais il y a mieux, ce que je te propose, c'est de supprimer la variable globale moyenne et de la déclarer en variable locale dans la fonction main, ça va te demander d'adapter ton code en conséquence.

                • Partager sur Facebook
                • Partager sur Twitter
                  8 avril 2021 à 10:30:27

                  Bon je suis un peu une catastrophe en programmation mais je n'abandonne pas.

                  Je viens de faire ce que vous m'avez demandez.

                  Est - ce mieux comme ça ?

                  #include <stdio.h>
                  #include <stdlib.h>
                  
                  double moyenneTableau (double tableau[], double tailleTableau, double *resultat, double *moyenne);
                  
                  
                  int main()
                  {
                      double tableau[4] = {15.0, 2.0, 9.0, 10.0};
                      double resultat = 0;
                      double *monPointeur = &resultat;
                      double moyenne = 0.0;
                      double *monPointeurMoyenne = &moyenne;
                  
                      moyenneTableau(tableau, 4, monPointeur, monPointeurMoyenne);
                  
                  
                      printf("TOTAL : %f\n\n", moyenne);
                  }
                  
                  double moyenneTableau(double tableau[], double tailleTableau, double *resultat, double *moyenne)
                  {
                      long i = 0;
                      while (i < tailleTableau)
                      {
                          *resultat += tableau[i];
                          i++;
                      }
                      *moyenne = *resultat / tailleTableau;
                  }
                  



                  • Partager sur Facebook
                  • Partager sur Twitter
                    8 avril 2021 à 11:07:41

                    Salut, tu n'es pas obligé de déclarer un pointeur pour faire un passage par adresse. Envoie directement l'adresse de ta variable à ta fonction
                    • Partager sur Facebook
                    • Partager sur Twitter
                      8 avril 2021 à 11:41:12

                      Delcloque Clément a écrit:

                      Bon je suis un peu une catastrophe en programmation mais je n'abandonne pas.

                      Je viens de faire ce que vous m'avez demandez.

                      Est - ce mieux comme ça ?

                      double moyenneTableau(double tableau[], double tailleTableau, double *resultat, double *moyenne)
                      {
                          long i = 0;
                          while (i < tailleTableau)
                          {
                              *resultat += tableau[i];
                              i++;
                          }
                          *moyenne = *resultat / tailleTableau;
                      }
                      
                      • Une catastrophe ? pour le moment. La programmation c'est pas un don qui tombe du ciel, ça s'apprend. En y travaillant.  Donc c'est normal d'être "une catastrophe" au début, et c'est pas une excuse pour ne pas s'améliorer.
                      • "j'ai fait ce que vous avez dit" : en général, ceux qui disent ça n'ont pas fait tout à fait ce qu'on leur a dit, et cherchent juste à transférer la responsabilité de leurs erreurs sur ceux qui les ont aidés, ce qui est sympa.
                      • Est-ce mieux ?
                      Faut voir. La question, c'est pas que ça nous fasse plaisir (validation externe),  mais que tu penses que ce que fais est parfaitement logique, et que ça marche (confrontation avec la réalité : on doit constater que le programme fait ce qui est prévu).



                      1. la fonction est déclarée "double moyenneTableau(....)".  Il devrait donc s'y trouver une instruction qui retourne un double. Où est-elle ?
                      2. Si la valeur retournée est celle du résultat (la valeur de la moyenne), à quoi sert le dernier paramètre ?
                      Reprenons dans l'autre sens : si j'ai besoin de la moyenne d'un tableau, je fournis le tableau, et le nombre d'éléments. C'est tout. Pourquoi y a t'il 4 parametres ?

                      -
                      Edité par michelbillaud 8 avril 2021 à 11:46:22

                      • Partager sur Facebook
                      • Partager sur Twitter
                        8 avril 2021 à 13:14:38

                        Normalement, ce qui est attendu, c'est plutôt ça :

                        int main(void)
                        {
                            double tableau[4] = {15.0, 2.0, 9.0, 10.0};
                            double moyenne = moyenneTableau(tableau, 4);
                            printf("MOYENNE : %f\n\n", moyenne);
                            return 0;     // 'main' doit retourner un 'int' comme l'indique son prototype
                        }

                        Est-ce que tu vois comment écrire la fonction 'moyenneTableau' pour qu'elle s'utilise de cette façon ? (Indication : elle doit retourner un 'double', donc avoir une instruction 'return' , comme le 'main' d'ailleurs.)

                        -
                        Edité par robun 8 avril 2021 à 13:15:55

                        • Partager sur Facebook
                        • Partager sur Twitter
                          10 avril 2021 à 5:48:45

                          C'est plus juste comme ça ? 

                          #include <stdio.h>
                          #include <stdlib.h>
                          
                          double moyenneTableau (double tableau[], double tailleTableau, double moyenne);
                          
                          
                          int main()
                          {
                              double tableau[4] = {17.0, 15.0, 13.0, 10.0};
                              double moyenne = moyenneTableau(tableau, 4, moyenne);
                              printf("MOYENNE : %f\n\n", moyenne);
                              return 0;
                          }
                          
                          double moyenneTableau(double tableau[], double tailleTableau, double moyenne)
                          {
                              long i = 0;
                              int resultat = 0;
                              while (i < tailleTableau)
                              {
                                  resultat += tableau[i];
                                  i++;
                              }
                              moyenne = resultat / tailleTableau;
                              return moyenne;
                          }
                          



                          • Partager sur Facebook
                          • Partager sur Twitter
                            10 avril 2021 à 7:22:41

                            pourquoi avoir mis moyenne en paramètre ?
                            • Partager sur Facebook
                            • Partager sur Twitter
                              10 avril 2021 à 8:04:45

                              Et on fait une division entière pour une moyenne ...
                              Pourquoi le while au lieu d'un for?
                              • Partager sur Facebook
                              • Partager sur Twitter

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

                                10 avril 2021 à 8:31:25

                                Pourquoi faire un somme de doubles dans un int ?

                                Pourquoi ne pas tester avec des valeurs non entières (des demi points) ?

                                Pourquoi ne pas lire les avertissements généreusement produits par le compilateur ?

                                Pourquoi nous poser des questions, et ne pas tenir compte des réponses ?

                                Pourquoi, hein, pourquoi ?

                                -
                                Edité par michelbillaud 10 avril 2021 à 8:32:38

                                • Partager sur Facebook
                                • Partager sur Twitter

                                Multiplier les valeurs d'un tableau

                                × 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