Moyenne de deux tableaux en c
smomo
-
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
[Dal] Messages postés 6205 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
A voir également:
- Moyenne de deux tableaux en c
- Excel moyenne - Guide
- Fusionner deux tableaux excel - Guide
- Nombre de jours entre deux dates excel - Guide
- Deux ecran pc - Guide
- Comment faire deux colonnes sur word - Guide
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 ???
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.
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);
}
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]);
}
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).
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();
}
#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
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
#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 :
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 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
Dal