Console
Clique sur « Exécuter » pour lancer le programme.
Code CoddyRun
@ Configuration et Paramètres
LARG est un nombre
LARG vaut 600
HAUT est un nombre
HAUT vaut 450
film est un tableau
// Positions d'affichage de la potence
BASE_X_DIVIDENDE est un nombre
BASE_X_DIVIDENDE vaut 60
BASE_X_DIVISEUR est un nombre
BASE_X_DIVISEUR vaut 320
Y_BASE est un nombre
Y_BASE vaut 100
Y_QUOTIENT est un nombre
Y_QUOTIENT vaut 160
COL_LARG est un nombre
COL_LARG vaut 30
@ Saisie des deux nombres
dividende est un nombre
demande "Entrez le dividende : " dans dividende
dividende vaut arrondi_inferieur(absolue(dividende))
diviseur est un nombre
demande "Entrez le diviseur (différent de 0) : " dans diviseur
diviseur vaut arrondi_inferieur(absolue(diviseur))
si diviseur = 0 alors
affiche "Erreur : division par zéro impossible."
terminer
fin si
@ Décomposition en chiffres du dividende
chiffresDiv est un tableau
texteDiv est un texte
texteDiv vaut convertir_texte(dividende)
nbChiffres est un nombre
nbChiffres vaut longueur(texteDiv)
// Extraction des chiffres un par un (le texte commence à l'index 1)
ic est un nombre
pour ic de 1 à nbChiffres
c est un texte
c vaut copier(texteDiv, ic, 1)
chiffresDiv ajoute convertir_nombre(c)
fin pour
quotientRes est un texte
quotientRes vaut ""
@ procédure de Dessin
procédure dessinerScene(indexChiffre, dividendeCourant, soustracteur, resteCourant, msg)
t est une toile
dimension(t, LARG, HAUT)
// Fond principal doux
remplir(t, #e9ecef)
// Carte centrale avec ombre
rectangle_arrondi(t, 24, 24, 552, 402, 12, #adb5bd)
rectangle_arrondi(t, 20, 20, 552, 402, 12, #ffffff)
// Titre
label(t, 40, 50, "Division posée", #495057,22)
// --- La Potence (lignes de séparation) ---
// Ligne verticale
ligne(t, BASE_X_DIVISEUR - 20, Y_BASE - 30, BASE_X_DIVISEUR - 20, Y_BASE + 250, #212529, 3)
// Ligne horizontale sous le diviseur
ligne(t, BASE_X_DIVISEUR - 20, Y_QUOTIENT - 35, BASE_X_DIVISEUR + 180, Y_QUOTIENT - 35, #212529, 3)
// --- Affichage du dividende (en haut à gauche) ---
cd est un nombre
pour cd de 0 à nbChiffres - 1
xd est un nombre
xd vaut BASE_X_DIVIDENDE + cd * COL_LARG
couleurTxt est un texte
si cd = indexChiffre alors
couleurTxt vaut #e63946
sinon si cd < indexChiffre alors
couleurTxt vaut #adb5bd
sinon
couleurTxt vaut #1d3557
fin si
label(t, xd, Y_BASE, convertir_texte(chiffresDiv[cd]), couleurTxt, 26)
fin pour
// --- Affichage du diviseur (en haut à droite) ---
label(t, BASE_X_DIVISEUR + 10, Y_BASE, convertir_texte(diviseur), #1d3557, 26)
// --- Affichage du quotient en construction (en bas à droite) ---
label(t, BASE_X_DIVISEUR + 10, Y_QUOTIENT, quotientRes, #2a9d8f, 26)
// --- Zone de travail des restes (en bas à gauche) ---
si dividendeCourant >= 0 alors
label(t, BASE_X_DIVIDENDE, Y_BASE + 70, "Valeur : " + convertir_texte(dividendeCourant), #1d3557, 20)
fin si
si soustracteur >= 0 alors
label(t, BASE_X_DIVIDENDE, Y_BASE + 100, "- " + convertir_texte(soustracteur), #e63946, 20)
fin si
si resteCourant >= 0 alors
ligne(t, BASE_X_DIVIDENDE, Y_BASE + 115, BASE_X_DIVIDENDE + 150, Y_BASE + 115, #212529, 2)
label(t, BASE_X_DIVIDENDE, Y_BASE + 145, "Reste = " + convertir_texte(resteCourant), #2a9d8f, 20)
fin si
// --- Zone de Message explicatif ---
rectangle_arrondi(t, 40, 360, 512, 40, 6, #f8f9fa)
label(t, 50, 385, msg, #495057, 18)
film ajoute t
fin procédure
@ Calcul Animé
vide film
attente est un nombre
pour attente de 1 à 2
appelle dessinerScene(-1, -1, -1, -1, "Mise en place de la division.")
fin pour
reste est un nombre
reste vaut 0
idx est un nombre
// Boucle principale sur chaque chiffre du dividende
pour idx de 0 à nbChiffres - 1
// 1. Abaisser le chiffre
chiffreActuel est un nombre
chiffreActuel vaut chiffresDiv[idx]
valeurTravail est un nombre
valeurTravail vaut reste * 10 + chiffreActuel
msg1 est un texte
msg1 vaut "On abaisse " + convertir_texte(chiffreActuel) + ". On divise " + convertir_texte(valeurTravail) + " par " + convertir_texte(diviseur) + "."
pour attente de 1 à 3
appelle dessinerScene(idx, valeurTravail, -1, -1, msg1)
fin pour
// 2. Trouver le quotient partiel
qChiffre est un nombre
qChiffre vaut arrondi_inferieur(valeurTravail / diviseur)
quotientRes vaut quotientRes + convertir_texte(qChiffre)
msg2 est un texte
msg2 vaut "Combien de fois " + convertir_texte(diviseur) + " dans " + convertir_texte(valeurTravail) + " ? " + convertir_texte(qChiffre) + " fois."
pour attente de 1 à 3
appelle dessinerScene(idx, valeurTravail, -1, -1, msg2)
fin pour
// 3. Soustraction et nouveau reste
soustractionVal est un nombre
soustractionVal vaut qChiffre * diviseur
reste vaut valeurTravail - soustractionVal
msg3 est un texte
msg3 vaut convertir_texte(qChiffre) + " * " + convertir_texte(diviseur) + " = " + convertir_texte(soustractionVal) + ". Reste : " + convertir_texte(reste) + "."
pour attente de 1 à 3
appelle dessinerScene(idx, valeurTravail, soustractionVal, reste, msg3)
fin pour
fin pour
@ Résultat Final
msgFin est un texte
msgFin vaut "Terminé ! Quotient : " + quotientRes + " (Reste : " + convertir_texte(reste) + ")"
pour attente de 1 à 5
appelle dessinerScene(-1, -1, -1, reste, msgFin)
fin pour
// Lancement de l'animation à 1000 millisecondes par image
animation(film, 1000, 0)