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 - Discussions


Index du Forum » Discussions » If imbriqués
Samsam13 Hors ligne Membre Points: 5 Défis: 0 Message

If imbriqués

Posté le 12/04/2016 14:30

Bonjour,

Je suis bloqué pour créer un programme dans ma casio.
En effet je tente de faire des "si imbriqués" un peu comme dans excel, voila le topo :

J'ai besoin d'actualiser un montant, mais pour cela j'ai besoin de savoir combien il y a d'année
Du coup je pensais écrire "combien d'année"?->A
Et entre un code du type :
If A >1
Then Si A>2
Then Si A>3
Then Si A>4
Then "Bravo"
Else (3*2^1)+(3*2^2)+(3*2^3)
Else (3*2^1)+(3*2^2)
Else (3*2^1)
Else A
If end

Le soucis c'est que j'ai des erreurs, je me demande s'il n'y a pas un moment plus facile pour faire ce type de programme ou si la CASIO gérait les si imbriqués car c'est peut être tout simplement pas possible.

Merci pour votre aide !

Samir


Xavier59 Hors ligne Membre de CreativeCalc Points: 1337 Défis: 12 Message

Citer : Posté le 12/04/2016 14:35 | #


Casio gère les Si imbriqués, mais tu t'y prends mal. Voilà à quoi ton code devrait ressembler :


If A >1
  Then
    If A>2
    Then ...
    IfEnd
    If A>3
    Then ...
    IfEnd
    If A>4
    Then "Bravo"
    IfEnd
IfEnd

1337
Cakeisalie5 En ligne Ancien administrateur Points: 1913 Défis: 11 Message

Citer : Posté le 12/04/2016 14:37 | #


On remarque de la redondance dans ton code. En effet :
Si 1 ≤ A < 4, R (résultat) = somme pour i allant de 1 à 3 de (3*2^i) [si j'ai bien compris]

Du coup, pourquoi ne pas faire :
If A > 1
Then If A > 4
Then "Bravo"◢
Else:0→R
For 1→I To Int A:Do
R + (3 x 2)^I→R
Done:R◢
IfEnd
Else:A◢
IfEnd


Ce n'est pas forcément le plus simple, mais il y a moins de redondance.

EDIT : Géré le cas où A n'est pas entier, comme a indiqué Dark storm.

De plus (j'ai lu un peu de travers), il faut savoir que la structure d'un If Else sous CASIO est toujours :

If <condition>
Then <à exécuter>
Else <à exécuter>
IfEnd


Donc pour mettre un if dans le then, il faut remettre la structure entière, à savoir :

If <condition1>
Then If <condition2>
Then <à exécuter>
Else <à exécuter> (facultatif)
IfEnd
Else <à exécuter> (facultatif)
IfEnd


Et pareil si tu veux mettre une condition dans ton Else pour faire un Else If.

Promotion ordinaire sur les inscriptions sur Planète Casio : en ce moment, c'est gratuit !

Mon blogBesoin d'utilitaires de transfert vers et depuis la calculatrice sous GNU/Linux ?
Dark storm Hors ligne Labélisateur Points: 11634 Défis: 176 Message

Citer : Posté le 12/04/2016 14:38 | #


Il faut fermer le bloc If avec un IfEnd autant de fois que tu en as ouvert. Donc dans ton cas, ça donnerait un truc comme ça :
If A >1
Then If A>2
Then If A>3
Then If A>4
Then "Bravo"
Else (3*2^1)+(3*2^2)+(3*2^3)
Else (3*2^1)+(3*2^2)
Else (3*2^1)
Else A
IfEnd
IfEnd
IfEnd
IfEnd


Toutefois, tu peux optimiser grâce à la double flèche ⇒ qui s'utilise comme suit :
Condition ⇒ Instruction unique à exécuter si la condition est vraie


Donc dans ton cas, ça donnerait ça :
A>4=>"Bravo"
A≤4 And A>3=>(3*2^1)+(3*2^2)+(3*2^3)
A≤3 And A>2=>(3*2^1)+(3*2^2)
A≤2 And A>1=>(3*2^1)
A≤1=>A



Ajouté le 12/04/2016 à 14:39 :
Cake, ton code ne marche que si A est entier, ce qui n'est pas forcément le cas
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Ne0tux Hors ligne Membre d'honneur Points: 3524 Défis: 265 Message

Citer : Posté le 12/04/2016 20:04 | #


Je n'ai pas tout lu mais si je reprends le dernier message je crois qu'on peut aussi écrire :

A>4=>"Bravo"
A*(A≤1) + 6 * (A≤4) *( (A>1) + 2*(A>2) + 4*(A>3

Mes principaux jeux : Ice Slider - CloneLab - Arkenstone

La Planète Casio est accueillante : n'hésite pas à t'inscrire pour laisser un message ou partager tes créations !
Samsam13 Hors ligne Membre Points: 5 Défis: 0 Message

Citer : Posté le 14/04/2016 20:02 | #


Salut à tous,

Merci pour toutes vos réponses, je n'ai pas eu le temps de vous répondre avant, je vais tenter vos solutions, merci beaucoup.

Cordialement
Programateur Hors ligne Membre Points: 222 Défis: 10 Message

Citer : Posté le 16/04/2016 18:12 | #


Ou alors en toute simplicité...

A≥4⇒"Bravo"
If A≤1
Then A
Else 3(-2+2^(Int A+(Frac A≠0
IfEnd

J'ai besoin de votre participation ici :
94%
Cliquer pour enrouler
Ne0tux Hors ligne Membre d'honneur Points: 3524 Défis: 265 Message

Citer : Posté le 16/04/2016 20:55 | #


Malheureusement ton code est inexact Programmateur, puisque si A vaut plus que 4, le code dans le If s’exécute, alors que seul "Bravo" devrait s'afficher.
Mes principaux jeux : Ice Slider - CloneLab - Arkenstone

La Planète Casio est accueillante : n'hésite pas à t'inscrire pour laisser un message ou partager tes créations !
Programateur Hors ligne Membre Points: 222 Défis: 10 Message

Citer : Posté le 16/04/2016 21:13 | #


C'est tout à fait vrai. Cependant il se peut que ça ne pose pas de problème au niveau du programme...
(oui je sais c'est de très mauvaise fois ! J'ai voulu tenter une approche différente mais finalement ta solution est, pour l'instant, la plus optimisée !)
J'ai besoin de votre participation ici :
94%
Cliquer pour enrouler
Samsam13 Hors ligne Membre Points: 5 Défis: 0 Message

Citer : Posté le 20/04/2016 16:08 | #


Hello tout le monde,

J'espère que vous allez bien :-)

Je reviens vers vous pour vous tenir informer de l'évolution de mon pti programme.
En fait j'ai testé certaines de vos propositions, malheureusement sans succès. Je n'ai pas testé certaines car elles étaient trop compliquées pour le ptit noob que je suis.

Toutefois vos conseils ont été frutucueux 8) en effet j'ai résolu le soucis en modifiant la structures des if et en remplacant les ">" par des "=" cela donne :

If A >1
Then If A=2
Then "Bravo 2"
Else If A=3
Then "Bravo = 3"
Else If A=4
Then ...
End if
End if
End if
...

Voila tout :-) c'est un petit code pour ma calto mais un grand pas pour moi !
En revanche je sollicite à nouveau vos lumières pour une petite question simple pour vous ô grand maitres Jedi de la programmation

Dans le cadre de la formule "Menu" on utilise Lbl et goto. J'ai compris en la pratiquant que le goto est une sorte de renvoi en fait. Mais comment faire en sorte que le programme s'arrête tout bêtement, je m'explique :

Lorsque je choisi dans le menu "Recette de gâteaux au chocolat", comment faire pour qu'à la fin de la recette la calto s'arrête et sort du programme svp ?

Merci à vous.
SamSam
Lephenixnoir En ligne Administrateur Points: 24252 Défis: 170 Message

Citer : Posté le 20/04/2016 16:12 | #


En plus d'arriver à la fin du code, il y a une instruction de contrôle
Stop

Dans CTL ([SHIFT][VARS][F2])
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Samsam13 Hors ligne Membre Points: 5 Défis: 0 Message

Citer : Posté le 21/04/2016 09:54 | #


Salut,

Ca marche super !
Merci :-)

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 41 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