aide calcule de moyenne - C - Programmation
Marsh Posté le 18-04-2006 à 11:25:55
icepiro a écrit : voila ce que j'ai fait : |
Ce code semble incomplet...
|
Citation :
|
Ces variables de 1 char sont insuffisantes pour stocker des chaines de caractères significatives. Il faut des tableaux de char de taille suffisante.
Citation :
|
Pourquoi & ?
L'usage de goto est fortement déconseillé. Il faut trouver la structure de code qui répond au besoin.
Les saisies par scanf() sont difficiles à mettre en oeuvre de façon fiable. Préférer fgets() avec nettoyage et fonction de conversion si nécessaire..
http://mapage.noos.fr/emdel/notes.htm#saisie
http://mapage.noos.fr/emdel/notes.htm#fichiers
Marsh Posté le 18-04-2006 à 11:33:50
Oui je sais qu'il est incomplet sinon je ne demanderais pas d'aide
Marsh Posté le 18-04-2006 à 11:39:51
icepiro a écrit : Oui je sais qu'il est incomplet sinon je ne demanderais pas d'aide |
Certes, mais tu n'a pas dit quels étaient les problèmes (compilation, exécution ?). Pour avoir de l'aide de qualité, il faut poser des questions précises...
Marsh Posté le 18-04-2006 à 11:44:36
je ne sais pas comment faire la moyenne des notes des élèves (i) en (de 0 a 20 avec virgule) et afficher la note de CHAQUE élèves + la moyenne général
Marsh Posté le 18-04-2006 à 11:52:22
icepiro a écrit : je ne sais pas comment faire la moyenne du nombres d'élèves (i) en (de 0 a 20 avec virgule) et afficher la note de CHAQUE élèves + la moyenne général |
faire la moyenne du nombres d'élèves n'a aucun sens. Tu veux dire faire la moyenne des notes de la classe ?
Simple problème de math. Sais-tu calculer une moyenne ?
Rappel : moyenne = somme (valeurs) / nombre de valeurs.
A toi de jouer...
Marsh Posté le 18-04-2006 à 11:53:28
icepiro a écrit : je ne sais pas comment faire la moyenne du nombres d'élèves (i) en (de 0 a 20 avec virgule) et afficher la note de CHAQUE élèves + la moyenne général |
Une moyenne, c'est bêtement une somme des notes divisée par le nombre de notes.
EDIT : burned
Marsh Posté le 18-04-2006 à 12:03:03
Merci mais je sais mathématiquement faire la moyenne des notes... ce que je ne sais pas faire c'est comment l'intégrer en c je suis bloqué car quand je tente d'afficher une valeur il m'affiche un truc énorme
Comment faire un truc que récupèrent les notes des élèves sans donner de nombres énormes (en les additionnant puis en divisant par i)
Marsh Posté le 18-04-2006 à 12:59:38
A moins que tu ne rentres les notes une par une à la main, tu vas devoir utiliser des matrices pour contenir la liste des notes par matières, ou t'amuser à faire un tableau de notes par matières...
Ensuite tu parcours cette liste de notes et tu les additionnes au fur et à mesure, avec un tableau ça donnerait ca :
Code :
|
Dans ton code tu as un nombre très grand parce que tu fais afficher l'adresse de a ( le & fait afficher son adresse ) et pas son contenu, mais comme tu n'as pas initialisé a, même en faisant afficher son contenu, tu auras au mieux un plantage du programme, au pire un nombre sans aucune signification qui va s'afficher mais que tu pourrais considèrer comme bon résultat si tu ne vois pas ton erreur.
Marsh Posté le 18-04-2006 à 14:26:35
merci pour cette ligne : somme += note[i] ;
j'ai l'erreur suivante :subscripted value is neither array nor pointer
???
Marsh Posté le 18-04-2006 à 14:57:29
icepiro a écrit : merci pour cette ligne : somme += note[i] ; |
Il faut tout lire :
Citation : A moins que tu ne rentres les notes une par une à la main, tu vas devoir utiliser des matrices pour contenir la liste des notes par matières, ou t'amuser à faire un tableau de notes par matières... |
Marsh Posté le 18-04-2006 à 15:34:20
Ne le prends pas mal, mais tu devrais allez voir quelques tutoriaux pour débutants en C, tableaux/matrices, chaines de caractères, pour cet exercice et si tu veux continuer à apprendre le C, pointeurs, structures, fichiers, listes chainées,...
Marsh Posté le 18-04-2006 à 16:19:31
LePhasme a écrit : Ne le prends pas mal, mais tu devrais allez voir quelques tutoriaux pour débutants en C, tableaux/matrices, chaines de caractères, pour cet exercice et si tu veux continuer à apprendre le C, pointeurs, structures, fichiers, listes chainées,... |
Je ne le prends pas mal japprends et c'est bien mais la je suis un peu noyer il me faudrait un exemple avec un programme que j'ai fait car j'ai lu des tutoriaux cette aprèm et même si j'ai bien compris le principe je narrive pas a l'appliquer dans ce cas voici mon programme avec vos modifications :
Code :
|
Marsh Posté le 18-04-2006 à 16:56:04
icepiro a écrit : voici mon programme avec vos modifications : |
Si tu ne comprends pas les modifications, ça ne sert à rien. Tu ne devrais écrire que du code que tu maitrises. Pour le reste, pose des questions précises.
Résout les problèmes un par un. Ca crash au premier scanf()... (Et tu sais pourquoi...)
Marsh Posté le 18-04-2006 à 17:05:58
jai edité le message au dessus du tien chef
ps: je suis en train de voir pour utiliser la fontion fgets..
Marsh Posté le 18-04-2006 à 17:37:27
icepiro a écrit : jai edité le message au dessus du tien |
Marsh Posté le 18-04-2006 à 18:40:18
euh...Quand tu declares ton tableau notes : tu lui donnes deux dimensions
i et a.
Seulement pour le moment tu as initialise i a 0 donc ta premiere dimension vaudra 0 --> j'sais pas si c'est utile.
Ensuite ton a n'est pas initialise lorsque tu cree le tableau.
Ces deux choses font que lors de l'acces au tableau tu as toutes les chances que ca plante.
Deux solutions :
Fixe toi meme les dimensions de ton tableau
par exemple tu a 10 eleves et 5 notes par eleves --> float notes [10][5]
ou tu peux declarer ces deux valeurs comme des constantes (avec #define)
Sinon tu pourrais egalement voir du cote de l'allocation dynamique mais je pense qu'il y a d'autres notions plus basiques a saisir avant celle la
Marsh Posté le 18-04-2006 à 20:11:12
Note que tu n'as pas initialisé ta matrice de notes, donc elle contient des nombres indéterminés et la somme donnera un résultat erroné.
Ensuite comme te l'a déjà dit Emmanuel Delahaye retire ce goto et remplace le par une boucle, on n'utilise un goto que quand on a pas le choix, or ici tu peux aisément le remplacer par une boucle while.
Et enfin, ta matrice contient les notes pour chaque matières, donc si on dit qu'une matière est représentée par une ligne et les notes d'un élève par une colonne de la matrice, donc tu dois déterminer quelle matière correspond à quelle ligne, ensuite quand tu l'a fait tu assigne à une variable l'indice de la ligne (matière) voulue et ensuite tu parcours toute la ligne du tableau.
Si tu n'y arrives pas ou que je me suis mal expliqué je posterais un exemple de code après mais je voudrais simplement que tu essaies par toi-même avant.
Marsh Posté le 19-04-2006 à 10:57:20
je me suis mal exprimé mon prog est plus simple (ou plus complexe) que sa il n'y a qu'une matière (rentrer le nom permet juste d'identifier pour l'utilisateur le nom de la matière) par contre il y a plusieurs élèves qui doit être clairement identifier (par un nom, prénom, et un ID) cela donnera en sortie un avec en titre le nom de la matière puis un tableau en colonne (nm,pn,id,note,) et en ligne (nombre d'élèves et moyenne) je suis en train de pencher sur le tableau en ce moment.
edit: j'ai viré le goto par un do while ca donne ca :
Code :
|
Marsh Posté le 19-04-2006 à 11:20:43
icepiro a écrit : edit: j'ai viré le goto par un do while ca donne ca : |
C'est la bonne démarche. Reste à remplacer scanf() par fgets() + la fonction de conversion qui va bien...
http://mapage.noos.fr/emdel/notes.htm#saisie
http://mapage.noos.fr/emdel/notes.htm#fichiers
Marsh Posté le 19-04-2006 à 11:24:03
Personnellement je n'utilise que des while mais bon c'est du chipotage.
Si tu n'as qu'une seule matière pas besoin de matrice un vecteur (tableau) suffit pour les notes.
Marsh Posté le 19-04-2006 à 12:26:37
LePhasme a écrit : Personnellement je n'utilise que des while <...> |
Ca dépend des cas. La pré-condition n'est pas toujours établie... (mais on peut toujours la forcer, c'est vrai).
OK pour dire que while() (et même for()) couvre tous les cas. Mais do-while() a aussi son utilité dans certains cas.
Marsh Posté le 19-04-2006 à 15:29:50
Voila j'ai enfin reussi a calculer la moyenne total a partir d'une note par eleve (oui je sais...) tu me pardonne emmanuel mais comme je ne connais pas la fontion fgets je me pencherai dessus quand les fonctions de base que doit faire mon programme seront finit(en sortie les noms prénoms et num d'id avec 2 moyennes : celle DES notes de l'élève plus celle de la classe).
Mon code actuelle est un edit de mon premier post.
Marsh Posté le 19-04-2006 à 15:36:43
Vu ton avant dernière phrases tu dois faire la moyenne avec plusieurs matières maintenant ?
Marsh Posté le 19-04-2006 à 15:38:20
LePhasme a écrit : Vu ton avant dernière phrases tu dois faire la moyenne avec plusieurs matières maintenant ? |
pas plusieurs matiere plusieur note par élève (plusieurs notes qui apartienne a la meme matiere)
emmanuel: j'ai ecrit le post avant d'éditer
Marsh Posté le 19-04-2006 à 15:59:23
icepiro a écrit : emmanuel: j'ai ecrit le post avant d'éditer |
Ok, j'ai nettoyé mon clavier... Ca schlingue...
On pourrait avoir une version 'clean' ?
|
EDIT
Il ne faut pas utiliser scanf() si on ne sait pas s'en servir.
J'ai donné les alternatives...
Marsh Posté le 19-04-2006 à 16:07:14
Emmanuel Delahaye a écrit : |
c'est fait toujours le même edit celui du premier post
edit: c'est refait
Marsh Posté le 19-04-2006 à 16:16:53
icepiro a écrit : c'est fait toujours le même edit celui du premier post
|
de pire en pire...
Marsh Posté le 20-04-2006 à 19:30:07
faut revoir les saisies utilisateurs et la moyenne est un entier contenant le resultat d'une division entiere, ca serait mieux en reel
Marsh Posté le 20-04-2006 à 21:30:23
skelter a écrit : faut revoir les saisies utilisateurs et la moyenne est un entier contenant le resultat d'une division entiere, ca serait mieux en reel |
et encore mieux en double !
Marsh Posté le 21-04-2006 à 20:07:16
En même temps pour une moyenne de notes de cours je doute qu'on ait besoin du 15ème nombre après la virgule...
Marsh Posté le 18-04-2006 à 10:28:01
Bonjour,
j'ai besoin d'aide pour un programme simple je voudrai pour l'intant affichez que la moyenne général sachant que l'objectif final est :
- Chaque élève (strictement moins de 10 élèves).
- De la classe en général.
- Avoir le Nom, le Prénom et un N° délève.
voila ce que j'ai fait :
EDIT:
premier:
Message édité par icepiro le 19-04-2006 à 16:24:45