saiyajin3
Messages postés31Date d'inscriptionmercredi 13 avril 2005StatutMembreDernière intervention24 juillet 2007
-
22 juin 2006 à 11:56
jlen100
Messages postés1606Date d'inscriptionsamedi 10 juillet 2004StatutMembreDernière intervention25 juillet 2014
-
23 juin 2006 à 16:55
Voilà : Je souhaiterais que ma procédure fasse un calcul et me retourne un entier mais ça ne marche pas comme ça:
elguevel
Messages postés718Date d'inscriptionjeudi 19 décembre 2002StatutMembreDernière intervention22 novembre 20163 22 juin 2006 à 12:34
Une procedure ne retourne pas de résultat, ce sont les fonctions qui font çà.
La différence entre une procedure et une fonction réside justement dans le faite que la procedure execute un code mais ne retourne rien et la fonction fait la meme chose mais renvoi une valeur.
On peut passer à une procedure comme à une fonction des paramètres (ou pas).
Donc pour ton problème il fauda que tu fasses :
function Calcul(num: integer ; num2 : integer) : integer ;
(ou procedureCalcul(num: integer ; num2 : integer); si tu souhaite effectuer une operation sans retour).
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 22 juin 2006 à 15:26
Salut,
"Une procedure ne retourne pas de résultat, ce sont les fonctions qui font çà."
pas tout à fait d'accord avec toi :
Procedure DoAdd( Const X, Y : Integer; Out Rslt : Integer);
Begin Rslt := X + Y;
End ;
Utilisation :
Var A : Integer;
DoAdd(10, 20, A); // ici A retourne 30
Mais le mot resevé Out n'est pas obligatoire:
Procedure DoAdd( Const X, Y : Integer; Var Rslt : Integer);
Begin Rslt : = X + Y;
End;
Produit le même effet.
Attention aussi à la différence entre Var et Const dans les procedures et fonctions. Voir l'aide de Delphi à ce sujet
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 23 juin 2006 à 12:30
procedure (const V : type);
V doit etre constante elle ne peut etre modifiée par la procedure, on peu lui assigner une valeur par defaut :
procedure (const V : type = defaut)
procedure (out V : type);
V peut etre modifiée par la procedure, elle doit etre une variable. on utilise Out quand la valeur de V importe peu dans la
procedure (var V : type);
V peut etre modifiée par la procedure, elle doit etre une variable.
procedure (V : type);
V peut etre modifiée par la procedure, elle peut etre une variable ou un objet.
dans ton cas la procedure devrait etre ecrite comme cela :
procedure (const num1,num2 : integer; [var/out] Result : integer);
les procedures qui renvoie des valeurs sont un peu plus performante que des fonctions, car on evite une allocation et une assignation en sortie.
elguevel
Messages postés718Date d'inscriptionjeudi 19 décembre 2002StatutMembreDernière intervention22 novembre 20163 23 juin 2006 à 13:12
HéHé ... non je n'ai pas tout à fait tord dans le sens où même en passant une variable en paramètre, la procedure ne RENVOI pas de valeur.
Tu ne fais que lui passer une référence à une variable (existante), et tu modifie la valeur de cette variable dans ta procedure. Alors que la fonction renvoi un résultat. (Result := ) comprenez vous ?
Mais il est vrai que j'ai oublié de préciser qu'il existait cette méthode, fort pratique parfois, surtout quand on à par exemple plus d'un résultat (et parfois de types différents) à récupérer.
Sinon j'apprend un truc là ... je ne savais pas que le mot clé "Out" existait !?
Alala le chemin de la connaissance est long et loin d'être terminé ... :-D
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 23 juin 2006 à 14:12
Salut,
alors oui j'ai bien compris
c'est bien joué sur les mots voir capillotracté
D'ailleurs dans ton premier post tu dis ceci : "Une procedure ne retourne pas de résultat"
et ensuite tu dis :
"la procedure ne RENVOI pas de valeur."
On dira donc qu'une Procedure peut retourner où transmettre une variable sous forme de paramètre et la Function elle revoie la valeur directement.
La grande différence, en dehors des performances que F0xi évoque plus haut, c'est que le résultat d'une Function peut être utilisé directement sans passer par une variable intermédiaire contrairement a la Procedure.
jlen100
Messages postés1606Date d'inscriptionsamedi 10 juillet 2004StatutMembreDernière intervention25 juillet 201413 23 juin 2006 à 16:55
salut,
il y a à peu près autant de différence entre une fonction et une
procédure qu'entre un chat gris et un chat noir. On pourrait dire
qu'une procédure est une fonction qui ne renvoie pas valeur affectable.
Les 2 ne sont que de appels à des sous-programmes et elles ont des
modes d'appel identiques la différence se faisant sur
l'affectation ou non d'une valeur de retour. comme l'utilisation de la
valeur de retour n'est pas obligatoire on peut dire également que la
fonction est la forme primitve de la procédure puisque l'on peut
utiliser une fonction en lieu et place d'une procédure mais que
l'inverse n'est pas vrai.(Noter d'ailleurs que le C ne fait pas la
différence entre les deux)