Moyenne de deux tableaux en c

Fermé
smomo - 2 oct. 2012 à 15:49
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 - 3 oct. 2012 à 11:10
Bonjour, j'ai un petit soucis avec une portion de code en c ! j'ai 2 tableaux l'un contenant des notes l'autres des coefs et je voudrais calculer la moyenne mais à l'exécution moyenne = 0.0000 lol voici la paortion de code qui cause problème

for(j=0; j<(note[i]=-1) && j<(coef[i]=-1); j++)
{
coefT = coefT+coef[i];
moyenne = moyenne + (note[i]*coef[i]);
moyenne = moyenne/coefT;
}
printf("la moyenne est: %f", moyenne);


à savoir coefT = total des coef[i] initialisé à 0 et moyenne est aussi initialisée à 0



A voir également:

9 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
2 oct. 2012 à 15:58
for(j=0; j<(note[i]=-1) && j<(coef[i]=-1); j++
Que souhaites-tu faire en comparant j à note[i]=-1 ???

0
Le problème viens de "j<(note[i]=-1", qui compare j à la note de l'élève (12/20 par exemple) et non à la taille du tableau note.

Donc soit tu connais la taille des tableaux notes et coeff, soit pour connaitre leur taille tu peux au préalable faire :
int tailleNote = sizeof (note) / sizeof (note[0]);
int tailleCoef = sizeof (coef) / sizeof (coef[0]);

for(j=0; j<tailleNote && j<tailleCoef; j++)

Ps : pas besoin de retirer 1 car en C un tableau commence à 0 et non à 1.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
2 oct. 2012 à 16:34
Le problème viens de "j<(note[i]=-1", qui compare j à la note de l'élève (12/20 par exemple) et non à la taille du tableau note.
Non, cela compare j à -1.

Ps : pas besoin de retirer 1 car en C un tableau commence à 0 et non à 1.
Tu confonds =-1 avec -=1... Rien à voir.
0
au fait le problème qui se pose est que la saisie des notes et des coefs dépend de l'utilisateur qui en tapant -1 met fin à la saisie, de plus les 2 tableaux ont pour taille 100 du coup pourrais je avoir comme condition "j<100 && j != (note[i]=-1) && j != (coef[i]=-1)" pour pouvoir exclure le "-1" ou dois faire quelque chose comme

for(j=0; j<100; j++)
{
while(note[i] != -1 && coef[i] != -1)
{
coefT = coefT+coef[i];
moyenne = moyenne + (note[i]*coef[i]);
moyenne = moyenne/coefT;
}
printf("la moyenne est: %f", moyenne);
}
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
2 oct. 2012 à 17:29
Ok, je comprends mieux.
Autre question. Tu parles de saisie. Comment sont déclarées tes tableaux et variables ? Double ou float ? Et comment utilises-tu scanf ou équivalent ? %lf ou %f ?

Pour la boucle, utilise plutôt :
i=0;
while (i<100 && note[i]!=-1)
{
     ...;
     i++;
}
0
voici pour la déclaration des variables:

int coef[100]={0},coefT=0, i=0,j;

float note[100]={0}, moyenne=0;

et pour l'utilisation du scanf :

-pour les notes
while(note[i]!=-1)
{
scanf("%f",¬e[i]);
}

-et pour les coefs
while(coef[i]!=-1)
{
scanf("%d",&coef[i]);
}
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
2 oct. 2012 à 17:57
scanf("%f",¬e[i]);
C'est un & (peut-être une erreur de copier-coller).

Pour la saisie des notes et coefs, je te conseille de revoir.
Tu mets : tant que note[i] vaut -1, saisie de note[i] sans jamais incrémenter i...

Pour les coefs, il faut poser une condition sur note[i] plutôt. Sinon, tu pourras te retrouver avec une note = -1 et un coeff normal (et réciproquement). Tu n'incrémentes pas i non plus...

Et enfin pour les deux saisies, n'oublie pas de faire une condition du style : i<100. Sinon plantage assuré (ou presque).
0

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

Posez votre question
au fait c'est différent " != " et c'est aussi une erreur de copie-coller pour le "&" et je me suis aperçu que quand j'incrémente pour le scanf après avoir taper "-1" le programme ne passe pas à l'instruction suivante
0
voici mon code

#include<stdio.h>
#include<stdlib.h>

int main(int argc, char *argv[])
{
/*déclaration des variables coefT est le total des coefs i et j des compteurs*/
int coef[100]={0},coefT=0, i=0,j;
float note[100]={0}, moyenne=0;

printf("Veuillez saisir vos notes\n\n");
printf("Notes: \t");
/*la fin de la saisie des note et des coef dépend de l'utilisateur qui en tapant -1 y met fin */
while(note[i]!=-1)
{
scanf("%f",¬e[i]);
}

printf("\n\nVeuillez saisir vos coefficients\n\n");
printf("Coefficients: \t");

while(coef[i]!=-1)
{
scanf("%d",&coef[i]);
}
/*le calcul de la moyenne gros problème lol j'ai du changer le "for" par un "do while" mais toujours pas le bon résultats*/
do
{
coefT = coefT+coef[i];
moyenne = moyenne + (note[i]*coef[i]);
moyenne = moyenne/coefT;
i++;
}
while(i<100 && note[i]!=-1 && coef[i]!=-1);
printf("la moyenne est: %f", moyenne);
getch();
}
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
2 oct. 2012 à 21:54
Tu n'a pas tenu compte de toutes mes remarques.
while(coef[i]!=-1)
{
scanf("%d",&coef[i]);
}
Il faut incrémenter i, mettre une condition sur i et sur coef.
De même pour while(note).
0
si c'est à ça que tu fais référence

while(i<100 && note[i]!=-1)
{
scanf("%f",¬e[i]);
i++;
}

ben quand je tape -1 pour marquer la fin de la saisie des notes et que je tape sur "Enter" pour passer à l'instruction suivante qui consiste à saisir les coefs ben rien ne se passe en quelque sorte il ne passe pas à l'instruction suivante
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
2 oct. 2012 à 22:45
Tu as oublié de remettre i à 0 pour la saisie des coef.
Tu as remis: ¬e[i] au lieu de ¬e[i]. Est-ce normal ?
0
j'ai initialisé i à 0 à la déclaration des variables
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
2 oct. 2012 à 23:37
Oui, mais j'ai dit : pour la saisie des coef.
A la saisie des notes, t'incrémentes i (avec la nouvelle version), donc i>0. Et à la fin tu refais while scanf sur les coef. Il faut donc remettre i à 0...
0
ok je vois ce que tu veux dire voici le nouveau code

#include<stdio.h>
#include<stdlib.h>

int main(int argc, char *argv[])
{
/*déclaration des variables coefT est le total des coefs i et j des compteurs*/
int coef[100]={0},coefT=0, i=0,j;
float note[100]={0}, moyenne=0;

printf("Veuillez saisir vos notes\n\n");
printf("Notes: \t");
/*la fin de la saisie des note et des coef dépend de l'utilisateur qui en tapant -1 y met fin */
while(i<100 || note[i]!=-1)
{
scanf("%f",¬e[i]);
i++;
}

printf("\n\nVeuillez saisir vos coefficients\n\n");
printf("Coefficients: \t");

i=0;
while(i<100 || coef[i]!=-1)
{
scanf("%d",&coef[i]);
i++;
}
/*le calcul de la moyenne gros problème lol j'ai du changer le "for" par un "do while" mais toujours pas le bon résultats*/
i=0;
do
{
coefT = coefT+coef[i];
moyenne = moyenne + (note[i]*coef[i]);
moyenne = moyenne/coefT;
i++;
}
while(i<100 && note[i]!=-1 && coef[i]!=-1);
printf("la moyenne est: %f", moyenne);
getch();
}

mais il y a toujours problème après la saisie des notes en tapant -1 puis enter la programme ne va pas a l'instruction suivant qui consiste à saisir les coefs
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié par [Dal] le 3/10/2012 à 11:12
Salut smomo,

Sur cette partie :

while(i<100 || note[i]!=-1)      
{      
  scanf("%f",&note[i]);      
  i++;      
} 

deux problèmes :

- c'est un && (and) et non || (or) que l'on devrait contrôler
- ton contrôle se fait sur la mauvaise case du tableau, puisque i++ est incrémenté après la saisie

Je verrai plutôt un while ne contrôlant que i et un break après un if testant la (bonne) valeur entrée.

Ton code, pour le reste, fait un peu mal aux yeux :-) entre autres : c'est "getchar();", et non "getch();", et tu dois retourner un int à main, donc un "return 0;" à la fin de main serait le bienvenu, tu ne vérifies pas qu'on a saisi le même nombre de notes et de coefficients, ou qu'on en a saisi au moins un de chaque.


Dal
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
3 oct. 2012 à 11:10
Sur le calcul de ma moyenne.. il ne faudrait pas savoir sur combien les notes sont entrées (sur 20 ?) pour pouvoir faire une règle de 3 après l'application des coefficients ? J'avoue que je comprend pas trop ton calcul. Ah, oui.. il faudrait aussi vérifier que le nombre saisi correspond à quelque chose entre 0 et 20, si c'est sur 20.


Dal
0