hej Kasper
Du er nok nødt til at sortere værdierne, hvis du skal have fat i
5%-fraktilerne.
Du skal have fat i en quicksort rutine til at udføre din sortering. Det er
også sådan en Tlist bruger internt. Den kan ses herunder. "A" er en
array-struktur som indeholder alle dine værdier (her antaget, at de er af
typen double).
Du kalder den med quicksort(1,500), hvis dit array har tal fra 1 til 500.
procedure QuickSort(iLo, iHi: longInt);
var
Lo,Hi: longInt;
mid,tt: double;
begin
Lo:= iLo;
Hi:= iHi;
Mid:= A[(Lo + Hi) div 2];
repeat
while A[Lo]<Mid do Inc(Lo);
while A[Hi]>Mid do Dec(Hi);
if Lo<=Hi then
begin
tt:= list[Lo]; list[Lo]:= list[Hi]; list[Hi]:= tt;
Inc(Lo);
Dec(Hi);
end;
until Lo>Hi;
if Hi>iLo then QuickSort(iLo,Hi);
if Lo<iHi then QuickSort(Lo,iHi);
end;
Hvis du opretter et array som dynamisk (via setlength og finalize) er der
stort set ingen begrænsninger på størrelsen. Der er heller ingen
begrænsninger, hvis det gøres via en global statisk variabel, hvorimod
lokale statiske variable er begrænset af stakkens størrelse.
Altså:
var
a: array [1..500000] of double
b: array of double
procedure myproc;
var
c: array [1..500000] of double
begin
// gør noget her
end;
Her bør kun c-array'et kunne give fejl, hvis stakken er defineret for lille
(default er 1 MB). 1 mio records af typen double fylder 8 Mb, så her har du
forklaringen på, at 1 mio records er for meget i din situation, men der er
som sagt masser af muligheder for at arbejde med større arrays. Se også $M
for mere om stakken.
Hilsen
Uffe
"Kasper Okkels" <okkels@mailme.dk> wrote in message
news:3rVI6.45$eY.6100069@news.mobilixnet.dk...
> Hej - spørgsmål fra en programmeringsnybegynder
>
> Findes der ikke en nem måde at sortere værdierne i et array på i Delphi 5?
> Jeg synes, jeg har ledt og ledt, men kan ikke finde en kommando, der
virker.
> Og laver jeg min egen amatøragtige sorteringsrutine, så synes jeg, det
tager
> en hulens til tid.
>
> Mit problem er, at jeg har et array indeholdende en masse værdier, og
heraf
> skal jeg have fundet alle 5%-fraktilerne. Hvis det kan gøres smartere end
at
> sortere arrayet og plukke værdierne ud, ja, så hører jeg også gerne det.
>
> Og i øvrigt. Hvad er maxgrænsen for hvor stort et array kan være? Kan det
> være rigtigt, at jeg skal have en fejlmeddelelse, når jeg forsøger at
fylde
> 1 million simulationsværdier ind i et array? Hvis det er rigtigt, hvordan
> overkommer man så det problen?
>
> På forhånd tak for hjælpen. Håber på svar, en nybegynder kan forstå.
>
> /Kasper
>
>