Bonjour,
Je coince au niveau d'un exercice qui consiste à écrire un programme sur algobox.
L'énoncé est le suivant :
Bonjour,
Tu es mal parti.
L'énoncé dit :
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.
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 ?
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.
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.
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 !
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
"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 :
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 :
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 !
Merci beaucoup,
j'ai vraiment progressé en programmation grâce à toi, c'est mon professeur qui va se réjouir.
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :