Equivalent code Pascal

Informations pour bien débuter en PureBasic
Avatar de l’utilisateur
Philippe_GEORGES
Messages : 112
Inscription : mer. 28/janv./2009 13:28

Equivalent code Pascal

Message par Philippe_GEORGES »

Bonjour à tous,

Une question, sans doute un peu simpliste, mais je travaille beaucoup en Pascal Objet et j'ai besoin de migrer du code vers Purebasic.

En pascal, j'ai par exemple une procedure comme ceci :

Code : Tout sélectionner

Procedure calcul(a,b : integer; VAR somme, difference, produit : integer);
begin
end;

Là, les valeurs somme, difference, produit sont retournées par la procédure.

Comment faire l'équivalent en Purebasic ? sans doute en utilisant les pointeurs, mais là je ne sais pas !!

Merci à vous tous,

Phil
Philippe GEORGES
"La simplicité est la sophistication suprême" (De Vinci)
assistance informatique, création de logiciels
georges.informatique@gmail.com
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: Equivalent code Pascal

Message par Zorro »

soit tu utilises des variables globales

dans ce cas plus de soucis

Code : Tout sélectionner


Declare calcul(a,b )

Global Somme,difference,produit


Calcul(5,3) ; appel procedure

debug 		somme
debug	difference
debug	produit	



Procedure calcul(a,b )
		somme=a+b
		difference=a-b
		produit=a*b		
EndProcedure

soit tu utilises une structure : et dans ce cas , on peut avoir des variables Locales a la procedure....

Code : Tout sélectionner

structure resultat
		somme.l
		difference.l
		produit.l
EndStructure
resultat.resultat

Declare calcul(a,b ,resultat)

Calcul(5,3,@resultat.resultat) ; appel procedure et on refile l'adresse de la structure aussi

debug 		resultat\somme
debug	resultat\difference
debug	resultat\produit	

Procedure calcul(a,b ,*resultat.resultat)
		*resultat\somme=a+b
		*resultat\difference=a-b
		*resultat\produit=a*b		
EndProcedure


note que tu peux aussi utiliser une structure de façon plus conventionnelle (en utilisant les globales, ce qui fait moins de parametres a passer du coup )

Code : Tout sélectionner

Declare calcul(a,b )

structure resultat
		somme.l
		difference.l
		produit.l
EndStructure
global resultat.resultat

Calcul(5,3) ; appel procedure

debug 		resultat\somme
debug	resultat\difference
debug	resultat\produit	

Procedure calcul(a,b)
		resultat\somme=a+b
		resultat\difference=a-b
		resultat\produit=a*b		
EndProcedure
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: Equivalent code Pascal

Message par Zorro »

et j'allais oublier aussi

le fameux "Shared"qui permet de rendre une variable se trouvant a l'interieur d'une procedure
temporairement Global , puisque la valeur est rendu "publique" avec le mot Shared (Partagée)

Code : Tout sélectionner

Declare calcul(a,b )

Calcul(5,3) ; appel procedure

debug somme
debug difference
debug produit	

Procedure calcul(a,b)
		shared somme,difference,produit
		somme=a+b
		difference=a-b
		produit=a*b		
EndProcedure

voila, je pense avoir fait le tour de la question :)
Dernière modification par Zorro le dim. 05/janv./2020 13:36, modifié 1 fois.
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Demivec
Messages : 90
Inscription : sam. 18/sept./2010 18:13

Re: Equivalent code Pascal

Message par Demivec »

Philippe_GEORGES a écrit :Procedure calculation (a, b: integer; VAR sum, difference, product: integer);
begin
Ici:

Code : Tout sélectionner

Procedure calculation(a, b, *sum.Integer, *difference.Integer, *product.Integer)
      *sum\i = a + b
      *difference\i = a - b
      *product\i = a * b      
EndProcedure

Define x = 4, y = 5
Define s, d, p

calculation(x, y, @s, @d, @p)
Debug "{" + x + ", " + y + "}; sum: " + s + "; difference : " + d + "; product: " + p

Structure result
  Sum.i
  Difference.i
  Product.i
EndStructure 

Define result.result

calculation(6, 2, @result\Sum, @result\Difference, @result\Product)
Debug "{" + 6 + ", " + 2 + "}; sum: " + @result\Sum + "; difference : " + result\Difference + "; product: " + result\Product
 
Avatar de l’utilisateur
Naheulf
Messages : 191
Inscription : dim. 10/mars/2013 22:22
Localisation : France

Re: Equivalent code Pascal

Message par Naheulf »

D'après le wiki freepascal le mot clef « VAR » correspond à un passage par référence. La solution la plus proche en termes de comportement (et de variables à déclarer) est donc pour moi celle de Demivec.
Avatar de l’utilisateur
microdevweb
Messages : 1798
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Equivalent code Pascal

Message par microdevweb »

Voici deux solutions (du moins si j'ai bien compris la demande)

Code : Tout sélectionner

Structure test
  a.i
  b.i
  somme.i
  difference.i
  produit.i
EndStructure

Procedure calculation_1(*par.test)
  With *par
    \somme = \a + \b
    \difference = \a - \b
    \produit = \a * \b
  EndWith
EndProcedure
Procedure calculation_2(a.i,b.i,*s,*d,*p)
  PokeI(*s,a+b)
  PokeI(*d,a-b)
  PokeI(*p,a*b)
EndProcedure

Define myPara.test
myPara\a = 10
myPara\b = 2

calculation_1(@myPara)

Debug "SOMME A & B : "+Str(myPara\somme)
Debug "DIFF A & B : "+Str(myPara\difference)
Debug "PROD A & B : "+Str(myPara\produit)

Define.i s,d,p

calculation_2(10,2,@s,@d,@p)

Debug "SOMME A & B : "+Str(s)
Debug "DIFF A & B : "+Str(d)
Debug "PROD A & B : "+Str(p)



Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: Equivalent code Pascal

Message par Zorro »

Naheulf a écrit :D'après le wiki freepascal le mot clef « VAR » correspond à un passage par référence. La solution la plus proche en termes de comportement (et de variables à déclarer) est donc pour moi celle de Demivec.

j'ai présenté 4 reponses !!

dont une qui utilise une structure et les pointeurs !
dans ce cas on utilise Exactement la meme Adresse pour un emplacement de Variable (membre de la Structure ) (donc par REFERENCE)

de plus , dans l'absolu , ça ne change pas grand chose , l'essentiel etant de ressortir les 3 résultats d'un coup... ;)

ma proposition a base de pointeurs et de structures a la qualité de n'avoir que 3 parametres a passer
les 2 membres pour le calcul , et l'adresse de la structure ...
je trouve ça plus elegant que

calcul( a,b,*s,*d,*p) ... mais bon



@aux_Autres : Merci pour vos tentatives de faire autrement que ce que j'ai proposé
a condition, que ce soit "Autrement" .... ;)

on peux varier a l'infini la façon de transmettre une valeur (ou l'adresse d'une variable ) soit par des Pokes ou des "="
ce qui serai intéressant , je pense, c'est d'avoir une solution qui soit vraiment original,et différente
de celles deja présentés ... je dis ça ... je dis ça LOL

ps: au final, perso je préfère encore la solution du "Shared" qui reste la plus simple a mettre en oeuvre
et a ecrire ! , apres c'est comme vous voulez ...
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Equivalent code Pascal

Message par Micoute »

Zorro a écrit :perso je préfère encore la solution du "Shared" qui reste la plus simple a mettre en œuvre et a ecrire.
C'est celle que je préfère aussi.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Répondre