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 - Vos tutoriels et astuces


Index du Forum » Vos tutoriels et astuces » [Tutoriel] Un Lbl tout en un
Mattthedark Hors ligne Membre Points: 242 Défis: 1 Message

[Tutoriel] Un Lbl tout en un

Posté le 26/02/2014 16:42

Bonjour,

aujourd'hui je vous propose un alternative au GoTo, fonction controversée et souvent évité.

Pourquoi ?
C'est un fonction lente
Elle peut etre a l'origine de bug (voir ce tutoriel)
Il n'y en a que 26 (les lettres) + 10 (les chiffres) + 2 (θ et π) =38

L'astuce ?

C'est simple, voici le code :

0[b]->[/b]L [green]'Libelé par défault[/green]
[red]Lbl[/red] [maroon]0[/maroon]
[b][blue]If[/blue][/b] L=[maroon]0[/maroon]
[b][blue]Then[/blue][/b] [green]'Libelé [maroon]0[/maroon][/green]
...
[b][blue]IfEnd[/blue][/b]
[b][blue]If[/blue][/b] L=[maroon]1[/maroon]
[b][blue]Then[/blue][/b] [green]'Libelé [maroon]1[/maroon][/green]
...
[b][blue]IfEnd[/blue][/b]

etc...

[b][blue]If[/blue][/b] L=[maroon]9[/maroon]e99
[b][blue]Then[/blue][/b] [green]'Libelé [maroon]9[/maroon]e99[/green]
...
[b][blue]IfEnd[/blue][/b]
[red]Goto[/red] [maroon]0[/maroon]


Ici, L est la variable de "libelé", c'est a dire que si par exemple vous voulez accèder au premier libelé, mettez la variable L a 1 (0->L) puis faire un retour a la racine par un Goto 0 (j'aurais aussi bien pu mettre la variable X et le Lbl 7... Question d'habitude, a vous de choisir ;D)

Ensuite, je vous conseille de mettre comme je l'ai fais un Goto 0 général a la fin du programme pour éviter les boucles infinis...

Et enfin, avant le Lbl 0, initialiser la variable L pour savoir quel sera le libelé "par défault" de votre programme.

Maintenant, on a :
Une infinité (enfin presque) de libelés
Plus aucun bug
Un Goto rapide puisque le Lbl se trouve au début du programme (la calculatrice recherchant les Lbl de manière linéaire)

Ainsi, quand vous voulez par exemple faire une redirection, vous n'avez plus qu'a écrire ce code :

Numero_du_libelé [b]->[/b] L : [red]Goto[/red] [maroon]0[/maroon]


Bonne programmation a tous !

Alternative proposée par Louloux
Cliquer pour enrouler


Remplacer le "Lbl 0" par un "Do" et le "Goto 0" par un "Lpwhile 1" de sorte a avoir la meme chose sous forme de boucle.

Avantages :
Eviter la perte de temps avec le Goto

Inconvénient :
Avant de rejoindre le libelé de destination, le programme doit finir le parcourt de la boucle, sauf si ce libelé se trouve après celui en cours
Il faut utiliser une variable de sortie s'il y a des boucles/conditions imbriquées les unes dans les autres





Ne0tux Hors ligne Membre d'honneur Points: 3524 Défis: 265 Message

Citer : Posté le 26/02/2014 20:45 | #


Dark storm a écrit :
Pseudopourri a écrit :
Dans ce sujet vous n'arretez pas de dire que les Lbl/Goto sont lent mais,j'ai vus marquer sur PC je sais plus où par je sais plus qui que les Lbl/Goto sont plus rapide que les While/WhileEnd,Do/LpWhile est-ce vrai :huh: ?

Absolument pas ! Les labels sont beaucoup plus lent que les boucles "classiques". Ils sont pratiques dans le cas d'un retour rapide à faire, et pas régulier.


Exact.

Sinon Pseudopourri tu peux vérifier par toi même la vitesse d’exécution d'une fonction en faisant une boucle For dans laquelle tu mets une première fonction, et la même boucle For dans un autre programme dans laquelle tu mets une seconde fonction dont tu veux comparer la vitesse d’exécution.

