Partage
  • Partager sur Facebook
  • Partager sur Twitter

difficultés avec somme des valeurs tableau

    27 juin 2020 à 12:24:25

    Bonjour,

    Je suis débutant et je suis en train de suivre ce cours : https://openclassrooms.com/fr/courses/19980-apprenez-a-programmer-en-c/15540-les-tableaux

    J'ai des difficultés à comprendre comment fonctionne la somme des valeurs d'un tableau:

    #include <stdio.h>
    #include <stdlib.h>
    
    int sommetableau (int tableau[], int tailletableau);
    
    int main(int argc, char *argv[])
    {
        int tableau [4]= {5,8,9,5};
    
        sommetableau(tableau, 4);
    
        return 0;
    }
    
    int sommetableau (int tableau[], int tailletableau)
    {
    
        int i = 0;
        int resultat = 0;
    
        for (i=0; i<tailletableau; i++)
        {
            printf("les vleurs du tableau sont %d\n", *tableau);
            printf("les vleurs du tableau sont %d\n", tableau[i]);
            resultat = resultat + *tableau++;
            printf("valeur de resultat est %d\n", resultat);
        }
        printf("la somme des valeurs du tableau est %d", resultat);
    return resultat;
    }
    


    Plus particulièrement avec ces deux lignes:

      printf("les vleurs du tableau sont %d\n", *tableau);
      printf("les vleurs du tableau sont %d\n", tableau[i]);

    Mes connaissances se limitent à ce cours en réalité, alors j'en profite pour poser 3 questions sur ce que je n'ai pas réussi à saisir pour le moment.

    1.

    Je crois saisir les pointeurs, par contre j'ai plus de mal avec les fonctions. Je ne comprends pas la nature de la variable tailletableau (ou des équivalents qq soit la fonction). Ce que je crois comprendre :p: c'est qu'elle sert de "chemin" aux futures variables qui vont utiliser la fonction. Une sorte d'exemple. Mais je ne comprends pourquoi elle n'est pas déclarée ou définie... L'est-elle ?

    2.

    Je n'arrivais pas à indiquer une formule pour la somme, alors j'en ai pris une sur le forum :

    resultat = resultat + tableau[i]; 

    Sans trop savoir comment l'expliquer. Mais ça n'a pas marché...

    Du coup j'ai modifié avec ce qui me paraissait logique, mais si quelqu'un peut m'expliquer clairement, ça m'aiderait beaucoup.

    3.

    Pour finir, je n'ai pas complètement compris non plus la différence entre une fonction void et int. Alors j'ai compris qu'une fonction void ne renvoyait rien, et se contentait d'afficher, mais !

    https://openclassrooms.com/fr/courses/19980-apprenez-a-programmer-en-c/14997-les-fonctions#/id/r-2188714

    Je ne comprends pas la différence entre :

    • Notre fonction nommée XXXX va prendre deux paramètres : la largeur et la hauteur. Elle renverra l'aire. (fonction double dans le cours)
    • Dans ce cas, la fonction ne renverrait plus rien, elle se contenterait de calculer l'aire et de l'afficher immédiatement. (fonction void dans le cours)

    Si quelqu'un peut éclairer mes lanternes, merci encore ! :D

    A+

    • Partager sur Facebook
    • Partager sur Twitter
      27 juin 2020 à 14:21:32

      Une bonne relecture du cours s'impose !

      Ce que je te propose, avant de faire la somme du tableau, c'est de faire une fonction qui affiche les éléments du tableau !

      Ton code est trop tordu, tu ne peux pas utiliser les crochets et le déréférencement ensemble surtout que tu incrémentes le pointeur ! (Ça compile, le code est syntaxiquement correcte, mais alors c'est loin de faciliter la compréhension). 

      • Partager sur Facebook
      • Partager sur Twitter
        27 juin 2020 à 16:47:31

        Salut rouloude, merci pour ta réponse. J'ai bien sûr relu le cours plusieurs fois. Tu remarqueras d'ailleurs que la fonction affiche les valeurs du tableau : 5, 8, 9 et 5.

        J'ai écrit plusieurs printf pcq je voulais voir et comprendre la différence entre:

        printf("les vleurs du tableau sont %d\n", *tableau);
        printf("les vleurs du tableau sont %d\n", tableau[i]);


        Ensuite je veux bien te croire sur parole quand tu me dis que le code est tordu, mais est-ce possible de détailler un peu ? des choses qui peuvent te paraître évidentes ne le sont pas pour moi :p, je débute. 80% de ce code est basé sur ce qu'on trouve dans le cours. Et comme je l'ai déjà noté, ma seule modification est:

        resultat = resultat + *tableau++;

        que j'ai modifié d'une ligne trouvée sur le forum. Et et je ne suis pas persuadé de comprendre pourquoi cela fonctionne.

        Merci encore !

        -
        Edité par SiVl 27 juin 2020 à 16:48:14

        • Partager sur Facebook
        • Partager sur Twitter
          27 juin 2020 à 17:20:38

          Dans ce cas fait deux fonctions une avec les crochets et une en déréférencent le pointeur, mais ne mélange pas les deux dans la même fonction.

          C'est le fait de mélanger les deux qui est tordu !

          SiVl a écrit:

          Tu remarqueras d'ailleurs que la fonction affiche les valeurs du tableau : 5, 8, 9 et 5.

          Bien sur que j'y ai remarqué. Mais, c'est tout mélangé dans ta fonction, faut y mettre de l'ordre. Il faut savoir que la fonction somme ne devrait normalement rien afficher, elle doit juste retourner la somme !

          • Partager sur Facebook
          • Partager sur Twitter
            27 juin 2020 à 17:38:32

            Aaaah j'ai pigé, merci !!
            • Partager sur Facebook
            • Partager sur Twitter
              27 juin 2020 à 18:01:15

              Fonction d'affichage du tableau : (Tu n'as pas voulu la faire) !

              #include <stdio.h>
              
              void afficheTableau_1(int tab[], int taille)
              {
                  for(int i=0; i<taille; i++)
                  {
                      printf("%d  ", tab[i]);
                  }
              }
              
              void afficheTableau_2(int tab[], int taille)
              {
                  while(taille)
                  {
                    printf("%d  ", *tab);
                    taille--;
                    tab++;
                  }
              }
              
              void afficheTableau_3(int tab[], int taille)
              {
                  while(taille--) printf("%d  ", *tab++);
              }
              
              int main(int argc, char *argv[])
              {
                  int tableau [4]= {5,8,9,5};
              
                  afficheTableau_1(tableau, 4);
                  puts("\n------------------");
                  afficheTableau_2(tableau, 4);
                  puts("\n------------------");
                  afficheTableau_3(tableau, 4);
                  
                  return 0;
              }

              La 1 classique avec for.

              La 2 en utilisant le pointeur que l'on incrémente a chaque tour.

              La 3 C'est la même que la 2 en condensé, à éviter quand on débute et même quand on débute pas.

              Toi tu faisais le mélange de la 1 et la 2 dans la même fonction. C'est donc difficile de s'y retrouver.



              • Partager sur Facebook
              • Partager sur Twitter
                27 juin 2020 à 18:51:01

                @rouloude:
                Ou bien je ne l'ai pas vu, ou bien tu ne l'as pas mentionné.
                La fonction retourne bien une valeur, mais le main ne la saisit pas.
                C'est vrai que ta fonction d'affichage 3 n'est pas conseillée pour un débutant. Pour les autres ...
                • Partager sur Facebook
                • Partager sur Twitter

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

                  27 juin 2020 à 18:57:41

                  PierrotLeFou a écrit:

                  @rouloude:
                  Ou bien je ne l'ai pas vu, ou bien tu ne l'as pas mentionné.
                  La fonction retourne bien une valeur, mais le main ne la saisit pas.
                  Je ne comprend pas ce que tu veux dire ?

                  • Partager sur Facebook
                  • Partager sur Twitter
                    28 juin 2020 à 0:57:43

                    rouloude a écrit:

                    PierrotLeFou a écrit:

                    @rouloude:
                    Ou bien je ne l'ai pas vu, ou bien tu ne l'as pas mentionné.
                    La fonction retourne bien une valeur, mais le main ne la saisit pas.

                    Je ne comprend pas ce que tu veux dire ?

                    La ligne 10 de son code. Il n'y a pas valeur = sommetableau()

                    -
                    Edité par PierrotLeFou 28 juin 2020 à 0:59:46

                    • Partager sur Facebook
                    • Partager sur Twitter

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

                      28 juin 2020 à 10:41:49

                      Ah ok ! j'avais bien vu, mais j'ai voulu revenir une étape en arrière sur un simple affichage du tableau, sa fonction étant trop tordu, comme je lui avait dit. Comme je parlais d’affichage je pensais que tu parlais de mes fonctions c'est pour cela que je ne comprenais pas.

                      rouloude a écrit:

                      Il faut savoir que la fonction somme ne devrait normalement rien afficher, elle doit juste retourner la somme !

                       Je lui ai précisé ce que devait faire la fonction sommetableau. Après j'aurais pu lui donner la solution toute cuite.

                      -
                      Edité par rouloude 28 juin 2020 à 10:46:00

                      • Partager sur Facebook
                      • Partager sur Twitter
                        28 juin 2020 à 14:51:51

                        D'accord avec l'idée que la fonction d'affichage doit être distincte de la fonction de somme. LePO a peutêtre voulu faire du debug pour comprendre.
                        C'est un exemple de ma blague: pourquoi faire simple quand on peut faire compliqué ...
                        • Partager sur Facebook
                        • Partager sur Twitter

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

                          28 juin 2020 à 17:49:07

                          rouloude a écrit:

                          Jacques Rouxel !

                          Merci pour la précision. :)

                          • Partager sur Facebook
                          • Partager sur Twitter

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

                          difficultés avec somme des valeurs 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