Bonsoir, Voici le code source (très long je vous l'accorde ) D'un programme qui permetrait de calculer les moyennes (pratique pour les scolaires non ? ). Bon par contre il n'est pas très au point, une petite correction serait la bienvenue.
Merci à tous. (Désolé pour la presentation du code, j'avoue que c'est un peu sérré ).
#include <stdio.h> #include <stdlib.h>
/*On veut realiser un algorithme permattant de calculer la moyenne
de X notes coefficientees dans une matiere pour un eleve */
printf("Bienvenue dans le programme de calcul de moyennes des eleves.\n\n");
do { printf("Entrez le nom de l'eleve : ");
scanf("%s", &NomEleve ); printf("\n"); printf("Entrez le prenom de l'eleve : ");
scanf("%s", &PrenomEleve ); printf("\n"); printf("Entrez la classe de l'eleve : ");
scanf("%s", &ClasseEleve ); printf("\n"); printf("Entrez la matiere de l'eleve : ");
scanf("%s", &Matiere ); printf("\n"); printf("Combien de notes ? (limite a 5 notes) : ");
scanf("%ld", &NombreNotes ); printf("\n\n");
switch(NombreNotes)// Je commence a 2 : La moyenne d'une seule note n'est pas difficile a calculer { case2 : printf("Entrez la note 1 : ");
scanf("%lf", &NoteUn ); printf("\n"); printf("Entrez le coefficient de la note 1 : ");
scanf("%ld", &CoeffNoteUn ); printf("\n"); printf("Entrez la note 2 : ");
scanf("%lf", &NoteDeux ); printf("\n"); printf("Entrez le coefficient de la note 2 : ");
scanf("%ld", &CoeffNoteDeux ); printf("\n\n");
Moyenne = (NoteUn * CoeffNoteUn + NoteDeux * CoeffNoteDeux) / (CoeffNoteUn + CoeffNoteDeux) ; printf("L'eleve %s %s , de %s a une moyenne de %lf en %s. \n\n", NomEleve , PrenomEleve , ClasseEleve , Moyenne , Matiere ); printf("\n\n"); break ; case3 : printf("Entrez la note 1 : ");
scanf("%lf", &NoteUn ); printf("\n"); printf("Entrez le coefficient de la note 1 : ");
scanf("%ld", &CoeffNoteUn ); printf("\n"); printf("Entrez la note 2 : ");
scanf("%lf", &NoteDeux ); printf("\n"); printf("Entrez le coefficient de la note 2 : ");
scanf("%ld", &CoeffNoteDeux ); printf("\n"); printf("Entrez la note 3 : ");
scanf("%lf", &NoteTrois); printf("\n"); printf("Entrez le coefficient de la note 3 : ");
scanf("%ld", &CoeffNoteTrois ); printf("\n\n");
Moyenne = (NoteUn* CoeffNoteUn + NoteDeux * CoeffNoteDeux + NoteTrois * CoeffNoteTrois)
/ (CoeffNoteUn + CoeffNoteDeux + CoeffNoteTrois); printf("L'eleve %s %s , de %s a une moyenne de %lf en %s. \n\n", NomEleve , PrenomEleve , ClasseEleve , Moyenne , Matiere ); printf("\n\n"); break ; case4 : printf("Entrez la note 1 : ");
scanf("%lf", &NoteUn ); printf("\n"); printf("Entrez le coefficient de la note 1 : ");
scanf("%ld", &CoeffNoteUn ); printf("Entrez la note 2 : ");
scanf("%lf", &NoteDeux ); printf("\n"); printf("Entrez le coefficient de la note 2 : ");
scanf("%ld", &CoeffNoteDeux ); printf("Entrez la note 3 : ");
scanf("%lf", &NoteTrois ); printf("\n"); printf("Entrez le coefficient de la note 3 : ");
scanf("%ld", &CoeffNoteQuatre ); printf("Entrez la note 4 : ");
scanf("%lf", &NoteQuatre ); printf("Entrez le coefficient de la note 4 : ");
scanf("%ld", &CoeffNoteQuatre );
Moyenne = (NoteUn * CoeffNoteUn + NoteDeux * CoeffNoteDeux + NoteTrois * CoeffNoteTrois + NoteQuatre * CoeffNoteQuatre)
/ (CoeffNoteUn + CoeffNoteDeux + CoeffNoteTrois + CoeffNoteQuatre); printf("\n\n"); printf("L'eleve %s %s , de %s a une moyenne de %lf en %s. \n\n", NomEleve , PrenomEleve , ClasseEleve , Moyenne , Matiere ); printf("\n\n"); break ; case5 : printf("Entrez la note 1 : ");
scanf("%lf", &NoteUn ); printf("\n"); printf("Entrez le coefficient de la note 1 : ");
scanf("%ld", &CoeffNoteUn ); printf("\n"); printf("Entrez la note 2 : ");
scanf("%lf", &NoteDeux ); printf("\n"); printf("Entrez le coefficient de la note 2 : ");
scanf("%ld", &CoeffNoteDeux ); printf("\n"); printf("Entrez la note 3 : ");
scanf("%lf", &NoteTrois ); printf("\n"); printf("Entrez le coefficient de la note 3 : ");
scanf("%ld", &CoeffNoteTrois ); printf("\n"); printf("Entrez la note 4 : ");
scanf("%lf", &NoteQuatre ); printf("\n"); printf("Entrez le coefficient de la note 4 : ");
scanf("%ld", &CoeffNoteQuatre ); printf("\n"); printf("Entrez la note 5 : ");
scanf("%lf", NoteCinq ); printf("\n"); printf("Entrez le coefficient de la note 5 : ");
scanf("%ld", CoeffNoteCinq );
Moyenne = (NoteUn * CoeffNoteUn + NoteDeux * CoeffNoteDeux + NoteTrois * CoeffNoteTrois + NoteQuatre * CoeffNoteQuatre + NoteCinq * CoeffNoteCinq )
/ (CoeffNoteUn + CoeffNoteDeux + CoeffNoteTrois + CoeffNoteQuatre + CoeffNoteCinq); printf("\n\n"); printf("L'eleve %s %s , de %s a une moyenne de %lf en %s. \n\n", NomEleve , PrenomEleve , ClasseEleve , Moyenne , Matiere ); printf("\n\n"); default : printf("Donnee incorecte !!!\n\n"); break ; printf("Voulez vous calculer une autre moyenne ( 0 - Non , 1 - Oui ) : ");
scanf("%ld", &Autre ); } }while( Autre != 0); return(0); }
Pour plus de lisibilité je te conseille de ne pas tout écrire dans le main et de découper ton code en plusieurs fonction.
Ensuite c'est dommage de faire des cases différent selon le nombre de notes.
tu pourai a la place du case faire un:
for (i = 0, i < NombreNotes, ++i)
{
[...] /*calcul moyenne*/
}
printf("Combien de notes ? (limite a 5 notes) : ");
scanf("%ld", &NombreNotes );
/* Tu peut faire ici une verification pour voir
si lutilisateur ta bien mi un nombre entre 1 et 5 */
Sinon je ne sais pas si tu as vu le cours sur les listes chainees mais pour ce programme il serai interessent de creer une structure tel que
typedef struc s_note
{
int note;
int coef;
} t_note;
et de faire une listee chainee de cette structure. Ainsi tu ne sera plus limitee a un nombre (5 ou peut importe)</code>
nsy > Pas nécessaire une liste chaînée. Par contre la structure est pas mal. Lors de la saisie du nombre de note on alloue dynamiquement le nombre de case nécessaire dans le tableau. C'est quand même plus simple la manipulation d'un tableau que d'une liste.
Zest777 > Quand tu commence à faire du copier coller dans un code c'est que tu ne pars dans la bonne direction. Il serait plus judicieux d'utiliser une boucle pour permettre la saisie et le calcul rapide de la moyenne. Tu pourras largement diviser par 5 la longueur de ton code. Utilise une boucle comme te la montré nsy
je te conseil une structure comme on te l'a déja dit et aussi ce petit bout de programme:
scanf("%d",&nbEleve);
while(i != nbEleve)
{
//Ton code que tu écrira...
i++;
}
moyenne_general = sommeNote / i;
printf("La moyenne generale est de %d",moyenne_general);
fais aussi une structure "notes" qui contiendra le nombre de note et les notes
exemple:
typedef struct note
{
int nbnote;
int note[100];
int note_acutel;
}note;
int main()
{
//ton code...
//ligne de la boucle...
note[i] = note_actuel;
//un peu plus loin...
printf("moyene:");//ect...
//a la fin
return 0;
}
"Il est impossible pour un homme d'apprendre ce qu'il croit déjà connaître"
nsy >Lors de la saisie du nombre de note on alloue dynamiquement le nombre de case nécessaire dans le tableau.
Je ne pense pas qu'il soit nécessaire de stocker toutes les notes pour en faire la moyenne... On peut très bien la faire de manière progressive : pas de tableau, encore moins de chaîne
for (i=1 ; i<=nbNotes ; i++)
{
printf("\nEntrez la note %d : ", i);
scanf("%f", ¬e);
printf("Entrez le coefficient de la note %d : ", i);
scanf("%f", &coef);
total += coef*note;
coefTotal += coef;
}
printf("\nVotre moyenne est de %.3f.\n", total/coefTotal);
Alors là, je suis bluffée que vous voyiez ça en algorithmique.
void calcul_moyenne(void)
{
unsigned int cpt = 0, total = 0, tmp;
int res_scanf;
printf("Entrez un nombre : ");
/* tant qu'on n'arrive pas à la fin du flux (en cas de direction depuis un fichier) et que la capture est valide, on demande un nouveau nombre */
while((res_scanf = scanf("%d",tmp)) != EOF && res_scanf != 0)
{
total += tmp;
cpt++;
printf("Entrez un nombre : ");
}
if(cpt == 0)
printf("Vous n'avez entré aucun nombre.\n");
else
printf("La moyenne de tous les nombres est %f\n",((double) total) / cpt);
if(res_scanf != EOF) /* si on a eu une erreur dans le buffer, on le vide avant de sortir */
while(getchar() != '\n');
}
Au fait, le format dans printf pour un double, c'est %f (j'ai aussi été surprise quand on me l'a montré dans le man de printf).
🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles - ♡ Copying is an act of love.