En chronométrant le temps que mettent les programmes à s’exécuter, tu pourras déterminer celles des deux fonctions qui est la plus rapide, et si tu fais l'opération pour une boucle For qui se répète un grand nombre de fois, et en divisant par ce nombre, tu pourras même savoir plus précisément le temps d’exécution relatif à une fonction en particulier.

EDIT : je suis bien d'accord avec le Phénix !
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 !
Totoyo Hors ligne Membre d'honneur Points: 16093 Défis: 102 Message

Citer : Posté le 26/02/2014 20:46 | #


Bien sûr que si, une vingtaine de sous-programmes est tout à fait gérable ! Il suffit de bien organiser l'arborescence et le tour est joué.
Dark storm Hors ligne Labélisateur Points: 11634 Défis: 176 Message

Citer : Posté le 26/02/2014 20:48 | #


D'ou l'utilité de faire ça :

Programme principal :
// menu, autre...
3:Prog "FONC"
If A=2
Then 1->Z
5
Prog "FONC"
IfEnd


Programme "FONC" :
If Ans=1
Then
// fonction 1
Return
Else If Ans=2
Then
// fonction 2
Return
Else If ...
IfEnd


D'ailleurs, j'ai jamais testé, mais avec le Return, c'est possible qu'il n'y ai pas besoin de mettre autant de IfEnd que de If
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir Hors ligne Administrateur Points: 24236 Défis: 170 Message

Citer : Posté le 26/02/2014 20:50 | #


Là n'est pas le problème
Je ne pense pas qu'un utilisateur lambda puisse jouer ne serait-ce qu'à deux jeux en même temps si ils font chacun 20 programmes, sans compter qu'il peut lui-même en avoir facilement une dizaine
Et les 35+ (plus courantes selon ce que je vois) n'ont pas de mémoire de stockage.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Totoyo Hors ligne Membre d'honneur Points: 16093 Défis: 102 Message

Citer : Posté le 26/02/2014 21:03 | #


Parfois, mes sous-programmes font moins de 100 octets, mais ils sont très importants et appelés régulièrement.

Pour que le joueur se repère facilement avec tous ces programmes, tu commences le nom de de ton programme principal par un espace. Ainsi, il se trouvera en tête de liste et la personne saura tout de suite quel programme lancer.
Lephenixnoir Hors ligne Administrateur Points: 24236 Défis: 170 Message

Citer : Posté le 26/02/2014 21:17 | #


Ce n'est pas gênant d'avoir des sous-programmes
Ce qui est gênant, c'est qu'il y en ait de partout, de sorte que l'utilisateur n'y retrouve plus rien si sa mémoire ne contient pas que ton programme

Et je suis parfaitement d'accord avec Dark Storm, c'est d'ailleurs ce que je fais d'ordinaire
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Totoyo Hors ligne Membre d'honneur Points: 16093 Défis: 102 Message

Citer : Posté le 26/02/2014 21:22 | #


Mais on perd en rapidité avec la méthode de Dark Storm.

En plus, je ne suis pas d'accord que trop de programmes saturent la mémoire. Tu peux avoir 100 programmes de 100 octets, ils seront toujours plus légers que 2 de 30 Ko.

Après, c'est un débat de fond, mais l'utilisation de plusieurs sous-programmes ne me dérangent pas.
-florian66- Hors ligne Ancien rédacteur Points: 2383 Défis: 20 Message

Citer : Posté le 26/02/2014 21:26 | #


la bataille des admins revient sur Planete Casio

vous allez pas vous battre quand même si ce n'est qu'un débat
In Arch, I trust ! And you ?
Btl Hors ligne Ancien modérateur Points: 3879 Défis: 107 Message

Citer : Posté le 26/02/2014 21:27 | #


C'est vrai mais il faut faire attention car si tu as trop de sous-programme pour un seul programme (je pense dans les environs de 10), tu obtiens un Go Error quand tu essaies d'accéder à un sous-programme.
Un excellent tuto video qui vous explique comment transférer des fichiers de l'ordinateur vers la calculatrice et vice versa ma chaine youtube
mes jeux
mes jeux

