Une procédure peut elle retourner un entier?

Résolu
saiyajin3 Messages postés 31 Date d'inscription mercredi 13 avril 2005 Statut Membre Dernière intervention 24 juillet 2007 - 22 juin 2006 à 11:56
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 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:

procedure Calcul(num: integer ; num2 : integer) : integer ;


(j'insiste sur le fait que c'est une procédure et pas une fconction )

8 réponses

elguevel Messages postés 718 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 22 novembre 2016 3
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).

Bon Code !
3
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
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

@+
Cirec
0
Utilisateur anonyme
22 juin 2006 à 16:27
Salut,

Oh la boulette Elguevel : elle est trop grosse celle là (Mdrr) pour que malgré mon emploi du temps, je ne poste pas :

procedure Calcul(num: integer ; num2 : integer; Var Resultat : Integer) ;

Il doit etre fatiguer Elguevel

A+
0
Utilisateur anonyme
22 juin 2006 à 16:33
J'ai lu trop vite Cirec : Pardon
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
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.
0
elguevel Messages postés 718 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 22 novembre 2016 3
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
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
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.

@+
Cirec
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
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)


@+

jlen
0
Rejoignez-nous