Calculer des statistiques
Une liste de trente notes ne dit pas grand-chose. Quelques nombres bien choisis la résument : la plus petite, la plus grande, la moyenne... Calculons-les nous-mêmes, pour comprendre ce qui se cache derrière.
Minimum, maximum, étendue
En un seul parcours, on peut retenir à la fois la plus petite et la plus grande valeur :
notes est un tableau vaut [12, 7, 18, 10, 15]
plusPetite est un nombre vaut notes[0]
plusGrande est un nombre vaut notes[0]
pour i de 1 à longueur(notes) - 1
si notes[i] < plusPetite alors
plusPetite vaut notes[i]
fin si
si notes[i] > plusGrande alors
plusGrande vaut notes[i]
fin si
fin pour
affiche 'Minimum : ' + plusPetite // 7
affiche 'Maximum : ' + plusGrande // 18
affiche 'Étendue : ' + (plusGrande - plusPetite) // 11
L'étendue est l'écart entre les deux extrêmes : elle indique si les valeurs sont regroupées ou dispersées.
La moyenne
Un accumulateur fait le total, puis on divise par le nombre de valeurs :
notes est un tableau vaut [12, 7, 18, 10, 15]
total est un nombre vaut 0
pour i de 0 à longueur(notes) - 1
total ajoute notes[i]
fin pour
moyenneClasse est un nombre
moyenneClasse vaut total / longueur(notes)
affiche 'Moyenne : ' + moyenneClasse // 12,4
Avec un tableau vide, longueur(notes) vaut 0 et la division provoque une erreur. Un programme sérieux vérifie d'abord que le tableau contient au moins une valeur.
Combien au-dessus de la moyenne ?
Il faut deux parcours : le premier pour calculer la moyenne, le second pour compter.
notes est un tableau vaut [12, 7, 18, 10, 15]
total est un nombre vaut 0
pour i de 0 à longueur(notes) - 1
total ajoute notes[i]
fin pour
moyenneClasse est un nombre
moyenneClasse vaut total / longueur(notes)
auDessus est un nombre vaut 0
pour i de 0 à longueur(notes) - 1
si notes[i] > moyenneClasse alors
auDessus ajoute 1
fin si
fin pour
affiche auDessus + ' notes au-dessus de ' + moyenneClasse // 2
Question : Pourquoi ne peut-on pas compter les notes au-dessus de la moyenne pendant le premier parcours ? — Parce que la moyenne n'est connue qu'à la fin du premier parcours. Pour comparer une note à la moyenne, il faut déjà connaître la moyenne, donc avoir lu toutes les notes.
Le deuxième meilleur
Qui est sur la deuxième marche du podium ? On garde deux variables : le meilleur et le second. Quand on trouve un nouveau meilleur, l'ancien meilleur devient second.
scores est un tableau vaut [42, 87, 15, 93, 61]
meilleur est un nombre vaut maximum(scores[0], scores[1])
second est un nombre vaut minimum(scores[0], scores[1])
pour i de 2 à longueur(scores) - 1
si scores[i] > meilleur alors
second vaut meilleur
meilleur vaut scores[i]
sinon si scores[i] > second alors
second vaut scores[i]
fin si
fin pour
affiche 'Premier : ' + meilleur + ', deuxième : ' + second // 93 et 87
L'ordre des deux lignes second vaut meilleur puis meilleur vaut scores[i] est important : dans l'autre sens, on perdrait l'ancien meilleur.
Tout en une fonction
Une fonction ne renvoie qu'une valeur : pour en renvoyer plusieurs, on les range dans un enregistrement.
fonction resumer(liste)
bilan est un enregistrement
bilan.mini vaut liste[0]
bilan.maxi vaut liste[0]
bilan.total vaut 0
pour i de 0 à longueur(liste) - 1
bilan.total ajoute liste[i]
si liste[i] < bilan.mini alors
bilan.mini vaut liste[i]
fin si
si liste[i] > bilan.maxi alors
bilan.maxi vaut liste[i]
fin si
fin pour
bilan.moyen vaut bilan.total / longueur(liste)
retourne bilan
fin fonction
temperatures est un tableau vaut [14, 17, 21, 19, 12, 9, 16]
semaine est un enregistrement
semaine vaut resumer(temperatures)
affiche 'De ' + semaine.mini + ' à ' + semaine.maxi + ' degrés'
affiche 'Moyenne : ' + decimal(semaine.moyen, 1) + ' degrés'
CoddyRun fournit somme, moyenne et mediane toutes prêtes. Savoir les reprogrammer te permet de calculer aussi ce qui n'existe pas encore !
En résumé
- Minimum et maximum : partir de la première valeur, comparer avec toutes les autres.
- Moyenne : un accumulateur, puis une division. Attention au tableau vide.
- Certaines questions demandent deux parcours du tableau.
- Deuxième meilleur : deux variables, mises à jour dans le bon ordre.