Partage

Programme : Calcul de moyenne

De l'algorithmique au langage C

Le 16 janvier 2006 à 21:41:03

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 ? :lol: ). 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 */


int main(int argc, char *argv[])
{
unsigned char NomEleve[30] , PrenomEleve[30] , ClasseEleve[30] , Matiere[30] , Autre = 0 , NombreNotes = 0 ;
double NoteUn = 0.0 , NoteDeux = 0.0 , NoteTrois = 0.0 , NoteQuatre = 0.0 , NoteCinq = 0.0 ,  Moyenne = 0.0 ;
double CoeffNoteUn = 0.0 , CoeffNoteDeux = 0.0 , CoeffNoteTrois = 0.0 , CoeffNoteQuatre  = 0.0 , CoeffNoteCinq = 0.0 ;

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 ;)
                {
                case 2 :
                        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 ;
        case 3 :
                        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 ;
                case 4 :
                        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 ;
                case 5 :
                        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);
}
   
Publicité
Le 16 janvier 2006 à 21:41:03
Le 7 octobre 2010 à 23:41:54

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>
Le 8 octobre 2010 à 2:10:33

Et surtout utilise les bonnes balises pour la lisibilité, c'est plus dure de lire dans des balises pas destinées à cela.


De plus ce but de code est répété plusieurs fois:
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 ;


PS:
D'ailleurs sais-tu utilisé les tableaux ? Si oui, je te les conseils, sinon tan-pis.
Étudiant - Codeur en C                                                                                                                                                                  Copying is an act of love.    -   
Le 8 octobre 2010 à 8:19:20

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
Le 8 octobre 2010 à 17:32:24

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"
Le 8 octobre 2010 à 17:48:05

Citation : dark-lord

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", &note);
    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);
Le 8 octobre 2010 à 20:18:22

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).
Le 8 octobre 2010 à 20:29:07

Personne n'a vu que ce topic datait d'il y a 4 ans ?
Pwaite.net > Transfert de crédit téléphonique et monétisation de site web                                                                                        « I am awesome »