Partage
  • Partager sur Facebook
  • Partager sur Twitter

manipulation des tableaux

Anonyme
    10 octobre 2015 à 3:27:52

    Salut les gars, j'ai terminer les exox sur le chapitres des tableaux, et je rencontre deux problèmes principaux; d'où mon cri de SOS.
      Vous trouverez a la fin de ce récit mes fichiers sources et headers.
     
     Problème n°1 :
     J'arrive pas à récupérer et afficher la valeur renvoyée par ma fonction "moyenneTableau".
     Elle ne s'affiche que si je fais un "printf" à l'intérieur de la fonction et je ne comprend pas pourquoi, ni ce qu'il faut faire.
     
      Problème n°2 :
      Regardez, après exécution, ce qu'affiche ma variable "copieTableau".
      Cela est dû à l'exécution de la fonction "ordonnerTableau" lorsqu'elle prend en paramètres cette variable. Et la encore, je me demande ce qu'il se passe.
     
      Voici le contenu de mes fichiers :
     
     /*fichier tableaux.c*/
     
      //Affichage des elements du tableau
    void affiche( int tableau[], int tailleTableau)
    {
    int i;
    for ( i = 0 ; i < tailleTableau ; i++)
    {
    printf( "\n%d\n", tableau[i] ) ;

    }
    }

    //Somme des elements du tableau
    int sommeTableau( int tableau[ ] , int tailleTableau)
    {
        int i = 0, somme = 0;
        while (i < tailleTableau)
        {
            somme += tableau[i];

            i++;
        }
       // printf("La somme des elements du tableau vaut %d\n\n", somme);
    return somme;
    }

    //Moyenne des éléments du tableau
    double moyenneTableau( int tableau[], int tailleTableau)
    {
        int i = 0;
        double somme = 0, moyenne = 0;
        for (i=0 ; i<tailleTableau ; i++)
        {
            somme += tableau[i] ;
        }
        moyenne = somme / tailleTableau ;
       printf("\n\nLa moyenne des elements du tableau est de %.2f\n\n", moyenne);

     return moyenne;
    }

    //Copie des éléments d'un tableau vers un autre
    void copie( int tableauOriginal[ ] , int tableauCopie[ ] , int tailleTableau)
    {
        int i = 0;
        for (i=0; i<tailleTableau; i++)
        {
            tableauCopie[i]=tableauOriginal[i];
        }
    }

    //Fonction fixant une valeur max pour les éléments d'un tableau
    void maximumTableau( int tableau[ ] , int tailleTableau, int valeurMax)
    {
        int i = 0;
        for (i=0; i<tailleTableau; i++)
        {
            if (tableau[i] > valeurMax)
            tableau[i]=0;
        }
    }

    //Fonction ordonnant un tableau par ordre croissant
    void ordonnerTableau( int tableau[] , int tailleTableau)
    {
        int i,j = 0, retenue = 0;
            for (j=0; j<tailleTableau; j++)
        {
            for (i=0; i<tailleTableau; i++)

            {
                    if (tableau[i] > tableau[i+1])
                {
                    retenue=tableau[i];
                    tableau[i]=tableau[i+1];
                    tableau[i+1]=retenue;
                }
            }

        }
    }

    /*fichier tableaux.h*/

    void affiche( int tableau[], int tailleTableau) ;

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

    double moyenneTableau( int tableau[ ] , int tailleTableau) ;

    void copie( int tableauOriginal[ ] , int tableauCopie[ ] , int tailleTableau) ;

    void maximumTableau( int tableau[ ] , int tailleTableau, int valeurMax) ;

    void ordonnerTableau( int tableau[ ] , int tailleTableau) ;

    /*fichier principal main.c */

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


    int main( int argc, char *argv[ ] )
    {
    //Declaration des variables
    int tableau[4] = {95, 15, 61, 79}, copieTableau[4]={0} ;
    int somme = sommeTableau(tableau, 4);


    copie(tableau, copieTableau, 4);

    printf("Voici le contenu de la copie du tableau: \n");
    affiche(copieTableau, 4);

    printf("\nVoici le contenu du tableau avant qu'il ne soit ordonne:\n ");
    affiche(tableau, 4);

    ordonnerTableau(tableau, 4);

    printf("\nVoici le contenu du tableau apres qu'il soit ordonne:\n ");
    affiche(tableau, 4) ;

    printf("\nLa somme des elements du tableau vaut %d\n\n", somme);

    double moyenne = moyenneTableau(tableau, 4);
    printf("\n\nLa moyenne des elements du tableau vaut %.2f\n\n", moyenne);

    //On affiche de nouveau le contenu de "copieTableau" apres lui avoir appliqué un max et ordonné
    maximumTableau(copieTableau, 4, 80);

    ordonnerTableau(copieTableau, 4);

    printf("\nVoici le contenu de \"copieTableau\" apres qu'il soit ordonne et maximise:\n ");
    affiche(copieTableau, 4);


    return 0;
    }
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      10 octobre 2015 à 9:18:18

      Salut ! Je sais que ce que je vais dire ne va peut-être pas changer grand chose, mais je crois que pour tout ce qui concerne les tailles des tableaux, c'est mieux d'utiliser le type size_t au lieu de int.

      • Partager sur Facebook
      • Partager sur Twitter
        10 octobre 2015 à 19:31:29

        stp, utilise les balises code lorsque tu poste du code, bien plus facile a lire (le bouton </> en haut de l'editeur de texte)
        • Partager sur Facebook
        • Partager sur Twitter
        DIESELPUNK
        Anonyme
          10 octobre 2015 à 19:36:57

          .

          -
          Edité par Anonyme 10 octobre 2015 à 23:56:50

          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            10 octobre 2015 à 23:27:36

            Salut les gars, j'ai terminer les exos sur le chapitre des tableaux, et je rencontre deux principaux problèmes ; d'où mon cri de SOS.
              Vous trouverez à la fin de ce récit mes fichiers sources et headers.
             
             Problème n°1 :
             J'arrive pas à récupérer et afficher la valeur renvoyée par ma fonction "moyenneTableau".
             Elle ne s'affiche que si je fais un "printf" à l'intérieur de la fonction et je ne comprend pas pourquoi, ni ce qu'il faut faire.
             
              Problème n°2 :
              Regardez, après exécution, ce qu'affiche ma variable "copieTableau".
              Cela est dû à l'exécution de la fonction "ordonnerTableau" lorsqu'elle prend en paramètres cette variable. Et la encore, je me demande ce qu'il se passe.
             
              Voici le contenu de mes fichiers :
             

             /*fichier tableaux.c*/
             
              //Affichage des elements du tableau
            void affiche( int tableau[], int tailleTableau)
            {
            int i;
            for ( i = 0 ; i < tailleTableau ; i++)
            {
            printf( "\n%d\n", tableau[i] ) ;
            
            }
            }
            
            //Somme des elements du tableau
            int sommeTableau( int tableau[ ] , int tailleTableau)
            {
                int i = 0, somme = 0;
                while (i < tailleTableau)
                {
                    somme += tableau[i];
            
                    i++;
                }
               // printf("La somme des elements du tableau vaut %d\n\n", somme);
            return somme;
            }
            
            //Moyenne des éléments du tableau
            double moyenneTableau( int tableau[], int tailleTableau)
            {
                int i = 0;
                double somme = 0, moyenne = 0;
                for (i=0 ; i<tailleTableau ; i++)
                {
                    somme += tableau[i] ;
                }
                moyenne = somme / tailleTableau ;
               printf("\n\nLa moyenne des elements du tableau est de %.2f\n\n", moyenne);
            
             return moyenne;
            }
            
            //Copie des éléments d'un tableau vers un autre
            void copie( int tableauOriginal[ ] , int tableauCopie[ ] , int tailleTableau)
            {
                int i = 0;
                for (i=0; i<tailleTableau; i++)
                {
                    tableauCopie[i]=tableauOriginal[i];
                }
            }
            
            //Fonction fixant une valeur max pour les éléments d'un tableau
            void maximumTableau( int tableau[ ] , int tailleTableau, int valeurMax)
            {
                int i = 0;
                for (i=0; i<tailleTableau; i++)
                {
                    if (tableau[i] > valeurMax)
                    tableau[i]=0;
                }
            }
            
            //Fonction ordonnant un tableau par ordre croissant
            void ordonnerTableau( int tableau[] , int tailleTableau)
            {
                int i,j = 0, retenue = 0;
                    for (j=0; j<tailleTableau; j++)
                {
                    for (i=0; i<tailleTableau; i++)
            
                    {
                            if (tableau[i] > tableau[i+1])
                        {
                            retenue=tableau[i];
                            tableau[i]=tableau[i+1];
                            tableau[i+1]=retenue;
                        }
                    }
            
                }
            }
            
            /*fichier tableaux.h*/
            
            void affiche( int tableau[], int tailleTableau) ;
            
            int sommeTableau( int tableau[ ] , int tailleTableau) ;
            
            double moyenneTableau( int tableau[ ] , int tailleTableau) ;
            
            void copie( int tableauOriginal[ ] , int tableauCopie[ ] , int tailleTableau) ;
            
            void maximumTableau( int tableau[ ] , int tailleTableau, int valeurMax) ;
            
            void ordonnerTableau( int tableau[ ] , int tailleTableau) ;
            /*fichier principal main.c */
            
            #include <stdio.h>
            #include <stdlib.h>
            
            
            int main( int argc, char *argv[ ] )
            {
            //Declaration des variables
            int tableau[4] = {95, 15, 61, 79}, copieTableau[4]={0} ;
            int somme = sommeTableau(tableau, 4);
            
            
            copie(tableau, copieTableau, 4);
            
            printf("Voici le contenu de la copie du tableau: \n");
            affiche(copieTableau, 4);
            
            printf("\nVoici le contenu du tableau avant qu'il ne soit ordonne:\n ");
            affiche(tableau, 4);
            
            ordonnerTableau(tableau, 4);
            
            printf("\nVoici le contenu du tableau apres qu'il soit ordonne:\n ");
            affiche(tableau, 4) ;
            
            printf("\nLa somme des elements du tableau vaut %d\n\n", somme);
            
            double moyenne = moyenneTableau(tableau, 4);
            printf("\n\nLa moyenne des elements du tableau vaut %.2f\n\n", moyenne);
            
            //On affiche de nouveau le contenu de "copieTableau" apres lui avoir appliqué un max et ordonné
            maximumTableau(copieTableau, 4, 80);
            
            ordonnerTableau(copieTableau, 4);
            
            printf("\nVoici le contenu de \"copieTableau\" apres qu'il soit ordonne et maximise:\n ");
            affiche(copieTableau, 4);
            
            
            return 0;
            } 
            

            -
            Edité par Anonyme 10 octobre 2015 à 23:39:00

            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              10 octobre 2015 à 23:39:49

              J'attends grandement votre aide les gars, merci!
              • Partager sur Facebook
              • Partager sur Twitter
                10 octobre 2015 à 23:48:03

                Hello,

                Lignes 73, 76 et 77: tu dépasses la taille de ton tableau. En effet, si tu limites bien i à < tailleTableau, que vaut i+1 ? Et donc, que vaut tableau[i+1] (pour mémoire, dans un tableau de N éléments, les éléments vont de 0 à N-1) ? Indéfini, et ça pourrait provoquer un plantage (peu de chance/malchance dans le cas présent, mais autant le signaler).

                A+

                Edgar;

                PS: et si ta fonction de tri est fonctionnelle, elle peut être optimisée (tout en restant un tri bulle)

                • Partager sur Facebook
                • Partager sur Twitter

                On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

                  11 octobre 2015 à 16:49:55

                  Frawil a écrit:

                  J'attends grandement votre aide les gars, merci!


                  Bonjour,

                  Dans main.c il manque l'inclusion de tableaux.h. Ca explique des problèmes de corruption de passage de paramètres un peu long à expliquer.
                  Il manque l'inclusion de tableaux.h dans tableaux.c.

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    12 octobre 2015 à 0:18:54

                    Merci Marc!

                    Cela résoud mon problème n°1, mais pas le n°2.

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      12 octobre 2015 à 0:32:47

                      Merci Edgar, mon problème n°2 est réglé.

                      • Partager sur Facebook
                      • Partager sur Twitter

                      manipulation des tableaux

                      × 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