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 - Projets de programmation


Index du Forum » Projets de programmation » Syntaxe incorrect graph 35+


arnaud5933 Invité

Syntaxe incorrect graph 35+

Posté le 12/01/2023 22:53

Bonsoir,

je suis en train d'essayer de faire un logiciel de hasard sur ma Casio graph 35+ c'est mon premier essai et systématiquement j'ai une erreur de syntaxe quelqu'un pourrait-il m'aider s'il vous plaît.

Voici le code :

DIM NAMES(1 TO 27) AS STRING
NAMES(1) = "ACTEURDESABYSSES"
NAMES(2) = "ARTISANESORCIERE"
NAMES(3) = "BATOSUSHI"
NAMES(4) = "CHEVALIERGEMME"
NAMES(5) = "CLAIR DE LUNE"
NAMES(6) = "DDD"
NAMES(7) = "FARSTAR"
NAMES(8) = "FLEUR"
NAMES(9) = "FOSSILE"
NAMES(10) = "GHOTI"
NAMES(11) = "HARPIE"
NAMES(12) = "IGNISTER"
NAMES(13) = "INFINI TRAIN"
NAMES(14) = "LYRILUSC"
NAMES(15) = "MATHMECH"
NAMES(16) = "MUSIQUE"
NAMES(17) = "PELUCHIMAL"
NAMES(18) = "PATROLL"
NAMES(19) = "PREDAPLANT"
NAMES(20) = "PRINCESSE DE LA PREDICTION"
NAMES(21) = "PROFONDEUR"
NAMES(22) = "RAIDRAPTOR"
NAMES(23) = "RIKKA"
NAMES(24) = "ROUAGES ANCIENTS"
NAMES(25) = "SOLFACCORD"
NAMES(26) = "SORCIEREVENT"
NAMES(27) = "SUPER QUANTIQUE"

RANDOMIZE TIMER
RANDOM_NAME = NAMES(INT(RND * 27) + 1)
PRINT RANDOM_NAME


1, 2 Suivante
Lephenixnoir Hors ligne Administrateur Points: 24232 Défis: 170 Message

Citer : Posté le 12/01/2023 23:04 | #


Je ne sais pas quelle implémentation de Basic tu utilises habituellement, mais sur la calculatrice l'implémentation diffère pas mal et tu as plusieurs problèmes qui t'attendent ; un peu de syntaxe (à la limite, rien de bien violent) et surtout le fait qu'il n'y a pas de listes de chaînes de caractères, que de valeurs numériques. Comme tes chaînes sont assez longues et la liste complète fait 275 caractères, tu ne peux pas non plus directement stocker la concaténation dans une unique chaîne (il y a une limite de 256). Au pire, tu peux toujours faire du...

"ACTEURDESABYSSESARTISANESORCIEREBATOSUSHICHEVALIERGEMMECLAIR DE LUNEDDDFARSTARFLEURFOSSILEGHOTIHARPIEIGNISTERINFINI TRAINLYRILUSC"→Str 1
"MATHMECHMUSIQUEPELUCHIMALPATROLLPREDAPLANTPRINCESSE DE LA PREDICTIONPROFONDEURRAIDRAPTORRIKKAROUAGES ANCIENTSSOLFACCORDSORCIEREVENTSUPER QUANTIQUE"→Str 2
{0, 16, 32, 41, 55, 68, 71, 78, 83, 90, 95, 101, 109, 121, 129}→List 1
{0, 8, 15, 25, 32, 42, 68, 78, 88, 93, 109, 119, 131, 146}→List 2

Et ensuite pour récupérer la chaîne à la position 0≤P<27 dans Str 3 :

P<14⇒StrMid(Str 1,List 1[P],List 1[P+1]-List 1[P])→Str 3
P≥14⇒StrMid(Str 2,List 2[P],List 2[P+1]-List 2[P])→Str 3

ie. garder la concaténation et ensuite séparer via du slicing indiqué par les listes. Yup, c'est bourrin. (Disclaimer : c'est de tête je n'ai pas testé sur machine.)
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)


arnaud5933 Invité

Citer : Posté le 12/01/2023 23:18 | #


Merci de ta réponse

ce n'est pas mon code j'ai utilisé chat gpt qui me la d'abord générer en Python puis je lui est demander une traduction pour en basic casio qui apparemment ne correspond pas.

je n'y connais absolument rien en codage donc je t'avoue que je suis perdue

mon objectif de base c'est de faire un programme d'aléatoire

je peux essayer de réduire le nombre de caractère s'il faut
Mb88 Hors ligne Labélisateur Points: 944 Défis: 3 Message
Lephenixnoir Hors ligne Administrateur Points: 24232 Défis: 170 Message

Citer : Posté le 12/01/2023 23:22 | #


Honnêtement si tu veux programmer c'est sûr que Python c'est mieux... c'est compliqué pour installer Python sur ta calculatrice mais probablement possible si jamais on n'y arrive pas en Basic.

Et du coup, ton programme d'aléatoire, tu peux préciser ce que tu veux faire avec ?
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)


arnaud5933 Invité

Citer : Posté le 12/01/2023 23:30 | #


Tu veux dire que c'est envisageable de mettre python sur une casio ?

Je joue à un jeu de carte (yu-gi-oh) j'ai 27 deck et mon pote 23 on aimerais faire un petit programme qui nous donne de façon aléatoire le nom des deck que nous allons utiliser.
Mb88 Hors ligne Labélisateur Points: 944 Défis: 3 Message
Chere Hors ligne Membre Points: 1 Défis: 0 Message

Citer : Posté le 13/01/2023 20:53 | #


Bonsoir j'ai un soucis avec ma calcul Casio Graph 35+E II, je suis bloqué dans le menu et seulement certains menus comme Tableur marche mais peu d'autres...
Comment régler ce soucis ?
Srt_demon83 Hors ligne Membre Points: 141 Défis: 0 Message

Citer : Posté le 13/01/2023 20:58 | #


Essaie de faire un reset
Mais fais un autre topic pour ça
J'ai rien à dire (comme d'habitude)

Petit tu es doué, très doué, mais tant que je serais là tu ne seras que le second
Acrocasio En ligne Membre Points: 974 Défis: 0 Message

Citer : Posté le 13/01/2023 21:18 | #


Bienvenue sur le site

Tu peux te présenter ici-> https://www.planet-casio.com/Fr/forums/topic17228-1-depuis-combien-dannees-etes-vous-sur-le-forum-forum-de-presentation.html

Et lire les règles du forum ici->https://www.planet-casio.com/Fr/forums/topic12618-1-charte-dutilisation-du-forum-cuf.html

T'inquiète pas, à ce jour je les ai même pas encore lues (ça fait un an que je suis ici )
Srt_demon83 Hors ligne Membre Points: 141 Défis: 0 Message

Citer : Posté le 13/01/2023 21:21 | #


Acrocasio a écrit :
Bienvenue sur le site

Tu peux te présenter ici-> https://www.planet-casio.com/Fr/forums/topic17228-1-depuis-combien-dannees-etes-vous-sur-le-forum-forum-de-presentation.html

Et lire les règles du forum ici->https://www.planet-casio.com/Fr/forums/topic12618-1-charte-dutilisation-du-forum-cuf.html

T'inquiète pas, à ce jour je les ai même pas encore lues (ça fait un an que je suis ici )

Dis, c'est pas dans le sujet là
J'ai rien à dire (comme d'habitude)

Petit tu es doué, très doué, mais tant que je serais là tu ne seras que le second
Lephenixnoir Hors ligne Administrateur Points: 24232 Défis: 170 Message

Citer : Posté le 15/01/2023 16:15 | #


Arnaud5933 a écrit :
Tu veux dire que c'est envisageable de mettre python sur une casio ?

