Partage
  • Partager sur Facebook
  • Partager sur Twitter

Pas d'erreur de compliattion et pourtant...

Sujet résolu
    10 mars 2006 à 11:54:55

    Bonjour, ce code n contient pas d'erreur de compilatin et pourtant il fait du n'importe quoi, pourtant la logique de ce programme est tres clair et simple, bon je vous laisse voir ca...

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

    void somme_tableau(long *tab‚ int taille_tab);

    int main()
    {
       
        int taille_tab = 5; int i;
        long tab[4] = {101530};
       // somme_tableau( long *tab‚ int taille_tab); 
            for(i=0;i<taille_tab;i++)
            {
                                 printf("%d"‚tab[i]);
        somme_tableau( tab‚ taille_tab);
        return 0;
    }

    void somme_tableau(long *tab‚ int taille_tab)
    {
         int i=0;
             int s;
         do
         {
                s=s+tab[i+1];                       
         }
         while(i<taille_tab);
         printf("la somme du tableau vaut: %d"‚s);
    }
    • Partager sur Facebook
    • Partager sur Twitter
      10 mars 2006 à 12:10:40

      1. dans ta fonction somme tableau je te conseille d'initialiser ta somme à 0.

      2. dans ta fonction somme tableau, c'est cool de nous montrer que tu maitrises le do while mais un for() serait quand même plus approprié et plus clair

      3.logique tu dis ? taille_tab vaut 5, tu crées un tableau de taille 4 et tu l'initialises avec 3 éléments.... où est la logique là ? Je t'invites donc à corriger tout ça >> créer un tableau de taille taille_tab, l'initialiser avec le bon nombre d'élements (tu peux faire une boucle pour mettre des valeurs aléatoires si tu veux).

      4.Conseil : somme tableau sonne comme "cette fonction fait la somme du tableau" mais non toi elle "affiche la somme du tableau". Je te conseille donc de lui faire renvoyer la somme et de faire l'affichage dans le main seulement.

      Bon courage.
      • Partager sur Facebook
      • Partager sur Twitter
        10 mars 2006 à 12:45:56

        Citation : amine_en_france

        Bonjour, ce code n contient pas d'erreur de compilatin et pourtant il fait du n'importe quoi, pourtant la logique de ce programme est tres clair et simple, bon je vous laisse voir ca...


        Je te conseille de travailler la présentation afin de bien voir les blocs. Je te conseille d'utiliser un indenteur.

        Je rappelle que dans un tableau de taille n, les indices vont de 0 à n-1.


        Après correction et simplification, ce code fonctionne. Je préconise la simplicité. Pose des questions si besoin est.

        #include <stdio.h>

        static long somme_tableau(long *tab‚ int taille_tab)
        {
           long s = 0;
           int i = 0;

           for (i = 0; i < taille_tab; i++)
           {
              s += tab[i];
           }
           return s;
        }

        int main (void)
        {
           long tab[] =
              {
                 101530
              };

           long sum = somme_tableau( tab‚ 4);

           printf("la somme du tableau vaut: %ld\n"‚ sum);
           return 0;
        }

        Il est possible de déterminer automatiquement le nombre d'éléments d'un tableau en utilisant les propriétés des tableaux

        size_t n = sizeof tab / sizeof *tab;

        • Partager sur Facebook
        • Partager sur Twitter
        Music only !
          12 mars 2006 à 0:45:19

          Merci beaucoup, en effet mon scripte manquait de rigueur je viens de tour remettre en ordre mais le problème persiste..., c'est a dire que le resulats numérique obtenu est simplement faux sans être aleatoire... bizare
          • Partager sur Facebook
          • Partager sur Twitter
            12 mars 2006 à 11:43:51

            Citation : amine_en_france

            Merci beaucoup, en effet mon scripte manquait de rigueur je viens de tour remettre en ordre mais le problème persiste..., c'est a dire que le resulats numérique obtenu est simplement faux sans être aleatoire... bizare


            Montre ta dernière version du code. On ne sait pas ce que tu as corrigé, ni comment...
            • Partager sur Facebook
            • Partager sur Twitter
            Music only !
              12 mars 2006 à 16:35:55

              Voila le dernier code apres petites corrections, j'explique le problème, la somme qu'il me sort est complemement abréante pour être plus precis, il reponds 4013686 pour tout tableau intriguant!! :euh::( ... Je vous invite a le compiler pour mieu comprendre
              Merci


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

              void somme_tableau(long *tab‚ int taille_tab);

              int main()
              {
                 
                  int taille_tab = 5;
                  int i=0;
                  int s=0;
                  long tab[5] = {11307};
                      for(i=0;i<taille_tab;i++)
                      {
                                           printf("%d\n"‚tab[i]);
                  }
                  s=somme_tableau( tab‚ taille_tab);
                  printf("la somme du tableau vaut:\n %d\n"‚s);
                  system("PAUSE");
                  return 0;
              }

              void somme_tableau(long *tab‚ int taille_tab)
              {
                   int i=0;
                       int s=0;
                   for(i=0; i<taille_tab; i++)
                   {
                          s=s+tab[i+1];                       
                   }
              }

              • Partager sur Facebook
              • Partager sur Twitter
                12 mars 2006 à 17:02:11

                Citation : amine_en_france

                Voila le dernier code apres petites corrections


                • La fonction somme_tableau() a un retour de type void. Ecrire s = somme() n'a donc aucun sens. Il faut modifier la fonction pour qu'elle retourne s.
                • Dans la fonction somme_tableau() pourquoi tab[i+1] ?

                Après corrections :

                1
                1
                3
                0
                7
                la somme du tableau vaut:
                12
                • Partager sur Facebook
                • Partager sur Twitter
                Music only !
                  12 mars 2006 à 17:08:06

                       
                       for(i=0; i<taille_tab; i++)
                       {
                              s=s+tab[i+1];                       
                       }


                  Tu fais une boucle qui part de i=0 à 4.
                  Ce qui est logique puisque les indices de ton tableau qui corrspondent au valeur sont 0,1,2,3,4 (Comme on te l'a déjà dit, les indices vont de 0 à n-1 pour un tableau de n valeurs.
                  Dans ton code, tu dis que tu fais la somme de tab[i+1] donc au dernier passage, sachant que i vaut 4 tu fais un s=s+tab[5];
                  or tab[5] n'existe pas puisque la dernière valeur de ton tab se situe à tab[4]. Tu lui demande d'additionnr une valeur qui "n'existe pas". Réellement, en mémoire elle existe et c'est un nombre gigantesque. D'ou le résultat que tu obtient. Tu as eu de la chance de pas avoir touché un emplacement réservé à windows parce que sinon tu aurais eu le fameux "rapport d'erreur" ou une viline erreur mémoire ^^
                  Sur ce bonne soirée

                  EDIT : On m'a devancé ^^ Désolé à la personne qui a posté avant moi ^^
                  • Partager sur Facebook
                  • Partager sur Twitter
                    12 mars 2006 à 17:36:56

                    Merci c'etait tres clair...
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Pas d'erreur de compliattion et pourtant...

                    × 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