Avatar billede aggemamme Nybegynder
14. maj 2003 - 16:45 Der er 9 kommentarer og
1 løsning

Array der "automatisk" vokser?

Hej

Man kan lave et dynamisk array således:

var
  mitArray : array of Integer;

begin

setLength(array,1000)

end;

så vil der være plads til 1000 elementer.

Men nu henter jeg data fra standard input med readln, - således ved jeg ikke, hvor mange elementer jeg får brug for at der er plads til.

Kan man ikke lave et array, der automatisk vokser som der er behov for plads?
Avatar billede doc404 Novice
14. maj 2003 - 17:46 #1
Nej, Men når du tilføjer kan du skrive


  SetLength(MyArray,Length(MyArray)+1);
  MyArray[High] := 123;
  ...
Avatar billede aggemamme Nybegynder
14. maj 2003 - 18:44 #2
Jep, men afvilkingen af programmet tager mange hundrede gange så lang tid, når man gør det ... At indlæse en 100000 elementer tager adskillige minutter i stedet for ganske få millisekunder.
Avatar billede aggemamme Nybegynder
14. maj 2003 - 18:44 #3
Men det kan godt være at jeg ender med at forøge arrayet med fx 1000 elementer hver gang man er ved at "nærme sig" grænsen. Er dette en dårlig ide?
Avatar billede doc404 Novice
14. maj 2003 - 18:50 #4
Nej, det er den rigtige måde at gøre det på. Kræver en smule mere kode
Avatar billede aggemamme Nybegynder
14. maj 2003 - 18:51 #5
OK, tak for hjælpen
Avatar billede borrisholt Novice
15. maj 2003 - 07:39 #6
Brug en Tlist istedet for et array !
Avatar billede nop Nybegynder
15. maj 2003 - 11:05 #7
Du skal allokere plads til fx 100 ad gangen istedet for en ad gangen.
Fx:
var
  a: array of integer;
  ix: integer;
  alloc: integer;

procedure add(x: integer);
begin
  inc(ix);
  if ix>alloc then begin
    inc(alloc,100);
    setlength(a,alloc);
  end;
  a[ix-1]:=x;
end; //add

begin
  alloc:=0;
  ix:=0;
  //assign + reset
  repeat
      readln(txt-fil,s); //s: string
      add(strToInt(s));
  until eof(txt-fil);
  //close
end.
Avatar billede nop Nybegynder
15. maj 2003 - 11:07 #8
Nå ja men jeg kunne osse lige læse alle svar
Avatar billede borrisholt Novice
15. maj 2003 - 11:10 #9
Jeg mener nu stadig at en Liste er det mest rigtige ...
Jens b
Avatar billede aggemamme Nybegynder
18. maj 2003 - 19:50 #10
Ja, en liste er garanteret det mest rigtige. Tak for svarene alle sammen!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester