plusieur return procedure (et procedure dll)

Vous avez une idée pour améliorer ou modifier PureBasic ? N'hésitez pas à la proposer.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

bon en definitive si !!

on peu !! mais en OMIKRON Basic !!
je savais bien que j'avais vu ça quelque part !! :D

en omikron basic pour recuperer plusieurs valeur il suffit de faire preceder les variables de parametres de la procedure de la lettre" R"

comme ça :

on defini la procedure :

DEF PROC plus_court (Rcpt, Rnom)
LOCAL i,gt : rem 2 variable locales
FOR i = max(cpt,nom) to 1 STEP -1
IF frac(cpt/i)=0 AND frac(nom/i)=0 THEN gt=i:EXIT
NEXT i
cpt=cpt/gt:nom=nom/gt
RETURN

le prg qui utilise la procedure :
x=36:y=42

plus_court(x,y):REM pas besoin de metre les 'R' pour l'appel des procedures
PRINT x,y
les x=36 et y=42
deviennent apres l'appel de la procedure
x=6 et y=7 !!! :D

bien sur le nombre de parametres retournés, correspond au nombre de parametre précédé d'un R
jerexgrz
Messages : 279
Inscription : dim. 05/juin/2005 20:27

Message par jerexgrz »

:D ce serait vraiment utile !!! je passe pleins d'infos par les procedures du style: X, Y ,X2 ,Y2, ....
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

jerexgrz a écrit ::D ce serait vraiment utile !!! je passe pleins d'infos par les procedures du style: X, Y ,X2 ,Y2, ....
on m'a repondu sur le forum anglais , et par la meme donné une astuce toute bete, mais qui marche bien, et qui n'ajoute pas de code excessif

voici l'astuce !! :D

Code : Tout sélectionner

Procedure divise_par_deux(x,Y)
    x2=PeekL(x)/2
    y2=PeekL(Y)/2  
    
    PokeL(x,x2) 
    PokeL(Y,y2)
EndProcedure

CallDebugger
x = 10
Y = 50

divise_par_deux(@x,@Y)
Debug x
Debug Y
ça reste lourding quand meme hein ... :lol:
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

cf titre :
[...] et procedure dll
Oui, ok çà serait sympa mais une DLL respecte un format qui n'est pas choisit par Fred & co. Une DLL respecte au contraire un schéma prédéfini par microsoft et il n'est donc pas possible de 'bidouiller' les entrées/sorties d'une lib. Et c'est pour cette même raison que Fred ne peut pas 'prototyper' une fonction DLL qui renvoie une chaine de caractères ( ie. Prototype.s maFonction() ). Ou alors cela impliquerait qu'une DLL faite avec PureBasic ne soit pas utilisable depuis un autre langage, hum trop utile...
Image
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

Dobro a écrit :voici l'astuce !! :D

Code : Tout sélectionner

Procedure divise_par_deux(x,Y)
    x2=PeekL(x)/2
    y2=PeekL(Y)/2  
    
    PokeL(x,x2) 
    PokeL(Y,y2)
EndProcedure

CallDebugger
x = 10
Y = 50

divise_par_deux(@x,@Y)
Debug x
Debug Y
je préfère, exactement dans le même esprit, cette forme là - qui est moins lourde et plus propre surtout (et qui perso résout tous mes problèmes du genre depuis pb3.x) :

Code : Tout sélectionner

Procedure divise_par_deux(*x.Long, *y.Long)
  
  *x\l / 2 
  *y\l / 2 
  
EndProcedure

CallDebugger

x = 10 
y = 50 

divise_par_deux(@x, @y) 

Debug x 
Debug y 
Image
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

you're welcome :wink:
Image
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Flype a écrit :you're welcome :wink:
Merci Flype ça marche en fait tres bien !! :oops: :D

Code : Tout sélectionner

	
    Procedure divise_par_deux(*x.Long, *y.Long) 
        *x\l / 2
        *y\l / 2 
    EndProcedure
    
    CallDebugger
    
    x = 10
    Y = 50
    
    divise_par_deux(@x, @Y)
    
    Debug x
    Debug Y 
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

ce qui serait réellement bien comme nouveauté, c'est l'affectation de structure!

Code : Tout sélectionner

a.point = b.point
Ca résoudrait le besoin de retour multiple et ca ouvrirai énormément de portes!

Dri
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

bon,
étant donné que cette demande ne verra probablement pas d'implémentation avant des lustres.....

et si on faisait un tuto sur ProcedureReturn: Renvoyer plusieurs arguments

:idea: :?:

parce que des solutions il y en a, et à mon sens ces solutions ne sont pas du bricolage, juste des méthodes connues de programmation.

certes, une procédure capable de renvoyer "une liste d'arguments" (je préfère ce terme à 'plusieurs arguments') serait pratique mais là encore les listes ne sont pas pour demain.

d'ailleurs c'est quoi une liste (à ne pas confondre avec liste chaînée) ?

en math, on appelle çà souvent 'une suite' ou 'sequence' (seq) en anglais.

c'est tout bête, mais ca n'existe pas en pb, çà ressemblerait à çà :

Code : Tout sélectionner

pair.seq = (0, 2, 4, 6, 8)

impair.seq = (1, 3, 5, 7, 9)

felin.seq = ("chat", "tigre", "lion", "guépard", "panthère")

nums.seq = pair + impair

debug nums ; --> (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)

debug felin[2] ; --> lion

mes_listes.seq = ( pair, impair, felin, nums )

debug mes_listes[2][4] ; --> "panthère"
debug mes_listes[2][-1] ; --> "panthère"
debug mes_listes[2][-2] ; --> "guépard"
Image
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Flype a écrit : en math, on appelle çà souvent 'une suite' ou 'sequence' (seq) en anglais.

c'est tout bête, mais ca n'existe pas en pb, çà ressemblerait à çà :
ça existe en LISP et en LOGO <-- qui est un dérivé du LISP :D
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

exactement (ou python aussi ;) )
Image
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

Dobro a écrit :ça existe en LISP et en LOGO <-- qui est un dérivé du LISP :D
Tu es sûr 8O .
LISP, c'est bien Allegr Commum LISP : le truc avec les parenthèses de partout (j'ai fait un solveur de labyrinthe avec :D ) ?
Car le LOGO c'est un simple langage.

Je ne vois pas le rapprochement au niveau syntaxique... Ou je ne regarde pas du bon côté ? :lol:

Lio
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

lionel_om a écrit :
Dobro a écrit :ça existe en LISP et en LOGO <-- qui est un dérivé du LISP :D
Tu es sûr 8O .
LISP, c'est bien Allegr Commum LISP : le truc avec les parenthèses de partout (j'ai fait un solveur de labyrinthe avec :D ) ?
Car le LOGO c'est un simple langage.

Je ne vois pas le rapprochement au niveau syntaxique... Ou je ne regarde pas du bon côté ? :lol:

Lio
voir ici : http://fr.wikipedia.org/wiki/Logo_(langage)

le LOGO n'est pas un simple Langage !!!
il fait partie des language dit de 5em generation !! (rien que ça !!)
il ne faut pas se fier a l'aspect Graphique du LOGO, (que je reprends d'ailleurs dans mon PUREGOLO)

c'est tres puissant l'air de rien !! ...

en logo les listes peuvent contenir des ordres !!!

REPETE 4[AV10 TD90]

la meme chose en PureGolo :wink:

repete 4
AV 10
TD 90
fin_repete :D
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

Dobro a écrit :en logo les listes peuvent contenir des ordres !!!

REPETE 4[AV10 TD90]

la meme chose en PureGolo :wink:

repete 4
AV 10
TD 90
fin_repete :D
Je sais je viens de créer un interpréteur Logo avec JAVA/AntLr pour un projet scolaire (dailleurs faudra que je regarder si on peut l'adapeter à PB, mais ca va être dur car c'est du langage objet et très ciblé Java). Ca m' a fait pensé à toi avec ton PureLogo/Golo 2D/3D :D

Désolé pour le "simple langage". Je voulais parler de syntaxe simple.
J'v regarder ton lien Wikipédia, car ca m'intéresse tout ça (ayant manipuler un peu les 2 langages, je sais un peu de quoi ca parle... je ne serai pas trop perdu !!!). Mais c'est vrai que ça m'étonne car leur syntaxe est littéralement différente.

Lio
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

(je débroussaille un peu les araignées de ce post)

En fait, actuellement, et j'espère ne pas dire une bêtise, PB retourne une seule valeur.

Mh...
Répondre