Rechercher
Résultats par :
Recherche avancée
Mots-clés

sleep  reset  

Qui est en ligne ?
Il y a en tout 1 utilisateur en ligne :: 0 Enregistré, 0 Invisible et 1 Invité

Aucun

Voir toute la liste


Partagez
Voir le sujet précédentAller en basVoir le sujet suivant
Junior Member
Messages : 29
Date d'inscription : 2017-02-15
Voir le profil de l'utilisateur

Casier/comptage

le 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
Junior Member
Messages : 29
Date d'inscription : 2017-02-15
Voir le profil de l'utilisateur

Casier/comptage

le 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://illiweb.com/fa/i/smiles/icon_redface.gif
cordialement
FC
Member
Messages : 83
Date d'inscription : 2014-07-12
Voir le profil de l'utilisateur

Re: Casier/comptage

le 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
Junior Member
Messages : 29
Date d'inscription : 2017-02-15
Voir le profil de l'utilisateur

Re: Casier/comptage

le Mon 26 Jun - 8:55
Brillant !
Merci
FC
Contenu sponsorisé

Re: Casier/comptage

Voir le sujet précédentRevenir en hautVoir le sujet suivant
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum