Programmer avec le langage Linotte
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.

Programmer avec le langage LinotteConnexion

Besoin d'un conseil sur la programmation en Linotte ?

Le deal à ne pas rater :
Fnac : 2 Funko Pop achetées : le 3ème offert (large sélection de ...
Voir le deal

descriptionCasier/comptage EmptyCasier/comptage

more_horiz
Bjr,
Je viens à nouveau vers vous (pas trop j'espère !) pour un petit pb que je comprends pas :
Je vous donne le petit code tiré du tuto que j'ai complété par curiosité :

1 Casiers :
2 langages est un casier de textes valant "Java", "C++", "C++" , "Logo", "Linotte"
3 début
4 Pour chaque langages, lis
5 Si joker contient "C++", ôte joker de langages
6 affiche langages
7 si joker contient "C++", ôte joker de langages
8 affiche langages
9 Ferme
10 termine
Rien de bien compliqué pour vous. Mais la note de Linotte me laisse perplexe " ligne 7 , l'acteur n'est pas dans le casier : C++/ texte
Comment cela se fait-il puisque joker travaillant en boucle devrait reconnaître qu'il reste encore "C++" à ôter ?
Merci pour vos réponses
FC

descriptionCasier/comptage EmptyCasier/comptage

more_horiz
Mille excuses.
J'ai détecté mon erreur (grossière)
Il fallait en fait faire une seconde boucle avec " pour chaque langages, lis..."
Donc, pas de réponse attendue
Désolé https://2img.net/i/fa/i/smiles/icon_redface.gif
cordialement
FC

descriptionCasier/comptage EmptyRe: Casier/comptage

more_horiz
Bonjour,

C'est bien d'avoir mis un code pour qu'on puisse comprendre le problème...  Smile

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... Wink

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... Wink

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... Smile

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... Smile

Dernière édition par XP Rico le Lun 26 Juin - 9:10, édité 1 fois

descriptionCasier/comptage EmptyRe: Casier/comptage

more_horiz
Brillant !
Merci
FC

descriptionCasier/comptage EmptyRe: Casier/comptage

more_horiz
privacy_tip Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
power_settings_newSe connecter pour répondre