Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Simuler le passage de paramètre en Panoramic | |
| | Auteur | Message |
---|
Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Simuler le passage de paramètre en Panoramic Dim 12 Fév 2012 - 18:18 | |
| Suite à la demande d'exdragon, je vous donne ma façon de faire. Ce n'est qu'une méthode, il y en a certainement d'autres... L"idée est d'utiliser une DLIST pour stocker les paramètres (on simule une PILE). Le plus simple c'est de faire un exemple: On va écrire une fonction qui renvoie le carré d'un nombre...(j'ai pas trouvé plus simple ) - Code:
-
' Création de la DLIST qui va servir pour le passage de paramètre DIM PILE:PILE=1000:DLIST PILE LABEL Carre : ' notre fonction
DIM nombre,retour DIM i
' appel à la fonction
FOR i=1 TO 5 ITEM_ADD PILE,STR$(i) : GOSUB Carre retour = VAL(ITEM_READ$(PILE,COUNT(PILE))) : ' on récupère la valeur de retour ITEM_DELETE PILE,COUNT(PILE) : ' et on efface le resultat dans la pile print "carre(";i;")=";retour NEXT i
END
Carre: ' lecture du paramètre passé à la fonction DIM param1: param1=VAL(ITEM_READ$(PILE,COUNT(PILE))) ' maintenant qu'on l'a lu, il n'est plus besoin dans la DLIST, donc on l'efface: ITEM_DELETE PILE,COUNT(PILE) ' on fait notre petit calcul... ;) param1=param1*param1 ' on met le résultat dans la DLIST ITEM_ADD PILE,str$(param1) FREE param1 RETURN
Avec cette méthode, on peut écrire des fonctions avec N paramètres qui renvoient un nombre ou une chaine de caractère. L'autre avantage par rapport aux systèmes classique c'est qu'on peut également avoir en retour : - un tableau - un mélange de chaines de caractères / valeurs numerique... bref, tout ce que vous voulez dans la DLIST. Perso j'utilise cette méthode depuis un petit moment: - https://panoramic.1fr1.net/t1773-mise-en-forme-de-fichier-source-panoramic-nieme-version- https://panoramic.1fr1.net/t1807-arbre-binaire-de-recherche-avlet cela fonctionne pas trop mal... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Simuler le passage de paramètre en Panoramic Dim 12 Fév 2012 - 18:22 | |
| Intéressant, cette méthode ! Je vais en prendre note.
Juste une question: comment fais-tu pour passer un tableau ? | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Simuler le passage de paramètre en Panoramic Dim 12 Fév 2012 - 18:28 | |
| J'empile tous les elements de mon tableau, puis en dernier j'empile le nombre d'elements du tableau... idem en valeur de retour... EDIT: Cela reste assez sommaire, l'ideal serait la notion de pointeur... mais là on ne parle plus de Panoramic... Un exemple de tableau en retour que j'utilise pour mon utilitaire modbus (cf MyDrive.ch) - Code:
-
' ------------------------------------------------------------------------------ ' Parametres d'entrée : ' - Chaine de caractère à décomposer ' - Caractère de séparation ' Paramètres de sortie: ' - Nombre d'éléments, Element 1, Element 2,..., Element N ' ------------------------------------------------------------------------------ Split: DIM Split_str$ DIM Split_i DIM Split_t$ DIM Split_tab$(100), Split_index Split_t$=ITEM_READ$(SysStack,COUNT(SysStack)):GOSUB SysClrStack Split_str$=TRIM$(ITEM_READ$(SysStack,COUNT(SysStack))) : GOSUB SysClrStack
Split_index = 1 FOR Split_i=1 TO LEN(Split_str$) IF MID$(Split_str$,Split_i,1)=Split_t$ Split_index=Split_index+1 ELSE Split_tab$(Split_index)=Split_tab$(Split_index)+MID$(Split_str$,Split_i,1) END_IF NEXT Split_i ' on empile le résultat FOR Split_i= Split_index TO 1 STEP -1 ITEM_ADD SysStack,Split_tab$(Split_i) NEXT Split_i ITEM_ADD SysStack,STR$(Split_index) FREE Split_str$:FREE Split_i:FREE Split_index:FREE Split_tab$ FREE Split_t$ RETURN
SysClrStack: ITEM_DELETE SysStack,COUNT(SysStack) RETURN
| |
| | | exdragon
Nombre de messages : 601 Date d'inscription : 05/01/2012
| Sujet: Re: Simuler le passage de paramètre en Panoramic Dim 12 Fév 2012 - 18:47 | |
| - Citation :
- L"idée est d'utiliser une DLIST pour stocker les paramètres (on simule une PILE)
Merci Nardo ! Rien que cette idée d'utiliser le Dlist est une super idée géniale, de celles qu'on a pas idée jusqu'à ce qu'on y pense, enfin vous me comprenez (j'espère^^) Je veux dire que le Dlist est sous nos yeux tous les jours et on a jamais pensé à l'utiliser de cette façon C'est trop bien !!! En parlant de pointeurs, tu ne peux pas utliser un index comme un pointeur vers les variables du Dlist ? Enfin simulation de pointeur quoi Perso, je ne passe pas de tableaux en paramètres, sauf s'il est de très petites dimensions, sinon je préfère essayer de faire autrement.
Dernière édition par exdragon le Dim 12 Fév 2012 - 18:51, édité 2 fois | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Simuler le passage de paramètre en Panoramic Dim 12 Fév 2012 - 18:50 | |
| @Nardo26: merci. Je ne voyais pas d'autre solution non plus. Vivement les sous-programmes avec paramètres que Jack est en train de réaliser ! | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Simuler le passage de paramètre en Panoramic Dim 12 Fév 2012 - 19:04 | |
| Oui j’attends avec impatience cette version !! Cela va nous simplifier la vie grandement !!! Je ne pense pas que Jack est prévu des fonctions avec en retour plusieurs paramètres (cela risque d'être compliqué au niveau parser) Donc dans certains cas, je pense que j'utiliserai cette méthode pour des fonctions "folklorique"... @exdragon: je ne vois pas ce que tu veux dire... Pour les pointeurs ce que je voulais dire concernant les tableaux: c'est de passer l'adresse de base du tableau ainsi que sa taille... et de pouvoir récupérer son contenu via cette adresse... Dans le cas présent, la fonction ADR ne marche pas... sans compter le PEEK/POKE, DPOKE, LPOKE qui n'existent pas non plus... Concernant la manipulation de pointeur, Panoramic n'est pas adapté pour ce genre de chose... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Simuler le passage de paramètre en Panoramic Dim 12 Fév 2012 - 19:24 | |
| Tout dépend si Jack fait le passage de paramètres "by value" ou "by reference". J'espère que ce sera le seconde solution. Ceci permettrait d'utiliser un paramètre formel en entrée ET en sortie, du genre: - Code:
-
dim i%,j%,a$,b$ a$ = "sources Panoramic" b$ = "Pano" j% = analyser(i%,a$,b$) ... function anayser(n%,x$,y$) dim i% n% = 1 i% = 1 while i%>0 i% = instr(mid$(x$,i%,len(x$)," ") if i%>0 then n% = n% + 1 end_while analyser = instr(x$^,y$) end_function
Cette fonction, bidon bien sûr, retourne DEUX informations: au retour, la variable j% contient 9, et n% contient 2, soit le nombre de mots dans a$. Si donc il fait le passage "by reference", ce serait idéal. On pourrait même imaginer: - Code:
-
dim table$(20,3), s$,i%,j% ... s$ = chercher$(table$(),"crit",20,3,i%,j%) ... function chercher$(tableau$(),c$,d1%,d2%,x%,y%) dim i%,j% for i%=0 to d1% for j%=0 to d2% if instr(tableau$(i%,j%),c$)>0 x% = i% y% = j% chercher$ = tableau$(i%,j%) exit_function end_if next j% next i% x% = 0 y% = 0 chercher$ = "" end_function
Cette fonction chercherait une chaîne de caractères dans les éléments d'un tableau de chaines. Elle retournerait une chaîne vide si l'on ne trouve rien, ou la chaîne complète de la première occurence du critère de recherche ainsi que les deux indices contenant la chaîne trouvé. Là encore, l'exemple ne sert pas à grand-chose d'autre que de montrer quelques possibilités "souhaitables" d'une implémentation de sous-programmes et fonctions avec paramètres formels, si l'on choisit le passage "by reference". | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Simuler le passage de paramètre en Panoramic Lun 13 Fév 2012 - 11:42 | |
| Hello Klaus,
Comment tu fait du récursif avec un passage de paramètre par référence ?
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Simuler le passage de paramètre en Panoramic Jeu 16 Fév 2012 - 18:09 | |
| Du récursif n'est évidemment pas possible. Mais dans mes applications, je n'ai jamais besoin de récursivité. Par contre, j'ai souvent besoin de pouvoir retourner ou de modifier plusieurs valeurs passées en entrée; ce que résoudrait cette proposition. | |
| | | Contenu sponsorisé
| Sujet: Re: Simuler le passage de paramètre en Panoramic | |
| |
| | | | Simuler le passage de paramètre en Panoramic | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |