Moyenne de deux tableaux en c
smomo
-
[Dal] Messages postés 6122 Date d'inscription Statut Contributeur Dernière intervention -
[Dal] Messages postés 6122 Date d'inscription Statut Contributeur Dernière intervention -
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
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
9 réponses
-
for(j=0; j<(note[i]=-1) && j<(coef[i]=-1); j++
Que souhaites-tu faire en comparant j à note[i]=-1 ???
-
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. -
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);
} -
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]);
}-
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).
-
-
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
-
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();
} -
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 -
-
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-
Salut smomo,
Sur cette partie :
while(i<100 || note[i]!=-1) { scanf("%f",¬e[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 -
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
-