Jouez à 6 sur une seule calto : Curve Fever
Un die and retry qui vous fera bieeeen rager Test Andropov
un très bon sokoban
le seul vrai jeu de foot en basic : FIFA 12
Ca c'est ce que j'appelle un jeu de reflexion jewel master
Qui vaincra l'intelligence artificielle de cet othello
Le célèbre pacman
Et tant d'autres BTL's games

Le jeu du mois de Novembre et award du jeu le plus dur de l'année 2013 MultiTask, testez-le
Lephenixnoir Hors ligne Administrateur Points: 24236 Défis: 170 Message

Citer : Posté le 26/02/2014 21:28 | #


Ça s'appelle un dialogue de sourds
J'entends bien que l'utilisation de sous-programmes est utile et souvent nécéssaire

Mais supposons que je télécharge deux jeux sur le site et que je les mette dans ma calculatrice.
Si chacun des deux jeux fait 20 programmes, non seulement je ne saurais pas quel programme appartient à quel jeu, mais je vais simplement plus retrouver les miens
C'est pourquoi je pense qu'il est nécéssaire de limiter le nombre de programmes à 4 ou 5

Après, c'est vrai que c'est très subjectif
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Totoyo Hors ligne Membre d'honneur Points: 16093 Défis: 102 Message

Citer : Posté le 26/02/2014 21:31 | #


Si les noms des sous-programmes sont explicites, il n'y a pas de problème pour savoir à quel jeu appartient tel ou tel programme. Cependant, je suis d'accord qu'ils doivent être utilisés intelligemment.
Btl Hors ligne Ancien modérateur Points: 3879 Défis: 107 Message

Citer : Posté le 26/02/2014 21:33 | #



Lephenixnoir a écrit :
Ça s'appelle un dialogue de sourds


Totoyo a écrit :

Pour que le joueur se repère facilement avec tous ces programmes, tu commences le nom de de ton programme principal par un espace. Ainsi, il se trouvera en tête de liste et la personne saura tout de suite quel programme lancer.

Regarde ce que tu dis après...
Lephenixnoir a écrit :

Mais supposons que je télécharge deux jeux sur le site et que je les mette dans ma calculatrice.
Si chacun des deux jeux fait 20 programmes, non seulement je ne saurais pas quel programme appartient à quel jeu, mais je vais simplement plus retrouver les miens


Si la personne a bien fait ça, tu n'auras aucun mal à t'en sortir.

(Après personnellement, je n'aime pas quand il y a des tonnes de sous-programme, mais ce n'est que mon avis personnel...Si le programmeur par l'ajout de ss-prg accélère grandement la rapidité de son programme et économise des milliers d'octet alors je ne peux que cautionner leur utilisation)
Un excellent tuto video qui vous explique comment transférer des fichiers de l'ordinateur vers la calculatrice et vice versa ma chaine youtube
mes jeux
mes jeux

Jouez à 6 sur une seule calto : Curve Fever
Un die and retry qui vous fera bieeeen rager Test Andropov
un très bon sokoban
le seul vrai jeu de foot en basic : FIFA 12
Ca c'est ce que j'appelle un jeu de reflexion jewel master
Qui vaincra l'intelligence artificielle de cet othello
Le célèbre pacman
Et tant d'autres BTL's games

Le jeu du mois de Novembre et award du jeu le plus dur de l'année 2013 MultiTask, testez-le
Positon Hors ligne Rédacteur Points: 2396 Défis: 57 Message

Citer : Posté le 26/02/2014 21:33 | #


Je rajouterais quelque chose à propos des Labels : ils sont utiles pour le débuggage avancé
Par exemple, on peut les utiliser pour sauter une série d'instruction qui met du temps à s'éxecuter (comme une introduction, c'est pénible d'attendre à chaque test du programme) ou qui gêne le débuggage d'un autre endroit.
Bien sûr, on peut le remplacer par une condition 0, mais c'est plus simple de s'y retrouver entre le code usuel et les "bidouilles".
Btl Hors ligne Ancien modérateur Points: 3879 Défis: 107 Message

