Calculer moyenne

Résolu/Fermé
anthony - 16 févr. 2010 à 15:10
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 - 16 févr. 2010 à 21:42
Bonjour,
voici un code qui devrait calculer la moyenne mais il m'indique une erreur de compatibilité:
#include <stdio.h>
#define NOTE 3
float moyenne(float tableau[NOTE]);
int main()
{
    float tableau[NOTE];
    int i;

    puts("Entrez vos tros notes pour calculer votre moyenne");
    for(i = 0; i < NOTE; i++)
        scanf("%f", &tableau[i]);

    printf("la moyenne est de %f\n", moyenne(tableau[NOTE]));

    return 0;
}

float moyenne(float tableau[NOTE])
{
    float resultat, addition = 0;
    int i;

    for(i = 0; i < NOTE; i++)
        addition += tableau[i];

    resultat = addition / NOTE;

    return resultat;
}



C:\Users\Anthony\Documents\test\main.c||In function `main':|
C:\Users\Anthony\Documents\test\main.c|13|error: incompatible type for argument 1 of `moyenne'|
||=== Build finished: 1 errors, 0 warnings ===|


je ne comprends pas l'erreur

12 réponses

ah donc en gros on doit toujours déclarer la taille du tableau au moins une fois part fonction ?
1
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 192
16 févr. 2010 à 15:41
non, la toute première fois, c'est tout.

par contre, il faut que tu trouves un moyen pour que chaque fonction connaisse la taille maximum (pour pas sortir du tableau, ce qui arrive souvent en C).
dans ton cas, c'est la variable pré processée "NOTE " qui evite le débordement. (ce qui indique que tu en es à tes premiers essais avec les tableaux ) ;)

0
anthony > Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014
16 févr. 2010 à 15:43
ah ok ben merci de votre aide
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 192
16 févr. 2010 à 15:21
printf("la moyenne est de %f\n", moyenne(tableau[NOTE]));
=> printf("la moyenne est de %f\n", moyenne(tableau[]));
voir meme => printf("la moyenne est de %f\n", moyenne(tableau));


float moyenne(float tableau[NOTE])
=> float moyenne(float tableau[])
et moi je préfèrerai
=> float moyenne(float *tableau)

en C, une fois que t'as déclaré la taille du tableau à la création, lui il se moque bien de la taille...
0
ah ok donc en gros un fois déclarer je n'ai plus besoin de mettre la taille ?

et pour ton code sa ne marche pas:
printf("la moyenne est de %.2f\n", moyenne(tableau[]));


C:\Users\Anthony\Documents\test\main.c||In function `main':|
C:\Users\Anthony\Documents\test\main.c|13|error: syntax error before ']' token|
||=== Build finished: 1 errors, 0 warnings ===|
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 192 > anthony
16 févr. 2010 à 15:26
essaye la 2° modifs:
printf("la moyenne est de %.2f\n", moyenne(tableau));

et poru être sur, tu ratrappes avec un float *tableau dans ta déclaration de fonction
0
ah oui sa marche mais quand tu dit que en C quand on déclarer la taille d'un tableau lui il se moque bien de la taille donc en gros plus besoin de redire la taille du tableau donc si je met sa sa devrais marcher:
float moyenne(float tableau)

biensur je modifie le prototype et ben pourtant non sa ne marche pas sa me met un message d'erreur :
C:\Users\Anthony\Documents\test\main.c||In function `main':|
C:\Users\Anthony\Documents\test\main.c|13|error: incompatible type for argument 1 of `moyenne'|
C:\Users\Anthony\Documents\test\main.c||In function `moyenne':|
C:\Users\Anthony\Documents\test\main.c|24|error: subscripted value is neither array nor pointer|
||=== Build finished: 2 errors, 0 warnings ===|
0
Perso je pense aussi qu'il faut un moyenne(tableau)

Et puis il y a une faute de frappe tout au début :

"puts("Entrez vos tros notes pour calculer votre moyenne");"

tu devrais mettre

puts("Entrez vos trois notes pour calculer votre moyenne");

Désolé sa me perturbais :)
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 192
16 févr. 2010 à 15:35
je crois qu'il y a une erreur dans ce que tu dis

Désolé ça me perturbais :)
0
blux Messages postés 26006 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 25 avril 2024 3 289 > Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014
16 févr. 2010 à 16:13
Ca me perturbait...

;-)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 192
16 févr. 2010 à 15:38
un tableau c'est un pointeur (de type float*). Donc, tu passes la taille lors de la création, mais sinon, lors des passsage d'une fonction à l'autre, c'est toujours un type float*

