IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

problème de tableaux


Sujet :

C

  1. #1
    Nouveau membre du Club
    Inscrit en
    Octobre 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 8
    Par défaut problème de tableaux
    salut a tous j'ai un problem avec ce code
    j'ai entrain de faire la somme de 4 cases d mais en resultat il affiche une grand nombre (4009944)
    et en rincipe afichie le nombre 44
    aide moi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    #include <stdio.h>
    #include <stdlib.h>
     
     
    int sommeTableau(int tableau[], int tailleTableau);
     
     
    int main(int argc, char *argv[])
    {
        int tableaux[4];
         tableaux[0]=2;
         tableaux[1]=3;
         tableaux[2]=4;
         tableaux[3]=5;
     
        return sommeTableau(tableaux,4);
     
     
       }
     
    int sommeTableau(int *tableau, int tailleTableau)
    {
        int i=0;
        for(i=0;i<tailleTableau;i++)
        {
            tableau[i+1]=tableau[i]+tableau[i+1];
        }
     
        return tableau[i+1];
     
           }
    merci

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 145
    Billets dans le blog
    150
    Par défaut
    Bonjour et bienvenue,

    Sachez qu'il y a une balise [ C O D E ] et [ / C O D E ] ( sans les espaces ) sur ce forum ( et ce n'est pas de la science fiction ) qui permette de présenter le code de manière très jolie et très colorée. Un raccourci est de juste cliquer sur le bouton qui ressemble à '#' c'est tout
    Pensez y la prochaine fois

    Sinon pour votre problème, en fait, vous avez un bug, dans le sens, que votre programme devrait crasher ( erreur de segmentation ).

    Effectivement, vous construisez un tableau de 4 cases.
    Dans la fonction sommeTableau() vous faites la somme des valeurs des quatre cases, certes ( bien que je trouve la méthode assez bizarre ), sauf que votre boucle emmène i de 0 à 3.
    Dans la boucle vous avez un 'i+1' qui veut dire, qu'à un certain point, i sera égale à 4. Un PC compte en commançant par zero, et que 4 equivaut à accéder à la 5 ième case du tableau.
    Cette cinquième cases du tableau, vous ne l'avez jamais déclaré, du coup, ici il devrait avoir un bug ( erreur de segmentation ).
    Il n'y en a pas, c'est un hasard / fait. Sauf que cette case à une valeur qui n'est pas déterminé non plus ( souvent c'est la dernière chose qui a été en mémoire, à cette emplacement, mais bref passons, la valeur n'est pas connue ). Du coup, vous ajouté votre résultat à quelque chose d'inconnu et vous le retourner au main. Ce résultat est inconnu est dans la majorité des cas faux.
    Solution possible: ( je ne dis pas que c'est la meilleure, je vous laisse le privilège de faire une recherche pour savoir ce qui est possible )
    - Définir un tableau de 5 cases ( la cinquième contiendra le résultat, comme vous semblez l'avoir prévu )
    - à l'initialisation la cinquième case, doit contenir 0. ( Ceci est un indice très important )

    Voilà, faites votre code, et revenez nous voir pour dire ce qu'il en ai .

    ( Note: Il n'y a aucun piège Vraiment )
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    et en rincipe afichie le nombre 44
    Comment arriver à un résultat de 44 ? Je ne comprends pas ce que tu veux faire. Donne-nous plus de précisions.

    Outre ton problème de débordement de tableau, ton algorithme est bizarre (à moins que ce soit voulu) : tu additionnes le premier élément et le second pour mettre le résultat dans ce second élément, puis tu additionnes le second (dont la valeur a été écrasée) et le troisième pour mettre le résultat dans le troisième, etc. Au final, ton tableau contient ces valeurs : 2 5 9 14. Il n'y a de 44 nulle part.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Octobre 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 8
    Par défaut
    Citation Envoyé par jeroman Voir le message
    Comment arriver à un résultat de 44 ? Je ne comprends pas ce que tu veux faire. Donne-nous plus de précisions.

    Outre ton problème de débordement de tableau, ton algorithme est bizarre (à moins que ce soit voulu) : tu additionnes le premier élément et le second pour mettre le résultat dans ce second élément, puis tu additionnes le second (dont la valeur a été écrasée) et le troisième pour mettre le résultat dans le troisième, etc. Au final, ton tableau contient ces valeurs : 2 5 9 14. Il n'y a de 44 nulle part.

    wi 14 desoli faut de frap

    mais j'ai arrive pas

  5. #5
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 145
    Billets dans le blog
    150
    Par défaut
    Pourtant je pensais tout bien expliquer.

    Avez vous suivi mes conseils ?

    Qu'est ce que vous n'arrivais pas à faire ?
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  6. #6
    Nouveau membre du Club
    Inscrit en
    Octobre 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 8
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    Pourtant je pensais tout bien expliquer.

    Avez vous suivi mes conseils ?

    Qu'est ce que vous n'arrivais pas à faire ?
    normalment y afficher 14 mais il tjrs afficher des gros nombre


    alors commet faire poue connait la somme d'un tableaux

  7. #7
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 145
    Billets dans le blog
    150
    Par défaut
    Avez vous faite les choses suivantes:

    - Définir un tableau de 5 cases ( la cinquième contiendra le résultat, comme vous semblez l'avoir prévu )
    - à l'initialisation la cinquième case, doit contenir 0. ( Ceci est un indice très important )

    Car si vous ne l'avez pas fait, vous pouvez relire ma première réponse

    Indice supplémentaires: Vous savez définir un tableau de 4 cases, alors pourquoi pas 5?
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Août 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 17
    Par défaut
    Bonjour,
    je ne sais pas si je peux me permettre mais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return sommeTableau(tableaux,4);
    ce ne serait pas mieu de mettre un printf() plutot qu'un return ?

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Août 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 17
    Par défaut
    voila une solution:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    #include <stdio.h>
    #include <stdlib.h>
     
    // Prototype
     
    int sommeTableau(int tableau[], int tailleTableau);
     
    // Fonctions
     
    int main(int argc, char *argv[])
    {
        int tableaux[5] = {0};
            tableaux[0] = 2;
            tableaux[1] = 3;
            tableaux[2] = 4;
            tableaux[3] = 5;
     
        printf("La somme du tableau est %d.\n",sommeTableau(tableaux,4));
     
        return 0;
     
    }
     
    int sommeTableau(int *tableau, int tailleTableau)
    {
        int i = 0, somme = 0;
     
        for(i = 0 ; i<tailleTableau ; i++)
        {
            somme = tableau[i] + somme;
        }
     
        return tableau[tailleTableau] = somme;
    }
    Je ne sais pas si c'est exactement ça que tu voulais faire.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Août 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 42
    Par défaut
    Bonjour fethi1987,

    J'aurais effectivement écris ce code a la manière de BRK_, il me semble plus instinctif en revanche je ne comprend pas pourquoi BRK_ ne fais pas un simple

    à la fin de sa fonction.

    C'est juste une remarque pour ne pas compliquer les choses.

    Edit : je viens de comprendre c'est pour conserver la valeur dans la dernière case du tableau, d'accord, j'avais lus un peu vite.

    Edit2 : (voir post suivant)

    Citation Envoyé par Pierre Dolez Voir le message
    Croyez-vous qu'ils vont se munir d'une cinquième tirelire? surement pas.
    Donc la somme cherchée est la somme des 4 cases du tableau, renvoyée par le mot-clé return.
    Je suis plutôt d'accord avec cela qui me semble plus instinctif.

  11. #11
    Invité
    Invité(e)
    Par défaut
    Bonjour, BRK__
    Je ne sais pas si je peux me permettre?
    Notre ami a LA (?) solution, bon, très bien, il aura donc une bonne note.
    Par contre il serait intéressant d'expliquer pourquoi vous mettez le résultat en cinquième position. Je suppose que ce n'est pas parce qu'il a été dit plus haut que cette opération provoquait un écrasement de mémoire, et qu'il fallait donc une case plus.
    A quoi peut servir ce programme? Une famille de 4 enfants veut faire un cadeau à leurs parents. Ils se cotisent et regardent combien ils ont chacun dans leur tirelire, et doivent calculer la somme.
    Croyez-vous qu'ils vont se munir d'une cinquième tirelire? surement pas.
    Donc la somme cherchée est la somme des 4 cases du tableau, renvoyée par le mot-clé return.

  12. #12
    Nouveau membre du Club
    Inscrit en
    Octobre 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 8
    Par défaut
    Citation Envoyé par BRK__ Voir le message
    Bonjour,
    je ne sais pas si je peux me permettre mais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return sommeTableau(tableaux,4);
    ce ne serait pas mieu de mettre un printf() plutot qu'un return ?
    oui j'ai essayé de faire ca mais donné moi la même valeur

  13. #13
    Nouveau membre du Club
    Inscrit en
    Octobre 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 8
    Par défaut
    Citation Envoyé par BRK__ Voir le message
    voila une solution:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    #include <stdio.h>
    #include <stdlib.h>
     
    // Prototype
     
    int sommeTableau(int tableau[], int tailleTableau);
     
    // Fonctions
     
    int main(int argc, char *argv[])
    {
        int tableaux[5] = {0};
            tableaux[0] = 2;
            tableaux[1] = 3;
            tableaux[2] = 4;
            tableaux[3] = 5;
     
        printf("La somme du tableau est %d.\n",sommeTableau(tableaux,4));
     
        return 0;
     
    }
     
    int sommeTableau(int *tableau, int tailleTableau)
    {
        int i = 0, somme = 0;
     
        for(i = 0 ; i<tailleTableau ; i++)
        {
            somme = tableau[i] + somme;
        }
     
        return tableau[tailleTableau] = somme;
    }
    Je ne sais pas si c'est exactement ça que tu voulais faire.

    merci mon ami et merci pour tous les autre ami

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Août 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 17
    Par défaut
    fethi1987,
    je ne sais pas si c'est réellement ce que tu voulais faire, dans la version que j'ai donné, les chiffres qui sont dans le tableau ne bougent pas et ne sont jamais remplacés.

    La boucle ne fait juste qu'additionner les chiffres, et mettre le résultat dans la variable "somme".

    Ensuite return tableau[tailleTableau] = somme; ajoute la valeur de la variable "somme" dans la dernière case du tableau.


    Et donc comme l'on dit Schopenhauer, Pierre Dolez, LittleWhite et jeroman je ne sais pas si c'était le but recherché, de mettre cette somme dans la dernière case du tableau, car sinon il y a bien plus simple pour renvoyer la somme.

    Pour finir, fais attention, j'ai donné une solution qui apporte le résultat que tu souhaitais, mais la manière est peut-être pas celle que tu voulais appliquer au départ.

  15. #15
    Nouveau membre du Club
    Inscrit en
    Octobre 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 8
    Par défaut
    Citation Envoyé par BRK__ Voir le message
    fethi1987,
    je ne sais pas si c'est réellement ce que tu voulais faire, dans la version que j'ai donné, les chiffres qui sont dans le tableau ne bougent pas et ne sont jamais remplacés.

    La boucle ne fait juste qu'additionner les chiffres, et mettre le résultat dans la variable "somme".

    Ensuite return tableau[tailleTableau] = somme; ajoute la valeur de la variable "somme" dans la dernière case du tableau.


    Et donc comme l'on dit Schopenhauer, Pierre Dolez, LittleWhite et jeroman je ne sais pas si c'était le but recherché, de mettre cette somme dans la dernière case du tableau, car sinon il y a bien plus simple pour renvoyer la somme.

    Pour finir, fais attention, j'ai donné une solution qui apporte le résultat que tu souhaitais, mais la manière est peut-être pas celle que tu voulais appliquer au départ.
    merci beaucoup j'ai trouver la solution

Discussions similaires

  1. [HTML]problème de tableaux imbriqués
    Par tyrann dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 24/03/2006, 15h29
  2. Problème avec tableaux dynamiques et procédure
    Par K20 dans le forum Langage
    Réponses: 11
    Dernier message: 06/01/2006, 20h51
  3. Réponses: 5
    Dernier message: 24/12/2005, 15h40
  4. HTML : problème de tableaux qui se superposent
    Par paprika dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 13/10/2005, 15h55
  5. [D2005]Problème de tableaux dynamique
    Par Laurent Dardenne dans le forum Delphi .NET
    Réponses: 8
    Dernier message: 26/07/2005, 11h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo