algorithme du programme qui saisit des notes , les range dans un tableau et calcule leur moyen dans les cas suivant:
-calcule la moyen de plusieurs eleves , qui peuvent avoir un nombres de note different entre eux
- les affiches comme sa
eleve1: m 11.10
eleve2: m 9.65
j ai fini mon codage il comporte des bugs , mais impossible de trouve ou je pensais c etais un probleme de tableau mais j ai verifier et je pense pas.Le compilage se fait , donc pas une erreur de saisis.
c est un exercices pour l ecole , je prefere pas que on me donne la reponse mais que on me guide !
Merci a tous
/*librairies*/
#include<stdio.h>
#include<stdlib.h>
/*constante */
#define taillemax1 10
#define taillemax2 10
#define taillemax3 10
int main (void)
{
/*variable */
int nbnote, i, j, numeroeleve, stop,indiceaffichage;
float notetableau[taillemax1][taillemax2];
float moyentableau[taillemax3];
double moyenne;
/* ----debut du programme---- */
printf ("saisir nombre de note:");
scanf ("%d", &nbnote);
/* ----saisi note ----*/
i = 0;
j = 0;
do
{
while (i != nbnote )
{
printf ("saisir une note \n");
scanf ("%f", ¬etableau[i][j]);
i = i + 1;
/* Calcule Moyen */
}
moyenne = 0;
for (i = 0; i < nbnote; i = i + 1)
{
moyenne = moyenne + notetableau[i][j];
}
moyentableau[j] = moyenne / nbnote;
j = j + 1;
printf ("arrete oui=0 non=1 \n");
scanf ("%d", &stop);
}
while (stop != 0);
/* j ai un probleme au niveau de cette variable,
je n arrive pas a continuer la saisi des notes, par contre il me donne la moyen.
je commprend dans cette variable, faire (le code)tant que (stop est different de 0 )*/
/* -----affichage moyen ----*/
/* initialisation */
indiceaffichage=j;
numeroeleve=0 ;
j=0 ;
/* autre probleme .quand je demande la moyen il me donne plussieur moyen ex: eleve3 m=0 eleve4 m=0....j ai pourtant bien mit que j=indiceaffichage et que numeroeleve lui est inialise.il devrait compter juste , non?*/
while (indiceaffichage != numeroeleve)
{
printf ("eleve%d m :%f \n", j, moyentableau[j]);
numeroeleve = numeroeleve + 1;
j=j+1 ;
}
/* ----fin du programme---- */
system ("pause");
return (0);
}
voila ce que j'ai compris dans ton programme:
je l'ai testé et en effet, il fait que au bout d'un moment d'afficher "arrete oui=0 non=1" et ce temps que 0 n'est pas entré. Réfléchi bien : si on met 1 dans stop, la boucle recommence et regarde bien ton "while (i != nbnote )" : tu devrai comprendre que c'est là que ça ne marche pas sur ton programme : tu ne te rends pas compte mais le programme recommence bien la boucle mais ne passe plus ici. Je te laisse trouver la solution de ce problème ;)
Quand au deuxième problème, je ne comprend pas... chez moi ça affiche bien :
"eleve0: m xxxxx
eleve1: m xxxxx"
De même que pour respecter cette phrase
Aucun dit : -calcule la moyen de plusieurs eleves , qui peuvent avoir un nombres de note different entre eux
il faudrait que tu redemandes le nombre de note pour l'éleve non ?
Si tu pouvais réexpliquer un peu mieux ce qu'il faut afficher et calculer je pourrai peut être mieux t'aider.
ciao
rainbow
€dit : a = a+1; est équivalent de a++; et les parenthèses ne sont pas nécessaire pour ton return (0);
__________________________
............ Curtis: RTS 3D .............. ......
........... TeamMoteurProg...........
j ai effectue les modifications que tu ma dit , regarde , sa marche bien a part que defois il y a une erreur et sa plante. tu pense sa peux venir de ou ?
/*librairies*/
#include<stdio.h>
#include<stdlib.h>
/*constante */
#define taillemax1 10
#define taillemax2 10
#define taillemax3 10
int main (void)
{
/*variable */
int nbnote, i, j, numeroeleve, stop,indiceaffichage;
float notetableau[taillemax1][taillemax2];
float moyentableau[taillemax3];
double moyenne;
/* ----debut du programme---- */
/* ----saisi note ----*/
i = 0;
j = 0;
do
{
printf ("saisir nombre de note:");
scanf ("%d", &nbnote);
while (i != nbnote )
{
printf ("saisir une note \n");
scanf ("%f", ¬etableau[i][j]);
i = i + 1;
/* Calcule Moyen */
}
moyenne = 0;
for (i = 0; i < nbnote; i = i + 1)
{
moyenne = moyenne + notetableau[i][j];
}
moyentableau[j] = moyenne / nbnote;
j = j + 1;
printf ("arrete oui=0 non=1 \n");
scanf ("%d", &stop);
i=0;
}
while (stop != 0);
/* j ai un probleme au niveau de cette variable,
je n arrive pas a continuer la saisi des notes, par contre il me donne la moyen.
je commprend dans cette variable, faire (le code)tant que (stop est different de 0 )*/
/* -----affichage moyen ----*/
/* initialisation */
indiceaffichage=j;
numeroeleve=0 ;
j=0 ;
/* autre probleme .quand je demande la moyen il me donne plussieur moyen ex: eleve3 m=0 eleve4 m=0....j ai pourtant bien mit que j=indiceaffichage et que numeroeleve lui est inialise.il devrait compter juste , non?*/
while (indiceaffichage != numeroeleve)
{
printf ("eleve%d m :%f \n", j, moyentableau[j]);
numeroeleve = numeroeleve + 1;
j=j+1 ;
}
/* ----fin du programme---- */
system ("pause");
return (0);
}
Aucun dit : j ai effectue les modifications que tu ma dit , regarde , sa marche bien a part que defois il y a une erreur et sa plante. tu pense sa peux venir de ou ?
Pourrais-tu me dire un cas où chez toi ça plante car j'ai essayé plusieurs fois chez moi et ça marche bien je pense. Et quand ça plante ça fait quoi ?
__________________________
............ Curtis: RTS 3D .............. ......
........... TeamMoteurProg...........
J'ai quelques petites remarques:
Tu pourrais mettre moyenne en float aussi, c'est suffisant.
nowix dit : je n arrive pas a continuer la saisi des notes, par contre il me donne la moyen. je comprends dans cette variable, faire (le code)tant que (stop est différent de 0 )
Ok, je suis d'accord avec toi. Mais alors ce serait mieux avec printf ("arrete oui=1 non=0 \n");
nowix dit : indiceaffichage=j;
numeroeleve=0 ;
j=0 ;
/* autre problème .quand je demande la moyenne il me donne plusieurs moyennes ex: eleve3 m=0 eleve4 m=0....j ai pourtant bien mis que j=indiceaffichage et que numeroeleve lui est initialise.il devrait compter juste , non?*/
J'ai l'impression avec ton commentaire, qu'il y a des soucis pour les variables... Donc au cas où...
En programmation a=b et b=a, c'est différent !
a=b <=> mets la valeur de b dans a
b=a <=> mets la valeur de a dans b
Et ça fonctionne uniquement dans ce sens là.
Ensuite l'égalité n'est pas actualisée en permanence.
indiceaffichage=j; // mets la valeur de j dans indiceaffichage
j=0; // j sera mis à 0 mais pas indiceaffichage
Et concernant le plantage, ça pourrait venir de taillemax. En fait quand tu fais tableau[10], tu réserves 10 cases mémoires numérotées de 0 à 9. En réalité il y a aussi une 11e case (case n°10), mais elle sert à signaler la fin du tableau (elle est remplie de '\0'.) Si tu modifies la case 10, c'est possible que ça plante mais pas obligé (c'est tout le charme du C ).
Par contre je ne vois pas pourquoi ce serait une "window error". Donc il y a peut être autre chose.
fatma_87 > la boucle sert à faire la saisie + calcul pour plusieurs élèves
__________________________ FAQ Réseau
N'oubliez pas le tag [Résolu] (en haut à droite du titre du sujet)
Site perso sur les éoliennes et la programmation Radio métal
Aucun dit : Tu pourrais mettre moyenne en float aussi, c'est suffisant.
Vu la rapidité des ordinateurs aujourd'hui et les ressources que demande le programme, ce n'est pas important à mon goût.
il faut en effet que tu créés un tableau de taille dynamique pour éviter le dépassement de mémoire. C'est comme si dans une rue comprenant des maisons de "1 rue de la rose" à "40 rue de la rose" le facteur devait poser une lettre au "55 rue de la rose" (il ne fera pas d'erreur windows mais c'est pour l'exemple )
Après en ce qui concerne les égalités j'avoue ne pas comprendre à quoi servent certaines variables et le calcul que tu essais de faire donc je ne peux pas t'aider de ce côté.
__________________________
............ Curtis: RTS 3D .............. ......
........... TeamMoteurProg...........
Et concernant le plantage, ça pourrait venir de taillemax. En fait quand tu fais tableau[10], tu réserves 10 cases mémoires numérotées de 0 à 9. En réalité il y a aussi une 11e case (case n°10), mais elle sert à signaler la fin du tableau (elle est remplie de '\0'.) Si tu modifies la case 10, c'est possible
donc tu me conseil de metre un grand nombre comme 10 000 pour etre sur?
non, ce serait perdre de la vitesse pour le programme. Il faudrait que tu demandes la valeur de taille maximum du tableau et ensuite l'initialiser avec cette valeur ;)
__________________________
............ Curtis: RTS 3D .............. ......
........... TeamMoteurProg...........
le mieux serait d'utiliser des tableaux dynamiques
sinon, si tu rentres les notes d'un élève à la fois, au lieu d'enregistrer chacune des notes, tu enregistres le total des notes et le nombre de notes entrées puis calcule ta moyenne à la volée, et non après toute la saisie
ça ferait
note totale = 0
nombre de notes entrées
saisie d'une note x => note totale = note totale +x; nombre de notes entrées = nombres de notes entrées +1;
par exemple, pour arreter la saisie, entrer une note de -1
moyenne = note totale / nombre de notes entrées
__________________________
Spirit - modérateur casu ^-^'