Le langage CoddyRun
La référence complète du pseudo-code : chaque mot-clé, chaque structure et chaque fonction intégrée, avec des exemples prêts à copier dans l'éditeur.
Ces mots servent à créer des variables et leur assigner des valeurs. x est un nombre déclare la variable, x vaut 42 l'affecte. Les deux peuvent
être écrits séparément ou ensemble.
CoddyRun dispose de 8 types fondamentaux. Le type détermine la valeur par défaut et les opérations disponibles : on peut additionner des nombres, concaténer des textes, tester des booléens, et parcourir des tableaux.
CoddyRun propose trois structures de répétition pour couvrir tous les cas : pour quand on connaît le nombre d'itérations, tant que quand on répète
sous condition, et répète … fois pour les répétitions simples à nombre fixe.
Qu'est-ce qu'une variable ?
Une variable est une boîte nommée qui stocke une valeur en mémoire. On lui donne un nom, un type, et une valeur initiale. Plus tard dans le programme, on peut lire sa valeur, la modifier, ou l'utiliser dans des calculs.
En CoddyRun, on déclare une variable avec la syntaxe x est un type, et on lui assigne une valeur avec x vaut valeur.
nombre, texte, booléen, tableau) a deux avantages pédagogiques : cela force l'apprenant à réfléchir à
la nature de sa donnée, et cela permet à l'interpréteur de faire des conversions automatiques cohérentes (par exemple lors d'une saisie utilisateur).
x est un nombre0 par défautx est un texte'' par défautx est un booléenfaux par défautx est un tableau[] par défautx est un enregistrementVariable regrouperx est une datejj/mm/aaaax est une heurehh:mm:ssx, y est un nombreDéclarer plusieurs variablesx est un nombre vaut 1.5Déclaration et initialisation en une seule ligneQuand plusieurs variables ont le même type, il est plus simple et plus lisible de les déclarer sur une seule ligne.
x vaut 42Nombre entierx vaut 3.14Nombre décimal (le point comme séparateur)x vaut $FFNombre hexadécimal ($)x vaut 'Bonjour' / "Bonjour"Texte entre '...' - "..."x vaut vraiBooléen positifx vaut fauxBooléen négatifx vaut y + 1Résultat d'une expressionCes raccourcis permettent de modifier une variable numérique sans réécrire son nom des deux côtés.
x ajoute 10x = x + 10x soustrait 5x = x − 5Un enregistrement est une variable qui peut regrouper plusieurs informations différentes sous un même nom.
Contrairement : à un nombre (une seule valeur), à un texte (une seule chaîne), à un tableau (plusieurs valeurs du même type),
un enregistrement permet de stocker plusieurs champs, chacun pouvant représenter une information différente.
On utilise un enregistrement pour représenter un objet du monde réel : un élève (nom, note, âge…), un point (x, y), un produit (prix, quantité, nom)
Qu'est-ce qu'une classe ?
Qu'est-ce qu'une constante ?
Une constante est un nom associé à une valeur qui ne peut jamais changer.
nom est une constante vaut <expression>constante nom vaut <expression>min est une constante vaut 3.14max est une constante vaut 100message est une constante vaut 'Bonjour'affiche minaffiche maxaffiche messageCoddyRun utilise des formats standards pour les dates et les heures :
jj/mm/aaaaFormat date : 25/12/2024hh:mm:ssFormat heure : 14:30:00jj/mm/aaaa est le format européen (jour/mois/année), cohérent avec l'usage scolaire français.affiche envoie une valeur vers la console, demande attend une saisie clavier, et choisir propose des options à sélectionner d'un simple clic.
Ces instructions permettent de créer des programmes qui posent des questions, calculent, et répondent — le cycle fondamental de tout logiciel interactif.
Affiche peut prendre n'importe quelle valeur ou expression. Texte, nombre, variable, calcul — tout est accepté. Pour afficher plusieurs éléments sur une ligne, on les concatène avec +.
affiche 'Bonjour monde'Texte littéralaffiche xValeur d'une variableaffiche 2 + 2Expression calculée → 4affiche 'x = ' + xConcaténation texte + variableaffiche t[0]Premier élément d'un tableaudemande. Son type détermine la conversion automatique de la saisie : si c'est un nombre, la chaîne tapée est convertie en nombre; si c'est un texte,
elle reste telle quelle.
x est un nombredemande xAttend un nombre (sans message)demande 'Entrez un nombre' dans xAvec message d'inviten est un textedemande 'Votre prénom ?' dans nSaisie de texte
demande, l'utilisateur sélectionne d'un simple clic. Les options s'affichent comme des liens cliquables dans la console, et le numéro de l'option choisie (1 pour la première, 2 pour la deuxième…) est stocké dans la variable. La variable doit être déclarée comme un nombre.
affiche avant l'appel. Le programme se met alors en pause jusqu'au clic, puis range les coordonnées du point cliqué dans deux variables de type nombre : l'abscisse x, puis l'ordonnée y. L'origine (0, 0) est le coin haut-gauche de la toile.
maToile est une toilex, y est un nombrecliquer maToile dans x, yAttend un clic et récupère sa positionCombiné à la fonction clique, qui teste si un point tombe dans une zone, cliquer permet de fabriquer de véritables boutons : il suffit d'utiliser les mêmes valeurs pour dessiner la forme et pour tester la zone.
interagir réunit cliquer et appuyer en une seule instruction : le premier événement qui arrive — un clic sur la toile ou une touche de la liste — débloque le programme. C'est l'instruction de base pour écrire un jeu qui se pilote à la souris comme au clavier.
nombres.• Clic sur la toile :
action vaut 0, et x, y reçoivent les coordonnées du clic.• Touche pressée :
action vaut le numéro de la touche (1 pour la première de la liste, 2 pour la deuxième…), et x, y valent -1.
interagir maToile, ['z', 's', 'd', 'q'] dans action, x, yClic ou touchePlacée dans une boucle, cette instruction forme la boucle de jeu : on redessine la toile, on l'affiche, on attend l'action du joueur, puis on recommence.
Un commentaire commence par // et s'étend jusqu'à la fin de la ligne.
Pour les commentaires sur plusieurs lignes, on utilise les accolades { } : tout ce qui se trouve entre elles est ignoré lors de l'exécution.
Les commentaires servent à expliquer le code — aux autres, mais surtout à soi-même quand on relit un programme plus tard. C'est une bonne habitude à prendre dès le début.
affiche x // peut aussi suivre une instruction{
Ceci est un commentaire
sur plusieurs lignes
}
terminer permet d'arrêter immédiatement le programme.
Quand l'instruction terminer est exécutée : le programme s'arrête, aucune autre instruction n'est exécutée, on sort définitivement du programme.
essayer / attraper permet de prévoir ces situations et de réagir proprement, sans faire planter tout le programme.
Le bloc essayer contient le code à risque. Si une erreur survient, l'exécution saute immédiatement dans le bloc attraper — les instructions suivantes du bloc essayer sont ignorées. Après le bloc attraper, le programme reprend normalement.
attraper, l'exécution reprend à la ligne suivant fin essayer.En nommant une variable après attraper, on peut lire le message d'erreur exact et l'afficher ou le traiter dans le programme.
Les blocs essayer peuvent être imbriqués. Chaque niveau gère ses propres erreurs indépendamment — une erreur dans le bloc interne ne remonte pas au bloc externe si elle est attrapée.
attraper, le bloc attraper externe ne s'exécute pas.t[10] sur un tableau de 3 éléments).convertir_nombre('abc') sur un texte qui ne peut pas être converti en nombre.essayer / attraper ne doit pas servir à masquer des erreurs de logique. Si une erreur survient souvent au même endroit, mieux vaut corriger la cause avec une condition (si) plutôt que de simplement l'ignorer avec attraper.Quand une expression contient plusieurs opérateurs, ils ne sont pas évalués de gauche à droite : certains ont une priorité plus élevée. Voici l'ordre, du plus prioritaire au moins prioritaire :
1. nonNégation unaire — évalué en premier2. * / modMultiplication, division, modulo3. + -Addition, soustraction (et concaténation de textes)4. = <> < > <= >=Comparaisons5. etET logique6. ouOU logique — le moins prioritaire// En cas de doute, utilisez des parenthèses : (a + b) * cExécute le bloc seulement si la condition est vraie. Si elle est fausse, rien ne se passe et l'exécution continue après fin si.
L'une des deux branches est toujours exécutée. Si la condition est vraie → bloc alors ; sinon → bloc sinon. Les deux branches s'excluent mutuellement.
On peut imbriquer des structures si pour traiter plus de deux cas. Chaque si doit avoir son propre fin si.
L'indentation aide à visualiser quelle fin si ferme quel si.
On peut combiner plusieurs conditions dans un même si avec et (les deux doivent être vraies), ou (au moins l'une doit être vraie), et non (inverse la condition). Les parenthèses aident à lever toute ambiguïté.
La structure selon permet de choisir une action parmi plusieurs possibilités, en fonction de la valeur d'une variable ou d'une expression.
Utilisez pour quand vous savez à l'avance combien de fois la boucle doit s'exécuter. La variable de contrôle (i) prend automatiquement les valeurs de départ à fin, de 1
en 1 par défaut. Le mot-clé pas permet de changer l'incrément — y compris en négatif pour parcourir à rebours.
pas ne peut pas être 0 — cela provoquerait une boucle infinie. Pour parcourir à rebours, utilisez un pas négatif : pas -1.Utilisez tant que quand le nombre d'itérations n'est pas connu à l'avance — par exemple, répéter jusqu'à ce que l'utilisateur saisisse une valeur correcte, ou jusqu'à ce qu'un compteur
atteigne un certain seuil.
La forme la plus simple : répéter exactement N fois, sans avoir besoin d'une variable de contrôle. Idéale pour les actions répétitives simples (afficher un message N fois, dessiner une figure, etc.).
On peut placer une boucle à l'intérieur d'une autre. Pour chaque itération de la boucle extérieure, la boucle intérieure s'exécute entièrement. C'est la base des algorithmes sur des structures à deux dimensions (tableaux 2D, tables de multiplication, matrices).
continue sert à ignorer le reste de la boucle pour l'itération en cours et à passer directement à l'itération suivante.
arrête sert à arrêter complètement la boucle en cours.
t[0], le deuxième t[1], etc.) — une convention universelle dans la quasi-totalité des langages de programmation.
t est un tableauCréer un tableau vide []t ajoute 42Ajouter 42 en fin de tableaut[0] vaut 99Modifier l'élément à l'index 0affiche t[0]Lire la valeur à l'index 0t supprime 2Supprimer l'élément à l'index 2vide tVider entièrement le tableauLe pattern classique pour accéder à chaque élément d'un tableau : une boucle pour allant de 0 à longueur(t) - 1. La fonction longueur retourne le nombre d'éléments, donc le dernier index valide est toujours longueur - 1.
Affecter directement une valeur à un index inexistant étend automatiquement le tableau. Les éléments intermédiaires sont initialisés à une chaîne vide. Cela peut être pratique, mais peut aussi provoquer des surprises si on n'y prend pas garde.
Un tableau à 2 dimensions (souvent appelé "grille" ou "matrice") est un tableau qui contient d’autres tableaux.
- Chaque élément du tableau principal représente une ligne
- Chaque ligne est un tableau qui contient plusieurs cases (colonnes)
Important :
- L’index commence à 0 (premier élément = t[0]).
- Pour parcourir un tableau, on utilise souvent une boucle de 0 à longueur(t) - 1.
Pour une grille 2D, on utilise généralement deux boucles imbriquées (lignes puis colonnes).
La fonction taille permet de définir ou modifier dynamiquement la taille d’un tableau.
si n est supérieur à la taille actuelle :
- le tableau est agrandi
- les nouvelles cases reçoivent une valeur par défaut
si n est inférieur :
- les éléments excédentaires en fin de tableau sont supprimés
- si le tableau est vide, il est automatiquement initialisé
'nom'). Les dictionnaires sont dynamiques : on peut ajouter, modifier ou supprimer des clés à tout moment.
Dico est un dictionnaireCréer un dictionnaire videDico vaut ['nom': 'Jean', 'age': 25]Initialiser avec des paires clé → valeuraffiche Dico['nom']Lire une valeur par sa cléDico['ville'] ajoute 'Paris'Ajouter une nouvelle cléDico['age'] vaut 26Modifier la valeur d'une clé existanteDico supprime 'nom'Supprimer une cléaffiche longueur(Dico)Nombre de clés du dictionnaireaffiche contient(Dico, 'ville')Tester l'existence d'une clé (vrai / faux)clés(Dico)Récupérer la liste des clésOn déclare un dictionnaire, puis on l'initialise avec des paires 'clé' : valeur. Chaque valeur se lit ensuite grâce à sa clé, placée entre crochets.
On peut faire évoluer le dictionnaire à tout moment : ajouter une nouvelle clé avec ajoute, changer une valeur avec vaut, ou retirer une clé avec supprime.
La fonction cles retourne un tableau contenant toutes les clés du dictionnaire. On peut alors le parcourir avec une boucle pour pour accéder à chaque paire clé → valeur.
Une fonction peut contenir n'importe quelle structure du langage. Ici, deux branches de retour : l'une si a > b, l'autre sinon. La première instruction retourne rencontrée arrête
l'exécution de la fonction.
Une fonction peut s'appeler elle-même — c'est la récursivité. C'est un concept avancé mais très élégant pour certains problèmes. La clé est toujours le cas de base : une condition qui arrête
la récursion (ici n <= 1), sans laquelle la fonction s'appellerait infiniment.
procédure et s'appellent avec appelle.
Le choix entre fonction et procédure dépend du besoin : si on veut un résultat réutilisable (dans un calcul, une condition, un affichage), on utilise une fonction. Si on veut effectuer une action sans s'attendre à un résultat (afficher, remplir un tableau, etc.), on utilise une procédure.
| Critère | Fonction | Procédure |
|---|---|---|
| Mot-clé début | fonction |
procédure |
| Mot-clé fin | fin fonction |
fin procédure |
| Retourne une valeur | Oui (retourne) |
Non |
| Utilisable dans expression | Oui : x vaut f(3) |
Non |
| Mode d'appel | Direct ou avec appelle |
Obligatoirement avec appelle |
MonProcessus() — qui rend la main
immédiatement : le programme continue son chemin pendant que le processus travaille. C'est l'outil idéal pour animer une toile toute seule, faire avancer une horloge ou mettre à jour des variables en arrière-plan, sans bloquer le
dialogue avec l'utilisateur.
La définition ressemble à celle d'une procédure : processus suivi d'un nom, puis fin processus. Le processus partage les variables du programme, il peut
donc lire et modifier ce qui a été déclaré avant lui.
Dans la boucle d'un processus, pause donne son rythme à l'animation et rend la main au programme principal. Une pause 100 correspond à dix images par seconde. La durée
est exprimée en millisecondes (1000 = une seconde) et ramenée entre 60 et 3000 ms.
pause 60Le plus rapide autorisépause 100Dix images par seconde, fluide pour une animationpause 500Deux fois par secondepause 1000Une fois par seconde, rythme d'une horlogepause attend en laissant vivre le processus et active l'affichage progressif : ce qui a été affiché avant la pause apparaît tout de suite.C'est l'usage le plus courant : le processus redessine la toile en boucle, pendant que le programme principal attend une touche. Quand le processus redessine avec affiche, l'image est remplacée en
place, donc cliquer et interagir restent actifs dans le programme principal.
suspendre met le processus en pause : il ne s'exécute plus mais garde sa position et ses variables. reprendre le relance exactement là où il s'était
arrêté. Le nom entre les parenthèses est facultatif, puisqu'il n'y a qu'un processus par programme.
suspendre et reprendre restent sans effet si aucun processus n'est en cours ou s'il n'est pas suspendu. Pour redémarrer un processus terminé, il suffit de l'appeler à nouveau.demande, choisir, appuyer, cliquer et interagir y sont interdits : seul le programme principal parle à l'utilisateur.pause, le processus monopolise le programme. C'est elle qui lui donne son rythme et laisse le programme principal travailler.terminer ou le bouton Stop coupent tout immédiatement.processus Nom()Ouvre la définition du processusfin processusFerme la définitionNom()Démarre le processus et rend la main aussitôtpause 100Donne son rythme à la boucle (60 à 3000 ms)suspendre Nom()Met le processus en pause sans perdre son étatreprendre Nom()Le relance là où il s'était arrêtéterminerArrête le programme et le processusracine(9) retourne 3, longueur('bonjour') retourne 7, etc.
racine(9) → 3, racine(2) → 1.414…absolue(-5) → 5, absolue(3) → 3. Utile pour calculer des distances.arrondi(3.7) → 4, arrondi(3.2) → 3hasard(1, 6) simule un lancer de dé à 6 faces.si a < b alors retourne a sinon retourne b.décimal(3.14159265358979, 2) → 3.14sinus(3.14159)cosinus(3.14159)tangente(45 * pi / 180)logarithme(2.71828) → ≈ 1pi() → 3.14159265358979pair(7) → fauximpair(3) → vrailongueur('abc') → 3, longueur('bonjour monde') → 13majuscule_initiale('bonjour') → 'Bonjour'.
de la casse.
majuscules('bonjour') → 'BONJOUR'. Utile pour comparer des chaînes sans tenir compte
de la casse.
minuscules('BONJOUR') → 'bonjour'.inverser('abc') → 'cba'. Utile pour détecter les palindromes.mot apparaît dans texte, sans tenir compte de la casse. Retourne vrai ou faux.ancien par nouveau dans le texte. Retourne le texte modifié (n'altère pas l'original).repeter_texte('*', 5) → '*****'. Idéal pour dessiner des formes dans la console.hasardtexte('Pierre', 'Feuille', 'Ciseaux') simule un choix aléatoire.commence_par('Bonjour', 'Bon') // vraitermine_par('Bonjour', 'Bon') // fauxcompter('banana', 'a') // 3copier('bonjour', 4, 4) // 'jour'caractère(65) // Acode('A') // 65position('jour', texte) // texte = bonjour → 4insertion('jour', 1, Bon) // Bonjourchiffres('23ABC10') // 2310lettres('23ABC10') // ABCaffiche normaliser('éàü') // eauexpression('\w+@\w+\.\w+', texte) taille(t, 2)t[0] mais plus lisible. Provoque une erreur si le tableau est vide — vérifiez avec longueur(t) > 0 avant.t[longueur(t) - 1] mais plus concis. Provoque une erreur si le tableau est vide.vrai ou faux. Plus simple qu'une boucle de recherche manuelle.[0] = val. Très pratique pour déboguer l'état d'un tableau sans écrire une boucle d'affichage.mots vaut découper('pomme,poire,banane', ',')affiche joindre(t, ', ')trier(t) // Ordre décroissant : trier(t, 'desc')unique(t)jj/mm/aaaa. Retourne une datehh:mm:ss. Retourne une heureimporter('C:\monfichier.csv') / importer('https://coddyrun.fr/')sauvegarder('C:\monfichier.txt', 'Bonjour monde !')fichier_existe('C:\monfichier.txt')ajouter_ligne('C:\log.txt', 'Démarrage du programme')télécharger('https://exemple.fr/img1.png', 'C:\Images')'42'). Utile pour valider les saisies utilisateur avant de faire des calculs.convertir_texte(42) → '42'. Nécessaire pour concaténer un nombre avec du texte dans certains contextes.convertir_nombre('3.14') → 3.14. Provoque une erreur si la conversion est impossible.convertir_date(x)convertir_heure(x)score vaut 120 → score vaut limiter(score, 0, 100)| Message d'erreur | Cause probable | Solution |
|---|---|---|
Variable inconnue : "x" |
Variable utilisée avant d'être déclarée | Ajouter x est un nombre (ou texte, booléen, tableau) avant la première utilisation |
Variable déjà déclarée : "x" |
La variable a déjà été déclarée auparavant | Supprimer la redéclaration. |
Division par zéro |
a / 0 ou a mod 0 — le diviseur vaut 0 |
Vérifier le diviseur avec un si avant de diviser : si b <> 0 alors … |
Index hors limites : t[5] |
Accès à un index qui n'existe pas dans le tableau | Vérifier avec longueur(t) que l'index est valide avant d'y accéder |
"x" n'est pas un tableau |
Utilisation de la notation t[i] sur une variable qui n'est pas un tableau |
Déclarer la variable avec x est un tableau |
fin si manquant |
Un si n'a pas de fin si correspondant |
Vérifier que chaque si imbriqué est bien fermé par son propre fin si |
pas ne peut pas être 0 |
Boucle pour avec un incrément (pas) égal à 0 |
Utiliser un pas non nul — positif pour aller en avant, négatif pour aller en arrière |
"f" : 2 paramètre(s) attendu(s) |
Nombre d'arguments incorrect lors de l'appel d'une fonction | Vérifier la signature de la fonction et passer le bon nombre d'arguments |
Soustraction de textes impossible |
'a' - 'b' n'est pas supporté |
Seul l'opérateur + est valable pour les textes (concaténation) |
premier/dernier : tableau vide |
Appel de premier() ou dernier() sur un tableau sans éléments |
Vérifier longueur(t) > 0 avant d'appeler ces fonctions |
la boucle "tant que" dépasse la limite d'itérations |
Boucle infinie détectée | Vérifier que la condition évolue à chaque itération |
Champ inconnu : "nom" |
Le champ demandé n’existe pas dans l’enregistrement | Créer le champ avant de le lire :
x.nom vaut …
|
"x" n'est pas un enregistrement |
Accès à un champ (x.nom) sur une variable non enregistrement |
Déclarer la variable comme enregistrement :
x est un enregistrement
|
"x" est une constante : modification interdite |
Tentative de modification d’une constante | Supprimer l’affectation ou utiliser une variable à la place |
… : seul le texte fixe permet de retrouver l'erreur dans ce tableau.
Chaque message indique toujours la ligne concernée — c'est par elle qu'il faut commencer.
Les erreurs de CoddyRun se répartissent en 15 familles. Les premières sont détectées à la lecture du programme, les suivantes pendant son exécution.
Ces erreurs sont levées par l'analyseur avant même l'exécution : une ligne est mal formée, un mot-clé manque ou un délimiteur n'est pas fermé.
| Message d'erreur | Cause probable | Solution |
|---|---|---|
Instruction inattendue : "…" |
La ligne commence par un jeton qui n'est pas une instruction valide. | Vérifier l'orthographe du mot-clé (affiche, si, pour…) et les accents. |
Instruction inconnue après "x" |
Après un nom de variable, CoddyRun attend est, vaut, ajoute, soustrait ou supprime. |
Compléter l'instruction, par exemple x vaut 10. |
Expression attendue, obtenu : "…" |
Un opérande manque : opérateur en fin de ligne, virgule en trop, parenthèse ouverte suivie de rien. | Compléter l'expression ou supprimer l'opérateur orphelin. |
Élément attendu : …, mais trouvé : … |
L'analyseur attendait un jeton précis (mot-clé, virgule, parenthèse) et en a trouvé un autre. | Comparer la ligne avec la syntaxe de référence du chapitre concerné. |
")" attendu |
Une parenthèse ouvrante n'a jamais été refermée. | Compter les parenthèses ; chaque ( a besoin de son ). |
Crochet fermant "]" attendu dans le tableau |
Un littéral tableau [1, 2, 3] n'est pas refermé. |
Ajouter le ] manquant et vérifier les virgules entre les éléments. |
Crochet fermant "]" attendu dans le dictionnaire |
Un littéral dictionnaire ['clé': valeur] n'est pas refermé. |
Ajouter le ] final. |
Crochet fermant "]" attendu après ":" (dictionnaire vide) |
Le dictionnaire vide s'écrit exactement [:]. |
Écrire d vaut [:] sans rien entre : et ]. |
Identifiant attendu après "," |
Dans une déclaration multiple x, y, z est un nombre, une virgule n'est pas suivie d'un nom. |
Supprimer la virgule en trop ou ajouter le nom manquant. |
Après "x, y", seule la forme "x, y est ..." est supportée |
Une liste de variables séparées par des virgules ne peut servir qu'à une déclaration. | Affecter chaque variable sur sa propre ligne. |
Nom attendu après "…" |
Un mot-clé de définition (fonction, procédure, processus, classe) n'est pas suivi d'un nom. | Donner un nom valide, commençant par une lettre. |
Nom de champ attendu après "." |
Le point d'accès à un champ n'est suivi d'aucun identifiant. | Écrire personne.nom, jamais personne. seul. |
Définition "…" sans fin correspondante |
Une fonction, procédure ou un processus n'a pas son mot-clé de fermeture. | Ajouter fin fonction, fin procédure ou fin processus. |
Ligne %d: instruction invalide sur champ "x.y" |
Après x.champ, seuls vaut, ajoute et soustrait sont acceptés. |
Utiliser une de ces trois formes. |
Nombre attendu après "#" |
Un littéral caractère #65 ou #$41 est incomplet. |
Faire suivre le # d'un code décimal ou hexadécimal. |
Erreur interne: pop global interdit |
Anomalie de l'interpréteur : une portée globale a tenté d'être libérée. | Ce cas ne doit pas se produire ; signaler le programme qui le déclenche. |
CoddyRun est typé : une variable garde le type reçu à la déclaration. La plupart des erreurs ci-dessous viennent d'une affectation qui change ce type.
| Message d'erreur | Cause probable | Solution |
|---|---|---|
Variable inconnue : "x" |
La variable est lue avant d'avoir été déclarée, ou son nom est mal orthographié. | Déclarer la variable avant usage : x est un nombre. |
"x" existe déjà comme variable |
Le nom est déjà pris par une variable ou une constante de la même portée. | Choisir un autre nom, ou supprimer la seconde déclaration. |
Type inconnu : "…" |
Le mot placé après est un / est une n'est pas un type reconnu. |
Utiliser nombre, texte, booléen, tableau, dictionnaire, enregistrement, date, heure ou toile. |
Déclaration de type …, impossible d'affecter un … |
La déclaration et la valeur initiale ne sont pas du même type. | Aligner le type déclaré sur la valeur, ou convertir la valeur. |
"x" est déclaré de type …, impossible d'affecter un … |
Affectation d'une valeur d'un autre type que celui déclaré. | Convertir avec convertir_nombre(), convertir_texte() ou vers_type(). |
"x" est de type …, impossible d'affecter un … |
Même situation, détectée au moment de l'exécution. | Vérifier le type renvoyé par l'expression de droite avec type_de(). |
"x" est de type nombre, impossible d'ajouter un … |
ajoute sur un nombre exige une valeur numérique. |
Convertir la valeur avant : x ajoute convertir_nombre(v). |
"x" est de type …, "soustrait" réservé aux nombres |
soustrait n'existe que pour les nombres. |
Pour un texte, utiliser retirer() ; pour un tableau, supprime. |
Impossible de soustraire un … à un nombre |
La valeur soustraite n'est pas un nombre. | Convertir la valeur, ou corriger l'expression. |
"ajoute" non supporté sur le type … |
ajoute ne fonctionne que sur nombre, texte et tableau. |
Utiliser vaut pour les autres types. |
"x" est une constante : modification interdite |
Une constante ne peut être affectée qu'une fois, à sa définition. | Transformer en variable, ou supprimer la réaffectation. |
Constante attend un identifiant |
constante n'est pas suivi d'un nom valide. |
Écrire constante TVA vaut 20. |
Constante déjà définie : "…" |
Deux constantes portent le même nom. | Renommer l'une des deux. |
Nom de variable interdit : "…" est un mot réservé |
Le nom choisi est un mot-clé du langage. | Choisir un autre nom (par exemple pour_total au lieu de pour). |
Nom de variable interdit : "…" est un nom de type |
Le nom choisi est un nom de type (nombre, texte, tableau…). | Choisir un nom différent du type. |
Nom de variable interdit : "…" est une fonction native |
Le nom entre en collision avec une fonction intégrée. | Renommer la variable ; la liste complète est au chapitre Fonctions intégrées. |
Nom de variable interdit : "…" est déjà une fonction ou une procédure |
Une fonction ou procédure du programme porte déjà ce nom. | Renommer la variable ou le sous-programme. |
défaut : type non pris en charge |
défaut() ne connaît pas de valeur par défaut pour ce type. |
L'appeler sur un nombre, un texte, un booléen, un tableau ou un dictionnaire. |
Les nombres CoddyRun sont des flottants double précision : ils restent exacts jusqu'à 253. Au-delà, ou en cas d'opération impossible, l'exécution s'arrête plutôt que de produire un résultat faux.
| Message d'erreur | Cause probable | Solution |
|---|---|---|
Division par zéro |
Le diviseur d'une division vaut 0. | Tester avant : si b <> 0 alors …. |
Modulo par zéro |
a mod 0 n'a pas de sens. |
Vérifier que le second opérande n'est pas nul. |
Dépassement numérique : la valeur dépasse le maximum représentable |
Le résultat sort des bornes des nombres flottants. | Réduire l'ordre de grandeur du calcul (éviter les puissances et factorielles trop grandes). |
Résultat numérique indéfini (NaN) |
Opération mathématiquement indéfinie (0/0, ∞−∞…). | Contrôler les valeurs d'entrée avant le calcul. |
Nombre invalide ou hors limites : "…" |
Un littéral numérique est mal écrit ou trop grand. | Corriger l'écriture du nombre (pas d'espace, point décimal). |
Nombre trop grand : "…" |
Le littéral dépasse ce que le langage peut stocker. | Utiliser une valeur plus petite, ou un texte si le nombre sert d'identifiant. |
Nombre trop grand : "…" dépasse 2^53 |
Au-delà de 9 007 199 254 740 992, les entiers ne sont plus exacts. | Rester sous cette limite, ou manipuler la valeur sous forme de texte. |
Nombre trop grand : au-delà de 9 007 199 254 740 992 (2^53), les nombres ne sont plus exacts |
Résultat de calcul dépassant la précision entière garantie. | Revoir l'algorithme pour limiter la croissance des valeurs. |
Nombre hexadécimal invalide : … |
Un littéral $… contient un caractère hors de 0-9 A-F. |
N'utiliser que des chiffres hexadécimaux valides. |
Conversion en nombre impossible |
La valeur fournie ne représente pas un nombre. | Vérifier le texte source, ou tester avec est_nombre(). |
arcsinus(x) : x doit être compris entre -1 et 1 |
L'arc sinus n'est défini que sur [-1 ; 1]. | Borner la valeur avec limiter(x, -1, 1). |
arccosinus(x) : x doit être compris entre -1 et 1 |
L'arc cosinus n'est défini que sur [-1 ; 1]. | Borner la valeur avant l'appel. |
tangente(x) : valeur indéfinie (cos = 0) |
La tangente diverge quand le cosinus s'annule (90°, 270°…). | Éviter ces angles ou tester le cosinus avant. |
logarithme(x) : x doit être strictement positif |
Le logarithme de 0 ou d'un nombre négatif n'existe pas. | Tester x > 0 avant l'appel. |
factorielle : n doit être >= 0 |
La factorielle n'est pas définie pour un nombre négatif. | Passer un entier positif ou nul. |
factorielle : n doit être un entier |
Un nombre à virgule a été fourni. | Arrondir d'abord avec arrondi(). |
factorielle : n trop grand (max 170) |
Au-delà de 170!, le résultat dépasse les limites numériques. | Rester sous 170. |
pgcd : les deux arguments doivent être des entiers |
Le PGCD ne s'applique qu'à des entiers. | Arrondir les deux valeurs avant l'appel. |
decimal(x, n) : n doit être >= 0 |
Le nombre de décimales demandé est négatif. | Passer 0 ou plus. |
decimal(x, n) : n trop grand (max 15) |
Au-delà de 15 décimales, l'affichage n'a plus de sens. | Réduire n. |
pourcentage : le total ne peut pas être zéro |
Le calcul d'un pourcentage divise par le total. | Vérifier que le total est non nul avant l'appel. |
hasard(n) ou hasard(min,max) |
Le nombre d'arguments fourni à hasard() n'est ni 1 ni 2. |
Utiliser une des deux formes documentées. |
intervalle : plage trop grande (maximum 1 000 000 éléments) |
L'intervalle demandé générerait un tableau démesuré. | Réduire l'écart entre début et fin. |
Les textes se concatènent avec + ; toute autre opération arithmétique est refusée. Les fonctions de recherche et de mise en forme valident en plus leurs bornes.
| Message d'erreur | Cause probable | Solution |
|---|---|---|
Soustraction de textes impossible |
'a' - 'b' n'existe pas. |
Pour enlever un fragment, utiliser retirer(texte, motif). |
code: texte vide |
code() a reçu une chaîne vide. |
Vérifier que le texte contient au moins un caractère. |
Code ASCII invalide |
Le code fourni ne correspond à aucun caractère. | Rester dans l'intervalle autorisé. |
caractère: code hors limites (…). Intervalle autorisé: 0..65535 |
caractère() n'accepte qu'un code sur 16 bits. |
Borner la valeur entre 0 et 65535. |
U+… : code Unicode hors limites (max U+10FFFF) |
Le point de code dépasse le maximum Unicode. | Utiliser un point de code valide. |
repeter_texte: n trop grand (max 10000) |
Répétition démesurée, protection contre la saturation mémoire. | Réduire le nombre de répétitions. |
supprimer: position hors limites (…). Intervalle autorisé: 1..… |
La position demandée n'existe pas dans le texte. | Contrôler avec longueur(texte). Les positions commencent à 1. |
position(motif, chaine) ou position(motif, chaine, depart) |
Nombre d'arguments incorrect. | Utiliser la forme à 2 ou à 3 arguments. |
expression : le motif ne peut pas être vide |
L'expression régulière fournie est une chaîne vide. | Fournir un motif non vide. |
expression : motif invalide "…" (…) |
L'expression régulière est mal formée. | Vérifier les parenthèses, crochets et échappements du motif. |
expression : trop de correspondances (motif trop général ?) |
Le motif capture un nombre excessif de résultats. | Rendre le motif plus précis. |
similaire : le seuil doit être compris entre 0 et 1 |
Le seuil de similarité est une proportion. | Passer une valeur entre 0 et 1 (par exemple 0.8). |
hasardtexte attend au moins un argument |
Aucune source de caractères n'a été fournie. | Passer au moins une longueur ou un jeu de caractères. |
html : balise <…> non autorisée. Balises permises : h1 à h6, a, img, ul, ol, li, strong, em. |
html() n'accepte qu'une liste blanche de balises. |
Remplacer la balise par une balise autorisée. |
couleur : valeur invalide "…". Utilisez #RRGGBB, #RRGGBBAA (avec transparence) ou #0 pour reset. |
Le code couleur n'est pas un hexadécimal reconnu. | Écrire la couleur au format #RRGGBB, ou passer par rgb(). |
Couleur invalide : "…". Utilisez un code hexadécimal #RRGGBB, #RRGGBBAA (avec transparence), #RGB ou #RGBA. |
Même cause, lors d'un dessin sur toile. | Corriger le code couleur ou utiliser rgba() / tls(). |
couleur ne peut pas être appliquée à du html(). Utilisez html() pour la mise en forme, ou couleur() sur du texte simple. |
Les deux fonctions de mise en forme sont exclusives. | Choisir l'une ou l'autre pour un même affichage. |
rgb : chaque composante doit être comprise entre 0 et 255 |
Une composante rouge, verte ou bleue sort des bornes. | Borner avec limiter(v, 0, 255). |
rgba : R, V, B doivent être compris entre 0 et 255 |
Même cause pour la variante avec transparence. | Corriger les trois composantes. |
rgba : l'alpha doit être compris entre 0 (transparent) et 1 (opaque) |
Le canal alpha est une proportion, pas un nombre sur 255. | Passer une valeur entre 0 et 1. |
tls : la teinte doit être comprise entre 0 et 360 |
La teinte est un angle en degrés. | Ramener la valeur dans [0 ; 360]. |
tls : la saturation doit être comprise entre 0 et 100 |
Saturation exprimée en pourcentage. | Passer une valeur entre 0 et 100. |
tls : la luminosité doit être comprise entre 0 et 100 |
Luminosité exprimée en pourcentage. | Passer une valeur entre 0 et 100. |
Les index commencent à 0 et doivent toujours exister avant d'être lus. Beaucoup de fonctions intégrées exigent explicitement un tableau en premier argument.
| Message d'erreur | Cause probable | Solution |
|---|---|---|
"x" n'est pas un tableau |
Notation t[i], ajoute ou fonction de tableau utilisée sur une autre variable. |
Déclarer x est un tableau. |
"x" n'est pas un tableau ni un texte |
L'indexation x[i] ne s'applique qu'aux tableaux et aux textes. |
Vérifier le type avec type_de(x). |
Index hors limites : t[5] |
L'index demandé dépasse la taille du tableau. | Contrôler longueur(t) ; le dernier index vaut longueur(t) - 1. |
Index négatif interdit |
Un index calculé est devenu négatif. | Tester l'index avant l'accès, ou utiliser limiter(). |
Tableau vide |
Suppression ou lecture dans un tableau sans élément. | Vérifier longueur(t) > 0. |
Tableau vide : "x" |
Même cause, avec le nom de la variable concernée. | Remplir le tableau avant de le parcourir. |
premier: tableau vide |
premier() sur un tableau sans élément. |
Tester la longueur avant l'appel. |
dernier: tableau vide |
dernier() sur un tableau sans élément. |
Tester la longueur avant l'appel. |
premier attend un tableau |
L'argument n'est pas un tableau. | Passer une variable déclarée comme tableau. |
dernier attend un tableau |
L'argument n'est pas un tableau. | Passer une variable déclarée comme tableau. |
melanger attend un tableau |
melanger() ne s'applique qu'aux tableaux. |
Convertir ou corriger l'argument. |
liste_tableau attend un tableau |
L'argument fourni n'est pas un tableau. | Passer un tableau initialisé. |
supprime attend un nom de tableau |
supprime doit porter sur une variable tableau ou dictionnaire. |
Écrire t supprime 2. |
vide attend un nom de tableau |
vide doit porter sur un nom de tableau. |
Écrire vide t. |
taille(tableau, n) : le premier argument doit être un tableau |
Argument de mauvais type. | Passer un tableau en premier. |
taille(tableau, n) : n doit être >= 0 |
Taille cible négative. | Passer 0 ou plus. |
trier : le premier argument doit être un tableau |
Tri demandé sur autre chose qu'un tableau. | Corriger l'argument. |
index_de : le premier argument doit être un tableau |
Recherche d'index sur un type non indexable. | Pour un texte, utiliser position(). |
joindre : le premier argument doit être un tableau |
joindre() assemble les éléments d'un tableau. |
Passer un tableau et un séparateur texte. |
somme : l'argument doit être un tableau |
Argument de mauvais type. | Passer un tableau de nombres. |
moyenne : l'argument doit être un tableau |
Argument de mauvais type. | Passer un tableau de nombres. |
moyenne : le tableau est vide |
La moyenne d'un ensemble vide n'existe pas. | Tester la longueur avant l'appel. |
médiane : l'argument doit être un tableau |
Argument de mauvais type. | Passer un tableau de nombres. |
médiane : le tableau ne doit pas être vide |
Pas de valeur centrale dans un tableau vide. | Tester la longueur avant l'appel. |
unique : l'argument doit être un tableau |
Argument de mauvais type. | Passer un tableau. |
assembler : tous les arguments doivent être des tableaux |
Un des arguments n'est pas un tableau. | Vérifier chaque argument avec type_de(). |
fusionner : le premier argument doit être un tableau |
Fusion de tableaux avec un premier argument d'un autre type. | Passer deux tableaux, ou deux dictionnaires. |
fusionner : le second argument doit être un tableau |
Le premier argument est un tableau, pas le second. | Les deux arguments doivent être du même genre. |
longueur attend un texte, un tableau ou un dictionnaire |
longueur() ne s'applique qu'à ces trois types. |
Corriger l'argument. |
contient attend un texte, un tableau ou un dictionnaire en premier argument |
Recherche d'appartenance sur un type non supporté. | Corriger le premier argument. |
est_vide : attend un texte, un tableau, un enregistrement ou un dictionnaire |
est_vide() n'a pas de sens sur un nombre ou un booléen. |
Comparer directement à 0 ou à faux dans ce cas. |
Un dictionnaire associe une clé texte à une valeur. La clé doit exister avant toute lecture.
| Message d'erreur | Cause probable | Solution |
|---|---|---|
Clé de dictionnaire invalide : la clé doit être un texte |
Une clé numérique ou booléenne a été utilisée. | Convertir la clé : d[convertir_texte(i)]. |
Clé inconnue : "…" |
Lecture d'une clé absente du dictionnaire. | Tester avec contient(d, 'clé') avant de lire. |
Clé inconnue : d['ville'] |
Suppression ou lecture d'une clé qui n'existe pas. | Vérifier les clés disponibles avec cles(d). |
Dictionnaire vide : "d" |
Opération nécessitant au moins une entrée. | Ajouter des entrées avant : d['clé'] vaut …. |
Après d[...] on attend "vaut" ou "ajouter" |
Après un accès indexé sur dictionnaire, seuls ces deux mots-clés sont acceptés. | Écrire d['clé'] vaut valeur. |
cles : l'argument doit être un dictionnaire |
cles() appelée sur autre chose. |
Passer un dictionnaire. |
fusionner : le premier argument doit être un dictionnaire |
Mélange de types dans une fusion. | Fusionner deux dictionnaires entre eux. |
fusionner : le second argument doit être un dictionnaire |
Le premier argument est un dictionnaire, pas le second. | Aligner les deux types. |
Un champ doit être créé par une affectation avant d'être lu. Les types de champ sont figés une fois le champ créé.
| Message d'erreur | Cause probable | Solution |
|---|---|---|
"x" n'est pas un enregistrement |
Accès x.champ sur une variable d'un autre type. |
Déclarer x est un enregistrement. |
"x" n'est pas un objet ni un enregistrement |
Accès par point sur une valeur qui n'est ni une instance de classe ni un enregistrement. | Vérifier le type avec type_de(x). |
Champ inconnu : "nom" |
Le champ n'a jamais été créé. | Créer le champ d'abord : x.nom vaut 'Alice', ou tester avec existe(). |
Enregistrement vide : "x" |
Opération demandée sur un enregistrement sans aucun champ. | Ajouter au moins un champ. |
"x.champ" est de type …, impossible d'affecter un … |
Le champ change de type entre deux affectations. | Conserver le type initial, ou convertir la valeur. |
"x.champ" est de type nombre, impossible d'ajouter un … |
ajoute sur un champ numérique avec une valeur non numérique. |
Convertir avant d'ajouter. |
"x.champ" est de type …, "soustrait" réservé aux nombres |
soustrait sur un champ non numérique. |
N'utiliser soustrait que sur des champs nombre. |
champs: argument doit être un enregistrement |
champs() liste les champs d'un enregistrement. |
Passer un enregistrement. |
existe: premier argument doit être un enregistrement |
Test d'existence de champ sur un autre type. | Pour un dictionnaire, utiliser contient(). |
supprime_champ: premier argument doit être un enregistrement |
Suppression de champ sur un autre type. | Passer un enregistrement. |
Les boucles sont protégées par une limite d'itérations : au-delà, CoddyRun considère qu'il s'agit d'une boucle infinie et interrompt le programme.
| Message d'erreur | Cause probable | Solution |
|---|---|---|
"pas" ne peut pas être 0 |
Une boucle pour avec un pas nul ne progresse jamais. |
Utiliser un pas non nul : positif pour monter, négatif pour descendre. |
"pour" attend un identifiant |
Le mot-clé pour n'est pas suivi d'un nom de variable. |
Écrire pour i de 1 à 10. |
La boucle "…" dépasse … itérations (probable boucle infinie). |
La condition de sortie n'est jamais satisfaite. | Vérifier que la variable testée est bien modifiée dans le corps de la boucle. |
"répète … fois" dépasse la limite de … itérations. |
Le nombre de répétitions demandé est trop grand. | Réduire le nombre, ou restructurer l'algorithme. |
"arrete" ne peut être utilisé qu'à l'intérieur d'une boucle |
arrete placé hors d'une boucle. |
Le déplacer dans un pour, tant que ou répète. |
"continue" ne peut être utilisé qu'à l'intérieur d'une boucle |
continue placé hors d'une boucle. |
Même correction. |
Les sous-programmes vérifient leur nom, le nombre de paramètres et l'unicité des noms au moment de l'appel.
| Message d'erreur | Cause probable | Solution |
|---|---|---|
Fonction/procédure inconnue : "f" |
Le nom appelé n'existe ni dans le programme, ni parmi les fonctions intégrées. | Vérifier l'orthographe, et que la définition précède l'appel. |
"f" : 2 paramètre(s) attendu(s), 1 fourni(s) |
Le nombre d'arguments ne correspond pas à la signature. | Comparer l'appel à la ligne fonction f(...). |
Paramètre en double : "x" |
Deux paramètres portent le même nom dans une définition. | Renommer l'un des deux. |
Nom de paramètre interdit : "…" est un mot réservé |
Un paramètre porte le nom d'un mot-clé. | Choisir un autre nom. |
Nom de paramètre interdit : "…" est un nom de type |
Un paramètre porte un nom de type. | Choisir un autre nom. |
Nom de paramètre interdit : "…" est une fonction native |
Collision avec une fonction intégrée. | Renommer le paramètre. |
Nom de paramètre interdit : "…" est déjà une fonction ou une procédure |
Collision avec un sous-programme du fichier. | Renommer le paramètre. |
retourne attend une expression |
retourne est seul sur sa ligne. |
Indiquer la valeur renvoyée : retourne total. |
appelle attend un nom de procédure |
appelle n'est pas suivi d'un nom valide. |
Écrire appelle maProcedure(…). |
Un seul processus est autorisé par programme : « … » est déjà défini, « … » ne peut pas être ajouté. |
Deux blocs processus dans le même fichier. |
Fusionner les deux en un seul processus. |
Ces instructions stockent leur résultat dans une variable existante, dont le type doit correspondre à ce qui est reçu.
| Message d'erreur | Cause probable | Solution |
|---|---|---|
demande "texte" attend le mot-clé "dans" |
La destination du résultat n'est pas indiquée. | Écrire demande 'Ton nom ?' dans nom. |
demande sur tableau non supporté : "t" |
Une saisie ne peut pas remplir directement un tableau. | Lire dans une variable simple, puis t ajoute valeur. |
demande sur enregistrement non supporté : "x" |
Une saisie ne peut pas remplir directement un enregistrement. | Lire champ par champ. |
choisir attend une liste entre crochets, ex : choisir ['A', 'B'] dans x, ou un tableau |
Les options ne sont ni un littéral entre crochets ni un tableau. | Fournir une des deux formes. |
choisir attend au moins une option |
La liste d'options est absente. | Proposer au moins un choix. |
choisir : le tableau d'options est vide |
Le tableau passé ne contient aucun élément. | Le remplir avant l'appel. |
choisir : crochet fermant "]" attendu |
La liste d'options n'est pas refermée. | Ajouter le ]. |
choisir attend le mot-clé "dans" |
La variable de destination n'est pas indiquée. | Écrire choisir [...] dans x. |
choisir ... dans attend un nom de variable |
Après dans, il faut un identifiant. |
Indiquer une variable déjà déclarée. |
choisir : la variable "x" doit être de type nombre |
choisir renvoie l'indice de l'option retenue. |
Déclarer x est un nombre. |
choisir : la variable "x" doit être déclarée comme un nombre (ex : x est un nombre) |
La variable de destination n'est pas déclarée. | La déclarer avant l'instruction. |
appuyer attend une liste de touches entre crochets, ex : appuyer ['z', 's', 'd', 'q'] dans action |
La liste de touches est mal formée. | Utiliser la forme documentée. |
appuyer attend au moins une touche |
Aucune touche n'est surveillée. | Indiquer au moins une touche. |
appuyer : crochet fermant "]" attendu |
La liste de touches n'est pas refermée. | Ajouter le ]. |
appuyer attend le mot-clé "dans" |
La variable de destination manque. | Écrire appuyer [...] dans action. |
appuyer ... dans attend un nom de variable |
Après dans, il faut un identifiant. |
Indiquer une variable déclarée. |
appuyer : la variable "x" doit être de type nombre |
L'indice de la touche pressée est un nombre. | Déclarer la variable comme nombre. |
appuyer : la variable "x" doit être déclarée comme un nombre (ex : x est un nombre) |
Variable de destination non déclarée. | La déclarer avant. |
cliquer attend le mot-clé "dans", ex : cliquer maToile dans x, y |
La syntaxe attendue n'est pas respectée. | Suivre l'exemple donné dans le message. |
cliquer ... dans attend des noms de variables, ex : cliquer maToile dans x, y |
Il faut deux variables : abscisse et ordonnée. | Déclarer x et y comme nombres. |
cliquer : virgule attendue entre les variables (x, y) |
La virgule séparant les deux variables manque. | Écrire … dans x, y. |
cliquer : la variable "x" doit être de type nombre |
Les coordonnées sont des nombres. | Déclarer les deux variables comme nombres. |
cliquer : la variable "x" doit être déclarée comme un nombre (ex : x est un nombre) |
Variable non déclarée. | La déclarer avant l'instruction. |
cliquer n'accepte pas de délai, ex : cliquer maToile dans x, y |
Un argument supplémentaire a été ajouté. | Supprimer le délai. |
interagir attend une virgule puis une liste de touches, ex : interagir maToile, ['z', 's'] dans action, x, y |
La toile et la liste de touches doivent être séparées par une virgule. | Suivre l'exemple du message. |
interagir attend une liste de touches entre crochets |
Liste de touches mal formée. | Encadrer les touches par des crochets. |
interagir attend au moins une touche |
Aucune touche surveillée. | Indiquer au moins une touche. |
interagir : crochet fermant "]" attendu |
Liste non refermée. | Ajouter le ]. |
interagir attend le mot-clé "dans", ex : ... dans action, x, y |
Les variables de destination manquent. | Ajouter dans action, x, y. |
interagir ... dans attend des noms de variables |
Trois variables sont attendues après dans. |
Déclarer action, x et y. |
interagir : virgule attendue entre les variables (action, x, y) |
Une virgule manque entre les destinations. | Séparer les trois variables par des virgules. |
interagir : la variable "x" doit être de type nombre |
Les trois destinations sont numériques. | Déclarer chacune comme nombre. |
interagir : la variable "x" doit être déclarée comme un nombre (ex : x est un nombre) |
Variable non déclarée. | La déclarer avant. |
Les fonctions de date acceptent une valeur date ou un texte au format reconnu ; celles d'heure une valeur heure ou un texte. Les messages ci-dessous se déclinent pour chaque fonction concernée.
| Message d'erreur | Cause probable | Solution |
|---|---|---|
… : date invalide |
Le texte fourni ne correspond à aucune date lisible. Concerne année_de, mois_de, jour_de, jour_semaine, semaine_de, ajouter_jours, ajouter_mois, ajouter_années, format_date, vers_date. |
Utiliser le format documenté au chapitre Date & Heure, ou convertir_date(). |
… : attend une date ou un texte |
L'argument est d'un type incompatible (nombre, booléen, tableau…). | Passer une variable date ou un texte. |
… : le premier argument doit être une date ou un texte |
Même cause pour les fonctions à plusieurs arguments. | Corriger le premier argument. |
… : heure invalide |
Texte d'heure non reconnu. Concerne heure_de, minute_de, seconde_de, ajouter_heures, ajouter_minutes, vers_heure. |
Respecter le format hh:mm:ss. |
… : attend une heure ou un texte |
Argument d'un type incompatible. | Passer une variable heure ou un texte. |
… : le premier argument doit être une heure ou un texte |
Même cause pour les fonctions à plusieurs arguments. | Corriger le premier argument. |
jours_entre: date invalide (argument 1) |
La première date n'est pas lisible. | Corriger ou convertir cette date. |
jours_entre: date invalide (argument 2) |
La seconde date n'est pas lisible. | Corriger ou convertir cette date. |
jours_entre: le premier argument doit être une date ou un texte |
Type incompatible en première position. | Passer une date ou un texte. |
jours_entre: le second argument doit être une date ou un texte |
Type incompatible en seconde position. | Passer une date ou un texte. |
est_bissextile : attend une année ou une date |
L'argument n'est ni un nombre d'année ni une date. | Passer 2026 ou une variable date. |
est_bissextile : année hors limites (1 à 9999) |
L'année demandée sort du calendrier supporté. | Rester entre 1 et 9999. |
format_date : le motif ne doit pas être vide |
Aucun motif de formatage fourni. | Passer un motif, par exemple 'jj/mm/aaaa'. |
format_date : motif invalide "…" |
Le motif contient des symboles non reconnus. | Se référer au tableau des motifs du chapitre Date & Heure. |
Toutes les fonctions de dessin attendent une toile en premier argument et vérifient leurs bornes (tailles, angles, nombre de points).
| Message d'erreur | Cause probable | Solution |
|---|---|---|
toile : dimensions invalides (1 a 1000) |
La toile créée est trop petite ou trop grande. | Choisir une largeur et une hauteur entre 1 et 1000. |
dimension : taille 1 a 1000 |
Redimensionnement hors bornes. | Rester dans l'intervalle autorisé. |
… : le 1er argument doit etre une toile |
Une fonction de dessin a reçu autre chose qu'une toile. | Créer la toile avec t est une toile et la passer en premier. |
… : toile introuvable |
La toile référencée n'existe plus (variable écrasée ou hors portée). | Conserver la toile dans une variable accessible. |
contour : l'épaisseur doit être comprise entre 1 et 100 |
Épaisseur de trait hors bornes. | Passer une valeur entre 1 et 100. |
grille : le pas doit être >= 1 |
Un pas nul ou négatif produirait une infinité de lignes. | Passer un pas d'au moins 1. |
grille : pas trop petit (trop de lignes) |
Le pas génère plus de lignes que la toile ne peut en contenir. | Augmenter le pas. |
pixel : trop d'elements sur la toile (max 1 000 000) |
Limite de complexité du dessin atteinte. | Dessiner des formes plutôt que des pixels un à un, ou effacer la toile. |
courbe : le tableau doit contenir au moins 2 points (paires x,y) |
Une courbe a besoin de deux points minimum. | Fournir au moins quatre valeurs (x1, y1, x2, y2). |
courbe(toile, x1, y1, x2, y2, ... [, couleur]) : au moins 2 points (paires x,y) |
Coordonnées incomplètes en appel direct. | Compléter les paires de coordonnées. |
polygone(toile, x1, y1, ... [, couleur]) : au moins 3 points (paires x,y) |
Un polygone exige trois sommets. | Ajouter les points manquants. |
fleche(toile, x1, y1, x2, y2, ...) : au moins 2 points (paires x,y) |
Une flèche relie au moins deux points. | Compléter les coordonnées. |
histogramme : le tableau est vide |
Aucune valeur à représenter. | Remplir le tableau avant l'appel. |
degrade : il faut au moins 2 couleurs |
Un dégradé a besoin d'une couleur de départ et d'arrivée. | Fournir au moins deux couleurs. |
degrade : le 2e argument doit etre un tableau de couleurs |
Le second argument n'est pas un tableau. | Écrire par exemple degrade(toile, ['#3f87a6', '#f69d3c']). |
label : la taille doit être comprise entre 1 et 100 |
Taille de texte hors bornes. | Passer une valeur entre 1 et 100. |
label : l'angle doit être compris entre -180 et 180 |
Rotation du texte hors bornes. | Ramener l'angle dans cet intervalle. |
label_hauteur : la taille doit être comprise entre 1 et 100 |
Taille hors bornes. | Corriger la taille. |
label_largeur : la taille doit être comprise entre 1 et 100 |
Taille hors bornes. | Corriger la taille. |
icone : la taille doit être comprise entre 1 et 400 |
Taille d'icône hors bornes. | Passer une valeur entre 1 et 400. |
icone : point de code Unicode invalide "…" (ex. $E735) |
Le code d'icône n'est pas au format attendu. | Utiliser la notation hexadécimale $E735. |
icone : point de code Unicode hors limites |
Le point de code dépasse le maximum Unicode. | Choisir un code valide. |
clique(x, y, x_coin, y_coin, largeur, hauteur) pour une zone rectangulaire, ou clique(x, y, cx, cy, rayon) pour une zone circulaire |
Le nombre d'arguments ne correspond à aucune des deux formes. | Choisir la forme rectangulaire (6 arguments) ou circulaire (5 arguments). |
animation : le 1er argument doit être un tableau de toiles |
L'animation s'alimente d'un tableau d'images. | Construire un tableau et y ajouter les toiles une à une. |
animation : le tableau ne contient aucune image |
Le tableau d'images est vide. | Ajouter au moins une toile avant de lancer l'animation. |
animation : l'élément … n'est pas une toile |
Un élément du tableau n'est pas une image. | Vérifier ce que contient le tableau. |
svg : le fichier doit être un ".svg" (reçu "…") |
Extension de fichier non autorisée. | Fournir un fichier .svg. |
svg : fichier introuvable "…" |
Le chemin ne pointe vers aucun fichier. | Vérifier le chemin, absolu ou relatif au programme. |
svg : impossible de lire "…" (…) |
Le fichier existe mais n'est pas lisible. | Vérifier les droits d'accès. |
svg : "…" ne contient pas de balise <svg> |
Le contenu n'est pas un SVG valide. | Ouvrir le fichier pour vérifier son contenu. |
svg : image vide |
La source ne contient aucun élément dessinable. | Utiliser une image non vide. |
svg : la largeur et la hauteur doivent être supérieures à 0 |
Dimensions d'incrustation nulles ou négatives. | Passer des dimensions positives. |
svg : le 4e argument doit être une toile, une image ou un chemin de fichier |
Source d'incrustation d'un type non supporté. | Passer une toile, une image importée ou un chemin. |
svg : une toile ne peut pas s'incruster elle-même |
Incrustation récursive détectée. | Utiliser une seconde toile comme source. |
enregistrer : le chemin est vide |
Aucun chemin de sortie fourni. | Indiquer un chemin de fichier. |
enregistrer : seuls les fichiers .svg sont autorisés (obtenu : "…") |
Une toile ne s'enregistre qu'au format SVG. | Terminer le chemin par .svg. |
enregistrer : le dossier destination n'existe pas : "…" |
Le dossier de sortie est introuvable. | Créer le dossier, ou corriger le chemin. |
enregistrer : impossible d'écrire dans "…" : … |
Écriture refusée par le système. | Vérifier les droits d'écriture et que le fichier n'est pas ouvert ailleurs. |
Pour des raisons de sécurité, la lecture et l'écriture sont limitées à quelques extensions, les dossiers doivent exister, et seules les URL https:// sont acceptées.
| Message d'erreur | Cause probable | Solution |
|---|---|---|
importer : seuls les fichiers .txt et .csv sont autorisés (obtenu : "…") |
Extension non autorisée en lecture. | Convertir le fichier en .txt ou .csv. |
importer : fichier introuvable : "…" |
Le chemin ne correspond à aucun fichier. | Vérifier le chemin et le nom exact, accents compris. |
importer : fichier trop volumineux (… octets, maximum 1 Mo) |
La taille dépasse la limite de sécurité. | Découper le fichier ou n'en lire qu'une partie. |
importer : contenu URL trop volumineux (… octets, maximum 1 Mo) |
Même limite appliquée au contenu distant. | Utiliser une ressource plus légère. |
importer : les URLs non sécurisées (http://) ne sont pas autorisées. Utilisez https:// à la place. |
Seul HTTPS est accepté. | Remplacer http:// par https://. |
importer : impossible de récupérer l'URL "…" : … |
Échec réseau (hors ligne, domaine injoignable, certificat). | Vérifier la connexion et l'adresse. |
importer : l'URL "…" a retourné le code HTTP … |
Le serveur a répondu par une erreur (404, 403, 500…). | Vérifier que l'adresse est publique et valide. |
importer : "…" ne contient pas de balise <svg> |
Le contenu importé n'est pas un SVG. | Vérifier la ressource visée. |
sauvegarder : seuls les fichiers .txt et .csv sont autorisés (obtenu : "…") |
Extension non autorisée en écriture. | Choisir .txt ou .csv. |
sauvegarder : le dossier destination n'existe pas : "…" |
Le dossier de sortie est introuvable. | Créer le dossier au préalable. |
sauvegarder : impossible d'écrire dans "…" : … |
Écriture refusée (droits, fichier verrouillé). | Vérifier les permissions. |
ajouter_ligne : seuls les fichiers .txt et .csv sont autorisés (obtenu : "…") |
Extension non autorisée. | Choisir .txt ou .csv. |
ajouter_ligne : le dossier destination n'existe pas : "…" |
Dossier introuvable. | Corriger le chemin. |
ajouter_ligne : impossible d'écrire dans "…" : … |
Écriture refusée. | Vérifier les droits et la disponibilité du fichier. |
fichier_existe : seuls les fichiers .txt et .csv sont autorisés (obtenu : "…") |
Le test d'existence est limité à ces extensions. | Tester un fichier .txt ou .csv. |
liste_fichiers : le dossier "…" n'existe pas |
Le dossier à lister est introuvable. | Vérifier le chemin. |
liste_fichiers : lecture de "…" impossible : … |
Le dossier existe mais n'est pas lisible. | Vérifier les droits d'accès. |
liste_fichiers : le 3e argument doit être un tableau |
Le résultat doit être stocké dans un tableau. | Déclarer t est un tableau et le passer en 3e position. |
liste_fichiers : le tableau n'est pas initialisé |
Le tableau de destination n'a jamais été créé. | Le déclarer avant l'appel. |
télécharger : URL invalide "…" |
L'adresse n'est pas une URL exploitable. | Fournir une adresse complète commençant par https://. |
télécharger : les URLs non sécurisées (http://) ne sont pas autorisées. Utilisez https:// à la place. |
Seul HTTPS est accepté. | Remplacer le protocole. |
télécharger : l'URL "…" a retourné le code HTTP … |
Réponse d'erreur du serveur. | Vérifier que la ressource est accessible publiquement. |
télécharger : impossible de récupérer "…" : … |
Échec réseau. | Vérifier la connexion. |
télécharger : impossible de déterminer le nom du fichier depuis "…" |
L'URL ne se termine pas par un nom de fichier. | Utiliser une URL pointant directement le fichier. |
télécharger : type de fichier non autorisé "…". Extensions acceptées : jpg, jpeg, png, gif, svg, webp, bmp, ico, txt, csv, html |
Extension hors de la liste blanche. | Télécharger un format autorisé. |
télécharger : fichier trop volumineux (… octets, maximum 1 Mo) |
Taille au-delà de la limite. | Choisir une ressource plus petite. |
télécharger : le dossier destination n'existe pas : "…" |
Dossier de réception introuvable. | Créer le dossier avant. |
télécharger : impossible d'écrire "…" : … |
Écriture refusée sur le disque. | Vérifier les droits du dossier. |
ouvrir : le chemin est vide |
Aucune cible fournie. | Indiquer un fichier, un dossier ou une URL. |
ouvrir : fichier ou dossier introuvable : "…" |
La cible n'existe pas. | Vérifier le chemin. |
ouvrir : les URLs non sécurisées (http://) ne sont pas autorisées. Utilisez https:// à la place. |
Seul HTTPS est accepté. | Remplacer le protocole. |
ouvrir : impossible d'ouvrir "…" (code …) |
Le système a refusé l'ouverture. | Vérifier qu'une application est associée à ce type de fichier. |
paramètre(section, clé) pour lire une valeur, paramètre(section, clé, valeur) pour l'enregistrer |
Nombre d'arguments incorrect. | Utiliser la forme à 2 arguments pour lire, à 3 pour écrire. |
paramètre : la section "…" n'existe pas dans … |
Lecture d'une section absente du fichier de paramètres. | L'écrire d'abord, ou vérifier son orthographe. |
paramètre : la clé "…" n'existe pas dans la section "…" |
Lecture d'une clé absente. | L'enregistrer avant de la lire. |
paramètre : le nom de … ne peut pas être vide |
Nom de section ou de clé vide. | Fournir un nom non vide. |
paramètre : le nom de … est trop long (… caractères, max …) |
Nom au-delà de la longueur autorisée. | Raccourcir le nom. |
paramètre : le nom de … ne peut pas contenir "[", "]", "=" ni de retour à la ligne |
Ces caractères sont réservés au format du fichier. | Les retirer du nom. |
paramètre : le texte est trop long (… caractères, max …) |
Valeur au-delà de la longueur autorisée. | Stocker la donnée dans un fichier à part. |
paramètre : le texte ne peut pas contenir de retour à la ligne |
Une valeur doit tenir sur une seule ligne. | Remplacer les sauts de ligne par un séparateur. |
paramètre : seuls un nombre, un texte ou un booléen peuvent être enregistrés |
Type non sérialisable (tableau, enregistrement, toile…). | Convertir en texte avant d'enregistrer. |
paramètre : impossible d'ouvrir "…" : … |
Fichier de paramètres illisible. | Vérifier les droits d'accès. |
paramètre : impossible d'écrire dans "…" : … |
Fichier de paramètres non modifiable. | Vérifier les droits d'écriture. |
Les conversions explicites échouent proprement plutôt que de renvoyer une valeur approximative.
| Message d'erreur | Cause probable | Solution |
|---|---|---|
convertir_nombre: texte non convertible en nombre |
Le texte contient des caractères non numériques. | Nettoyer le texte, ou tester avec est_nombre(). |
convertir_nombre: type non convertible |
Le type source n'a pas d'équivalent numérique. | Convertir d'abord en texte. |
vers_type : type cible inconnu "…" (attendu : nombre, texte, date ou heure) |
Le type demandé n'est pas supporté par cette fonction. | Utiliser un des quatre types listés. |
vers_type : "…" n'est pas convertible en nombre |
La valeur source n'a pas de lecture numérique. | Vérifier la valeur d'origine. |
vers_type : "…" n'est pas une date valide |
Texte non reconnu comme date. | Respecter le format documenté. |
vers_type : "…" n'est pas une heure valide |
Texte non reconnu comme heure. | Respecter le format hh:mm:ss. |
vers_type : conversion vers nombre impossible pour ce type |
Le type source ne peut pas devenir un nombre. | Passer par un texte intermédiaire. |
vers_type : conversion vers date impossible pour ce type |
Le type source ne peut pas devenir une date. | Passer par un texte au bon format. |
vers_type : conversion vers heure impossible pour ce type |
Le type source ne peut pas devenir une heure. | Passer par un texte au bon format. |
vers_decimal : base invalide (2, 8 ou 16 seulement) |
Seules ces trois bases sont gérées. | Passer 2, 8 ou 16. |
vers_decimal : texte vide |
Aucun chiffre à convertir. | Fournir un texte non vide. |
vers_decimal : caractere invalide "…" |
Un caractère n'appartient pas à la base indiquée. | Nettoyer le texte source. |
vers_decimal : chiffre "…" invalide en base … |
Le chiffre dépasse la base (par exemple 9 en base 8). | Corriger la valeur ou la base. |
vers_hexadecimal : largeur trop grande (max 16) |
Le remplissage demandé dépasse la limite. | Passer une largeur inférieure ou égale à 16. |
valuer : caractère non autorisé "…" (seuls ( ) + - * / , et 0..9 sont permis) |
valuer() n'évalue que de l'arithmétique simple. |
Retirer les lettres et symboles non autorisés. |
valuer : caractère inattendu "…" |
Symbole mal placé dans l'expression. | Vérifier l'écriture de l'expression. |
valuer : nombre invalide "…" |
Un nombre est mal formé (deux points décimaux, par exemple). | Corriger le nombre. |
valuer : expression incomplète |
L'expression se termine sur un opérateur. | Compléter l'expression. |
valuer : parenthèse fermante manquante |
Parenthèses déséquilibrées. | Ajouter la parenthèse manquante. |
valuer : division par zéro |
L'expression évaluée divise par zéro. | Corriger l'expression. |
Chaque fonction intégrée contrôle le nombre d'arguments reçus et affiche sa propre signature quand le compte n'y est pas. Ces messages suivent toujours l'une des quatre formes ci-dessous : le texte entre parenthèses est la syntaxe correcte à recopier.
| Forme du message | Signification | Solution |
|---|---|---|
longueur(x) attend 1 argument |
La fonction exige exactement ce nombre d'arguments. | Recopier la signature affichée entre parenthèses. |
décrément(x[, n]) attend 1 ou 2 arguments |
Les crochets signalent un argument facultatif. | Fournir le minimum, et l'option seulement si nécessaire. |
assembler(tableau1, tableau2, ...) attend au moins 2 tableaux |
La fonction accepte un nombre variable d'arguments, avec un minimum. | Ajouter les arguments manquants. |
rectangle(toile, x, y, largeur, hauteur [, couleur]) : 5 ou 6 arguments |
Forme employée par les fonctions de dessin : signature complète puis nombres admis. | Compter les arguments par rapport à la signature affichée. |
maintenant() ne prend aucun argument |
La fonction s'appelle sans rien entre les parenthèses. | Écrire maintenant() sans argument. |
essayer … attraper … fin essayer pour afficher un message adapté au lieu d'interrompre le programme. Voir le chapitre Gestion des erreurs.Bonne exploration — et surtout : amuse-toi à comprendre !
// Ceci est un commentaire — ignoré à l'exécution