C'est possible si tu as une Graph 35+ USB, mais bon c'est long (il faut commencer par changer l'OS...) donc pas rentable si c'est juste pour un programme, à mon avis !

Je joue à un jeu de carte (yu-gi-oh) j'ai 27 deck et mon pote 23 on aimerais faire un petit programme qui nous donne de façon aléatoire le nom des deck que nous allons utiliser.

Ok, si c'est juste ça tu peux avoir un programme de ce style :

"DECK1,DECK2,DECK3,DECK4,..."→Str 1
{1}→List 1
For 1→I To StrLen(Str 1)
StrCmp(StrMid(Str 1,I,1),",")=0⇒I+1→List 1[Dim List 1+1]
Next
StrLen(Str 1)+2→List 1[Dim List 1+1]

RanInt#(1,Dim List 1-1)→I
Locate 1,1,StrMid(Str 1,List 1[I],List 1[I+1]-List 1[I]-1)

Tu as juste à changer la chaîne de caractères sur la première ligne et tant que le total occupe moins de 255 caractères ça devrait aller tout seul.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)


nono59620 Invité

Citer : Posté le 15/01/2023 17:38 | #


bonjour,

j'ai une graph 35+ mais je sais pas si elle est compatible avec la manœuvre dans le doute évitons

"D1,D2,D3,D4,D5,D6,D7,D8,D9,D10,D11,D12,D13,D14,D15,D16,D17,D18,D19,D20,D21,D22,D23,D24,D25,D26,D27,D28,D29,D30,D31,D32,D33,D34,D35,"→Str 1
{1}→List 1
For 1→I To StrLen(Str 1)
StrCmp(StrMid(Str 1,I,1),",")=0⇒I+1→List 1[Dim List 1+1]
Next
StrLen(Str 1)+2→List 1[Dim List 1+1]

RanInt#(1,Dim List 1-1)→I
Locate 1,1,StrMid(Str 1,List 1,List 1[I+1]-List 1-1)

j'en suis a 360 caractère je vois pas trop comment réduire plus
Potter360 Hors ligne Rédacteur Points: 1221 Défis: 2 Message

Citer : Posté le 15/01/2023 18:03 | #


Non les 255 characteres c’est juste pour la première ligne.
Globalement, coder. Mal, mais coder.


nono59620 Invité

Citer : Posté le 15/01/2023 18:52 | #


Je viens de faire quelque essaie toujours "erreur de syntaxe"

J'ai remarqué dans vos formules la présence de flèches qui sont transformé en points d'interrogation quand je colle sur mon éditeur, l'erreur ne vient pas de là ?
Lephenixnoir Hors ligne Administrateur Points: 24232 Défis: 170 Message

Citer : Posté le 15/01/2023 19:28 | # | Fichier joint


Ah il faut taper à la main, ou alors je peux t'envoyer directement le fichier qui va bien (ci-joint).
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)


nono59620 Invité

Citer : Posté le 17/01/2023 21:41 | #


Bonsoir,

Nickel ça fonctionne

est-ce vous arriveriez a m'expliquer comment faire le même genre de programme qui cette fois donne 2 noms sur 2 listes différentes j'aimerais apprendre
Lephenixnoir Hors ligne Administrateur Points: 24232 Défis: 170 Message

Citer : Posté le 17/01/2023 23:21 | #


Alors si tu veux apprendre un peu tranquillement à écrire/comprendre du code en Basic CASIO, tu peux regarder le tutoriel, qui est plus détaillé que ce qu'on pourra écrire sur un seul post (Mb88 l'a lié plus haut) : https://www.planet-casio.com/Fr/programmation

Sinon pour ce code, voilà comment il marche :

"DECK1,DECK2,DECK3,DECK4,..."→Str 1

On stocke tous les noms d'un bloc, séparés par des virgules, dans Str 1. Le but c'est donc de tirer un de ces noms au hasard.

La chaîne de caractères Str 1 est découpée par des virgules mais c'est dans l'esprit. Il n'y a pas une fonction tout prête pour récupérer "un segment entre deux virgules", donc on commence par se faire une liste des positions dans la chaîne où les noms des decks sont coupés.

Essentiellement, on va mettre dans la liste les indices de tous les ^ ci-dessous :

DECK1,DECK2,DECK3,DECK4
^     ^     ^     ^     ^

On peut voir que les ^ sont positionnés ainsi : un au début, un après chaque virgule, et un après la fin de la chaîne.

