[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 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
Citer : Posté le 27/02/2014 10:13 | #
Moi je suis assez friand de sous-programmes, ça permet d'optimiser assez souvent, surtout pour les foncrions de dessins quand on veut afficher quelque chose à plusieurs moments. Pour les noms j'ai tendance à faire comme ça: prog principal: <nom du jeu>, sous progs: <initiales du jeu>~<fonction du prog> par exemple si mon jeu s'appelle "Box", le prog principal sera "BOX" et si je fais un programme pour afficher les éléments je l'appelerai "B~DISPEL" mais comme je n'ai généralement que mes jeux (et jamais 2 gros en même temps) je ne sais pas trop si certains vont avoir des soucis de lisibilité s'ils ont d'autres progs mais au moins je suis sûr d'avoir mes sous-programmes en dessous du principal. Par contre j'ai rarement plusieurs appels de sous programmes â le suite: je ne descend pas en dessous de 2 niveaux pour éviter les erreurs: je m'en sert un peu comme les fonctipns en C: le main appelle une fonction qui peut faire appel à une autre, tout en s'assurant de ne pas faire trop d'appels.
Après je comprend que certains n'aiment pas trop s'ils veulent plusieurs jeux, mais on gagne souvent de la place avec ça.
Et puis je recommande vivement de ne pas faire exacement comme moi car comme l'a ditLephenixnoir, ça ne marcherai plus car si deux jeux commencent par la même lettre il pourrait y avoir des confusions.
Citer : Posté le 27/02/2014 11:54 | #
Bizzare pour Lbl/Goto un tour prend 0,001234 sec et 10000 tour 12.34 sec alors que pour While/WhileEnd pour mon premier test j'ai trouvé 0.001418 sec et 14.18 sec et pour mon deuxieme test 0.001413 sec et 14.13 sec.
Ajouté le 27/02/2014 à 12:11 :
3eme test 12.24 pour les Lbl/Goto et 14.22 pour les While/WhileEnd
-ASM (assembleur) sur x86 et gb-Z80
-locomotive basic/amstrad basic
-Basic Casio
-VBS
-Batch
-Bash
-Python 3.4
-html
-CSS
-javascript
-Lua
-brainfuck
-ruby
Il faut savoir que je ne maitrise pas parfaitement tout ces langages
[/spoiler]
Remerciment
Ma calto: graph 75
Citer : Posté le 27/02/2014 12:55 | #
Il faut faire attention avec le nombre de donnée entre les Goto/Lbl et While/WhileEnd
Zelda de Smashmaster
Super Geek Brothers de Siapran
Pac-Man
Pac-Man Color
Meta Ball
Add-ins Jetpack Joyride et Pac-Man sur PRIZM (les 2 non commencés mais en réflexion)
A la recherche des sprites jetpack Joride si quelqu'un les a en couleur
Citer : Posté le 27/02/2014 13:19 | #
J'ai fait ça:
0->A
Lbl/While
Isz A
A=10000=>Stop
Goto/WhileEnd
-ASM (assembleur) sur x86 et gb-Z80
-locomotive basic/amstrad basic
-Basic Casio
-VBS
-Batch
-Bash
-Python 3.4
-html
-CSS
-javascript
-Lua
-brainfuck
-ruby
Il faut savoir que je ne maitrise pas parfaitement tout ces langages
[/spoiler]
Remerciment
Ma calto: graph 75
Citer : Posté le 27/02/2014 13:47 | #
Après faut voir avec plus de données entre les deux bornes plus voir s'il y a un changement de différence.
Zelda de Smashmaster
Super Geek Brothers de Siapran
Pac-Man
Pac-Man Color
Meta Ball
Add-ins Jetpack Joyride et Pac-Man sur PRIZM (les 2 non commencés mais en réflexion)
A la recherche des sprites jetpack Joride si quelqu'un les a en couleur
Citer : Posté le 27/02/2014 16:35 | #
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.
Citer : Posté le 28/02/2014 19:21 | # | Fichier joint
Chose promise, chose due :
Trouvé dans le manuel pédagogique de Casio destiné aux enseignants :
Ajouté le 28/02/2014 à 19:22 :
Défi : faire le même programme en 8 lignes sans labels.
Ajouté le 28/02/2014 à 19:22 :
(je l'ai fait)
Citer : Posté le 28/02/2014 19:24 | #
Il n'est pas du tout optimiser ce code
Zelda de Smashmaster
Super Geek Brothers de Siapran
Pac-Man
Pac-Man Color
Meta Ball
Add-ins Jetpack Joyride et Pac-Man sur PRIZM (les 2 non commencés mais en réflexion)
A la recherche des sprites jetpack Joride si quelqu'un les a en couleur
Citer : Posté le 28/02/2014 19:26 | #
Bon allez voici la réponse :
{[maroon]6[/maroon][b]->[/b]Dim List [maroon]1[/maroon]
[b][blue]For[/blue][/b] [maroon]1[/maroon][b]->[/b]I [b][blue]To[/blue][/b] N
[b][blue]Isz[/blue][/b] List [maroon]1[/maroon][RanInt#(1,[maroon]6[/maroon])]
[b][blue]Next[/blue][/b]
[b][blue]For[/blue][/b] [maroon]1[/maroon][b]->[/b]I [b][blue]To[/blue][/b] [maroon]6[/maroon]
List [maroon]1[/maroon][I]◢
[b][blue]Next[/blue][/b]
Ajouté le 28/02/2014 à 19:27 :
Il n'est pas du tout optimiser ce code
C'est bien le problème ! ils ont osé mettre ça dans le manuel pour les enseignants !
Citer : Posté le 28/02/2014 19:31 | #
J'ai la même réponse à ton défi.
Zelda de Smashmaster
Super Geek Brothers de Siapran
Pac-Man
Pac-Man Color
Meta Ball
Add-ins Jetpack Joyride et Pac-Man sur PRIZM (les 2 non commencés mais en réflexion)
A la recherche des sprites jetpack Joride si quelqu'un les a en couleur
Citer : Posté le 28/02/2014 20:56 | #
Bravo ! Bon, je conçois qu'on ne va pas demander cette méthode aux élèves, mais il y a tout de même moyen d'optimiser le code qu'ils ont donné puisque les labels y sont totalement inutiles.
Citer : Posté le 01/03/2014 19:37 | #
On peut incrémenter une liste avec Isz ??
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 01/03/2014 19:45 | #
Ah non, j'ai testé, marche pas.
Zelda de Smashmaster
Super Geek Brothers de Siapran
Pac-Man
Pac-Man Color
Meta Ball
Add-ins Jetpack Joyride et Pac-Man sur PRIZM (les 2 non commencés mais en réflexion)
A la recherche des sprites jetpack Joride si quelqu'un les a en couleur
Citer : Posté le 01/03/2014 20:35 | #
Tu me rassures
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 01/03/2014 20:54 | #
J'incrémente un indice d'une liste
Et puis si jamais Isz marche pas tu le remplaces par un truc+1->truc.
Citer : Posté le 01/03/2014 21:49 | #
J'incrémente un indice d'une liste
Isz et Dsz sont réservés aux variables
Citer : Posté le 02/03/2014 11:34 | #
Quand tu dis que c'est la même chose, pas exactement, puisqu'il te manque les "Face 1 :", ...
Sinon tu peux encore optimiser en supprimant la dernière boucle, avec un List 1[DISP]
Citer : Posté le 02/03/2014 12:13 | #
Quand tu dis que c'est la même chose, pas exactement, puisqu'il te manque les "Face 1 :", ...
Oui on peut les ajouter, c'est juste que ça fait 2 lignes de plus
Citer : Posté le 02/03/2014 12:27 | #
Louloux, soumets ton code à Casio
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 02/03/2014 13:42 | #
Ils s'en fichent