Quotient, reste et conversions
Combien d'heures et de minutes y a-t-il dans 3 725 secondes ? Combien de semaines dans 100 jours ? Toutes ces questions se résolvent avec deux outils : le quotient entier et le reste.
Deux résultats pour une division
Quand on partage 17 bonbons entre 5 enfants, chacun en reçoit 3, et il en reste 2. Une division entière donne donc deux résultats :
bonbons est un nombre vaut 17
enfants est un nombre vaut 5
affiche 'Chacun reçoit ' + arrondi_inferieur(bonbons / enfants) // 3
affiche 'Il en reste ' + (bonbons mod enfants) // 2
arrondi_inferieur(a / b) : le quotient entier, combien de fois b rentre dans a ;a mod b : le reste, ce qui dépasse.
Question : Que valent le quotient entier et le reste de 47 divisé par 10 ? — Quotient 4, reste 7. 47 = 4 × 10 + 7 : le quotient entier est 4 et le reste 7.
Des minutes aux heures
dureeFilm est un nombre vaut 137
heures est un nombre
minutes est un nombre
heures vaut arrondi_inferieur(dureeFilm / 60)
minutes vaut dureeFilm mod 60
affiche 'Le film dure ' + heures + ' h ' + minutes + ' min' // 2 h 17 min
137 minutes, c'est 2 heures complètes (120 minutes), et il reste 17 minutes.
Des secondes aux heures, minutes et secondes
On enchaîne deux divisions : d'abord par 3 600 (le nombre de secondes dans une heure), puis par 60 sur ce qui reste.
total est un nombre
demande 'Combien de secondes ? ' dans total
heures est un nombre
minutes est un nombre
secondes est un nombre
heures vaut arrondi_inferieur(total / 3600)
total vaut total mod 3600
minutes vaut arrondi_inferieur(total / 60)
secondes vaut total mod 60
affiche heures + ' h ' + minutes + ' min ' + secondes + ' s'
Pour 3 725 secondes : 1 heure (3 600 s), il reste 125 s ; 2 minutes (120 s), il reste 5 s. Résultat : 1 h 2 min 5 s.
Un affichage à deux chiffres
Une horloge affiche 01:02:05, pas 1:2:5. Une petite fonction ajoute un zéro devant les nombres inférieurs à 10 :
fonction deuxChiffres(n)
si n < 10 alors
retourne '0' + n
fin si
retourne convertir_texte(n)
fin fonction
fonction formaterDuree(totalSecondes)
hh est un nombre vaut arrondi_inferieur(totalSecondes / 3600)
mm est un nombre vaut arrondi_inferieur((totalSecondes mod 3600) / 60)
ss est un nombre vaut totalSecondes mod 60
retourne deuxChiffres(hh) + ':' + deuxChiffres(mm) + ':' + deuxChiffres(ss)
fin fonction
affiche formaterDuree(3725) // 01:02:05
affiche formaterDuree(59) // 00:00:59
affiche formaterDuree(86399) // 23:59:59
'0' + n colle le zéro devant le nombre, puisqu'un des deux côtés du + est un texte.
Extraire les chiffres d'un nombre
mod 10 donne le dernier chiffre d'un nombre, et le quotient par 10 retire ce chiffre. En répétant, on parcourt tous les chiffres :
nombreSecret est un nombre vaut 4729
restant est un nombre vaut nombreSecret
sommeChiffres est un nombre vaut 0
tant que restant > 0
affiche 'Chiffre : ' + (restant mod 10)
sommeChiffres ajoute restant mod 10
restant vaut arrondi_inferieur(restant / 10)
fin tant que
affiche 'Somme des chiffres : ' + sommeChiffres // 22
Les chiffres sortent de droite à gauche : 9, 2, 7, puis 4.
Tourner en rond
Le reste sert aussi quand les valeurs reviennent au début : après le 7e jour de la semaine revient le 1er, après 23 h revient 0 h.
heureDepart est un nombre vaut 22
dureeTrajet est un nombre vaut 5
affiche 'Arrivée à ' + ((heureDepart + dureeTrajet) mod 24) + ' h' // 3 h
22 + 5 = 27, et 27 mod 24 = 3 : on arrive à 3 heures du matin.
En résumé
arrondi_inferieur(a / b) : combien de fois b rentre dans a.a mod b : ce qui reste.- Convertir des durées : diviser par 3 600, puis par 60.
mod 10 isole le dernier chiffre d'un nombre.mod gère tout ce qui tourne en rond : heures, jours, tours de jeu.