{1}→List 1

Ça c'est le premier au début (les positions dans la chaîne commencent à 1).

For 1→I To StrLen(Str 1)
StrCmp(StrMid(Str 1,I,1),",")=0⇒I+1→List 1[Dim List 1+1]
Next

Ensuite on parcourt la chaîne pour trouver toutes les virgules. StrMid(Str 1,I,1) extrait le caractère à la position I, et on le compare à une virgule avec StrCmp() (qui renvoie 0 en cas d'égalité). Si c'est bien une virgule, alors on ajoute à la liste la position qui suit la virgule. (Le cache un test conditionnel.)

StrLen(Str 1)+2→List 1[Dim List 1+1]

Et enfin on ajoute la position après la fin de la chaîne.

Ainsi, pour extraire le i-ème nom de deck, il suffit de récupérer la section de Str 1 qui commence au i-ème ^ et va jusqu'au suivant (moins 1 caractère).

On génère donc un nombre aléatoire entre 1 et le nombre de decks :

RanInt#(1,Dim List 1-1)→I

Et ensuite on récupère la section concernée de la chaîne avec StrMid(), qu'on affiche à l'écran avec Locate :

Locate 1,1,StrMid(Str 1,List 1[I],List 1[I+1]-List 1[I]-1)

Voilà voilà, c'est un peu bourrin mais c'est l'idée générale

Pour tirer un deuxième deck tu peux donc, à la limite, copier tout le code dans un autre fichier et changer le texte ; ou si tu veux faire un peu plus propre, mettre une autre liste dans Str 2, refaire la génération de la liste à partir de Str 2, et refaire le tirage aléatoire.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)


nono59620 Invité

Citer : Posté le 05/02/2023 21:45 | # | Fichier joint


Bonjour,

j'ai pas regardé à mon programme depuis un moment malheureusement...

du coup quand j'ai fait un test le programme me sort un nom de la première liste mais quand il veut pour la deuxième liste cela m'indique erreur dimension. J'ai fait un screen pour montrer l'endroit où le curseur apparaît.
Lephenixnoir Hors ligne Administrateur Points: 24232 Défis: 170 Message

Citer : Posté le 06/02/2023 11:43 | #


Dans mon code, le "1" de "List 1" et de "Str 1" c'est juste un identifiant. Quand tu veux avoir deux tirages il vaut donc utiliser "List 2" et "Str 2"... mais c'est tout. Tu as changé plusieurs "1" en "2" ailleurs dans le code, alors que ça n'a pas de sens :

{2}→List 2

Le nombre entre accolades ici est supposé être la position, dans la chaîne, où le nom du premier deck commence. C'est 1 (le début de la chaîne) même quand tu fais ton second tirage.

For 2→I To Strlen(List 2)

Ici de même on commence à charger les virgules dès le début de la chaîne, donc 1→I.

StrCmp(StrMid(Str 2,I,2))=",")

Ici le 2 (après le I) c'est le nombre de caractères qu'on extrait à la position I. On cherche une virgule, et donc on extrait exactement un caractère, pas deux : StrMid(Str 2,I,1).

I+2→List 2[Dim List 2+2]

Le I+2 c'est la position, par rapport à la virgule, où le nom du deck suivant commence. C'est toujours la lettre qui suit immédiatement la même virgule, ie. celle en position I+1. Le Dim List 2+2 c'est la position dans la liste où on stocke ce numéro qu'on vient de calculer. C'est juste après la fin de la liste, donc à la position Dim List 2+1. (On a le droit d'écrire juste après la fin de la liste, cela rajoute un élément ; c'est le seul accès hors-bornes autorisé.)

StrLen(Str 2)+2→List 2[Dim List 2+2]

Pareil ici pour le Dim List 2+2. (Le StrLen(Str 2)+2, lui, est correct.)

Et pareil pour la dernière ligne.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)


nono59620 Invité

Citer : Posté le 06/02/2023 20:48 | # | Fichier joint


Bonsoir,

Merci

Après quelques heures à y regarder voici le résultat final qui fonctionne
1, 2 Suivante

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