Inscription / Connexion Nouveau Sujet
Niveau seconde
Partager :

créer une boucle pour calculer une moyenne de notes

Posté par
Sgu49
15-03-10 à 22:34

Bonjour,

Je coince au niveau d'un exercice qui consiste à écrire un programme sur algobox.

L'énoncé est le suivant :

Citation :

Ecrire un programme permettant de calculer la moyenne d'une série de notes, le nombre de notes n'étant pas connu à priori.


Comme variables j'ai mis :

M : moyenne
n : nombre de notes
i : pour faire la boucle


Donc ensuite le programme demande à l'utilisateur d'entrer la variable n ( le nombre de notes ) et c'est à partir de là que je commence à bloquer.

Après j'ai eu l'idée de faire

j'affecte 0 à la variable M

puis je fais Pour i allant de 1 à n ( nombre de notes )

M+i / n M

Ensuite afficher le moyenne.


Mais ce raisonnement est clairement faux alors j'aimerai que vous m'aiguillez merci

Posté par
Coll Moderateur
re : créer une boucle pour calculer une moyenne de notes 16-03-10 à 08:12

Bonjour,

Tu es mal parti.
L'énoncé dit :

Citation :
le nombre de notes n'étant pas connu a priori


Donc... tu ne peux pas créer un programme qui te demande avant tout calcul le nombre de notes, puisqu'on ne le connaît pas...
___________________________

Il faut, avant de te lancer dans un algorithme, que tu te poses (au moins) deux questions :

1) Comment vas-tu dire au programme qu'il y a encore au moins une note à entrer dans le calcul de la moyenne ou, au contraire, que c'est fini, que toutes les notes ont été introduites ?

2) Plus facile : comment calcules-tu une moyenne ?

Posté par
Sgu49
re : créer une boucle pour calculer une moyenne de notes 16-03-10 à 17:10

Citation :
Donc... tu ne peux pas créer un programme qui te demande avant tout calcul le nombre de notes, puisqu'on ne le connaît pas...


Justement je pensais qu'il fallait partir de ça, je voulais faire en sorte que le programme demande combien de notes l'utilisateur a.

1) et bien le professeur ne nous a pas expliqué en détail le fonctionnement de ce programme donc j'essaie encore de trouver, je cherche une méthode avec les boucles ( juste avant il y a un exercice d'introduction sensé nous mettre sur la voie et il traite d'une boucle ).

2) Somme de toutes les notes / nombre de notes

Posté par
Coll Moderateur
re : créer une boucle pour calculer une moyenne de notes 16-03-10 à 18:52

Ta réponse à la deuxième question : tout à fait d'accord

Donc, par exemple, dans le programme on pourra avoir une variable "somme" dans laquelle on fera la somme de toutes les notes à chaque fois qu'une nouvelle note sera entrée et un compteur "nombre" qui ajoutera 1 à chaque entrée de note et ainsi comptera le nombre de notes pour en faire la moyenne.
Ce sera facile.
________________

Il reste la première question :
Il faut que le programme demande à un moment : "Encore une note ?"
si on répond (d'une manière ou d'une autre) "oui" il permettra d'entrer une nouvelle note
si on répond "non" il fera le calcul de la moyenne de toutes les notes qui auront été entrées.

"Oui" et "non", en informatique, cela peut-être 1 et 0 ou bien "O" et "N" ou bien "oui" et "non" mais c'est plus long à taper... au choix !
________________

Que proposes-tu ?

Manifestement une boucle
"Pour i de 1 à n"
n'est pas ce qui convient puisqu'on ne connaît pas le nombre n en commençant.
Donc...
il faut faire une boucle d'une autre manière ! Il y a plusieurs possibilités.

Posté par
Sgu49
re : créer une boucle pour calculer une moyenne de notes 16-03-10 à 20:35

Mais pour la calcul de la moyenne à la fin il me faut deux choses : la somme des notes et leur nombre. Il faut donc une variable pour le nombre de notes ?

Posté par
Coll Moderateur
re : créer une boucle pour calculer une moyenne de notes 16-03-10 à 20:48

Exact. C'est ce que j'ai appelé le "compteur" dans mon message de 18 h 52

