Partage
  • Partager sur Facebook
  • Partager sur Twitter

Tableaux [Exercice 3]

Sujet résolu
    2 août 2015 à 17:59:03

    Bonjour, 

    Je tentais de faire l'exo 3 mais je rencontre des difficultés. L'exercice 3 demande de faire une copie d'un tableau vers un autre. J'ai réussi à faire le code pour exécuter la copie ( je l'ai comparé avec d'autres codes sur le forum et le mien me semble bon) puis j'ai rajouter une ligne demandant au programme d'afficher les valeurs  du tableau_copie pour vérifier pour vérifier qu'il l'a bien fait mais il plante dès qu'il y arrive :/ . Besoin d'aide svp :3

    Voilà mon code: 

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    
    int sommeTableau(int tableau[], int tailleTableau); //Prototype Fonction somme
    void copie(int tableauOriginal[], int tableauCopie[], int tailleTableau); //Prototype Fonction copie
    double moyenneTableau(int tableau[], int tailleTableau); //Prototype Fonction moyenne
    
     // Déclaration de variables
    int tailleTableau = 4, i = 0, somme = 0;
    double moy =0;
    int tableauCopie, tableauOriginal, tableau;
    
    int main(int argc, char *argv[])
    {
    
        int tableau[4], tableauCopie[4]= {0}, tableauOriginal[4] = {0};
    
        tableau[0] = 10;
        tableau[1] = 23;
        tableau[2] = 505;
        tableau[3] = 8;
    
    
    
         printf("\nLa somme totale est egale a : %d",sommeTableau(tableau,4));
    
         printf("\nLa moyenne du tableau vaut donc : %f", moyenneTableau(tableau,tailleTableau));
    
         printf("\n\nJe rappelle les valeurs du tableau 1: \n\n");
    
          for (i = 0 ; i < tailleTableau ; i++)
        {
            printf("Valeur numero %d :%d\n",i, tableau[i]);
        }
    
         printf("\nCelles du tableau_copie sont: \n\n");
         copie(tableauOriginal,tableauCopie,tailleTableau); //Appel de la fonction pour copie du tableau original "tableau"
    
    
    
        return 0;
    }
    
    
    //Début des Fonctions
    
        int sommeTableau(int tableau[], int tailleTableau)
        {
    
            for (i=0; i < tailleTableau ; i++)
            {
                 somme += tableau[i]; // Additionne les valeurs du tableau
    
            }
            return somme;
        }
    
        double moyenneTableau(int tableau[], int tailleTableau)
        {
    
            moy = sommeTableau(tableau,tailleTableau)/tailleTableau; // Détermine la moyenne
            return moy;
        }
    
        void copie(int tableauOriginal[], int tableauCopie[], int tailleTableau)
        {
    
             tableauOriginal = tableau;
    
            for (i = 0 ; i < tailleTableau; i++)
            {
                tableauCopie[i] = tableauOriginal[i];
                 printf("Valeur numero %d :%d\n",i, tableauCopie[i]); //Affichons les valeur du tableau copie
    
            }
    
        }
    



    Merci d'avance !

    -
    Edité par Coding Sunset 2 août 2015 à 18:00:23

    • Partager sur Facebook
    • Partager sur Twitter

    Going Further. Code in Progress..

      2 août 2015 à 23:10:18

      Salut,

      ligne 69 "tableauOriginal = tableau". Qu'est-ce que c'est que ça ? "tableau" n'est pas déclaré. Comment ça peut compiler ?? Sans cette ligne ton code devrait compiler et fonctionner.

      -
      Edité par apple.juice 2 août 2015 à 23:11:05

      • Partager sur Facebook
      • Partager sur Twitter
      M'en veuillez pas. Si je suis ici c'est que je suis vraiment crevé :^D
        3 août 2015 à 0:20:58

        Il faut refaire les exercices précédent en supprimant tes variables globales !
        • Partager sur Facebook
        • Partager sur Twitter
          3 août 2015 à 0:29:02

          Oh en effet tableau est déclaré en global, pardon.

          Et ça pose pas problème de déclarer un "int tableau" et juste après un "int tableau[]" ? Un int et un tableau de int du même nom, ça marche ???

          • Partager sur Facebook
          • Partager sur Twitter
          M'en veuillez pas. Si je suis ici c'est que je suis vraiment crevé :^D
            3 août 2015 à 0:57:14

            Ça marche dès l'instant qu'elles ne sont pas dans le même bloc.

            Mais bon les variables globales vaut mieux éviter. Surtout que dans cet exercice elle sont carrément inutile.

            • Partager sur Facebook
            • Partager sur Twitter
              3 août 2015 à 14:55:13

              Bonjour,

              J'ai retiré mes variables globales et retravailler certaines parties, résultat : mon programme marche :D ... Mais pas comme je l'espérait x) !

              Des valeurs sont bien copiés entre les différents tableaux mais pas les bonnes, quand je demande au programme de me les afficher je vois des -2; 4201152 et je pense qu'ils m'affiche les adresses au lieu du chiffre demandé. Je commence à être désespéré là :/

              Mon nouveau code:

              #include <stdio.h>
              #include <stdlib.h>
              #include <math.h>
              
              
              //Prototypes
              int sommeTableau(int tableau[], int tailleTableau); //Prototype Fonction somme
              void copie(int tableauOriginal[], int tableauCopie[], int tailleTableau); //Prototype Fonction copie
              double moyenneTableau(int tableau[], int tailleTableau); //Prototype Fonction moyenne
              
              
              
              int main(int argc, char *argv[])
              {
                  int tailleTableau = 4, i = 0,tableauCopie[4] , tableauOriginal[4];
                  int tableau[4];
              
                  tableau[0] = 10;
                  tableau[1] = 23;
                  tableau[2] = 505;
                  tableau[3] = 8;
              
              
              
                   printf("\nLa somme totale est egale a : %d",sommeTableau(tableau,4));
              
                   printf("\nLa moyenne du tableau vaut donc : %f", moyenneTableau(tableau,tailleTableau));
              
                   printf("\n\nJe rappelle les valeurs du tableau 1: \n\n");
              
                    for (i = 0 ; i < tailleTableau ; i++)
                  {
                      printf("Valeur numero %d :%d\n",i, tableau[i]);
                  }
              
                   printf("\nCelles du tableau_copie sont: \n\n");
                   copie(tableauOriginal,tableauCopie,tailleTableau); //Appel de la fonction pour copie du tableau original "tableau"
              
              
              
                  return 0;
              }
              
              
              //Début des Fonctions
              
                  int sommeTableau(int tableau[], int tailleTableau)
                  {
                      int i =0 ,somme = 0;
                      for (i=0; i < tailleTableau ; i++)
                      {
                           somme += tableau[i]; // Additionne les valeurs du tableau
              
                      }
                      return somme;
                  }
              
                  double moyenneTableau(int tableau[], int tailleTableau)
                  {
                      double moy =0;
              
                      moy = sommeTableau(tableau,tailleTableau)/tailleTableau; // Détermine la moyenne
                      return moy;
                  }
              
                  void copie(int tableauOriginal[], int tableauCopie[], int tailleTableau)
                  {
                      int i = 0;
                      int tableau[4];
                      tableau[0] = 10;
                      tableau[1] = 23;
                      tableau[2] = 505;
                      tableau[3] = 8;
              
                      for (i = 0 ; i < 4; i++)  //Copie les valeurs de tableau à tableau original
                      {
                           tableau[i] = tableauOriginal[i];
              
                           printf("Valeur numero %d du tableau Original:%d\n\n",i, tableauOriginal[i]); //Affichons les valeur du tableau original
              
                      }
              
              
                      for (i = 0 ; i < 4; i++)    //Copie les valeurs de tableau original à tableau copie
                      {
              
                          tableauCopie[i] = tableauOriginal[i];
                          printf("Valeur numero %d du tableau_copie:%d\n\n",i, tableauCopie[i]); //Affichons les valeur du tableau copie
              
                      }
              
                  }
              

              Résultat : 



              • Partager sur Facebook
              • Partager sur Twitter

              Going Further. Code in Progress..

                3 août 2015 à 15:10:22

                Hello,

                Alors, plusieurs choses:

                • tableauOriginal n'a pas été initialisé (tu n'y a pas mis de valeurs), donc son contenu est indéterminé
                • A quoi te sert tableau[] dans ta fonction copie(....) ?
                • Ta fonction copie(....) ne copiera jamais plus (ou moins) que 4 éléments.... pas très intéressant
                • Ta fonction copie(....) n'a qu'un but: copier. Pas afficher. Fais une fonction AffichageTableau(int tableau[],int tailleTableau)
                • Ta fonction moyenneTableau(....) est fausse. Tu divises sommeTableau(....) - c'est bien d'avoir pensé à l'appeler plutot qu'à écrire du code pour à nouveau calculer la somme - qui est int, par tailleTableau, qui est int aussi. Et int/int-->int, converti ENSUITE en double. Le mieux? Faire un cast sur un des opérandes (ou sur les deux, si le coeur t'en dit): moy=sommeTableau(....)/(double)tailleTableau;
                • moy ne sert à rien: return((double)sommeTableau(....)/tailleTableau); et enlevé, c'est pesé....

                A+

                Edgar;

                -
                Edité par edgarjacobs 3 août 2015 à 15:15:38

                • 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

                  4 août 2015 à 22:17:37

                  edgarjacobs a écrit:

                  Hello,

                  Alors, plusieurs choses:

                  • tableauOriginal n'a pas été initialisé (tu n'y a pas mis de valeurs), donc son contenu est indéterminé
                  • A quoi te sert tableau[] dans ta fonction copie(....) ?
                  • Ta fonction copie(....) ne copiera jamais plus (ou moins) que 4 éléments.... pas très intéressant
                  • Ta fonction copie(....) n'a qu'un but: copier. Pas afficher. Fais une fonction AffichageTableau(int tableau[],int tailleTableau)
                  • Ta fonction moyenneTableau(....) est fausse. Tu divises sommeTableau(....) - c'est bien d'avoir pensé à l'appeler plutot qu'à écrire du code pour à nouveau calculer la somme - qui est int, par tailleTableau, qui est int aussi. Et int/int-->int, converti ENSUITE en double. Le mieux? Faire un cast sur un des opérandes (ou sur les deux, si le coeur t'en dit): moy=sommeTableau(....)/(double)tailleTableau;
                  • moy ne sert à rien: return((double)sommeTableau(....)/tailleTableau); et enlevé, c'est pesé....

                  Salut Edgar, 

                  • tableauOriginal n'a pas été initialisé (tu n'y a pas mis de valeurs), donc son contenu est indéterminé

                  Je n'ai effectivement pas initialisé TableauOriginal parce que le but de l'exercice est de le relier à "Tableau" puis de le copier dans TableauCopie (si j'ai bien lu!).

                  • A quoi te sert tableau[] dans ta fonction copie(....) ?

                  J'ai été obligé de mettre ma fonction Tableau[] dans copie parce que sinon le programme n'arrivait pas à compiler, il me retournait l'erreur " Tableau undeclared".

                  • Ta fonction moyenneTableau(....) est fausse. 

                  Je comprend maintenant pourquoi elle me renvoyait pas le nombre exact que j'attendais, merci ;) !

                  • Ta fonction copie(....) ne copiera jamais plus (ou moins) que 4 éléments.... pas très intéressant

                  Je sais bien mais c'est juste pour m’entraîner pour l'instant :D et merci pour les pistes concernant cette fonction, j'essayerais :)



                  • Partager sur Facebook
                  • Partager sur Twitter

                  Going Further. Code in Progress..

                  Tableaux [Exercice 3]

                  × 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