Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Autres questions


Index du Forum » Autres questions » Do-LpWhile + Or
Pimouss71 Hors ligne Membre Points: 21 Défis: 0 Message

Do-LpWhile + Or

Posté le 14/01/2018 15:53

Bonjour, je suis Pimouss71, je débute en programmation basic Casio, tout comme je suis nouveau sur ce forum.

J'ai un problème qui est que je n'arrive pas à sortir d'une boucle alors que les conditions pour en sortir sont "bonnes".

Je vous fait un "schéma" du code :

0→A
Do
"DEMANDE UN CHIFFRE "?->A

A≠10 Or A≠20 Or A≠30 =>"MAUVAIS CHIFFRE"
A=10 Or A=20 Or A=30 =>"BON CHIFFRE"

For 1->Z To 3750:Next
ClrText

LpWhile A≠10 Or  A≠20 Or  A≠30
"MERCI ET AU REVOIR"

Je tape 10, 20 ou 30 mais cela me met :

MAUVAIS CHIFFRE
BON CHIFFRE

Puis ça me renvoie sur "DEMANDE UN CHIFFRE".

Voila, je ne comprends pas... merci de m'aider

PS : Excusez-moi si ce ne sont pas les bon termes mais je débute


Lephenixnoir En ligne Administrateur Points: 24575 Défis: 170 Message

Citer : Posté le 14/01/2018 15:55 | #


J'ai mis en forme ton code.

LpWhile A≠10 Or A≠20 Or A≠30

Pour que cette boucle s'arrête, il faudrait que A=10, que A=20, et que A=30 en même temps car tu continues de boucler tant que A est différent de l'un des trois !

Tu as sans doute envie de A≠10 And A≠20 And A≠30 plutôt.

Ça marche aussi pour la condition intérieure.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Dark storm En ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 14/01/2018 15:56 | #


Lpwhile A ≠ 10 And A ≠ 20 And A ≠ 30

Tant que A est différent de 10 ou A différent de 20 ou A différent de 30. On peut exprimer ça en Quitter si A est égal à 10 et A égal à 20 et A égal à 30.

Je te laisse comprendre le problème toi même
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Suruq game Hors ligne Membre de CreativeCalc Points: 621 Défis: 20 Message

Citer : Posté le 14/01/2018 15:59 | #


Tout a été dit mais j’ajoute qu’il faut utiliser « locate » pour afficher du texte
Cela ne changera pas l’issue du programme mais c’est une bonne habitude à prendre et cela te permet de centrer ton texte
There is only one thing that makes a dream impossible to achieve : the fear of failure
Pimouss71 Hors ligne Membre Points: 21 Défis: 0 Message

Citer : Posté le 14/01/2018 16:02 | #


Lephenixnoir a écrit :
J'ai mis en forme ton code.

LpWhile A≠10 Or A≠20 Or A≠30

Pour que cette boucle s'arrête, il faudrait que A=10, que A=20, et que A=30 en même temps car tu continues de boucler tant que A est différent de l'un des trois !

Tu as sans doute envie de A≠10 And A≠20 And A≠30 plutôt.

Ça marche aussi pour la condition intérieure.


Merci beaucoup de ton aide

Dark storm a écrit :
Lpwhile A ≠ 10 And A ≠ 20 And A ≠ 30

Tant que A est différent de 10 ou A différent de 20 ou A différent de 30. On peut exprimer ça en Quitter si A est égal à 10 et A égal à 20 et A égal à 30.

Je te laisse comprendre le problème toi même
Je vais paraite bête mais je ne maîtrise pas le "Quitter si"
Hackcell Hors ligne Maître du Puzzle Points: 1531 Défis: 11 Message

Citer : Posté le 14/01/2018 16:05 | #


Pimouss71 a écrit :
Je vais paraite bête mais je ne maîtrise pas le "Quitter si"


non, c'est juste un problème de vocabulaire, le 'quitter si' veux dire sortir de la boucle DO/Lpwhile sous certaine condition, donc ici c'est juste Lpwhile [condition]

EDIT: comme dis plus bas, LPwhile [condition] veut dire 'continuer si', donc 'quitter si' c'est plus Lpwhile not(condition)
Suruq game Hors ligne Membre de CreativeCalc Points: 621 Défis: 20 Message

Citer : Posté le 14/01/2018 16:06 | #


Ce n’est pas une fonction c’est une façon de parler en langage algorithmique
Ce qu’il veux dire c’est que selon certaine de formule de logique ce que tu avait marqué voulais dire :
«  LpWhile A=10 And A=20 And A=30 « 
Ce qui est impossible et donne donc une boucle infinie
There is only one thing that makes a dream impossible to achieve : the fear of failure
Lephenixnoir En ligne Administrateur Points: 24575 Défis: 170 Message

Citer : Posté le 14/01/2018 16:09 | #


