[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
Citer : Posté le 26/02/2014 20:45 | #
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 !
La Planète Casio est accueillante : n'hésite pas à t'inscrire pour laisser un message ou partager tes créations !
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é.
Vitesse des fonctions en Basic Casio | 7 days CPC | Casio Universal Wiki | Tutoriel Basic Casio
>>> Give me a click Brother <<< >>> Teste mon générateur de mots nouveaux <<<
>>> Random Youtube Video <<<
Citer : Posté le 26/02/2014 20:48 | #
D'ou l'utilité de faire ça :
Programme principal :
3:Prog "FONC"
If A=2
Then 1->Z
5
Prog "FONC"
IfEnd
Programme "FONC" :
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
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.
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.
Vitesse des fonctions en Basic Casio | 7 days CPC | Casio Universal Wiki | Tutoriel Basic Casio
>>> Give me a click Brother <<< >>> Teste mon générateur de mots nouveaux <<<
>>> Random Youtube Video <<<
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
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.
Vitesse des fonctions en Basic Casio | 7 days CPC | Casio Universal Wiki | Tutoriel Basic Casio
>>> Give me a click Brother <<< >>> Teste mon générateur de mots nouveaux <<<
>>> Random Youtube Video <<<
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
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.
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
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
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.
Vitesse des fonctions en Basic Casio | 7 days CPC | Casio Universal Wiki | Tutoriel Basic Casio
>>> Give me a click Brother <<< >>> Teste mon générateur de mots nouveaux <<<
>>> Random Youtube Video <<<
Citer : Posté le 26/02/2014 21:33 | #
Ça s'appelle un dialogue de sourds
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...
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)
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
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".
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.
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
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
Programmeur Basic sur Casio 75+
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é...
Citer : Posté le 26/02/2014 21:43 | #
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...
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.
Citer : Posté le 27/02/2014 07:13 | #
Ou un ~, c'est plus joli
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
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