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.
La référence Basic Casio

Nom : While

Localisation :

[ PRGM ] [ COM ]
[ SHIFT ] + [ VARS ] + [ F1 ]

Syntaxe de la fonction :

While (conditions)
(fonction)
(fonction)
WhileEnd

Description de la fonction :

Boucle proche de Do-While, mais qui vérifie la condition en début de boucle, donc elle n'est exécutée uniquement si la condition est vraie.

Compatibilité :

  • Graph 20/25(+)
  • Graph 35/65/80(+)
  • Graph 100(+)
  • Graph 25+ PRO
  • Graph 85 (SD) OS 1.xx
  • Graph 85 (SD) OS 2.xx
  • Graph 35+ USB/75/95 SD
  • Graph OS 2.04
  • Fx-CG 10/20 OS 1.xx
  • Fx-CG 10/20 OS 2.xx


<<< Retourner à la liste des fonctions

Pages: Précédente | 1, 2, 3 | Suivante

LephenixnoirEn ligneAdministrateurPoints: 24621 Défis: 170 Message
Posté le 03-04-2014 à 14:40 | #
Un jour j'ai fait un algorithme "assez" simple.
L'utilisateur entre une chaîne de caractères. Le but est de vérifier si la chaîne passe bien dans l'écran, on veut donc savoir si elle prend plus de 8 cases ou non.
Donc, si StrLen(Str 1)>8, on sort.
Ensuite, pour chaque caractère, on le compare à une chaîne de référence, organisée pour être optimisée ("AEIOUYSMLNFC...ZKHX"). Si le caractère n'appartient pas à la chaîne, on sort.
Le tout prenait plusieurs secondes à exécuter.

Même constat pour un autre algorithme qui séparait une chaîne selon un séparateur défini, plusieurs secondes.
Alex_1186Hors ligneMembrePoints: 1215 Défis: 46 Message
Posté le 03-04-2014 à 18:23 | #
Le problème c'est que les Str en Basic Casio ne permettent pas d'insérer un caractère efficacement au milieu d'une chaîne. On est obligé de "couper" la chaîne en 2, (complexité linéaire), puis de "recoller" (re-linéaire!).
Pour mon TIPE sur la compression de données (l'algorithme de Burrows-Wheeler précisément), on avait une complexité dégueulasse, quadratique, à cause de ça!
A la place on a créé une grande chaîne puis on a inséré tous les caractères un à un, et hop -> linéaire!

Sauf qu'en Basic bah... on encaisse!
Il faudrait gérer une pseudo-chaîne manuellement avec une liste et un codage astucieux, mais ce ne serait meilleur qu'asymptotiquement évidemment...

Là j'ai parlé de l'insertion mais ça doit être valable pour tout le reste...
LephenixnoirEn ligneAdministrateurPoints: 24621 Défis: 170 Message
Posté le 03-04-2014 à 18:27 | #
Oui, c'est valable pour tout le reste.
Par contre, quadratique, vous êtes allé chercher ça où ?

Après, l'insertion efficace passe par une liste chaînée... mais là, on double (voire quintuple) la taille des données.
Alex_1186Hors ligneMembrePoints: 1215 Défis: 46 Message
Posté le 03-04-2014 à 18:32 | #
Liste chaînée c'est-à-dire?
quadratique Qu'entends-tu par là? Bah quadratique c'est O(n^2)... Que veux-tu que je te dise....? On faisait n*(n+1)/2 insertions, donc O(n^2), complexité quadratique... Donc c'était pourri, pour un "simple" RLE! sur lequel on a galéré plusieurs semaines, pour des raisons d'universalité... Mais c'est une autre histoire...
LephenixnoirEn ligneAdministrateurPoints: 24621 Défis: 170 Message
Posté le 03-04-2014 à 18:35 | #
Une liste chaînée est une structure de donnée, qui comporte la donnée en elle-même et un pointeur sur la donnée suivante.
C'est-à-dire que pour insérer un élément, tu le crées, tu fait pointer le pointeur du précédent sur lui, et son propre pointeur sur l'élément suivant. Complexité constante ! 8)
Par contre, le pointeur peut être de 1 à 4 fois plus grand en mémoire que le caractère.
Alex_1186Hors ligneMembrePoints: 1215 Défis: 46 Message
Posté le 03-04-2014 à 18:39 | #
Ah oui je vois, je connaissais pas le terme mais le principe si. Merci.
En fait quand je parlais d'insertion c'était plutôt modification en fait, pour changer la valeur d'un caractère au milieu. Mais oui pour la vraie insertion la liste chaînée c'est l'idéal c'est sûr!
TherakouHors ligneMembrePoints: 195 Défis: 23 Message
Posté le 03-04-2014 à 21:13 | #
@Ne0tux J'ai utilisé une technique assez similaire pour l'affichage des noms des Pokémons, dans la matrice liée aux stats j'ai aussi entré le nombre de caractères dans le nom du Pokémon, et aussi son rang dans la chaîne de caractère (=à quel caractère rencontre-t-on le nom du Pokémon.)
J'en arrive à un code de ce genre :

StrLeft(Str [maroon]3[/maroon],*rang*→Str [maroon]5[/maroon]
StrRight(Str [maroon]5[/maroon],*nombreDeCaractères*→Str [maroon]5[/maroon]


Le souci avec ta technique c'est que je devrais au final rechercher le nom de l'attaque en fonction d'une variable, ce qui me reviendra à faire :

[b][blue]If[/blue][/b] A=[maroon]1[/maroon]
[b][blue]Then[/blue][/b] StrLeft(Str [maroon]1[/maroon],[gray]"@"[/gray]→Str [maroon]2[/maroon]
StrRight(Str [maroon]2[/maroon],*je sais pas encore quoi mettre ici. XD*→Str [maroon]2[/maroon]
[b][blue]IfEnd[/blue][/b]


Et ce pour les 40 attaques, au final ce ne serait pas encore plus lourd ? Enfin après ma façon de voir les choses est peut-être différente de ce à quoi tu pensais, mais vu que la recherche de caractères est assez limitée je n'ai pas encore trouvé d'alternative !
PositonHors ligneRédacteurPoints: 2396 Défis: 57 Message
Posté le 03-04-2014 à 21:56 | #
Si tu as trop d'attaques, il suffit de faire plusieurs chaînes !
Mieux vaut deux ou trois conditions de type "A=n⇒..." que cinquante.
Bien sûr, pour ne pas à taper le même code d'extraction de caractères après chaque condition, il suffira d'utiliser une chaîne intermédiaire.
Dark stormEn ligneLabélisateurPoints: 11641 Défis: 176 Message
Posté le 03-04-2014 à 22:20 | #
Stop HS
Merci d'en parler ailleurs, c'est pas le sujet ici

Tout commentaire inutile supplémentaire sera supprimé sans préavis.
TherakouHors ligneMembrePoints: 195 Défis: 23 Message
Posté le 03-04-2014 à 22:58 | #
Pour en revenir au while...
Théoriquement, est-ce qu'une boucle while a une longueur infinie ? Je peux mettre un While au début du programme et un WhileEnd tout à la fin pour recommencer le programme lorsqu'un combat est fini par exemple ? Ou serait-il plus adapté d'utiliser un... Goto ?

Pages: Précédente | 1, 2, 3 | Suivante

Retour liste des commandes

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 52 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