Citer : Posté le 26/02/2014 21:34 | #


Positon, je fais pareil, je m'en sers pour tester et débugger mes programmes, mais je fais bien attention à ce qu'il n'en reste aucun quand je publie le jeu.
Un excellent tuto video qui vous explique comment transférer des fichiers de l'ordinateur vers la calculatrice et vice versa ma chaine youtube
mes jeux
mes jeux

Jouez à 6 sur une seule calto : Curve Fever
Un die and retry qui vous fera bieeeen rager Test Andropov
un très bon sokoban
le seul vrai jeu de foot en basic : FIFA 12
Ca c'est ce que j'appelle un jeu de reflexion jewel master
Qui vaincra l'intelligence artificielle de cet othello
Le célèbre pacman
Et tant d'autres BTL's games

Le jeu du mois de Novembre et award du jeu le plus dur de l'année 2013 MultiTask, testez-le
Mattthedark Hors ligne Membre Points: 242 Défis: 1 Message

Citer : Posté le 26/02/2014 21:34 | #


Oh mon dieu, j'ai lancé un débat

Je proposerai bientot ma méthode pour éviter les programmes trops fragmentés
Matt.

Programmeur Basic sur Casio 75+
Positon Hors ligne Rédacteur Points: 2396 Défis: 57 Message

Citer : Posté le 26/02/2014 21:38 | #


Il faudrait d'ailleurs faire un tuto sur les astuces de déboggage, il y en a plein : l'erreur syntaxe volontaire, l'affichage de variable, le commentaire pour sauter une instruction, le ◢ qui a des tonnes d'utilité...
Lephenixnoir Hors ligne Administrateur Points: 24236 Défis: 170 Message

Citer : Posté le 26/02/2014 21:43 | #


Btl a écrit :
Si la personne a bien fait ça, tu n'auras aucun mal à t'en sortir.

Je te fais confiance pour ça, après tout je n'ai jamais vraiment essayé

Regardez ce jeu par exemple. Je ne le trouve pas vraiment ordonné

Enfin bref, on ne va pas s'éterniser là-dessus.
De toute façon, depuis le temps que je ne programme plus en BASIC...
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Louloux Hors ligne Ancien administrateur Points: 7035 Défis: 61 Message

Citer : Posté le 27/02/2014 07:09 | #


Pour vous démontrer mes propos sur l'utilisation abusive des labels, je vous posterai dès que je serai de retour chez moi un code du manuel pour enseignants Casio qui utilise les Lbls à la place de boucles et conditions.

Ajouté le 27/02/2014 à 07:11 :
Quant aux sous-programmes, qui les remplacent dans tous les cas sauf dans le cas de la fonction Menu, il suffit de placer un Z ou un Y au début de leur nom pour qu'ils se mettent à la fin de la liste et encombrent moins.
Positon Hors ligne Rédacteur Points: 2396 Défis: 57 Message

Citer : Posté le 27/02/2014 07:13 | #


Ou un ~, c'est plus joli
Lephenixnoir Hors ligne Administrateur Points: 24236 Défis: 170 Message

Citer : Posté le 27/02/2014 07:21 | #


À force de trop "standardiser" ces notations, le risque c'est d'avoir deux applications qui utilisent un sous-programme de même nom
Là, ça ne marche carrément plus
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Louloux Hors ligne Ancien administrateur Points: 7035 Défis: 61 Message

Citer : Posté le 27/02/2014 07:22 | #


@Ne0tux : le terme de débutant n'est pas péjoratif, et je je ne vise personne ici en utilisant ce terme. Par contre dans mon entourage au lycée je vois beaucoup de gens qui ne sont pas spécialement intéressés par la programmation et ne font que de petits algorithmes de cours, qui dès qu'ils apprennent à utiliser le Lbl/Goto s'en servent à mauvais escient (pour remplacer les boucles par exemple). Même si j'ai toujours eu tendance à critiquer sincèrement quand il y a quelque-chose à critiquer, je n'ai pas l'impression que le phénomène se soit accru ces derniers temps. Mais tu as aussi sincèrement contredit ce que j'ai dit sans y voir la part de vrai

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