je viens de finir l'exercice 4 des tableaux, le programme s'exécute correctement mais je souhaite savoir si il y a tout de même des erreurs et/ou des points à améliorer ou bien une autre approche ?
PS: l'affichage du tableau vide et de la vérif de la copie est surement facultatif mais je les aient ajoutés pour être sûr que ma fonction copie bien les valeurs du tableau original dans le tableau copie et non pas que ce soit le simple affichage du tableau original.
Le message qui suit est une réponse automatique activée par un membre de l'équipe. Les réponses automatiques leur permettent d'éviter d'avoir à répéter de nombreuses fois la même chose, ce qui leur fait gagner du temps et leur permet de s'occuper des sujets qui méritent plus d'attention. Nous sommes néanmoins ouverts et si vous avez une question ou une remarque, n'hésitez pas à contacter la personne en question par Message Privé. Pour plus d'informations, nous vous invitons à lire les règles générales du forum
Merci de colorer votre code à l'aide du bouton Code
Les forums d'Openclassrooms disposent d'une fonctionnalité permettant de colorer et mettre en forme les codes source afin de les rendre plus lisibles et faciles à manipuler par les intervenants. Pour cela, il faut utiliser le bouton de l'éditeur, choisir un des langages proposés et coller votre code dans la zone prévue. Si vous utilisez l'éditeur de messages en mode Markdown, il faut utiliser les balises <pre class="brush: cpp;">Votre code ici</pre>.
Merci de modifier votre message d'origine en fonction.
C'est la première fois que je lance un sujet sur ce site, je ne savait pas comment mettre en forme mon code...
Dsl pour la gène occasionnée, je le renvoi coloré comme demandé par un membre de l'équipe.
------------------------------------
Bonjour,
je viens de finir l'exercice 4 des tableaux, le programme s'exécute correctement mais je souhaite savoir si il y a tout de même des erreurs et/ou des points à améliorer ou bien une autre approche ?
PS: l'affichage du tableau vide et de la vérif de la copie est surement facultatif mais je les aient ajoutés pour être sûr que ma fonction copie bien les valeurs du tableau original dans le tableau copie et non pas que ce soit le simple affichage du tableau original.
Merci d'avance pour vos réponses
Cordialement
#include <stdio.h>
#include <stdlib.h>
// Prototype de la fonction "copie"
void copie(int tableauOriginal[], int tableauCopie[], int tailleTableau);
int main(int argc, char *argv[])
{
// Initilisation des tableaux
int tableauOriginal[4] = {40, 60, 30, 20};
int tableauCopie[4] = {0}, i = 0;
// Affichage du Tableau Original
printf("TABLEAU ORIGINAL\n-----------------\n");
for(i = 0 ; i < 4 ; i++)
{
printf("--\n%d\n", tableauOriginal[i]);
}
// Affichage du Tableau Vide
printf("\nTABLEAU VIDE\n-------------\n");
for(i = 0 ; i < 4 ; i++)
{
printf("-\n%d\n", tableauCopie[i]);
}
printf("\nCOPIE DU TABLEAU\n-------------\n");
// Appel de la fonction "copie"
copie(tableauCopie, tableauOriginal, 4);
printf("\nVERIF - TABLEAU COPIE\n-------------\n");
// Vérification de la copie des valeurs dans "tableauCopie"
for(i = 0 ; i < 4 ; i++)
{
printf("--\n%d\n", tableauCopie[i]);
}
return 0;
}
// Fonction copie
void copie(int tableauOriginal[], int tableauCopie[], int tailleTableau)
{
int i;
// Copie des valeurs du tableauOriginal dans tableauCopie
for(i = 0 ; i < tailleTableau ; i++)
{
printf("--\n%d\n", tableauOriginal[i] = tableauCopie[i]);
}
}
J’ai essayé d’améliorer mon code comme tu me l’as suggéré.
je pense avoir réussi sur certains points malgré quelques zone d’ombres :
J’ai enlever les « printf » inutiles du « main » et de la fonction « copie ».
J’ai créé une vérification à l’aide d’une condition qui affiche les valeurs différentes de celle indiquée, le tout dans une boucle qui s’arrête au bout d’un certains nombre d’erreurs.*
* Les erreurs dont tu parlais, doivent-elles être des erreurs que avons créées nous même ( comme je l’ai fais dans mon codes )ou bien doivent-elles être totalement hasardeuses?
En fait, je me demande comment peut-il y avoir des erreurs de copie alors que le programme ne fais que ce pourquoi nous l’avons programmer du coup j’ai l’impression que ma vérification n’est pas bonne (à moins de créer nous mêmes ces erreurs comme je l’ai fais si c’est le cas je me prends la tête pour rien... ).
Peux-tu me donner un exemple ou me dire si j’ai fais ce que tu me demandais?
Les points sur lesquels je bloque :
Je n’arrive pas à trouver le moyen d’afficher « l’indice des erreurs » vu qu’on sais juste renvoyer la valeur d’une case ou son adresse, c’est sans doute un truc tout bête mais je bloque dessus...
Pour la vérification, du coup je ne suis pas sûr de ce que j’ai fait...donc !?
Et aussi tu me disais que je ne suis pas vraiment obligé d´initialiser mon tableauCopie mais quand je l’enlève ça m’affiche des erreurs le programme ne se lance pas du coup, peux-tu m’expliquer?
J´ai relus les cours précédents qui me paraissaient pertinents pour trouver une solution mais sans grand succès...
Un indice sur quels cours je dois revoir ?
#include <stdio.h>
#include <stdlib.h>
// Prototype de fonction.
void copie(int tableauOriginal[], int tableauCopie[], int tailleTableau);
int main (int argc, char *argv[])
{
int tableauOriginal[10] = {20, 20, 20, 1, 2, 3, 4, 5, 6, 7};
int tableauCopie[10] = {0}, i = 0;
// Appel de la fonction "copie" + Arrêt de la copie au-delà de 7.
copie(tableauCopie, tableauOriginal, 10);
// Vérification limitée de la copie .
for(i = 0 ; i < 7 ; i++)
{
// Affiche seulement les valeurs differentes de 20 (*Les fameuses erreurs) jusqu’à la limite de la boucle.
if(tableauCopie[i] != 20)
{
printf("%d\n\n", tableauCopie[i]);
}
}
return 0;
}
// Fonctions "copie".
void copie(int tableauOriginal[], int tableauCopie[], int tailleTableau)
{
int i = 0;
// Copie des tableaux.
for(i = 0 ; i < tailleTableau ; i++)
{
tableauOriginal[i] = tableauCopie[i];
}
}
Désolé pour le roman, je préfère éclaircir certains points maintenant plutôt que d’avancer avec des doutes.
#include <stdio.h>
#include <stdlib.h>
// Prototype de fonction.
void copie(int tableauOriginal[], int tableauCopie[], int tailleTableau);
int main (int argc, char *argv[])
{
int tableauOriginal[7] = {37, 2, 13, 4, 95, 6, 58};
int tableauCopie[7] = {0}, i = 0, compteurErreurs = 1;
// Appel de la fonction "copie" + Arrêt de la copie au-delà de 5.
copie(tableauOriginal, tableauCopie, 5);
// Vérification de la copie .
for(i = 0 ; i < 7 ; i++)
{
// Affiche seulement les valeurs differentes du tableauOriginal.
if(tableauCopie[i] != tableauOriginal[i])
{
printf("indice = %d, copie = %d, original = %d, nombre d'erreurs = %d\n\n", i, tableauCopie[i], tableauOriginal[i], compteurErreurs++);
}
}
return 0;
}
// Fonctions "copie".
void copie(int tableauOriginal[], int tableauCopie[], int tailleTableau)
{
int i = 0;
// Copie des tableaux.
for(i = 0 ; i < tailleTableau ; i++)
{
tableauCopie[i] = tableauOriginal[i];
}
}
On se prend toujours la tête sur des petits détails agaçants. C'est le boulot qui veut ça.
---
On gagne aussi à remplacer
int i = 0;
for(i = 0 ; i < tailleTableau ; i++) { ...
par
for (int i = 0; i < tailleTableau; i++) { ...
Parce que la variable i est locale à la boucle. Ca évite d'une part de la déclarer à un endroit où on n'en a rien à péter (la ligne 12, alors qu'on s'en sert ligne 16), et d'autre part de l'utiliser ailleurs par accident.
Ca existe depuis C99, donc + de 20 ans. Et si ça a été mis dans le standard, c'est parce que ça répondait à un vrai besoin. Lisibilité + Sécurité.
Quand on dit qu'un cours enseigne le C de l'époque des dinosaures, voila un exemple flagrant...
- Edité par michelbillaud 18 février 2020 à 10:46:46
On se prend toujours la tête sur des petits détails agaçants. C'est le boulot qui veut ça.
---
On gagne aussi à remplacer
int i = 0;
for(i = 0 ; i < tailleTableau ; i++) { ...
par
for (int i = 0; i < tailleTableau; i++) { ...
Parce que la variable i est locale à la boucle. Ca évite d'une part de la déclarer à un endroit où on n'en a rien à péter (la ligne 12, alors qu'on s'en sert ligne 16), et d'autre part de l'utiliser ailleurs par accident.
Ca existe depuis C99, donc + de 20 ans. Et si ça a été mis dans le standard, c'est parce que ça répondait à un vrai besoin. Lisibilité + Sécurité.
Quand on dit qu'un cours enseigne le C de l'époque des dinosaures, voila un exemple flagrant...
- Edité par michelbillaud hier à 10:46
-------------------------------
Tu veux dire que je ne suis pas obliger d'initialiser "i".
Par contre je suis obliger de le déclarer, non?
int tableauOriginal[7] = {37, 2, 13, 4, 95, 6, 58};
int tableauCopie[7] = {0}, i, compteurErreurs = 1;
// Appel de la fonction "copie" + Arrêt de la copie au-delà de 5.
copie(tableauOriginal, tableauCopie, 5);
// Vérification de la copie .
for(i = 0 ; i < 7 ; i++)
{
// Affiche seulement les valeurs differentes du tableauOriginal.
if(tableauCopie[i] != tableauOriginal[i])
{
printf("indice = %d, copie = %d, original = %d, nombre d'erreurs = %d\n\n", i, tableauCopie[i], tableauOriginal[i], compteurErreurs++);
}
}
return 0;
}
Sinon si je l'enlève complètement il m'affiche des erreurs :
Peut-être ai-je mal compris ce que tu me suggérer?
|In function 'main':|
|16|error: 'i' undeclared (first use in this function)|
|16|note: each undeclared identifier is reported only once for each function it appears in|
Si tu affichais le nombre d'erreur à la fin, tu aurais 1 au lieu de 0 si tu n'as pas d'erreur.
Merci pour cette remarque, au début j'avais initialiser mon comteurErreurs à 0 mais à l'exécution du programme à la première erreur il m'affiche 0 vu que j'avais mis l'incrémentation dans le printf et non après du coup j'ai mis 1 seulement je n'avais pas pensé à ce problème.
#include <stdio.h>
#include <stdlib.h>
// Prototype de fonction.
void copie(int tableauOriginal[], int tableauCopie[], int tailleTableau);
int main (int argc, char *argv[])
{
int tableauOriginal[7] = {37, 2, 13, 4, 95, 6, 58};
int tableauCopie[7] = {0}, i, compteurErreurs = 0;
// Appel de la fonction "copie" + Arrêt de la copie au-delà de 5.
copie(tableauOriginal, tableauCopie, 5);
// Vérification de la copie .
for(i = 0 ; i < 7 ; i++)
{
// Affiche seulement les valeurs differentes du tableauOriginal.
if(tableauCopie[i] != tableauOriginal[i])
{
printf("indice = %d, copie = %d, original = %d\n\n", i, tableauCopie[i], tableauOriginal[i]);
compteurErreurs++;
}
}
printf("Il y a %d erreurs", compteurErreurs);
return 0;
}
// Fonctions "copie".
void copie(int tableauOriginal[], int tableauCopie[], int tailleTableau)
{
int i = 0;
// Copie des tableaux.
for(i = 0 ; i < tailleTableau ; i++)
{
tableauCopie[i] = tableauOriginal[i];
}
}
Cet exercice m'a permis de revoir certains points où j'avais des lacunes mais vous m'avez aidé à les comprendre, UN GRAND MERCI à vous deux!!!
>Tu veux dire que je ne suis pas obliger d'initialiser "i".
NON
>Mais par contre je suis obliger de le déclarer.
OUI, un jour ou l'autre.
Vois tu la différence entre ces deux lignes ?
for ( i = 0; i < 7; i++)
for (int i = 0; i < 7; i++)
?
Edité par michelbillaud il y a environ 8 heures
Oui, maintenant je vois la différence, j'avais pas fait attention à l' INT dans le for...
merci
- Edité par B35 20 février 2020 à 1:25:57
Les tableaux - Exercice 4
× 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.
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.