Partage
  • Partager sur Facebook
  • Partager sur Twitter

exercice tableau

exercice 3

    15 juin 2021 à 20:24:30

    Bonjour dans cette exercice on doit copier les éléments d'un tableau dans l'autre.

    Ce qui est étrange c'est que dans mon cas certaines cases marchent mais pas toute, une idée du pouquoi ?


    void copier(int *tableauOG[], int tailleTableau);
    int main(int argc, char *argv[])
    {
        int tableauOG[3];
        tableauOG[0] = 2;
        tableauOG[1] = 0;
        tableauOG[2] = 3;
    copier(tableauOG,3);
    
    
        return 0;
    }
    
    void copier(int *tableauOG[], int tailleTableau)
    {
    
    int tableau_copie[tailleTableau], i = 0;
    tableau_copie[0] = 0;
        tableau_copie[2] = 0;
        tableau_copie[1] = 0;
     tableau_copie[0]=tableauOG[0];
    tableau_copie[1]=tableauOG[1];
    tableau_copie[2]=tableauOG[2];
          for (i = 0 ; i < tailleTableau ; i++)
           {
    
    printf("%d\n", tableau_copie[i]);
    
        }
        }
    
    Dans ce cas la case 1 se fait bien copier et affiche 2, mais la 2 se fait copier à la place de la case 1 et la case 2 se fait pas du tout copier
    • Partager sur Facebook
    • Partager sur Twitter
      15 juin 2021 à 20:36:23

      bonjour,  désolé de ne pas te donner la réponce mais dans l'initialisation de la fonction copier pas besoin de mette entre crocher l'étoile suffit : 

      LeoGyger a écrit:



      void copier(int *tableauOG[], int tailleTableau);
      
      void copier(int *tableauOG[], int tailleTableau)
      
      


      • Partager sur Facebook
      • Partager sur Twitter

      le code FAIT le bonheur (pour moi en tous cas)

        15 juin 2021 à 20:47:39

        Tu devrais même dire : il ne faut pas mettre à la fois un * et un [], c'est soit l'un soit l'autre (de préférence [] puisque c'est un tableau, mais là on a le choix).

        Sinon, autre problème : il est où l'autre tableau ? Il est prisonnier de la fonction, on ne pourra pas l'utiliser dans le 'main'. En fait il me semble que la fonction à écrire devrait avoir comme prototype :

        void copier(int tableauOG[], int tableau_copie[], int tailleTableau);

        Et puis les lignes 21-23 doivent être écrites dans une boucle (afin de pouvoir utiliser la fonction avec des tableaux de 18 millions d'éléments).

        -
        Edité par robun 15 juin 2021 à 20:51:07

        • Partager sur Facebook
        • Partager sur Twitter
          15 juin 2021 à 20:52:19

          robun a écrit:

          Tu devrais même dire : il ne faut pas mettre à la fois un * et un [], c'est soit l'un soit l'autre (de préférence [] puisque c'est un tableau, mais là on a le choix).

          Sinon, autre problème : il est où l'autre tableau ? Il est prisonnier de la fonction, on ne pourra pas l'utiliser dans le 'main'. En fait il me semble que la fonction à écrire devrait avoir comme prototype :

          void copier(int tableauOG[], int tableau_copie[], int tailleTableau);

           Le problème c'est ce que si je fais cela mon "copier(tableauOG,3) ne fonctionne plus. mais ceci au final c'est un truc que je sais gérer, mon problème vient que la console me montre la case 2 à la place de la case 1 pour le tableau_copie

          -
          Edité par robun il y a moins de 30s



          • Partager sur Facebook
          • Partager sur Twitter
            15 juin 2021 à 20:54:42

            Oui, dans ce cas c'est soit l'étoile soit les crochets, mais pas les deux, ce qui devrait faire fonctionner ton code.

            Mais voilà, ta fonction devrait pouvoir copier des tableaux de n'importe quelle taille, or ce n'est pas le cas. Tu devrais donc utiliser les boucles pour faire la copie comme tu le fait pour l'affichage.

            De plus ta fonction copie ne devrait rien afficher seulement copier, l'affichage tu devrais le faire avec la fonction affiche que tu as vu dans le cours.

            Et par pitié indente ton code correctement, par que là c'est horrible !

            • Partager sur Facebook
            • Partager sur Twitter
              15 juin 2021 à 20:58:51

              ça marche merci!

              Et oui je vais faire un effort pour rendre mon code plus lisible, j'avoue que là après des heures de frustration j'en pouvais plus. Aussi merci du conseil pour les boucles
              • Partager sur Facebook
              • Partager sur Twitter
                16 juin 2021 à 14:14:11

                Salut,

                Il est également recommandé d'éviter de reprendre tes noms de variables dans tes prototypes, une copie, c'est une source vers une destination souvent nommées src et dst :

                void copier(int src[], int dst[], int taille);

                Ou alternativement from[], to[] etc... mais cela doit définir clairement dans quelle direction va circuler l'information :

                //écrire une structure dans un fichier :
                int writeStruct(MyStruct *src, FILE* dst);
                
                //lire depuis un fichier :
                int readStruct( FILE* src, MyStruct *dst);

                etc... Libre à toi de choisir l'ordre des arguments, perso je le fais comme je lis : mettre(ce Truc, dans Machin), mais certaines fonction (y compris standards) prennent la destination en argument de tête et ensuite la source, et se lisent : mettre (dans Machin, ce truc).

                Aussi, un argument qui s'appelle copie_tableau peut laisser entendre qu'il faut lui passer une copie de tableauOG, pas que c'est là où va stocker le résultat de la copie.

                • Partager sur Facebook
                • Partager sur Twitter

                Bonhomme !! | Jeu de plateforme : Prototype.

                exercice tableau

                × 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