Mais cette variable, tu n'en connais pas la valeur en commençant le programme ; elle a été déclarée mais tu ne peux pas en demander la valeur.
Elle est calculée (par augmentation de 1 à chaque entrée d'une note) au fur et à mesure de l'introduction d'une nouvelle note.

Posté par
Sgu49
re : créer une boucle pour calculer une moyenne de notes 16-03-10 à 20:55

Faut-il donner un nombre maximum de notes possibles au programme pour pouvoir créer la boucle ?

Posté par
Coll Moderateur
re : créer une boucle pour calculer une moyenne de notes 16-03-10 à 20:56

Non.

Posté par
Sgu49
re : créer une boucle pour calculer une moyenne de notes 16-03-10 à 20:59

En fait je n'arrive pas à voir comment faire pour que le programme demande d'entrer chaque note, car je sais faire en sorte que le programme demande d'entrer une variable ( " afficher lire variable " ) mais là je ne vois pas.

Posté par
Coll Moderateur
re : créer une boucle pour calculer une moyenne de notes 16-03-10 à 21:05

Mais tu donnes toi-même la réponse !

Si la variable qui contient la valeur de la note s'appelle "note", alors
Lire note

Conviendra très bien !

Posté par
Sgu49
re : créer une boucle pour calculer une moyenne de notes 16-03-10 à 21:35

Oui mais je n'arrive pas à inclure cette fonction " lire variable " dans la boucle en elle-même

Posté par
Coll Moderateur
re : créer une boucle pour calculer une moyenne de notes 16-03-10 à 21:39

Comment écris-tu cette boucle ?

Posté par
Sgu49
re : créer une boucle pour calculer une moyenne de notes 16-03-10 à 21:56

Comme je vous l'ai dit le prof ne nous a pas expliqué en détail le fonctionnement de ce programme, j'essaie d'apprendre tout seul alors j'expérimente des trucs.

Je fais quelque chose qui ressemble à ça mais je suis conscient qu'il y a des problèmes :

1   VARIABLES
2     nombre_notes EST_DU_TYPE NOMBRE
3     note EST_DU_TYPE NOMBRE
4     somme EST_DU_TYPE NOMBRE
5     moyenne EST_DU_TYPE NOMBRE
6   DEBUT_ALGORITHME
7     somme PREND_LA_VALEUR 0
8     POUR somme ALLANT_DE 1 A ?
9       DEBUT_POUR
10      AFFICHER "Note 1 : "
11      LIRE note
12      AFFICHER note
13      FIN_POUR
14    moyenne PREND_LA_VALEUR somme/nombre_notes
15    AFFICHER moyenne
16  FIN_ALGORITHME

Posté par
Coll Moderateur
re : créer une boucle pour calculer une moyenne de notes 17-03-10 à 08:08

"Expérimenter des trucs" est une méthode longue mais qui porte ses fruits.
Il faut ne pas hésiter à tester le programme et bien lire les erreurs annoncées.
Il faut aussi beaucoup faire afficher les résultats intermédiaires et les comparer à ce que l'on obtient à la main ; modifier partout jusqu'à ce que le programme fasse ce que l'on attend.
____________________

Ce n'est pas mal (même si cela ne peut pas encore fonctionner)
Comme je te l'ai écrit la boucle ne peut pas être construite avec
POUR ... ALLANT DE 1 A ...
puisque l'on ne connaît pas le nombre de notes avant de les rentrer.
____________________

Voici un premier programme, il marche mais a beaucoup de défauts :

1   VARIABLES
2     f EST_DU_TYPE NOMBRE
3     somme EST_DU_TYPE NOMBRE
4     nb EST_DU_TYPE NOMBRE
5     moy EST_DU_TYPE NOMBRE
6     note EST_DU_TYPE NOMBRE
7   DEBUT_ALGORITHME
8     somme PREND_LA_VALEUR 0
9     nb PREND_LA_VALEUR 0
10    f PREND_LA_VALEUR 1
11    TANT_QUE (f==1) FAIRE
12      DEBUT_TANT_QUE
13      AFFICHER "Que vaut la nouvelle note ?"
14      LIRE note
15      nb PREND_LA_VALEUR nb+1
16      somme PREND_LA_VALEUR somme+note
17      AFFICHER "Encore une note ? Oui = 1 ou Non = 0"
18      LIRE f
19      FIN_TANT_QUE
20    moy PREND_LA_VALEUR somme/nb
21    AFFICHER "La moyenne des "
22    AFFICHER nb
23    AFFICHER " notes vaut "
24    AFFICHER moy
25  FIN_ALGORITHME

Voici quelques défauts :
. les entrées ne sont pas contrôlées (on peut saisir par erreur 23 alors que la note maximale serait 20)
. il est impossible de vérifier ce que l'on a entré ; il donne la moyenne mais on ne peut pas relire les notes qui ont été entrées pour la calculer
. il n'est pas commenté et n'est pas si facile à lire, à modifier, à corriger éventuellement...

J'ai un autre programme (que j'ai écrit avant celui-ci) et que je posterai ensuite, mais je voudrais d'abord que tu comprennes bien le cœur qui a été posté ici, même avec ses défauts.

Tu peux le lire et essayer de bien le comprendre.
Tu peux, évidemment, le rentrer dans ton ordinateur et le faire fonctionner !

