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 - Autres questions


Index du Forum » Autres questions » Y a-t'il une alternative aux sous-programmes ?
Gugusse Hors ligne Membre Points: 73 Défis: 0 Message

Y a-t'il une alternative aux sous-programmes ?

Posté le 13/12/2017 20:13

Bonjour,

J'utilise assez souvent un programme sur ma "casio 35+" pour calculer les points lors des parties de tarot.
Ce programme comporte un programme principal et 9 sous programmes (gestion-affichage des noms, choix des "élus", ...).
Ce qui me gêne le plus c'est que ces sous programmes ne sont pas intégrés au programme principal et "encombrent" inutilement la liste des programmes que l'on doit parcourir pour "lancer" le bon programme.
Y a-t'il un moyen pour les intégrer au programme principal (sans recopier les instructions chaque fois que l'on fait appel à eux) ou existe-t'il une astuce de programmation pour faire la même chose ?
(On m'a déjà dit que les "Goto" et "Label" étaient source d'erreurs).

Cordialement,
GUGUSSE.

Fichier joint


Lephenixnoir Hors ligne Administrateur Points: 24575 Défis: 170 Message

Citer : Posté le 13/12/2017 20:54 | #


Il n'y a pas de façon satisfaisante de résoudre ce problème à ma connaissance. Voilà quelques pistes sur ce qui se fait habituellement :

- Utiliser des noms spéciaux pour les sous-programmes, quelque chose qui commence par ., ou bien mettre une espace au début du nom du programme principal, pour influencer le tri. Peu subtil mais concluant en pratique.

- Utiliser des Goto/Lbl pour simuler des fonctions. C'est le seul cas où je trouve justifié de s'en servir ; malheureusement, il n'y aucun moyen de retourner à « l'endroit de l'appel » une fois la procédure terminée.

- Structurer le programme pour ne les appeler qu'une fois, et les intégrer à l'unique endroit où ils sont appelés.

J'ai peut-être oublié des astuces ; je n'ai rien implémenté en Basic depuis des lustres. Mais grosso modo, non, il n'y a rien qu'on puisse faire et auquel tu n'aies pas déjà pensé. (À ma connaissance, toujours.)
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Zezombye Hors ligne Rédacteur Points: 1756 Défis: 13 Message

Citer : Posté le 13/12/2017 21:06 | #


Ouaip, mettre une tilde (~) au début des sous-programmes les fait trier à la fin, du coup tous les sous programmes seront après les programmes principaux.
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Gugusse Hors ligne Membre Points: 73 Défis: 0 Message

Citer : Posté le 14/12/2017 10:31 | #


Bonjour,

La tilde est une bonne idée, merci.
Le problème est (de taille) :
Lorsque j'ai besoin de ce symbole dans un programme, j'appuie sur "Shift" et "alpha" puis "F3".
Si le veux renommer mes sous programmes, je n'ai pas accès à ce symbole de cette façon. Y a-t'il un autre moyen pour l'obtenir dans les noms de fichiers ?

J'ai trouvé comment l'écrire, mais cela ne change rien à l'ordre des programmes qui semblent être rangés dans l'ordre dans lequel ils ont été écrit dans la calculatrice !
A moins de le supprimer et de les réécrire, je ne vois pas comment faire.

Cordialement,
GUGUSSE.
Lephenixnoir Hors ligne Administrateur Points: 24575 Défis: 170 Message

Citer : Posté le 14/12/2017 15:05 | #


Les programmes sont triés par ordre lexicographique (ie. alphabétique) selon la table des caractères ASCII sur les machines récentes. Tu as peut-être un modèle différent, mais ça me surprendrait...
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 14/12/2017 21:12 | #


Sur les anciennes Graph (G35+, 65, etc), les programmes ne sont pas triés par ordre alphabétique. Du coup l'astuce ne s'applique malheureusement pas…
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Ne0tux Hors ligne Membre d'honneur Points: 3525 Défis: 265 Message

Citer : Posté le 14/12/2017 21:58 | #


Une machine à état devrait être suffisante, non (ie. une boucle principale unique comprenant un switch géant portant sur une variable d'état que l'on modifie dans chaque case du switch, qui correspondent à des blocs d'instructions élémentaires) ?

On peut même imaginer que certains états ajoutent leur identifiant dans une pile, et que d'autres, correspondant à des "sous-programmes virtuels", viendraient dépiler pour retrouver les états qui les ont précédemment appelés.
Mes principaux jeux : Ice Slider - CloneLab - Arkenstone

La Planète Casio est accueillante : n'hésite pas à t'inscrire pour laisser un message ou partager tes créations !
Lephenixnoir Hors ligne Administrateur Points: 24575 Défis: 170 Message

Citer : Posté le 14/12/2017 22:12 | #


Ça marcherait tout à fait, mais c'est une émulation pur et simple du système de sous-programmes qui existe déjà. Et tu es obligé d'introduire un nouvel « état » pour chaque ligne où tu appelles Prog, ce qui transforme les états qui auraient pu être des fonctions en des points d'entrée et des points de retour. (Un gros bordel potentiel, en somme.)

La pile est absolument nécessaire pour ça, heureusement les listes possèdent un append naturel en indexant sur la première case inexistante. Dépiler est peut-être plus subtil par contre.

Je suggère de bien réfléchir au papier avant d'implémenter une méthode avec ce niveau de complexité pour éviter de s'embrouiller sévèrement par la suite. Il y a aussi un petit bout de performance qui risque de partir, à voir si c'est gênant ou pas dans le contexte.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Gugusse Hors ligne Membre Points: 73 Défis: 0 Message

Citer : Posté le 17/12/2017 17:58 | # | Fichier joint


Merci à vous tous de vous être intéressé à mon problème.
Ne pouvant modifier l'ordre d'affichage dans la liste des programmes, j'ai essayé de n'avoir les programmes qu'une fois.
J'y suis allé petit à petit et j'ai galéré un peu pour faire une boucle deux fois dans l'un des trois cas.
Mais j'y suis parvenu. La solution à été de n'écrire qu'une fois la liste des joueurs et de conserver l'affichage à l'écran tout le temps que se déroule le programme !
Si cela intéresse, je joins la solution.
La somme des différents programmes occupait 1193 octets, le programme qui remplace tout cela "fait" 575 octets !

Cordialement,
GUGUSSE.

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