Bonjour,
C'est bien d'avoir mis un code pour qu'on puisse comprendre le problème... Et en fait, j'ai détecté ce qui pourrait ressembler à un bug...
mais qui serait plutôt pour moi
une différence d'interprétation du code, entre l'homme et la machine...
Le problème est que lorsqu'on ôte la case n°1 "C++" du casier de texte, on saute en même temps la case n°2 "B++". En effet, on remarque que Linotte ne contrôle pas si la case n°2 "B++" contient "C++",
mais il continue à l'afficher avec la commande : affiche langages.
Code:
Casiers : //J'ai modifier ici le code pour rendre le problème plus apparent...
langages est un casier de textes valant "Java", "C++", "B++", "Logo", "Linotte"
//langages est un casier de textes valant "Java", "C++", "C++" , "Logo", "Linotte" // variante alternative
a est un nombre
n est un nombre
début
Pour chaque langages, lis
mesure langages dans a
affiche joker + " case n°"+ n
Si joker contient "C++", ôte joker de langages
affiche "Le nombre de case est de " + a + " : " & langages & ""
n prend n + 1
/* Pour chaque langages, lis
si joker contient "C++", ôte joker de langages
affiche langages
Ferme */
ferme
termine
En fait, tout peut s'expliquer si on considère que "B++" prend la place de la case 1 (après qu'on est ôter "C++" du casier), et que Linotte poursuit le programme en passant de la nouvelle case n°1 à la case n°2 qui devient alors "Logo".
D'ailleurs si on remplace "B++" par "C++", on notera que rien ne change sauf l'affichage de "C++" qui devrait être ôté normalement...
Ce n'est donc pas vraiment un bug à proprement parler, mais plutôt une lecture du code différente entre l'homme et l'ordinateur... Il y a deux façons de corriger cela :
1) Soit on veut simplement vider la case de la valeur "C++" :Code:
Casiers :
langages est un casier de textes valant "Java", "C++", "C++", "Logo", "Linotte"
// langages est un casier de textes valant "Java", "C++", "B++" , "Logo", "Linotte" // variante alternative
a est un nombre
n est un nombre
début
Pour chaque langages, lis
mesure langages dans a
affiche joker + " case n°"+ n
Si joker contient "C++", insère "Case vidée" à partir de (n + 1) dans langages
// Si joker contient "C++", insère "" à partir de (n + 1) dans langages // variante alternative
Si joker contient "C++", ôte joker de langages
affiche "nombre de case dans le casier " + a + " : " & langages & ""
n prend n + 1/* Pour chaque langages, lis
si joker contient "C++", ôte joker de langages
affiche langages
ferme
2) Soit on veut complétement effacer "C++" et sa case : Code:
Casiers :
langages est un casier de textes valant "Java", "C++", "C++", "Logo", "Linotte"
// langages est un casier de textes valant "Java", "C++", "B++" , "Logo", "Linotte" // variante alternative
a & b est un nombre
n & m est un nombre
numéro est un casier de nombre
début
Pour chaque langages, lis // 1) on repère les cases "C++"
Si joker contient "C++", ajoute clone(m) dans numéro
// Si joker contient "C++", insère "" à partir de (n + 1) dans langages // variante alternative
m prend m + 1
ferme
mesure numéro dans b
Pour chaque numéro, lis // 2) on les efface par ordre décroissant
ôte langages{b} de langages
b prend b -1
ferme
vide n
Pour chaque langages, lis // 3) on affiche le résultat de contrôle
mesure langages dans a
affiche joker + " case n°"+ n
affiche "nombre de case dans le casier " + a + " : " & langages + ""
n prend n + 1
ferme
Enfin, si c'est bien l'un des deux buts recherché par le programme...
Dernière édition par XP Rico le Lun 26 Juin - 9:10, édité 1 fois