J'ai entré deux notes, 12 et 16 (ce qui ne se voit pas...) et voici ce qu'affiche le programme :

créer une boucle pour calculer une moyenne de notes

Posté par
Sgu49
re : créer une boucle pour calculer une moyenne de notes 17-03-10 à 12:05

Bonjour et merci beaucoup,

je viens de comprendre comment fonctionne la boucle " tant que ".

En fait si j'ai bien compris, la boucle recommence les mêmes opération si et seulement si la condition est respectée, dans le cas présent f doit être égal à 1.

J'aimerai juste savoir pourquoi juste avant d'écrire la boucle on affecte " 1 " à la variable " f " étant donné qu'il suffit de respecter la condition f = 1 pour redémarrer la boucle.

Sinon merci j'ai compris toutes les autres lignes. J'ai réécris le programme en essayant de le rendre plus interactif :

créer une boucle pour calculer une moyenne de notes

Posté par
Coll Moderateur
re : créer une boucle pour calculer une moyenne de notes 17-03-10 à 12:23

Très bien !

Je vois que ça progresse !

Avant d'entrer dans la boucle je donne à f la valeur 1 pour être sûr d'entrer dans la boucle. Si par exemple la variable f vaut 0 au début du programme on ne rentrera jamais dans la boucle (et on risque alors de faire une division 0 / 0 ce qui ne sera pas apprécié).

Supprime cette ligne et regarde ce qui se passe !
_________________

Je vois que tu donnes de meilleures notes que moi

Tout à fait d'accord avec l'impression des notes au fur et à mesure, ce qui est la seule manière de pouvoir vérifier quand on a fini que l'on n'a pas fait d'erreur de saisie.

Comme promis, voici une version plus longue du programme (qui, comme toujours, est perfectible, mais je vois que tu sais faire ! ) :

1   VARIABLES
2     f EST_DU_TYPE NOMBRE
3     somme EST_DU_TYPE NOMBRE
4     nb EST_DU_TYPE NOMBRE
5     moy EST_DU_TYPE NOMBRE
6     note EST_DU_TYPE NOMBRE
7     MAX EST_DU_TYPE NOMBRE
8   DEBUT_ALGORITHME
9     //Initialisations
10    somme PREND_LA_VALEUR 0
11    nb PREND_LA_VALEUR 0
12    f PREND_LA_VALEUR 1
13    //Saisie de la note maximale
14    AFFICHER "Quelle est la note maximale possible ?"
15    LIRE MAX
16    //Entrée et affichage des notes une à une
17    TANT_QUE (f==1) FAIRE
18      DEBUT_TANT_QUE
19      AFFICHER "Que vaut la nouvelle note ?"
20      LIRE note
21      TANT_QUE (note<0 OU note>MAX) FAIRE
22        DEBUT_TANT_QUE
23        AFFICHER "Erreur ! La note doit être comprise entre 0 et "
24        AFFICHER MAX
25        LIRE note
26        FIN_TANT_QUE
27      AFFICHER note
28      nb PREND_LA_VALEUR nb+1
29      somme PREND_LA_VALEUR somme+note
30      AFFICHER "Encore une note ? Oui = 1 ou Non = 0"
31      LIRE f
32      TANT_QUE ((f != 1) ET (f !=0)) FAIRE
33        DEBUT_TANT_QUE
34        AFFICHER "Erreur ! Encore une note ? Oui = 1 ou Non = 0"
35        LIRE f
36        FIN_TANT_QUE
37      FIN_TANT_QUE
38    //Calcul et affichage de la moyenne
39    moy PREND_LA_VALEUR somme/nb
40    AFFICHER "La moyenne des "
41    AFFICHER nb
42    AFFICHER " notes vaut "
43    AFFICHER moy
44  FIN_ALGORITHME

Pour information : le f vient de l'anglais "flag" : un drapeau qui permet d'aiguiller selon sa valeur.

Cette version est un peu documentée (les commentaires qui commencent par //)
Dans cette version le programme refuse une note négative ou une note supérieure à la note maximale
De même il refuse pour f que l'on réponde par autre chose que 1 (oui) ou 0 (non)
Voilà de petits "plus"

Amuse-toi bien !

Posté par
Sgu49
re : créer une boucle pour calculer une moyenne de notes 17-03-10 à 12:44

Merci beaucoup,

j'ai vraiment progressé en programmation grâce à toi, c'est mon professeur qui va se réjouir.

Posté par
Coll Moderateur
re : créer une boucle pour calculer une moyenne de notes 17-03-10 à 13:48

Je suis content pour toi.

Je t'en prie et à une prochaine fois !



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Inscription gratuite

Fiches en rapport

parmi 1675 fiches de maths

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !