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





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
Alphacreator Hors ligne Membre Points: 1464 Défis: 43 Message

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.
Pseudopourri Hors ligne Membre Points: 182 Défis: 9 Message

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
je code en...
je code en:

-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
Lancelot Hors ligne Membre Points: 1274 Défis: 160 Message

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
Calculatrices : Casio 35+ SH4 (modifiée 75) et fx-CG 20 PRIZM
Projets que je soutiens
Des exemples parmi tant d'autres
Pokémon Jade de Dododormeur
Zelda de Smashmaster
Super Geek Brothers de Siapran
Mes Programmes
Mes Programmes
Mes Projets
Mes Projets
ColorLib
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
Pseudopourri Hors ligne Membre Points: 182 Défis: 9 Message

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


J'ai fait ça:
0->A
Lbl/While
Isz A
A=10000=>Stop
Goto/WhileEnd
je code en...
je code en:

-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
Lancelot Hors ligne Membre Points: 1274 Défis: 160 Message

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.
Calculatrices : Casio 35+ SH4 (modifiée 75) et fx-CG 20 PRIZM
Projets que je soutiens
Des exemples parmi tant d'autres
Pokémon Jade de Dododormeur
Zelda de Smashmaster
Super Geek Brothers de Siapran
Mes Programmes
Mes Programmes
Mes Projets
Mes Projets
ColorLib
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
Lephenixnoir En ligne Administrateur Points: 24678 Défis: 170 Message

Citer : Posté le 27/02/2014 16:35 | #


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.

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 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)
Lancelot Hors ligne Membre Points: 1274 Défis: 160 Message

Citer : Posté le 28/02/2014 19:24 | #


Il n'est pas du tout optimiser ce code
Calculatrices : Casio 35+ SH4 (modifiée 75) et fx-CG 20 PRIZM
Projets que je soutiens
Des exemples parmi tant d'autres
Pokémon Jade de Dododormeur
Zelda de Smashmaster
Super Geek Brothers de Siapran
Mes Programmes
Mes Programmes
Mes Projets
Mes Projets
ColorLib
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
Louloux Hors ligne Ancien administrateur Points: 7035 Défis: 61 Message

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


Bon allez voici la réponse :

[gray]"NB LANCERS "[/gray]?[b]->[/b]N
{[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 :
Lancelot a écrit :
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 !
Lancelot Hors ligne Membre Points: 1274 Défis: 160 Message

Citer : Posté le 28/02/2014 19:31 | #


J'ai la même réponse à ton défi.
Calculatrices : Casio 35+ SH4 (modifiée 75) et fx-CG 20 PRIZM
Projets que je soutiens
Des exemples parmi tant d'autres
Pokémon Jade de Dododormeur
Zelda de Smashmaster
Super Geek Brothers de Siapran
Mes Programmes
Mes Programmes
Mes Projets
Mes Projets
ColorLib
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
Louloux Hors ligne Ancien administrateur Points: 7035 Défis: 61 Message

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.
Totoyo Hors ligne Membre d'honneur Points: 16103 Défis: 102 Message
Lancelot Hors ligne Membre Points: 1274 Défis: 160 Message

Citer : Posté le 01/03/2014 19:45 | #


Ah non, j'ai testé, marche pas.

Calculatrices : Casio 35+ SH4 (modifiée 75) et fx-CG 20 PRIZM
Projets que je soutiens
Des exemples parmi tant d'autres
Pokémon Jade de Dododormeur
Zelda de Smashmaster
Super Geek Brothers de Siapran
Mes Programmes
Mes Programmes
Mes Projets
Mes Projets
ColorLib
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
Totoyo Hors ligne Membre d'honneur Points: 16103 Défis: 102 Message
Louloux Hors ligne Ancien administrateur Points: 7035 Défis: 61 Message

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.
Positon Hors ligne Rédacteur Points: 2396 Défis: 57 Message

Citer : Posté le 01/03/2014 21:49 | #


Louloux a écrit :
J'incrémente un indice d'une liste

Isz et Dsz sont réservés aux variables
Cartix Hors ligne Membre Points: 2748 Défis: 98 Message

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]
Louloux Hors ligne Ancien administrateur Points: 7035 Défis: 61 Message

Citer : Posté le 02/03/2014 12:13 | #


Cartix a écrit :
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
Totoyo Hors ligne Membre d'honneur Points: 16103 Défis: 102 Message
Louloux Hors ligne Ancien administrateur Points: 7035 Défis: 61 Message

Citer : Posté le 02/03/2014 13:42 | #


Ils s'en fichent

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