|
| 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
| |
|
|