Partage
  • Partager sur Facebook
  • Partager sur Twitter

Copier les valeurs d'un tableau dans un autre

    8 octobre 2021 à 22:47:59

    Bonjour à tous!

    Toujours dans la série des tableaux, l'exercice me propose de copier les valeurs d'un tableau (tableauOriginal) dans un autre tableau (tableauCopie).

    Production :

    #include <stdio.h>
    #include <stdlib.h>
    
    void copie(int tableauOriginal[], int tableauCopie[], int tailleTableau);
    
    int main()
    {
        int tableauOriginal[4] = {12, 23, 42, 77}, tableauCopie[4] = {0}; // je crée deux tableaux de même taille
        copie(tableauOriginal, tableauCopie, 4);  // j'appelle ma fonction
        return 0;
    }
    
    void copie(int tableauOriginal[], int tableauCopie[], int tailleTableau)
    
        {
           int i;
    
           for(i=0; i<tailleTableau; i++)
            {
                tableauCopie[i] = tableauOriginal[i];   // Je copie les valeurs de tableauOriginal et les stocke dans tableauCopie
    
            }
    
            for(i=0; i<tailleTableau; i++)          // J'affiche les valeurs de tableauCopie
            {
                printf("%d\n", *(tableauCopie + i));
            }
    
        }
    

    Qu'en pensez-vous ? J'ai bon ?

    • Partager sur Facebook
    • Partager sur Twitter
      8 octobre 2021 à 23:22:33

      Hello,

      RiadOuhibi a écrit:

      Qu'en pensez-vous ? J'ai bon ?

      Il suffit que tu compiles et exécutes pour avoir ta réponse. Mais je mettrais l'affichage dans le main(), ou mieux dans une fonction dédiée à l'affichage.



      -
      Edité par edgarjacobs 8 octobre 2021 à 23:58:33

      • 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

        9 octobre 2021 à 1:48:20

        J'ajouterais que ce n'est pas souhaitable d'afficher dans la fonction de copie. Écris-toi une fonction qui ne fait que l'affichage.
        Si ça t'amuses, tu pourras afficher le tableau original et le tableau copie avant et après la copie pour voir ce que ça donne.
        Crois-moi, cette fonction te sera utile dans bien d'autres circonstances.

        -
        Edité par PierrotLeFou 9 octobre 2021 à 1:52:07

        • Partager sur Facebook
        • Partager sur Twitter

        Le Tout est souvent plus grand que la somme de ses parties.

          9 octobre 2021 à 7:35:40

          Bonjour,

          je vais faire une petite remarque sur tes commentaires. Tu as créé une fonction nommée copie. Le nom de ta fonction indique ce qu'elle doit faire et tu l'as donc bien choisi car effectivement elle copie un tableau dans un autre.

          En revanche ta boucle ligne 24 a comme commentaire : «J'affiche les valeurs de tableauCopie». Cela n'a clairement rien à voir avec ce que le nom de ta fonction promet ! Afficher des valeurs n'a rien à faire dans un fonction qui copie … Cela signifie que le morceau de code qui affiche devrait être indépendant = tu devrais écrire une fonction affiche qui fait ce boulot et l'appeler dans le main sur ton tableau contenant la copie après l'appel à la fonction copier.

          Esthétiquement il faudrait plus de consistence dans la présentation du code. La manière dont tu décales (indentes est le terme technique) les lignes dans main et dans copie n'est pas la même.

          Je vois que tu as du mal entre T[i] et *(T+i) ? C'est exactement la même chose …

          • Partager sur Facebook
          • Partager sur Twitter
            9 octobre 2021 à 7:55:13

            > Je vois que tu as du mal entre T[i] et *(T+i) ? C'est exactement la même chose …
            J'aurais pris ça pour un test ...
            • Partager sur Facebook
            • Partager sur Twitter

            Le Tout est souvent plus grand que la somme de ses parties.

              9 octobre 2021 à 9:51:47

              C'est vrai qu'il faudrait ajouter comme exercice : écrire une fonction qui affiche un tableau d'entiers.

              Et attention, on veut un « joli » affichage :

              [24, -2, 18, 26, 4, -13, 0]

              Cette fonction risque ensuite de beaucoup servir...

              • Partager sur Facebook
              • Partager sur Twitter
                9 octobre 2021 à 11:55:11

                edgarjacobs a écrit:

                Hello,

                RiadOuhibi a écrit:

                Qu'en pensez-vous ? J'ai bon ?

                Il suffit que tu compiles et exécutes pour avoir ta réponse. Mais je mettrais l'affichage dans le main(), ou mieux dans une fonction dédiée à l'affichage.

                -
                Edité par edgarjacobs il y a environ 11 heures

                Oui je comprends mais même si mon résultat est bon visuellement, je souhaite quand même qu'on critique de manière constructive mon code source.

                PierrotLeFou a écrit:

                > Je vois que tu as du mal entre T[i] et *(T+i) ? C'est exactement la même chose …
                J'aurais pris ça pour un test ...


                OUI C'est exact je voulais juste varier mon vocabulaire pour tester différentes syntaxes.

                robun a écrit:

                C'est vrai qu'il faudrait ajouter comme exercice : écrire une fonction qui affiche un tableau d'entiers.

                Et attention, on veut un « joli » affichage :

                [24, -2, 18, 26, 4, -13, 0]

                Cette fonction risque ensuite de beaucoup servir...

                D'accord je vais essayer. D'ailleurs je vous propose ma nouvelle production juste ici :

                Nouvelle production:

                #include <stdio.h>
                #include <stdlib.h>
                
                void copie(int tableauOriginal[], int tableauCopie[], int tailleTableau);
                void affiche(int tableauOriginal[], int tableauCopie[], int tailleTableau);
                void afficheTableauCopieAvt(int tableauCopie[], int tailleTableau);
                
                int main()
                {
                    int tableauOriginal[4] = {12, 23, 42, 77}, tableauCopie[4] = {0}; // je crée deux tableaux de même taille
                    afficheTableauCopieAvt(tableauCopie, 4); // J'affiche le tableau copié avt la copie
                    copie(tableauOriginal, tableauCopie, 4);// je copie tableauOriginal dans tableauCopie
                    affiche(tableauOriginal, tableauCopie, 4); // Jaffiche tableauCopie après la copie
                    return 0;
                
                }
                
                void copie(int tableauOriginal[], int tableauCopie[], int tailleTableau)
                
                    {
                       int i;
                
                       for(i=0; i<tailleTableau; i++)
                        {
                            tableauCopie[i] = tableauOriginal[i];   // Je copie les valeurs de tableauOriginal et les stocke dans tableauCopie
                
                        }
                    }
                
                void affiche(int tableauOriginal[], int tableauCopie[], int tailleTableau)
                    {
                        int i;
                        printf("\n\n");
                        printf("Les valeurs de tableau original sont: ");
                        for(i=0; i<tailleTableau; i++)          // J'affiche les valeurs de tableauOriginal
                        {
                            printf("%d ", *(tableauOriginal + i));
                
                        }
                
                        printf("\n\n");
                        printf("Les valeurs de tableau copie apres copie sont: "); //J'affiche les valeurs de tableauCopie après la copie.
                
                        for(i=0; i<tailleTableau; i++)
                        {
                            printf("%d ", *(tableauCopie + i));
                        }
                        printf("\n\n");
                
                    }
                
                void afficheTableauCopieAvt(int tableauCopie[], int tailleTableau)
                    {
                        int i;
                        printf("Les valeurs de tableau copie avant la copie sont: ");
                        for(i=0; i<tailleTableau; i++)          // J'affiche les valeurs de tableauCopie avant la copie
                        {
                            printf("%d ", *(tableauCopie + i));
                
                        }
                    }
                

                Alors, vous pensez que je mérite 20/20 avec cette nouvelle production ?



                -
                Edité par RiadOuhibi 9 octobre 2021 à 11:59:07

                • Partager sur Facebook
                • Partager sur Twitter
                  9 octobre 2021 à 12:22:50

                  @RiadOuhibi Bonjour, je viens de retirer des spams votre dernier message. Si cela arrive encore vous pouvez poster dans ce sujet Si votre message est considéré comme spam

                  • Partager sur Facebook
                  • Partager sur Twitter
                    9 octobre 2021 à 14:16:30

                    Tu te complique la vie !

                    Une seule fonction afficheTableau devrait suffire, il suffit qu'elle soit capable d'afficher n'importe qu'elle tableau ! 

                    PS : C'est un exercice du cours d'OCR que l'on rencontre souvent sur le forum, ce qui m'interpelle, c'est que le cours donne la fonction pour afficher un tableau mais que personne ne l'utilise ensuite !

                    • Partager sur Facebook
                    • Partager sur Twitter
                    ...
                      9 octobre 2021 à 17:08:03

                      La fonction d'affichage servira pour les centaines d'exercices à venir, donc elle doit être plus universelle.

                      Ce que tu dois faire, c'est quelque chose comme ça :

                      // ici on est ans le 'main'
                      printf("Les valeurs de tableau original sont: ");
                      affiche(tableauOriginal, 4);
                      printf("Les valeurs de tableau copie avant copie sont: ");
                      affiche(tableauCopie, 4);
                      copie(tableauOriginal, tableauCopie, 4);
                      printf("Les valeurs de tableau copie après copie sont: ");
                      affiche(tableauCopie, 4);
                      

                      Et la fonction 'affiche' servira pour n'importe quel tableau, donc sera déclarée de cette façon :

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

                      (Oui, les centaines, c'est peut-être un peu exagéré...)

                      Quant à l'affichage, j'ajouterais des délimiteurs. J'aime bien les crochets (pour un tableau) :

                      printf("[ ");
                      for(i=0; i<tailleTableau; i++)
                      {
                          printf("%d ", tableau[i]);
                      }
                      printf("]\n");

                       (c'est du chipotage...)

                      -
                      Edité par robun 9 octobre 2021 à 17:17:54

                      • Partager sur Facebook
                      • Partager sur Twitter
                        9 octobre 2021 à 17:54:06

                        On fait un concours sur la plus belle fonction?
                        (la présentation c'est assez personnel)
                        void affiche(int tableau[], int taille) {
                            printf("tableau[%d] = {", taille);
                            for(int i=0; i < taille; i++) {
                                printf(" %d", tableau[i]);
                            }
                            printf(" };\n");
                        }
                        • Partager sur Facebook
                        • Partager sur Twitter

                        Le Tout est souvent plus grand que la somme de ses parties.

                          9 octobre 2021 à 18:44:48

                          Celle qui me convient est celle-ci :

                          void affiche(int tableau[], int taille)
                          {
                              if (taille <= 0)
                                  printf("[");
                              else
                              {
                                  printf("[\%d", tab[0]);
                                  for (int i=1; i < taille; i++)
                                      printf(", %d", tab[i]);
                              }
                              printf("]\n");
                          }

                          Ça affiche ce genre de chose :

                          [8, -11, 44, 0, 212]

                          (comme les listes en Python).

                          -
                          Edité par robun 9 octobre 2021 à 18:52:22

                          • Partager sur Facebook
                          • Partager sur Twitter
                            9 octobre 2021 à 19:18:33

                            Si on connait les chaînes et pointeurs vers les chaînes:
                            (je met parfois un test au début si le nombre est trop grand, par exemple si taille=100)
                            Ça ressemble un peu à un énoncé en C,
                            -
                            void affiche(int tableau[], int taille) {
                                printf("array[%d]={", taille);
                                char *s="";
                                for(int i=0; i < taille; i++) {
                                    printf("%s%d", s, tableau[i]);
                                    s=", ";
                                }
                                printf("};\n");
                            }
                            • Partager sur Facebook
                            • Partager sur Twitter

                            Le Tout est souvent plus grand que la somme de ses parties.

                              10 octobre 2021 à 18:20:55

                              robun a écrit:

                              Ça affiche ce genre de chose :

                              [8, -11, 44, 0, 212]

                              (comme les listes en Python).

                              Ah oui, c'est joli.

                              #include <stdio.h>
                              
                              void affiche(int tableau[], int taille)
                              {
                              	putchar('[');
                              	if (taille > 0)
                              		printf("%d", tableau[0]);
                              	for (int i = 1; i < taille; i++)
                              		printf(", %d", tableau[i]);
                              	printf("]\n");
                              }
                              
                              int main(void)
                              {
                              	int t[] = { 1, 2, 3 };
                              	for (int i = 0; i < 4; i++)
                              		affiche(t, i);
                              	return 0;
                              }
                              


                              • Partager sur Facebook
                              • Partager sur Twitter
                                12 octobre 2021 à 14:54:22

                                A Robun qui voulait un joli tableau, le voilà:

                                Production:

                                void afficheTableauJoli(int *tableau, int tailleTableau)
                                    {
                                        int i;
                                        printf("Les valeurs de Tableau avt transformation sont: [");
                                        for(i=0; i<tailleTableau; i++ )
                                        {
                                            if(i!=tailleTableau-1)
                                             {
                                               printf("%d, ", tableau[i]);
                                             }
                                             else
                                             {
                                                printf("%d]", tableau[i]);
                                             }
                                        }
                                



                                T'as raison, je vais la garder cette fonction car elle est très utile donc autant avoir qqch de joli.

                                Ca affiche ce genre de chose:

                                [12, 83, 42, 77, 65, 99, 23, 39]



                                Merci à toi



                                -
                                Edité par RiadOuhibi 12 octobre 2021 à 14:56:12

                                • Partager sur Facebook
                                • Partager sur Twitter

                                Copier les valeurs d'un tableau dans un autre

                                × 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