Moyenne pondérer! problème

Fermé
justine - 22 nov. 2007 à 18:08
mamiemando Messages postés 33401 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 28 novembre 2024 - 26 nov. 2007 à 00:28
Bonjour,
je bloque sur un programme( en c) qui demande les notes obtenues dans un cours ( /20), le stocker dans un vecteur. dans un autres vecteurs la pondération du cours, le programme affiche le total de l'étudiant et le pourcentage. en fait je ne vois pas comment faire quelqu'un peut m'aider à le réaliser
merci

3 réponses

mamiemando Messages postés 33401 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 28 novembre 2024 7 804
22 nov. 2007 à 18:47
Le concept :
- La première étape c'est de demander le nombre N de note pour pouvoir allouer tes deux vecteurs (avec un malloc).
- Ensuite il faut faire une boucle pour demander les N notes et ainsi remplir le vecteur de notes. La boucle adéquate c'est bien entendu la - boucle for (pour).
- Même chose avec les coefficients.
- Enfin il faut parcourir les deux tableaux pour calculer la moyenne arithmétique.

Pour que l'exercice te permette de t'entraîner, plutôt que de te donner directement la réponse je te propose de fonctionner en trois étapes :
1) Décrire le principe du programme (ce que je viens de faire)
2) Ecrire le programme en pseudo code
3) Ecrire le programme en C

Je te propose à présent de faire l'étape (2), je te la corrige ensuite si tu veux, et ensuite on passe de la même façon à l'étape (3).

A toi de jouer, bonne chance ;-)
0
bonjour jai le même problème et voici ce que jai fait, on peut m'aider à le corriger?
merci

#include <stdio.h>
#include <stdlib.h>
#define MAX 20

int vnote[MAX],vpond[MAX];
int total, limite,i,j;
float pourcentage;
void main (void)

/* calcule de la moyenne pondérer d'un cours avce pourcentage*/
{

printf("entrez le nombre max de cours a introduire\n");
scanf("%d",&limite);

for(i=0;i<limite;i++)
{
printf("entrez note de cours\n");
scanf("%d",&vnote[i]);
}


/* for(i=0;i<limite;i++)
{
printf("%d",vnote[i]);
} */


printf("\n");

for(j=0;j<limite;j++)
{
printf("entrez la ponderation du cours\n");
scanf("%d",&vpond[j]);

}





if(vnote[i] ==vpond[i])

for(i=0;i<limite;i++)
{
printf("total\n");
total= vnote[i] + vnote[i]++;
printf("%d",total);
printf("\n");
}



else

for(i=0;i<limite;i++)
{ printf("total\n");
total= vnote[i]*vpond[j];
printf("%d",total);
}

printf("\n");
for(i=0;i<limite;i++)
{
printf("pourcentage\n");
pourcentage = (total /100)/total;
printf("%d",pourcentage);
}
}
0
mamiemando Messages postés 33401 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 28 novembre 2024 7 804
26 nov. 2007 à 00:28
Je ne comprends pas très bien le passage
 total= vnote[i] + vnote[i]++; 

Première étape demander le nombre de notes, sinon tu es obligé d'allouer statiquement tes deux vecteurs (cf <1>). Typiquement ici tu ne peux avoir plus de 20 notes. Le reste est bon dans l'ensemble hormis le passage que je ne comprends pas.

Voici le programme que je vous propose.
#include <stdio.h>
#include <stdlib.h>

int main(){
    unsigned nb_note,i;
    double *vnotes,*vcoeff;

    // Demander le nombre de notes
    printf("Nb notes ? ");
    scanf("%i",&nb_note);

    // Allouer les deux vecteurs
    vnotes = (double *)malloc(nb_note*sizeof(double));
    vcoeff = (double *)malloc(nb_note*sizeof(double));

    // Demander les notes
    printf("Saisissez les notes :\n");
    for(i = 0;i < nb_note; ++i){
        double note;
        do{
            printf("Note (%i/%i) ? ",i+1,nb_note);
            scanf("%lf",&note);
        }while(note > 20 || note < 0);
        vnotes[i] = note;
    }

    // Demander les coeffs
    printf("Saisissez les notes :\n");
    for(i = 0;i < nb_note; ++i){
        double coeff;
        do{
            printf("Coeff (%i/%i) ? ",i+1,nb_note);
            scanf("%lf",&coeff);
        }while(coeff < 0);
        vcoeff[i] = coeff;
    }

    // Calculer la moyenne
    {
        double moyenne = 0;
        double somme_coeff = 0;
        for(i = 0;i < nb_note; ++i){
            moyenne += vcoeff[i]*vnotes[i];
            somme_coeff += vcoeff[i];
        }
        moyenne /= somme_coeff;
        printf("moyenne = %lf\n",moyenne);
    }

    // Libérer les deux vecteurs
    free(vnotes);
    free(vcoeff);
    return 0;
}

A l'exécution :
Nb notes ? 5
Saisissez les notes :
Note (1/5) ? 10
Note (2/5) ? 11.5
Note (3/5) ? 17
Note (4/5) ? 14
Note (5/5) ? 8
Saisissez les notes :
Coeff (1/5) ? 4
Coeff (2/5) ? 1
Coeff (3/5) ? 5
Coeff (4/5) ? 2
Coeff (5/5) ? 3
moyenne = 12.566667

Tu noteras que main retourne un int (code d'exécution 0 = tout va bien).

Bonne chance
0