Console
Clique sur « Exécuter » pour lancer le programme.
Code CoddyRun
@ Configuration et Paramètres
LARG est un nombre
LARG vaut 560
HAUT est un nombre
HAUT vaut 420
film est un tableau
// Position d'affichage
COL_LARG est un nombre
COL_LARG vaut 45 // largeur d'une colonne de chiffres augmentée pour aérer
BASE_X est un nombre
BASE_X vaut 420 // x du chiffre des unités
Y_RETENUE est un nombre
Y_RETENUE vaut 100
Y_NB1 est un nombre
Y_NB1 vaut 160
Y_NB2 est un nombre
Y_NB2 vaut 220
Y_TRAIT est un nombre
Y_TRAIT vaut 250
Y_RESULTAT est un nombre
Y_RESULTAT vaut 310
@ Saisie des deux nombres
nombre1 est un nombre
demande "Premier nombre (positif) : " dans nombre1
nombre1 vaut arrondi_inferieur(absolue(nombre1))
nombre2 est un nombre
demande "Deuxième nombre (positif) : " dans nombre2
nombre2 vaut arrondi_inferieur(absolue(nombre2))
@ Décomposition en chiffres
chiffresA est un tableau
chiffresB est un tableau
na est un nombre
na vaut nombre1
si na = 0 alors
chiffresA ajoute 0
fin si
tant que na > 0
chiffresA ajoute na mod 10
na vaut arrondi_inferieur(na / 10)
fin tant que
nbb est un nombre
nbb vaut nombre2
si nbb = 0 alors
chiffresB ajoute 0
fin si
tant que nbb > 0
chiffresB ajoute nbb mod 10
nbb vaut arrondi_inferieur(nbb / 10)
fin tant que
// Nombre de colonnes = max des deux longueurs, +1 pour une retenue finale
nbCol est un nombre
nbCol vaut maximum(longueur(chiffresA), longueur(chiffresB)) + 1
// Tableaux résultat et retenues (init à vide = -1)
resultat est un tableau
retenues est un tableau
ic est un nombre
pour ic de 0 à nbCol - 1
resultat ajoute -1
retenues ajoute -1
fin pour
@ Fonctions utilitaires
fonction chiffreA(colonneId)
si colonneId < longueur(chiffresA) alors
retourne chiffresA[colonneId]
fin si
retourne 0
fin fonction
fonction chiffreB(colonneId)
si colonneId < longueur(chiffresB) alors
retourne chiffresB[colonneId]
fin si
retourne 0
fin fonction
@ Procédure de Dessin
procédure dessinerScene(colActive, msg)
t est une toile
dimension(t, LARG, HAUT)
// Fond principal doux
remplir(t, #e9ecef)
// Carte centrale avec ombre
rectangle_arrondi(t, 34, 34, 492, 352, 12, #adb5bd) // Ombre
rectangle_arrondi(t, 30, 30, 492, 352, 12, #ffffff) // Carte blanche
// Titre
label(t, 50, 60, "Addition posée", #495057, 22)
// --- Colonne active mise en surbrillance et guides ---
cg est un nombre
pour cg de 0 à nbCol - 1
xg est un nombre
xg vaut BASE_X - cg * COL_LARG
// Ligne de guide verticale
ligne(t, xg + 20, Y_RETENUE - 20, xg + 20, Y_RESULTAT + 10, #f1f3f5, 2)
fin pour
si colActive >= 0 alors
xa est un nombre
xa vaut BASE_X - colActive * COL_LARG
rectangle_arrondi(t, xa - 12, Y_RETENUE - 24, COL_LARG, Y_RESULTAT - Y_RETENUE + 64, 8, #fff3cd)
fin si
// --- Les retenues ---
rc est un nombre
pour rc de 0 à nbCol - 1
si retenues[rc] >= 0 alors
xr est un nombre
xr vaut BASE_X - rc * COL_LARG
label(t, xr + 4, Y_RETENUE, convertir_texte(retenues[rc]), #e63946, 20)
fin si
fin pour
// --- Premier nombre ---
c1 est un nombre
pour c1 de 0 à longueur(chiffresA) - 1
x1 est un nombre
x1 vaut BASE_X - c1 * COL_LARG
label(t, x1, Y_NB1, convertir_texte(chiffresA[c1]), #1d3557, 26)
fin pour
// --- Signe + et deuxième nombre ---
label(t, BASE_X - (nbCol - 1) * COL_LARG - 36, Y_NB2, "+", #1d3557, 26)
c2 est un nombre
pour c2 de 0 à longueur(chiffresB) - 1
x2 est un nombre
x2 vaut BASE_X - c2 * COL_LARG
label(t, x2, Y_NB2, convertir_texte(chiffresB[c2]), #1d3557, 26)
fin pour
// --- Trait de séparation épais ---
xGauche est un nombre
xGauche vaut BASE_X - (nbCol - 1) * COL_LARG - 15
ligne(t, xGauche, Y_TRAIT, BASE_X + 34, Y_TRAIT, #212529, 4)
// --- Résultat ---
colMax est un nombre
colMax vaut 0
cm est un nombre
pour cm de 0 à nbCol - 1
si resultat[cm] >= 1 alors
colMax vaut cm
fin si
fin pour
rr est un nombre
pour rr de 0 à nbCol - 1
si resultat[rr] >= 0 et rr <= colMax alors
xres est un nombre
xres vaut BASE_X - rr * COL_LARG
label(t, xres, Y_RESULTAT, convertir_texte(resultat[rr]), #2a9d8f, 30) // Vert accentué
fin si
fin pour
// --- Zone de Message explicatif ---
rectangle_arrondi(t, 40, 330, 472, 40, 6, #f8f9fa)
label(t, 50, 355, 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, "On aligne les chiffres à droite.")
fin pour
valeurRetenue est un nombre
valeurRetenue vaut 0
col est un nombre
pour col de 0 à nbCol - 1
da est un nombre
da vaut chiffreA(col)
db est un nombre
db vaut chiffreB(col)
sommeCol est un nombre
sommeCol vaut da + db + valeurRetenue
chiffreRes est un nombre
chiffreRes vaut sommeCol mod 10
nouvelleRet est un nombre
nouvelleRet vaut arrondi_inferieur(sommeCol / 10)
msg1 est un texte
si valeurRetenue > 0 alors
msg1 vaut convertir_texte(da) + " + " + convertir_texte(db) + " + " + convertir_texte(valeurRetenue) + " (retenue) = " + convertir_texte(sommeCol)
sinon
msg1 vaut convertir_texte(da) + " + " + convertir_texte(db) + " = " + convertir_texte(sommeCol)
fin si
pour attente de 1 à 3
appelle dessinerScene(col, msg1)
fin pour
resultat[col] vaut chiffreRes
msg2 est un texte
msg2 vaut "J'écris " + convertir_texte(chiffreRes)
si nouvelleRet > 0 alors
msg2 vaut msg2 + " et je retiens " + convertir_texte(nouvelleRet)
si col + 1 < nbCol alors
retenues[col + 1] vaut nouvelleRet
fin si
fin si
pour attente de 1 à 3
appelle dessinerScene(col, msg2)
fin pour
valeurRetenue vaut nouvelleRet
fin pour
@ Résultat Final
totalCalc est un nombre
totalCalc vaut nombre1 + nombre2
pour attente de 1 à 5
appelle dessinerScene(-1, "Résultat final : " + convertir_texte(totalCalc))
fin pour
// Lancement de l'animation avec un rythme de 800ms par frame pour la lisibilité
animation(film, 800, 0)