Partage
  • Partager sur Facebook
  • Partager sur Twitter

Exercice M@teo sur Tableaux (C)

Sujet résolu
    4 novembre 2006 à 2:33:29

    Bonjour!

    J' avance petit à petit et je viens de réaliser l' exercice 1 du chapitre sur les tableaux. Pourriez vous me corriger si vous remarquez une erreur avant de poursuivre?
    Le code semble fonctionner mais je ne suis pas certain du raisonnement...

    Dans la fonction, j' ai utiliser le pointeur *tableau pour renvoyer la valeur! est ce exact?

    Merci de votre aide!

    #include <stdio.h>
    #include <stdlib.h>

    long sommeTableau (long tableau[], long tailleTableau);

    int main(int argc, char *argv[])
    {
     
      long tableau [10] = {1,2,1,1,1,1,1,1,1,1};
      sommeTableau (tableau, 10);
      printf ("%ld\n \n", *tableau);
     
      system("PAUSE");     
      return 0;
    }

    long sommeTableau (long tableau[], long tailleTableau)
    {
         long i = 0; // Variable compteur
         long z = 0; // Variable à laquelle on attribue le résultat de la somme
         for (i=0 ; i < tailleTableau ; i++)
         {
             long y = 0;
             
             y = tableau [i];
             z = z + y;
         
         }
         
         *tableau = z;
         return *tableau;
         
    }
         
             
             
    • Partager sur Facebook
    • Partager sur Twitter
      4 novembre 2006 à 4:49:47

      Hello.

      Ça fonctionne, oui, mais peut-être pas comme tu veux...

      Une erreur cependant... tu déclares ta fonction sommeTableau comme ayant un retour de type "long"... donc il faut le rattraper, ce long.... par exemple comme ça:

      ...
      long resultat;
      ...
        resultat=sommeTableau (tableau, 10);
        printf ("%ld\n \n", resultat);


      (ou alors la version "paresseux")
      printf ("%ld\n \n", sommeTableau (tableau, 10));



      Tu utilises un pointeur pour le retour... pourquoi pas, mais là tu écrases la première valeur de ton tableau (celle avec l'indice 0) est-ce vraiment ce que tu veux faire ?... l'utilisation du pointeur est techniquement correcte, mais une approche plus simple est peut-être à privilegier ici:

      long sommeTableau (long tableau[], long tailleTableau)
      {
           long i = 0; // Variable compteur
           long z = 0; // Variable à laquelle on attribue le résultat de la somme
           for (i=0 ; i < tailleTableau ; i++)
               z = z + tableau [i];

           return z;

      }


      Et puis au passage, on perd la variable y, inutile.


      Tu peux vérifier le contenu de ton tableau avant et après l'appel de ta fonction sommeTableau, simplement dans ton main avec: (en déclarant un int i; )
      for(i=0;i<10;i++)
          printf("[%d]: %ld\n",i,tableau[i]);


      Bon courage... :)
      • Partager sur Facebook
      • Partager sur Twitter
        4 novembre 2006 à 5:14:58

        Salut :)
        Essaye de donner autant que possible des noms de variables explicites, sinon quand tu auras un code plus compliqué, tu rendra celui-ci moins compréhensible pour ceux qui le liront.

        Par exemple ta variable z, je l'aurais appelé resultat ou somme.

        long sommeTableau (long tableau[], long tailleTableau)
        {
           long somme = 0;
           long i = 0;
           
           for(i = 0; i < tailleTableau; i++)
           {
              somme = somme + tableau[i];
           }
           
           return somme;
        }

        @+

        EDIT : Je suis trop lent :(
        • Partager sur Facebook
        • Partager sur Twitter
          4 novembre 2006 à 5:14:58

          Ce qu'il dit est juste, tu crée une variable superflue, tu perds donc 4 octets lol.
          Aussi ce n'est pas la peine d'initialiser ta variable y a 0 a chaque tour de boucle : opération superflue.
          Ca ce sont les petits problèmes d'optimisation.

          Dans ta fonction ce que tu cherches a renvoyer c'est la somme de toutes les valeurs stockées dans le tableau.
          Or la tu renvoies la première valeur de ton tableau si je ne me trompe.

          Au lieu d'appeler ta variable de somme z pourquoi ne la nomme tu pas par somme plus compréhensible ;).

          Kurapix
          • Partager sur Facebook
          • Partager sur Twitter
            4 novembre 2006 à 6:35:57

            Merci à tous,
            Je me penche sur ces réponses cette après midi afin d' en décortiquer toutes les subtilités...
            J' ai compris mon erreur de raisonnement quant à l' utilisation du pointeur pour ma valeur en retour de la fonction (qui écrase injustement la première valeur de mon tableau). En fait cela fonctionne mais avec des erreurs de méthodologie. C' est un peu comme utiliser un semi-remorque pour transporter une puce...;-))
            Merci, vous êtes formidables!
            • Partager sur Facebook
            • Partager sur Twitter

            Exercice M@teo sur Tableaux (C)

            × 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