par contre, une fois dans ta fonction, rien ne t'empèche d'utiliser la notation "classique" du tableau tableau[1], etc...
0
Pourquoi ne pas essayer ceci, car je ne comprends pas pourquoi ton float est avant le main() !
Et puis tu a oublier les accolades dans ta boucle for

#include <stdio.h>
#define NOTE 3

int main()
{
float moyenne(float tableau[NOTE]);
float tableau[NOTE];
int i;

for(i = 0; i < NOTE; i++)
{
puts("Entrez une note ");
scanf("%f", &tableau[i]);
}
moyenne = tableau [0] + tableau [1] + tableau [2] / 3;
printf("la moyenne est de %.2f\n", moyenne);

return 0;
}

lol Nabla's merci pour la correction !
0
eu la je crois que tu t'es trompé car le prototype est dans la fonction main alors qu'il devrait être en dehors et dans ton code
float moyenne(float tableau[NOTE]); 

ne sert a rien tu peut l'enlever et déclarer une variable moyenne
0
garion28 Messages postés 1543 Date d'inscription mardi 16 juin 2009 Statut Membre Dernière intervention 3 avril 2011 404
16 févr. 2010 à 15:48
prend l'habitude de faire un printf pour voir la valeur de tes variables (pour les dépassement de capacité ou une valeur null alors qu'elle ne devrai pas l'être
0
Oui ba c'est ba là que je ne comprends pas pourquoi ceci est en dehors du main...

float moyenne(float tableau[NOTE]);

Je ne suis pas super calé en C mais on doit définir les float dans le main non ??

oui j'ai oublier un "float moyenne;" en dessous du "int i;"
0
Prend l'habitude de faire un printf pour voir la valeur de tes variables (pour les dépassement de capacité ou une valeur null alors qu'elle ne devrai pas l'être 

garion c'est ce que je fais j'utilise puts() quand on a pas besoin d'utiliser les variable et printf() quand je veux utiliser une variable.

float moyenne(float tableau[NOTE]); 
est un prototype il doit être placer au début et il signifie que la fonction moyenne est placer en dehors de la fonction principale main()
0
pourquoi tu ne défini pas tout simplement

float tableau[3];
float moyenne;

Si tu sais par avance qu'il y aura 3 notes !???
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 192
16 févr. 2010 à 16:01
de toute facon, il faudra bien qu'il vienne à une allocation dynamique du tableau, avec un
int taille = 3;
float * tableau = new float[taille];
0
oui mais je veux faire un programme ou je n'aurais pas a changer a chaque les valeurs de variable un programme dynamique
0
anthony > anthony
16 févr. 2010 à 16:03
float * tableau = new float[taille];

eu la je ne comprend pas ce code c'est quoi new c'est une fonction ??
0
garion28 Messages postés 1543 Date d'inscription mardi 16 juin 2009 Statut Membre Dernière intervention 3 avril 2011 404
16 févr. 2010 à 16:05
c'est la déclaration d'un tableau je crois (ou d'une collection)
0
alors là c'est bien la première fois que je vois une déclaration d'un tableau comme ca je ne pense pas que c'est une déclaration car les seul déclaration que je connaisse sont:
tableau[] = "";
*tableau = "";
tableau[taille] = "";

donc je ne pense que sa soit un déclaration
0
garion28 Messages postés 1543 Date d'inscription mardi 16 juin 2009 Statut Membre Dernière intervention 3 avril 2011 404
16 févr. 2010 à 16:12
ben si, ca dis que la variable tableau sera un tableau de type float (faut attendre que nabla soit là pour des explications)
0
non sa se dit pas les types son toujours definie avant la déclaration de variable
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 192
16 févr. 2010 à 16:52
je repasserai plus tard expliquer, j'ai du boulot.

mais en gros, essayes ca (ca plante, c'est normal)

int note= 3;
float tableau[note];

là il gueule parce que ton tableau n'est pas créé à l'execution, mais bien à la compilation, et donc t'as pas le droit de faire passer sa taille par une variable. Mais le principe est corect.

alors que si tu fais
int note= 3;
float *tableau= new float[note];

ca fait ce que tu voulais faire au dessus, mais le tableau est créé à l'execution. Donc tu peux demander combien de notes la personne veut saisir, stocker ca dans note, et ensuite executer ton code.
0
ah ok mais bon je vais pas me compliquer la vie j'ai enlever la taille de la fonction moyenne dans printf() et tout marche
merci de votre aide
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 192 > anthony
16 févr. 2010 à 21:42
de rien. Tu verras par la suite, quand tu auras bien appris à utiliser les pointeurs, qu'il est souvent nécessaire de déclarer tes tableaux avec un new.

Si tu as un problème, n'hésites pas à demander ;)
0