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 Linotte

Besoin d'un conseil sur la programmation en Linotte ?

-29%
Le deal à ne pas rater :
TV TCL 50C721 (2021) – QLED, 4K – 50″ (127cm) (Via ODR + code ...
374.99 € 530.99 €
Voir le deal

2 participants

Casier/comptage

avatar
FCas
Junior Member


Messages : 44
Date d'inscription : 2017-02-15

Casier/comptage Empty Casier/comptage

Message par FCas Thu 22 Jun - 18:48

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
avatar
FCas
Junior Member


Messages : 44
Date d'inscription : 2017-02-15

Casier/comptage Empty Casier/comptage

Message par FCas Thu 22 Jun - 18:55

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
avatar
XP Rico
Member


Messages : 83
Date d'inscription : 2014-07-12

Casier/comptage Empty Re: Casier/comptage

Message par XP Rico Mon 26 Jun - 1:37

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 Mon 26 Jun - 9:10, édité 1 fois
avatar
FCas
Junior Member


Messages : 44
Date d'inscription : 2017-02-15

Casier/comptage Empty Re: Casier/comptage

Message par FCas Mon 26 Jun - 8:55

Brillant !
Merci
FC

Contenu sponsorisé


Casier/comptage Empty Re: Casier/comptage

Message par Contenu sponsorisé


    La date/heure actuelle est Tue 30 Nov - 7:09