Une procédure peut elle retourner un entier? [Résolu]

Messages postés
31
Date d'inscription
mercredi 13 avril 2005
Statut
Membre
Dernière intervention
24 juillet 2007
- - Dernière réponse : jlen100
Messages postés
1651
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 )
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
Messages postés
735
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
22 novembre 2016
3
3
Merci
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 !

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 146 internautes nous ont dit merci ce mois-ci

Commenter la réponse de elguevel
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
3 août 2018
32
0
Merci
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
Commenter la réponse de Cirec
0
Merci
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+
Commenter la réponse de Utilisateur anonyme
0
Merci
J'ai lu trop vite Cirec : Pardon
Commenter la réponse de Utilisateur anonyme
Messages postés
4307
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
2 janvier 2019
25
0
Merci
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.
Commenter la réponse de f0xi
Messages postés
735
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
22 novembre 2016
3
0
Merci
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
Commenter la réponse de elguevel
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
3 août 2018
32
0
Merci
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
Commenter la réponse de Cirec
Messages postés
1651
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
4
0
Merci
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
Commenter la réponse de jlen100