Partage
  • Partager sur Facebook
  • Partager sur Twitter

tableau c exo 1

Sujet résolu
    26 août 2021 à 17:59:18

    #include <stdio.h>
    #include <stdlib.h>
    
    int sommeTableau(int tableau[],int tailleDetableau);
    int main()
    {
        int tableau[3]={3,8,2};
        printf("%d",sommeTableau(tableau,3));
        return 0;
    }
    
    int sommeTableau(int tableau[],int tailleDetableau)
    {
        for(int i=tailleDetableau-1;i>0;i--)
        {
            tableau[i-1]+=tableau[i];
            printf("%d",tableau[0]);
    
        }
    }
    


    bonjour , j ai essaye de faire l exo 1 du chapitre des tableaux( language c) le cours de mr nebra j ai essaye avec ce prg ms pas de resultat,veuillez me guider vers l'erreur svp.en fait ,il me donne la valeur 12 qui correspond àla premiere valeur de tableau[0] et merci d avance

    -
    Edité par NouhaylaZakaria 26 août 2021 à 18:21:53

    • Partager sur Facebook
    • Partager sur Twitter
      26 août 2021 à 18:00:11

      Utilises le bouton code </> du forum pour poster ton code ! (tu peux modifier ton post, lien modifier en haut à droite du post).
      Ta fonction est censé retourner la somme des éléments du tableau, or elle ne retourne rien !
      Il faut faire un retour sur le chapitre des fonctions ou il y a l'exemple de la fonction triple qui retourne le triple de la valeur passé en paramètre :
      int triple(int nombre)
      {
          int resultat = 0;
      
          resultat = 3 * nombre;  // On multiplie le nombre fourni par 3
          return resultat;       // On retourne la variable resultat qui vaut le triple de nombre
      }

      -
      Edité par rouIoude 26 août 2021 à 18:07:55

      • Partager sur Facebook
      • Partager sur Twitter
      ...
        26 août 2021 à 18:12:48

        C'est une façon peu orthodoxe de faire la somme des éléments d'un tableau.
        Le pire est que ça fonctionne ...
        D'habitude, on initialise une variable à 0 et on lui ajoute tous les éléments du tableau dans la boucle.
        Et comme l'a dit RouIoude, il faut faire un return de cette valeur.
        • Partager sur Facebook
        • Partager sur Twitter

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

          26 août 2021 à 18:16:26

          merci rouloude et Pierre j ai ajoute return ms le prg retourne 3 or la somme est 13 je n ai pas compris d ou viens l erreur

          -
          Edité par NouhaylaZakaria 26 août 2021 à 18:19:27

          • Partager sur Facebook
          • Partager sur Twitter
            26 août 2021 à 18:21:42

            Attends, ce n'est pas fini ...
            Si j'appelle deux fois la fonction, je devrais obtenir le même résultat, non?
            Ce ne sera pas le cas, car tu as détruit tous les éléments de ton tableau sauf le dernier.
            Essaies de faire comme j'ai dit.
            Tu auras d'autres exercices du genre à faire et il est important que ton tableau soit intègre.
            • Partager sur Facebook
            • Partager sur Twitter

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

              26 août 2021 à 18:33:00

              PierrotLeFou a écrit:

              Attends, ce n'est pas fini ...
              Si j'appelle deux fois la fonction, je devrais obtenir le même résultat, non?
              Ce ne sera pas le cas, car tu as détruit tous les éléments de ton tableau sauf le dernier.
              Essaies de faire comme j'ai dit.
              Tu auras d'autres exercices du genre à faire et il est important que ton tableau soit intègre.

              merci pierre vs avez raison ,j ai essaye ta methode ms elle ne marche pas voici mon nouveau code
              #include <stdio.h>
              #include <stdlib.h>
              
              int sommeTableau(int tableau[],int tailleDetableau);
              int main()
              {
                  int tableau[3]={3,8,2};
                  printf("%d",sommeTableau(tableau,3));
                  return 0;
              }
              
              int sommeTableau(int tableau[],int tailleDetableau)
              {
                  for(int i=tailleDetableau-1;i>=0;i--)
                  {
                      int somme=0;
                      somme+=tableau[i];
                      return("%d",somme);
              
                  }
              } 

              elle retourne la derniere valeur du tableau

              -
              Edité par NouhaylaZakaria 26 août 2021 à 18:34:08

              • Partager sur Facebook
              • Partager sur Twitter
                26 août 2021 à 18:49:39

                Il faut initialiser somme avant la boucle et non dans la boucle.
                Tu dois retourner somme et rien d'autre.

                Et tu dois le faire hors de la boucle.

                -
                Edité par PierrotLeFou 26 août 2021 à 18:58:13

                • Partager sur Facebook
                • Partager sur Twitter

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

                  26 août 2021 à 18:57:06

                  Il faut d'abord faire la somme des éléments du tableau, et ce n'est qu'une fois cette somme terminée que tu retourne le résultat.

                  return ne peux retourner qu'un seul résultat, prend modèle sur la fonction triple pour retourner ton résultat.

                  • Partager sur Facebook
                  • Partager sur Twitter
                  ...
                    26 août 2021 à 19:06:58

                    Je n'ai pas fait attention au début. Ça peut être facile pour un débutant de se mêler avec les { }
                    Et pourquoi commencer la boucle par la fin? Ça marche, mais bon ...
                    for(int i=0; i < tailleDuTableau; i++) {
                    • Partager sur Facebook
                    • Partager sur Twitter

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

                      26 août 2021 à 19:08:00

                      PierrotLeFou a écrit:

                      Il faut initialiser somme avant la boucle et non dans la boucle.
                      Tu dois retourner somme et rien d'autre.

                      oui j ai beau essaye ms sans resultat,voici mon nouveau code
                      #include <stdio.h>
                      #include <stdlib.h>
                      
                      int sommeTableau(int tableau[],int tailleDetableau);
                      int main()
                      {
                          int tableau[3]={3,8,2};
                          return sommeTableau(tableau,3);
                          return 0;
                      }
                      
                      int sommeTableau(int tableau[],int tailleDetableau)
                      {
                          int somme=0;
                          for(int i=0;i<tailleDetableau;i++)
                          {
                      
                              somme+=tableau[i];
                              return somme;
                      
                          }
                      }
                      
                      elle retourne 3


                      • Partager sur Facebook
                      • Partager sur Twitter
                        26 août 2021 à 19:12:40

                        Tu n'as pas vu ma correction?
                        Il faut mettre le return entre les deux accolades fermées }
                        • Partager sur Facebook
                        • Partager sur Twitter

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

                          26 août 2021 à 19:23:13

                          merci pierre et rouloude enfin le prg a marche .

                          voici deux versions du prg

                          #include <stdio.h>
                          #include <stdlib.h>
                          
                          int sommeTableau(int tableau[],int tailleDetableau);
                          int main()
                          {
                              int tableau[3]={3,8,2};
                              sommeTableau(tableau,3);
                              return 0;
                          }
                          int sommeTableau(int tableau[],int tailleDetableau)
                          {
                              int somme=0;
                              for(int i=0;i<tailleDetableau;i++)
                              {
                          
                                  somme+=tableau[i];
                              }
                               return (somme);
                          }

                          et la deuxieme

                          #include <stdio.h>
                          #include <stdlib.h>
                          
                          int sommeTableau(int tableau[],int tailleDetableau);
                          int main()
                          {
                              int tableau[3]={3,8,2};
                              sommeTableau(tableau,3);
                              return 0;
                          }
                          
                          int sommeTableau(int tableau[],int tailleDetableau)
                          {
                          
                              for(int i=tailleDetableau-1;i>0;i--)
                              {
                          
                                  tableau[i-1]+=tableau[i];
                              }
                               return (tableau[0]);
                          }
                          




                          -
                          Edité par NouhaylaZakaria 26 août 2021 à 20:52:10

                          • Partager sur Facebook
                          • Partager sur Twitter
                            26 août 2021 à 20:44:21

                            C'est beaucoup mieux, mais tu devrais afficher le résultat dans la fonction main au lieu de le faire retourner par la fonction main.

                            ( il faut savoir que quand tu as deux return dans une fonction, seule le premier sera exécuté. )

                            • Partager sur Facebook
                            • Partager sur Twitter
                            ...
                              26 août 2021 à 20:45:51

                              oui d accord merci rouloude

                              stp pour le deuxieme exo j ai essaye un prg pour calculer la moyenne et quand j execute le prg me donne une valeur entiere meme si j ai defini moyenne comme double

                              -
                              Edité par NouhaylaZakaria 26 août 2021 à 20:48:19

                              • Partager sur Facebook
                              • Partager sur Twitter
                                26 août 2021 à 21:03:27

                                Probablement qu'au moment ou tu fais la division tu as affaire encore à deux entiers. Pour avoir un résultat en double, il faut qu'au moins une des deux opérande soit un double.

                                PS : Tu as modifié ton dernier code, mais tu n'affiche toujours pas le résultat !

                                -
                                Edité par rouIoude 26 août 2021 à 21:05:37

                                • Partager sur Facebook
                                • Partager sur Twitter
                                ...
                                  26 août 2021 à 21:06:28

                                  oui effectivement j ai defini la somme comme double ms je ne comprends pas prq il me donne un entier
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    26 août 2021 à 21:57:17

                                    Sans code difficile de t'en dire plus !

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    ...
                                      26 août 2021 à 22:47:24

                                      ok voici le code
                                      #include <stdio.h>
                                      #include <stdlib.h>
                                      
                                      int sommeTableau(int tableau[],double tailleDetableau);
                                      int moyenne(int tableau[],int tailleDetableau);
                                      int main()
                                      {
                                          int tableau[3]={3.0,8.3,0.0};
                                          printf("%d", moyenne(tableau,3.0);
                                          return 0;
                                      }
                                      int sommeTableau(int tableau[],int tailleDetableau)
                                      {
                                          int somme=0;
                                          for(int i=0;i<tailleDetableau;i++)
                                          {
                                      
                                              somme+=tableau[i];
                                          }
                                           return (somme);
                                      }
                                      double moyenne(int tableau[],int tailleDetableau)
                                      {
                                          double moyenne;
                                          moyenne=sommeTableau(tableau,tailleDetableau)/(double)tailleDetableau;
                                          return moyenne;
                                      }
                                      
                                      

                                      -
                                      Edité par NouhaylaZakaria 27 août 2021 à 14:11:44

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        27 août 2021 à 1:27:45

                                        Dans ton dernier code, je ne vois pas de printf(). Comment affiches-tu tes résultats? Ça m'intrigue ...
                                        Il est préférable que ta fonction somme renvoie un entier (int) comme auparavant.
                                        Le problème avec la moyenne est qu'on veut un résultat en double. Alors, comment fait-on pour avoir un double avec deux int?
                                        Il y a quelque chose qu'on appelle "casting" qui veut dire qu'on peut convertir d'un type dans un autre.
                                        On le fait en précédant la variable (ou l'expression) à convertir avec le type de ce qu'on veut (si c'est possible).
                                        Ici je peux faire  (double) tailledetableau  pour convertir mon int en double.
                                        Ta fonction moyenne pourrait avoir l'air de ceci:
                                        return sommeTableau(tableau, tailledetableau) / (double) tailledetableau;
                                        Il suffit qu'un seul élément de l'expression soit en double pour forcer le compilateur à tout convertir en double.
                                        • Partager sur Facebook
                                        • Partager sur Twitter

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

                                          27 août 2021 à 1:30:10 - Message modéré pour le motif suivant : Merci d'utiliser le bouton code du forum pour insérer votre code


                                            27 août 2021 à 1:44:58

                                            @RhoufirAnouar:
                                            Tu arrives dans le sujet d'un autre. Tu devrais créer ton propre sujet.
                                            Pour répondre à ta question, utiliser "void" comme type pour une fonction veut dire qu'on ne veut rien retourner.
                                            Le compilateur va te donner une erreur si tu essaies de récupérer la valeur de retour.
                                            • Partager sur Facebook
                                            • Partager sur Twitter

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

                                              27 août 2021 à 1:54:53

                                              bonjour mon code utilise une fonction void ça passe ou pas ?
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                27 août 2021 à 2:20:05

                                                Est-ce que tu peux lire les réponses des autres? Je t'ai déjà répondu.
                                                • Partager sur Facebook
                                                • Partager sur Twitter

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

                                                  27 août 2021 à 9:54:17

                                                  rouIoude a écrit:

                                                  C'est beaucoup mieux, mais tu devrais afficher le résultat dans la fonction main au lieu de le faire retourner par la fonction main.

                                                  ( il faut savoir que quand tu as deux return dans une fonction, seule le premier sera exécuté. )

                                                  NouhaylaZakaria a écrit:

                                                  oui d accord merci rouloude

                                                  Il ne faut pas que dire : oui d'accord, il faut le faire ! Parce que je ne sais pas comment tu fait pour voir le résultat (main retourne un entier et ça tu ne peux pas y changer).

                                                  EDIT : J'ai vu que tu avais corrigé, ça va mieux comme cela ?!

                                                  @ RhoufirAnouar  Créés ton propre sujet ! 







                                                  -
                                                  Edité par rouIoude 27 août 2021 à 15:33:43

                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                  ...
                                                    27 août 2021 à 14:23:13

                                                    merci pierre pour ton aide enfin le code a fonctionne voici le nouveau code
                                                    #include <stdio.h>
                                                    #include <stdlib.h>
                                                    
                                                    int sommeTableau(int tableau[],int tailleDetableau);
                                                    double moyenne(int tableau[],int tailleDetableau);
                                                    int main()
                                                    {
                                                        int tableau[3]={3,8,0};
                                                        printf("%f", moyenne(tableau,3));
                                                        return 0;
                                                    }
                                                    int sommeTableau(int tableau[],int tailleDetableau)
                                                    {
                                                        int somme=0;
                                                        for(int i=0;i<tailleDetableau;i++)
                                                        {
                                                    
                                                            somme+=tableau[i];
                                                        }
                                                         return (somme);
                                                    }
                                                    double moyenne(int tableau[],int tailleDetableau)
                                                    {
                                                        double moyenne;
                                                        moyenne=sommeTableau(tableau,tailleDetableau)/(double)tailleDetableau;
                                                        return moyenne;
                                                    }

                                                    -
                                                    Edité par NouhaylaZakaria 27 août 2021 à 14:53:23

                                                    • Partager sur Facebook
                                                    • Partager sur Twitter

                                                    tableau c exo 1

                                                    × 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