Un réel comme résultat d'une fonction ?

Résolu
John Dogget Messages postés 384 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 7 mai 2009 - 22 juil. 2006 à 21:32
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 - 23 juil. 2006 à 21:31
Bonjour à tous.

J'ecris une fonction qui charge une liste d'opérations depuis un fichier. Certaines de ces opérations doivent être executées, d'autres non, on dira que ces opérations sont actives ou inactives.

Je souhaiterais que ma fonction renvoie un nombre réel sous le format suivant
<Nombre total de règles>,<Nombre de règles actives>

Ainsi si ma fonction charge 10 règles, dont 5 seulement sont actives, elle renvera le nombre "10,5"

Est'il possible d'assigner à part les deux partie d'un nombre réel (avant et après la virgule) ?

Par exemple ...
PartieEntière(Nombre):=10;
ParieRéelle(Nombre):=5;

En esperant m'être fait comprendre ...

9 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
23 juil. 2006 à 02:26
Oui. Si c'est un réel tu peut essayer ceci.

function division(nb: integer): float;
var
  res : float;
begin
  res := nb;
  while (res > 1) do
     res : = res / 10
  result := res;
end ;

PartieEntiere : = 10
PartieRelle := 5;
Result := PartieEntiere + division(PartieRelle);

Il y a peut être une méthode un peu plus élégante, mais je pense que celle ci devrait fonctionner.
3
John Dogget Messages postés 384 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 7 mai 2009
23 juil. 2006 à 09:41
C'est la méthode que j'avais employé, à defaut d'autre chose
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
23 juil. 2006 à 10:16
Salut,

en fait ce que tu désire c'est pouvoir renvoyer deux valeurs dans une Variable et de pouvoir les récuperer.

Il existe d'autres possibilitées, mais en voici une que tu pourras peut être trouver utile :

Function MaFonction: Integer;
Var PartieEntiere, PartieReelle : Integer;
begin
  PartieEntiere := 10;  // ici on simule le résultat de ta fonction
  PartieReelle  := 5;
  Result := MAKELong(PartieEntiere, PartieReelle);  // et ici on affecte les deux valeurs à Result 
end ;





procedure TForm1.Button1Click(Sender: TObject);
Var PartieEntiere, PartieReelle : Integer;
begin
  PartieEntiere : = Loword(MaFonction);  // Récupération de la première Valeur 
  PartieReelle  := hiword(MaFonction);   // Récupération de la deuxième Valeur
  Label1.Caption := Format('%d, %d', [PartieEntiere, PartieReelle]);  // Et pour finir un affichage pour le contrôle des Valeurs
end;

@+
Cirec
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
23 juil. 2006 à 13:09
Tu pourrais aussi renvoyer une structure, non ?
0

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

Posez votre question
John Dogget Messages postés 384 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 7 mai 2009
23 juil. 2006 à 15:23
Je ne sais pas si il est possible de renvoyer une structure, en revanche un pointeur de structure c'est certain que ça pourrait marcher
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
23 juil. 2006 à 17:44
Il est tout a fait possible de renvoyer une structure. Mais c'est plus propre de renvoyer un pointeur sur structure.
0
John Dogget Messages postés 384 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 7 mai 2009
23 juil. 2006 à 18:30
Ok ...
Donc effectivement, je pourrais tout aussi bien renvoyer une structure
J'ai l'embarra du choix maintenant !

Merci à vous
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
23 juil. 2006 à 21:24
type

  TRegles = record
     case integer of
       0: (code : dword);
       1: (Total,Active: word);
  end;

function blablabla : TRegles;
begin
  total := 10;
  active:= 5;
// ... //
  result.total := total;
  result.active:= active;
end;


var

  Tampax : TRegles;

begin
  Tampax := blablabla;
  label1.caption := format('total : %d, actives : %d, code : %.8x',
                           [tampax.total, tampax.active, tampax.code]);
end;




<hr size="2" width="100%" />
Croc (click me)
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
23 juil. 2006 à 21:31
ATTENTION AUX APELS REDONDANT DE FONCTIONS!




procedure TForm1.Button1Click(Sender: TObject);
Var PartieEntiere, PartieReelle : Integer;
begin
  PartieEntiere := Loword(MaFonction);  // Récupération de la première Valeur 
  PartieReelle  := hiword(MaFonction);   // Récupération de la deuxième Valeur
  Label1.Caption := Format('%d, %d', [PartieEntiere, PartieReelle]);  // Et pour finir un affichage pour le contrôle des Valeurs
end ;

<hr size ="2" width= "100%" />
Function MaFonction : dword;
Var CHigh, CLow : word;
begin
  CHigh  : = 10;
  CLow   := 5;
  Result := MakeLong(CHigh, CLow);
end ;

procedure TForm1.Button1Click(Sender: TObject);
Var Code : cardinal;
    CLow, CHigh : word;
begin
  Code : = MaFonction;
  CLow := Loword(Code);
  CHigh:= Hiword(Code);
  Label1.Caption := Format('%d, %d', [CHigh,CLow]);
end ;
<hr size ="2" width="100%" />Croc (click me)
0
Rejoignez-nous