Forum

Catégorie : Programmes
Forum : Aide à la programmation
Vues : 5672
Réponses : 3
Type : discussion
Etat : réponses autorisées

If, Then, Else,End (et les goto...)

Programaths le 28/06/2011 à 21:23
Quelque chose me pose problème dans les programmes... c'est très... anbigu... chiant !!

Alors, c'est les :
If
Then
Else
end
(et les goto inclu ou pas)

Exemple:
Je met quelque évenement :

Code


-If Z=1       If Z=1:Goto 1     
 Then
 Goto 1
 End


-If           -If       -If
 Then          If        If
 If            End       End
 Then          End
 End
 End


-If          -If         -If
 Then         Then        Goto 1
 Goto 1       Goto 1      Goto 2
 Else         Goto 2      End
 Goto 2       End
 end



Dites les autre possibilité si il y en a, je voudrai quelque information sur
ces condition ^^' (pourquoi desfois ça marche pas desfois si par exemple...)

A éssayer de faire un morpion en me basant sur les autre morpion de ce site je me perd
Dans les conditions, je m'arrache les cheveux ! crazy.gif
en plus il y a les matrices que j'essai de comprendre/appliqué crazy.gif
Pour mon jeu "batonnet" aussi je me suis arraché les cheveux avec les conditions...


Quand il y a beaucoup de condition... que faire ? :


Code

If Z=1:Goto 1
If Z=2:Goto 2
If Z=3:Goto 3
If Z=4:Goto 4

Lbl 1
---
Lbl 2
---
Lbl 3
---
Lbl 4
---


If Z=1
Lbl 1
---

If Z=2
lbl 2
---

If Z=3
Lbl 3
---

If Z=4
Lbl 4
---


Voila... qu'est-ce qui est le plus rapide ?
Autre cose :

Code

If ---       If ----
             End
Goto 1       Goto 1
End



Dans certain cas, quand on met un "End" après le goto quand la condition se fait tout de suite après
le programme se termine et marque "fait"
Pourtant parfois c'est en plein milieu du programme...



Je sais que la calcuilette scan depuis le début toute les condition, et dès qu'il y en a une favorable
elle l'applique. (ça aussi c'est complexe )
azerty1 le 28/06/2011 à 21:42
Il y a beaucoup de possibilité, mais c'est sur, pour moins t'embrouiller, quand derriere une condition tu n'as qu'une fonction, alors ne mets pas Then et End, sinon pour le reste, va voir dans les articles, il y en a un tout frais la dessus il me semble =)
linkakro le 28/06/2011 à 22:41
Poste dans la partie "aide" quand tu demandes de l'aide, angry.gif
Surtout qu'il ne s'agit pas d'un programme.
EDIT : un gentil modérateur a déplacé le sujet

====

Le bug principal : (qui fera bientôt l'objet d'un article)

Quand la calculatrice entre dans une boucle, elle attend un End pour la terminer.
( Un If sans Then n'est pas une boucle )

Tant que la calculatrice n'a pas rencontré le End, elle le cherche. Même s'il y a un Goto.
Quand le Goto envoie hors d'une boucle et si on ouvre pas d'autre boucle entre temps :
-soit le prochain End rencontré (quel qu'il soit) sera interprété comme fin de la boucle même s'il n'a aucun rapport.
-soit le prochain Else provoquera un saut jusqu'au prochain End (si on était dans un Then)

-------

Tu mets des End sans Then, c'est ça qui plante en général.

Code
If 1
If 2 // le test n'est effectué que si le premier l'est
End  // lu si 1 et 2 vrais OU si 1 faux
End  // lu si le premier End ne renvoie nulle part
D'ailleurs ceci n'a aucun sens s'il n'y a pas d'ouverture de boucle plus haut.


If 1
Then
Goto 1  // lu si 1 vrai
Goto 2  // ne sera jamais lu (aucun intérêt)
End     // ferme le If:Then:End ; lu si 1 faux


If 1
Goto 1  // lu si 1 vrai
Goto 2  // lu si 1 faux
End     // jamais lu (aucun intérêt)


If    // si faux, alors va directement au dernier End
Then
  If    // si faux, alors va directement au premier End
  Then
  End
End


-------

Les Labels sont lus quoiqu'il advienne. Donc If:Lbl n'a aucune utilité ni sens.

-------

Il me manque certainement des informations à ton dernier problème. Je ne sais donc pas quoi répondre.

1 idée :
Quand un If:Then est executé et que la condition est fausse, la calculatrice cherche le prochain End pour fermer la boucle.
Si elle ne trouve pas de End, elle va jusqu'à la fin et s'arrête.
( De plus ce principe peut être parasité par le premier bug. )
Programaths le 29/06/2011 à 16:41
Merci pour les réponse et une fois encore désolé la prochaine fois je mettrais mon problème dans la rubrique "aide" ...