Ah ben non, il a marqué LpWhile A≠10 Or A≠20 Or A≠30, ce qui ne veut pas dire LpWhile A=10 And A=20 And A=30. C'est même tout l'inverse.

Rappel utile des lois dites de De Morgan :
Not (A Or B) = (Not A) And (Not B)
Not (A And B) = (Not A) Or (Not B)

Normalement c'est suffisamment intuitif pour se comprendre en le disant à l'oral.

N'oubliez pas non plus que LpWhile signifie Loop While et est donc suivi de la condition sous laquelle on continue de tourner. La notion de « quitter si la condition est vérifiée » ne s'exprime pas comme ça (voire pas du tout).
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Dark storm En ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 14/01/2018 16:14 | #


Je vais paraite bête mais je ne maîtrise pas le "Quitter si"


My bad, j'ai pas été hyper clair. x)

Il n'y a pas de fonction "Quitter si" en basic. Mais ce que je voulais dire, c'est que souvent, modifier sa condition avec un coup d'algèbre de Bool (cf Wikipedia) permet de la rendre plus intuitive. Dans notre cas, ce n'est pas forcément évident de voir qu'il est impossible de quitter la boucle, alors que si on l'exprime d'une autre manière c'est plus clair.

Au passage, j'utilise les propriétés suivantes :
– Tant que Condition == Quitter si Non Condition
– A ou B (ou C) == Non (Non A et Non B (et Non C))

Faire un peu d'algèbre de Bool est toujours un plus histoire de ne pas reproduire ce genre de bug, parce que dans certains cas c'est beaucoup plus difficile à repérer
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Pimouss71 Hors ligne Membre Points: 21 Défis: 0 Message

Citer : Posté le 14/01/2018 16:19 | #


Je suis vraiment désoler mais je ne comprend toute vos explicitations
Pouvez-vous me donnez un exemple de LpWhile

Pour dire :

Quittez la boucle si A=10 ou si A = 20 ou si A=30

?

Merci
Dark storm En ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 14/01/2018 16:21 | #


Grâce aux équations qu'à rappelé Lephe, je transforme la condition Quitter si A = 10 ou A = 20 ou A = 30 en Tant que A ≠ 10 et A ≠ 20 et A ≠ 30
Ce qui donne LpWhile A≠10 And A≠20 And A≠30
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Pimouss71 Hors ligne Membre Points: 21 Défis: 0 Message

Citer : Posté le 14/01/2018 16:23 | #


Dark storm a écrit :
Grâce aux équations qu'à rappelé Lephe, je transforme la condition Quitter si A = 10 ou A = 20 ou A = 30 en Tant que A ≠ 10 et A ≠ 20 et A ≠ 30
Ce qui donne LpWhile A≠10 And A≠20 And A≠30
Merci beaucoup, cela marche

Je ne comprend juste pas pourquoi on met "And" pour dire "ou"

PS : Excusez mes questions
PPS : vous êtes très gentil
Suruq game Hors ligne Membre de CreativeCalc Points: 621 Défis: 20 Message

Citer : Posté le 14/01/2018 16:25 | #


C’est pas un problème de répondre à ce genre de question on et tous passées par là un jour ou l’autre
There is only one thing that makes a dream impossible to achieve : the fear of failure
Dark storm En ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 14/01/2018 16:27 | #


Ben justement, on met pas "And" pour dire "Ou"

LpWhile signifie "Tant que". Or, "Quitter si condition" est équivalent, en logique, à "Tant que non condition". Étant donné que l'on a pas de fonction "Quitter si" en Basic, on est obligé de transformer la condition qui nous intéresse, à savoir Quitter si A=10 ou A=20… pour que ça fonctionne. D'où les références à l'algèbre de Boole, et les explications des messages de Lephe et moi-même.

Une autre manière de faire serait LpWhile Not (A=10 Or A=20 Or A=30)
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Pimouss71 Hors ligne Membre Points: 21 Défis: 0 Message

Citer : Posté le 14/01/2018 16:33 | #


Dark storm a écrit :
Ben justement, on met pas "And" pour dire "Ou"

LpWhile signifie "Tant que". Or, "Quitter si condition" est équivalent, en logique, à "Tant que non condition". Étant donné que l'on a pas de fonction "Quitter si" en Basic, on est obligé de transformer la condition qui nous intéresse, à savoir Quitter si A=10 ou A=20… pour que ça fonctionne. D'où les références à l'algèbre de Boole, et les explications des messages de Lephe et moi-même.

Une autre manière de faire serait LpWhile Not (A=10 Or A=20 Or A=30)

Merci beaucoup je viens de comprendre

Je n'avais pas compris que
Dark storm a écrit :
LpWhile signifie "Tant que".


Cela deviens logique maintenant

Merci beaucoup a tous pour votre aide

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 217 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd