/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
max(); til flere værdier end 2
Fra : dh8000


Dato : 27-02-06 21:20

Hej.

Jeg kender funktionen max(x,y);

Men denne funktion kan kun anvendes til sammenligning af to værdier. Findes
der noget tilsvarende, der kan sammenligne flere værdier, fx 10 forskellige
værdier, og returnere max eller min som ovenfor.



 
 
René Jensen (27-02-2006)
Kommentar
Fra : René Jensen


Dato : 27-02-06 22:08

dh8000 wrote:
> Jeg kender funktionen max(x,y);
> Men denne funktion kan kun anvendes til sammenligning af to værdier. Findes
> der noget tilsvarende, der kan sammenligne flere værdier, fx 10 forskellige
> værdier, og returnere max eller min som ovenfor.

Nedenstående kildetekst returner det største heltal i mængden af heltal.

1 function Max(IntArr: MyDataType) : Integer;
2 var
3 i, j, k: Integer;
4 begin
5 i := Low(IntArr);
6 j := High(IntArr);
7 k := IntArr[i];
8 i := i + 1;
9 while i <= j do
10 begin
11 if IntArr[i] > k then k := IntArr[i];
12 i := i + 1;
13 end;
14 Result := k;
15 end;

For at finde det mindste heltal, ændres funktionens navn og linie 11 til
følgende:

11 if IntArr[i] < k then k := IntArr[i];

Med venlig hilsen,
René Jensen

Harald (27-02-2006)
Kommentar
Fra : Harald


Dato : 27-02-06 23:49

"dh8000" <dennishartvigsen@ofir.dk> skrev i en meddelelse
news:44035ef3$0$11700$ba624c82@nntp02.dk.telia.net...
> Hej.
>
> Jeg kender funktionen max(x,y);
>
> Men denne funktion kan kun anvendes til sammenligning af to værdier.
> Findes der noget tilsvarende, der kan sammenligne flere værdier, fx 10
> forskellige værdier, og returnere max eller min som ovenfor.

Hvis det skal være enkelt kunne du evt. gøre sådan:

function MaxInArray(Tal : array of integer) : integer;
var
i : integer;
begin
Result:=-MaxInt;
for i:=0 to Length(Tal)-1 do
if Tal[i]>Result then
Result:=Tal[i];
end;

Du kan så kalde funktionen med så mange tal du vil, sådan:

var
MaxTal : integer;
begin
MaxTal:=MaxInArray([5,-7,2,13,9,117,0]);
Showmessage('Største tal er: '+IntToStr(MaxTal));
end;

/HK



Brian Andersen \(www~ (28-02-2006)
Kommentar
Fra : Brian Andersen \(www~


Dato : 28-02-06 08:59

Hejsa igen,

det går lige op for mig, at Delphi 7 har en funktion til det. Den ligger i
Math unit'en og ser sådan ud:

function MaxIntValue(const Data: array of Integer): Integer;
var
I: Integer;
begin
Result := Data[Low(Data)];
for I := Low(Data) + 1 to High(Data) do
if Result < Data[I] then
Result := Data[I];
end;

Den kan så ikke klare at funktion kaldes med blanke aktuelle parametre *s*.

/Brian



Brian Andersen \(www~ (28-02-2006)
Kommentar
Fra : Brian Andersen \(www~


Dato : 28-02-06 08:56

> function MaxInArray(Tal : array of integer) : integer;
> var
> i : integer;
> begin
> Result:=-MaxInt;
> for i:=0 to Length(Tal)-1 do
> if Tal[i]>Result then
> Result:=Tal[i];
> end;

Bemærk, ovenstående løsning giver et forkert resultat, hvor funktionen
kaldes MaxInArray([]); Altså, hvis de aktuelle parametre er blanke, så
returneres følgende tal: -2147483647. Resultatet burde have været 0.

Hvad med sådan her?

function MaxInArray(No: array of Integer): Integer;
var
I: Integer;
begin
if High(No) > 0 then
begin
Result := No[0];
for I := 1 to High(No) do
if Result < No[I] then
Result := No[I];
end else
Result := 0;
end;

/Brian



Harald (28-02-2006)
Kommentar
Fra : Harald


Dato : 28-02-06 09:40

"Brian Andersen (www.europeansoftwarehouse.com)" <x@x.x> skrev i en
meddelelse news:vjTMf.10$lW6.7@news.get2net.dk...
>> function MaxInArray(Tal : array of integer) : integer;
>> var
>> i : integer;
>> begin
>> Result:=-MaxInt;
>> for i:=0 to Length(Tal)-1 do
>> if Tal[i]>Result then
>> Result:=Tal[i];
>> end;
>
> Bemærk, ovenstående løsning giver et forkert resultat, hvor funktionen
> kaldes MaxInArray([]); Altså, hvis de aktuelle parametre er blanke, så
> returneres følgende tal: -2147483647. Resultatet burde have været 0.

Resultatet bør ikke være 0 da det ikke er det højste tal i arrayet, så burde
den måske hellere give en exception. Ellers er -2147483647 bedre end 0 da
det jo ikke er sansynlig at det lige er dette tal der er det højste i
arrayet.

/HK



Brian Andersen \(www~ (28-02-2006)
Kommentar
Fra : Brian Andersen \(www~


Dato : 28-02-06 10:41

Jaeh. Der er vi så uendige med hensyn til retur værdien. Det største tal af
ingen tal må være nul. Hvis der ingen værdier eksisterer må den største
værdi af de ikke eksisterende aktuelle parametre være nul. Det samme gælder
for mindste værdien. Den mindste værdi af ingen værdier må være nul.

En exception kunne også være en løsning.

/Brian



Harald (28-02-2006)
Kommentar
Fra : Harald


Dato : 28-02-06 11:30

"Brian Andersen (www.europeansoftwarehouse.com)" <x@x.x> skrev i en
meddelelse news:cSUMf.25$wl.16@news.get2net.dk...
> Jaeh. Der er vi så uendige med hensyn til retur værdien. Det største tal
> af ingen tal må være nul. Hvis der ingen værdier eksisterer må den største
> værdi af de ikke eksisterende aktuelle parametre være nul. Det samme
> gælder for mindste værdien. Den mindste værdi af ingen værdier må være
> nul.

0 er efter min mening et tal ligesom 1 så derfor vil det være forkert at
give 0 som resultal hvis 0 ikke er indeholdt i arrayet.
Hvad hvis de tal man giver til funktionen indeholde negative tal.

if MaxInArray([-2,0,-55])=0 then
showmessage('Dit array indeholder ingen tal'); // retur er 0 dvs. at
der åbenbart ikke er nogle tal i arrayet hvilket jo ikke er korrekt

if MaxInArray([])=-MaxInt then
showmessage('Dit array indeholder ingen tal'); // korrekt

> En exception kunne også være en løsning.

Nok det bedste.

/HK



Brian Andersen \(www~ (28-02-2006)
Kommentar
Fra : Brian Andersen \(www~


Dato : 28-02-06 12:09


> if MaxInArray([-2,0,-55])=0 then
> showmessage('Dit array indeholder ingen tal'); // retur er 0 dvs. at
> der åbenbart ikke er nogle tal i arrayet hvilket jo ikke er korrekt

Nej. Stadigvæk ikke enig. Det at funktionen her returnerer 0 her er jo
korrekt. Da 0 er det største tal af dem alle. I denne sammenhæng mener jeg,
at tallet 0 skal returneres i det man er ude efter det største tal. Det er
ikke MaxInt værdien man er ude efter, hvis der ingen ting er i array'en.


>> En exception kunne også være en løsning.


Enig. Det er nok den fortrukne løsning i det funktionen ikke kan returnere
nogen fejlværdier.

/Brian



Harald (28-02-2006)
Kommentar
Fra : Harald


Dato : 28-02-06 12:49

"Brian Andersen (www.europeansoftwarehouse.com)" <x@x.x> skrev i en
meddelelse news:t8WMf.30$LP1.1@news.get2net.dk...
>
>> if MaxInArray([-2,0,-55])=0 then
>> showmessage('Dit array indeholder ingen tal'); // retur er 0 dvs. at
>> der åbenbart ikke er nogle tal i arrayet hvilket jo ikke er korrekt
>
> Nej. Stadigvæk ikke enig. Det at funktionen her returnerer 0 her er jo
> korrekt. Da 0 er det største tal af dem alle. I denne sammenhæng mener
> jeg, at tallet 0 skal returneres i det man er ude efter det største tal.
> Det er ikke MaxInt værdien man er ude efter, hvis der ingen ting er i
> array'en.

ok, men hvis brugeren af funktionen gerne vil have besked fra funktionen
hvis arrayet er tomt så duer det ikke at den retunere 0 da 0 jo kunne være
den højste værdi i en række af tal der alle foruden 0 er negative, så
vil -MaxInt være mere brugbart selvom den naturligvis i teorien også kunne
være det højste tal.

>>> En exception kunne også være en løsning.
>
>
> Enig. Det er nok den fortrukne løsning i det funktionen ikke kan returnere
> nogen fejlværdier.

Ja

/HK



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408914
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste