Passage de paramètres par référence au procédure

Vous avez une idée pour améliorer ou modifier PureBasic ? N'hésitez pas à la proposer.
nguray
Messages : 11
Inscription : lun. 20/déc./2004 23:17

Passage de paramètres par référence au procédure

Message par nguray »

Que penser vous de pouvoir faire modifier les variables du programme principale que le on passe à une procédure

Ex:

Procedure Test(ref a.l,ref b.l)
a.l = 100
b.l = 100
EndProcedure

c.l = 10
d.l = 10

Test(c.l,d.l)

Debug c
Debug d

Afficherais

100
100

Nico m'a proposer la solution suivante

Procedure Test(*a.LONG,*b.LONG)
*a\l = 100
*b\l = 100
EndProcedure

c.l = 10
d.l = 10
Test(@c,@d)
Debug c
Debug d

Solution parfaitement fonctionnelle,mais je trouve que PureBasic mérite une méthode plus intégré et surtout plus naturelle.

:D
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

je vois pas trop l'interet !!

vaux mieux demander des trucs plus urgent et plus flagrant !!

comme par exemple les boucles

for t=a to b step c
next t

avec a , b ,c en nombre a virgule ou variable a virgule !


ou le retour de plusieurs valeurs d'une procedure
valeurs "alphanumerique !! "

qui me paraisse bien plus urgent a mon avis !
:?
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Oui..., ça a peut-être un interêt, mais il ne me saute pas aux yeux pour le moment.

Je suis un peu de l'avis de Dobro, il y a plus urgent...
... à moins que vous n'ayez envie de nous faire une espèce d'usine à gaz totalement incompréhensible et inutilisable par les non-programmeurs... :?
nguray
Messages : 11
Inscription : lun. 20/déc./2004 23:17

Message par nguray »

Tous est une question de priorité, je suis nouveau en PureBasic, je ne savais pas que les boucle For...Next ne prend pas les flottants.

Mais ne peut on pas remplacer en attendant la boucle For...Next par une boucle While...Wend

a.f = 1.5
b.f = 3.5
c.f = 0.1

t.f = a.f
While t.f<=b.f
t.f = t.f + c.f
Debug t.f
Wend

Au Passage, j'ai remarqué qu'il y a un bug sur la précision car on obtient ceci comme affichage:
1.700
..
..
3.499999 <= Sortie de la boucle si il n'y pas de bug.
3.599999


Avec les paramètres par références on peut implicitement retourner plusieurs résultats
Ex :

Procedure Test(par1,par2,ref res1,Ref res2,Ref res3)
res1 = par1+par2
res2 = par1-par2
res3 = par1*par2
EndProcedure

par1 = 10
par2 = 20
res1.l = 0
res2.l = 0
res3.l = 0

Test1(par1,par2,res1,res2,res3)
Debug res1
Debug res2
Debug res3

Doit Afficher
30
-10
200

Si tous est homogène on doit pouvoir faire des choses similaires avec les chaîne alphanumérique.


:)
filperj
Messages : 395
Inscription : jeu. 22/janv./2004 1:13

Message par filperj »

Ben... Le passage par référence avec les pointeurs structurés marche très bien !
Pourquoi changer la synthaxe ?
Le chaos l'emporte toujours sur l'ordre
parcequ'il est mieux organisé.
(Ly Tin Wheedle)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Mais ne peut on pas remplacer en attendant la boucle For...Next par une boucle While...Wend
si ! bien sur , mais c'est pas un for next c'est autre chose et plus long tant en ecriture qu'en temp machine il me semble !! :D

Au Passage, j'ai remarqué qu'il y a un bug sur la précision car on obtient ceci comme affichage:

avec la version 3.92 complete j'obtient

Code : Tout sélectionner

1.600000
1.700000
1.800000
1.900000
2.000000
2.100000
2.200000
2.300000
2.400000
2.500000
2.599999
2.699999
2.799999
2.899999
2.999999
3.099999
3.199999
3.299999
3.399999
3.499999
3.599998


Dräc
Messages : 526
Inscription : dim. 29/août/2004 0:45

Message par Dräc »

La traduction en PB de ton exemple nguray donne:

Code : Tout sélectionner

Procedure Test(*a.LONG,*b.LONG) 
  *a\l= 100 
  *b\l= 100
EndProcedure 

c.l = 10 
d.l = 10 

Test(@c,@d) 

Debug c 
Debug d
hardy
Messages : 333
Inscription : mer. 02/juin/2004 13:19
Localisation : Tours

Message par hardy »

Moi, je trouve qu'il n'y a pas de problème concernant les procédures.
On peut toujours modifier en passant par les adresses.
Quant aux boucles "for", ce ne sont que des boucles "while".
Et si je ne m'abuse, une boucle while n'est pas plus lente qu'une boucle "for" : les boucles "for" ne seraient-elles pas codées sour la forme d'une boucle while ou repeat en asm?
Pour ce qui me concerne, ce que je considère comme le plus urgent, c'est le support en natif des 64bits, et plus si possible, pour pouvoir faire des calculs précis.
Actuellement PB ne permet pas, sauf à bidouiller des lib qui ralentissent, de faire du calcul avec une précision satisfaisante pour des applications "scientifiques"
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

8 lignes de code

Code : Tout sélectionner

a.f = 1.5
b.f = 3.5
c.f = 0.1

t.f = a.f
While t.f<=b.f
     t.f = t.f + c.f
     Debug t.f
Wend

6 lignes de code

Code : Tout sélectionner

a.f = 1.5
b.f = 3.5
c.f = 0.1

for t.f= a.f  to b.f step c.f
      Debug t.f
next t.f
Franchement lequel vous parait le plus clair ??

et encore je ne parle pas des boucles imbriquées !!!
avec while - wend c'est la galere les imbrications de boucles !!!


:D
hardy
Messages : 333
Inscription : mer. 02/juin/2004 13:19
Localisation : Tours

Message par hardy »

Dobro est un gros raleur. (mais ça, tout le monde le savait déjà!) :lol: :lol: :lol:
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

De toute façon, si il y a trois types de boucles, c'est certainement qu'elles ont une différence, et qu'elles sont utiles.

Dobro est peut-être un râleur, mais il a raison.
Les boucles For/Next, While/Wend, et Repeat/Until, existent dans pratiquement tous les langages, et depuis des années. Depuis le début de la programmation, pour certaines.

Quand au passage de paramètres par des pointeurs structurés, tel qu'on le fait à l'heure actuelle, je trouve ça très bien, et je ne vois pas pourquoi on devrait changer maintenant.

Ca fonctionne parfaitement, c'est relativement simple à comprendre, que demander de plus?
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Chris a écrit :De toute façon, si il y a trois types de boucles, c'est certainement qu'elles ont une différence, et qu'elles sont utiles.

Dobro est peut-être un râleur, mais il a raison.
Les boucles For/Next, While/Wend, et Repeat/Until, existent dans pratiquement tous les langages, et depuis des années. Depuis le début de la programmation, pour certaines.

Quand au passage de paramètres par des pointeurs structurés, tel qu'on le fait à l'heure actuelle, je trouve ça très bien, et je ne vois pas pourquoi on devrait changer maintenant.

Ca fonctionne parfaitement, c'est relativement simple à comprendre, que demander de plus?
Tout à fait d'accord Chris.

Voici un petit code de test sur une boucle For (pas tout à fait pareil qu'un While) :D

Code : Tout sélectionner

For i = 0 To 0
   Debug "Boucle For : Alors, combien de passages ?  --> i vaut " + Str(i)
Next i
Dernière modification par Anonyme2 le jeu. 23/déc./2004 17:10, modifié 1 fois.
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Autre problème qu'il faudrait règler, au niveau de la boucle For\Next\Step, c'est le Step qui demande soit une valeur numérique, soit une constante, mais pas une variable.

Code : Tout sélectionner

Pas.l = 3

For i = 0 To 100 Step Pas
  Debug i
Next
Step renvoie une erreur, car il demande une constante.

Le problème, est qu'on pourrait très bien envisager que 'Pas' puisse être le résultat d'une opération, ou bien un appel de procédure.
J'ai mixé les deux, regardez le message d'erreur

Code : Tout sélectionner

Procedure Test(Pas_, Deb_, Fin_)
  #Pas_ = Pas_
  For Val_.l = Deb_ To Fin_ Step #Pas_
    Debug Val_
  Next
EndProcedure

P = 6/2
Test(P, 0, 10)
Fred
Site Admin
Messages : 2808
Inscription : mer. 21/janv./2004 11:03

Message par Fred »

Le passage par reference est prévu, mais bon c'est clair que ce n'est pas hyper prioritaire.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

ha la vache !!! :lol: il a rien dit sur les boucle for-next -step ! :? :D
Répondre