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));
}
}
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
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
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
Le Tout est souvent plus grand que la somme de ses parties.
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 …
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 ?
@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
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 !
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) :
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"); }
Le Tout est souvent plus grand que la somme de ses parties.
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"); }
Le Tout est souvent plus grand que la somme de ses parties.
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
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.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.