Correction d'un exercice en c

Fermé
mehdocuh77 - Modifié par mehdocuh77 le 2/10/2011 à 15:53
Hxyp Messages postés 401 Date d'inscription vendredi 28 janvier 2011 Statut Membre Dernière intervention 27 avril 2014 - 2 oct. 2011 à 19:52
Bonjour,

SVP corrigez moi cet exercice




Énoncé:
écrire un programme en c permettant de saisir les m notes des n étudiants dans un tableau de deux dimensions(m et n sont des constantes à définir).On suppose que les notes possèdent le même coefficient,calculer la moyenne de chaque étudiant ainsi que la moyenne de la classe.


Ma solution proposé

#include<stdio.h>
#define N 3
#define M 2
float t[N][M];
main()
{double moye=0,moyc=0,sn=0,sm=0;int i,j;
for (j=0;j<M;j++)
{for (i=0;i<N;i++)
do
{printf("donner les notes de chaque etudiant\n");
scanf("%4:2f",&t[i][j]);}while(t[i][j]<0||t[i][j]>20);}
for(i=0;i<N;i++)
{for(j=0;j<M;j++)
sn+=t[i][j];}
moye=sn/N;
sm+=moye;
moyc=sm/M;
printf("la moeyenne de l'etuduiant numero %d est: %f\n",j++,moye);
printf("la moeyenne de la classe est: %f",moyc);

return 0;}








1 réponse

Hxyp Messages postés 401 Date d'inscription vendredi 28 janvier 2011 Statut Membre Dernière intervention 27 avril 2014 54
Modifié par Hxyp le 5/10/2011 à 00:58
Bonjour,
Le problème avec vôtre programme c'est qu'il faille le modifier et le recompiler à chaque changement du nombre d'étudiant ainsi que des notes. Pour passer outre utilisez un tableau de pointeurs :
float **tableau;

et allouez l'espace nécessaire sur demande de l'utilisateur, pour le nombre d'étudiants :
tableau = malloc(sizeof(float*)*nombredetudiant);

puis pour le nombre de notes :
int i;  
for(i=0;i<nombredetudiant;i++){  
tableau[i] = malloc(sizeof(float)*nombredenote);  
}

et vous obtenez un double tableau alloué dynamiquement au nombre d'étudiants et de notes nécessaires.
A partir de là il ne vous reste plus qu'à le remplir et à faire la moyenne pour chaque étudiant (tableau[n][m] où n sont les étudiants et m les notes).

Edit : j'avais mis "int **tableau;"... bien entendu c'est "float **tableau;"
pouvait porter à confusion j'en suis désolé..
0