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: 1, 2, 3 | Suivante

TherakouHors ligneMembrePoints: 195 Défis: 23 Message
Posté le 02-04-2014 à 19:31 | #
Bonsoir !
J'utilise un sous-programme pour insérer le nom d'une attaque dans une chaîne de caractères, étant donné que j'ai 4 attaques à afficher j'utilise une boucle "for", mais passer 4 fois par ce sous-programme devrait considérablement ralentir l'affichage des dites attaques. (J'écris "devrait" car je n'ai pas encore testé cet affichage, mais en ayant une quarantaine possibles, j'imagine que ce ne sera pas de l'instantané.)
Ma question est donc, avec ce code :

""→Str 1
While Not StrLen(Str 1)
A=1⇒"..."→Str 1
A=2⇒"..."→Str 1
...
A=46⇒"..."→Str 1
WhileEnd

Admettons que A vaille 1, est-ce que la boucle va détecter que la chaîne de caractère a été remplie et va directement aller au WhileEnd dès la première ligne, ou alors il va tout de même vérifier toutes les autres valeurs de A ? J'aimerais éviter de mettre des "StrLen(Str 1)⇒Return" à la fin de chaque ligne, même en assignant StrLen à une variable ce ne serait absolument pas optimisé. x)
Voilà voilà !
TenmatxHors ligneMembrePoints: 996 Défis: 2 Message
Posté le 02-04-2014 à 19:35 | #
La boucle va vérifier toutes les valeurs de A, même si A=1.
Pour éviter cela, tu dois mettre :

""→Str 1
While Not StrLen(Str 1)
If A=1
Then "..."→Str 1
Break
IfEnd
If A=2
Then "..."→Str 1
Break
IfEnd
...
If A=46
Then "..."→Str 1
Break
IfEnd
WhileEnd


Ainsi, dès que la condition A=X sera vérifiée, la boucle While s'arrêtera.
TherakouHors ligneMembrePoints: 195 Défis: 23 Message
Posté le 02-04-2014 à 19:41 | #
Ça me paraît assez lourd, je vais essayer sans boucle et je verrai ce que ça donne en vitesse d'affichage.
Merci bien, bonne soirée.
TenmatxHors ligneMembrePoints: 996 Défis: 2 Message
Posté le 02-04-2014 à 19:43 | #
De rien, d'ailleurs je ne vois pas pourquoi tu veux mettre une boucle While alors qu'une simple condition aurai suffit...

Si tu arrives au WhileEnd c'est qu'aucune valeur de A ne correspond, donc il n'y a aucun intérêt à revérifier si une valeur correspond .
Et ça éviterai aussi de mettre les Break.
TherakouHors ligneMembrePoints: 195 Défis: 23 Message
Posté le 02-04-2014 à 20:02 | #
Je voulais mettre une boucle While car je pensais que si la condition était brisée, le programme allait directement à la fin de la boucle, et cela aurait pu me faire gagner du temps, mais pour le coup il est vrai qu'elle est inutile ! (Cependant les "Break" seraient changés en "Return".)
PositonHors ligneRédacteurPoints: 2396 Défis: 57 Message
Posté le 02-04-2014 à 21:39 | #
C'est un peu lourd comme code, tu devrais mettre tous les noms d'attaque en une seule Str et extraire celui que tu veux en fonction de A, et ce à l'aide des fonctions StrMid ou Strsrc
NinestarsHors ligneMembrePoints: 2461 Défis: 24 Message
Posté le 02-04-2014 à 21:42 | #
Quand tu as une grande suite de condition, pour améliorer les performances tu peux... rajouter des conditions
Mais intelligemment évidement ! Comme ça :
if A<=5
ThenA=1⇒"..."→Str 1
A=2⇒"..."→Str 1
A=3⇒"..."→Str 1
A=4⇒"..."→Str 1
A=5⇒"..."→Str 1
IfEnd
if A > 5
Then A=6⇒"..."→Str 1
A=7⇒"..."→Str 1
A=8⇒"..."→Str 1
A=9⇒"..."→Str 1
A=10⇒"..."→Str 1
...
En fait tu sépares tes conditions en plusieurs gros blocs, ainsi la calculette ne va pas tester toutes les conditions.
TherakouHors ligneMembrePoints: 195 Défis: 23 Message
Posté le 03-04-2014 à 00:47 | #
A l'origine je voulais en effet mettre tous les noms d'attaques dans une seule chaîne de caractères, mais la liste dépasse 255 caractères. Je comptais mettre le numéro correspondant à l'attaque devant le nom, ça donnerait "1Charge2Rugissement.." et ça faciliterait grandement la recherche. Je vais essayer de creuser de ce côté-là car il est vrai que le code tel que je l'ai rédigé précédemment fait 812 octets !

Par contre on ne peut pas faire "Str S" c'est-à-dire utiliser une chaîne de caractères S en faisant varier la variable. Du moins je n'ai pas trouvé comment faire vu que la calculatrice me sort une erreur argument. x)

-------------------------

Cette idée est très bonne, je la garde ! Merci.
LephenixnoirHors ligneAdministrateurPoints: 24145 Défis: 170 Message
Posté le 03-04-2014 à 06:27 | #
Malheureusement, ce n'est pas possible: l'argument que tu passes à "Str" ne peut être qu'un constante entière.
Et puis, les fonctions sur les chaînes de caractères sont très lentes.
Ne0tuxHors ligneMembre d'honneurPoints: 3524 Défis: 265 Message
Posté le 03-04-2014 à 14:32 | #
@Therakou : C'est une bonne idée de séparer les attaques par des chiffres mais si tu dépasses 9 (si tu atteins des nombres à deux chiffres), tu risques de te compliquer la vie. Ce que je veux dire, c'est que tu auras de bons résultats si tu utilises des caractères plutôt que des nombres pour séparer les attaques.

@Lephenixnoir : très juste, on ne peut malheureusement pas mettre une variable comme argument d'une chaîne de caractère. Par contre je ne vois pas ce qui te fais dire que les fonctions qui leur sont associées sont lentes... Tout dépend à quoi tu les compare.

Pages: 1, 2, 3 | Suivante

Retour liste des commandes

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