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
}
}
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
M'en veuillez pas. Si je suis ici c'est que je suis vraiment crevé :^D
J'ai retiré mes variables globales et retravailler certaines parties, résultat : mon programme marche ... 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
}
}
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
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
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 et merci pour les pistes concernant cette fonction, j'essayerais
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.
Going Further. Code in Progress..
Going Further. Code in Progress..
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Going Further. Code in Progress..