Le plus petit entier non nul

Résolu
seast Messages postés 7 Date d'inscription samedi 5 juillet 2003 Statut Membre Dernière intervention 25 mars 2005 - 23 mars 2005 à 14:40
seast Messages postés 7 Date d'inscription samedi 5 juillet 2003 Statut Membre Dernière intervention 25 mars 2005 - 25 mars 2005 à 12:31
Bonjour,
voici la fonction qui me permet de trouver le plus petit entier non nul parmi 3 possibilités.
Y a-t-il plus simple ? ou plus rapide ?
Si je desire passer à n entiers, vaudrait-il mieux trier un tableau et tester les plus petites valeurs ? une autre idée ?

function MiniNonNul(A,B,C: Integer): Integer;
begin
if Min(A,Min(B,C)) = 0 then
begin
if A = 0 then
begin
if Min(B,C) = 0 then
begin
if B = 0 then
begin
if C = 0 then Result := 0 else Result := C;
end
else Result := B;
end
else Result := Min(B,C);
end
else if B = 0 then
begin
if C = 0 then Result := A else Result := Min(A,C);
end
else Result := Min(A,B);
end
else Result := Min(A,Min(B,C));
end;

Merci.

5 réponses

cs_neko Messages postés 135 Date d'inscription jeudi 14 août 2003 Statut Membre Dernière intervention 12 octobre 2006 1
23 mars 2005 à 15:18
result := MAXINT;
if a>0 then result := a;
if (b<result) and (b>0) then result := b;
if (c<result) and (c>0) then result := c;

qui renvoi maxint si ils sont tous <= 0(Certes, c'ets plutôt laid, mais qu'est-ce que c'est simple :) )

pour N entiers, ça va dependre de pas mal de chose, il faudrait plus de precisions
3
jmp77 Messages postés 1119 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 4 octobre 2006 7
23 mars 2005 à 15:36
Hello,



Pourquoi ne pas utiliser directement la fonction MinIntValue de delphi :

Renvoie la moindre valeur signée d'un tableau d'entiers.



Unité



Math



Catégorie



routines statistiques



function MinIntValue(const Data: array of Integer): Integer;



Description



Appelez MinIntValue pour obtenir le plus petit entier du tableau Data.

Bonne prog,
JMP77.

N'oubliez pas de cliquer sur réponse acceptée.
0
seast Messages postés 7 Date d'inscription samedi 5 juillet 2003 Statut Membre Dernière intervention 25 mars 2005
23 mars 2005 à 18:15
Merci à tous les deux !
> neko : ta solution marche parfaitement et a le mérite d'être simple. Tu avais compris que seuls les entiers positifs m'interessaient dans ce pb.

>jmp77 : ta proposition renvoie le plus petit entier y compris 0 s'il est présent, et moi je veux le plus petit mais supérieur à 0.

encore merci et à bientôt.
0
WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
24 mars 2005 à 21:55
Euh, je comprends pas tout là !

Seast, si tu veux une fonction qui te renvoie le plus petit entier non nul, alors la fonction de neko ne marche pas !!
Si tu essayes avec les valeurs a -2, b -3, et c = -4, tu obtiens : Result MAXINT 2147483647

Pour moi, le plus petit entier non nul est c=-4 !!

La fonction correcte serait plutot :

function MinNonNul( const a,b,c : integer ) : integer;
begin
result := MAXINT ;
if (a<result) and (a<>0) then result := a;
if (b<result) and (b<>0) then result := b;
if (c<result) and (c<>0) then result := c;
end ;

Cordialement.
0

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

Posez votre question
seast Messages postés 7 Date d'inscription samedi 5 juillet 2003 Statut Membre Dernière intervention 25 mars 2005
25 mars 2005 à 12:31
Bonjour,
tu as raison WhiteHippo, ta fonction renvoie le plus petit entier non nul pour n'importe quels entiers contrairement à celle de neko. J'ai accepté sa réponse car elle correspondait à ce que j'attendais, à savoir le plus petit entier non nul dans l'intervalle des entiers positifs, ce que je n'avais pas précisé dans ma question il est vrai.
Merci.
0
Rejoignez-nous