Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi "dynamisches " Array (https://www.delphipraxis.net/1392-dynamisches-array.html)

thomasdrewermann 21. Nov 2002 21:30


"dynamisches " Array
 
Hi,
ich möchte gerne eine reihe von Zahlen des Types Integer in einer Liste zusammenfassen. Also praktisch ein Array erstellen. Doch wie erstelle ich ein "dynamisches" Array? Das Array soll seine grösse Anpassen.

MFG
Thomas

Tpercon 21. Nov 2002 21:38

Schau mal in der Hilfe unter Dynamische Arrays, da ist das verständlich beschrieben.

Daniel B 21. Nov 2002 21:39

Hi,

Delphi-Quellcode:
type
  TRec = Record //Deine Zahlen
    ID: Integer;

  TIrgendwas = Record
    MeinRec: Array of TRec;
  end;
Grüsse, Daniel :hi:

thomasdrewermann 21. Nov 2002 21:41

Wie füge ich denn jetzt einen Wert ein?
Wie ermittle ich die gesmat Anzahl aller Werte?

MFG
Thomas

jbg 21. Nov 2002 21:42

Du könntest dir die Hilfe zu "Dynamische Arrays" anschauen.
Im folgenden habe ich mal das wichtigste zusammengefasst:

Deklarieren eines dyn. Arrays:
Delphi-Quellcode:
var MyArray: array of Integer;
Anzahl der Elemente festlegen:
Delphi-Quellcode:
SetLength(MyArray, 10); // => [0..9]
Dyn. Array um x Elemente vergrößern:
Delphi-Quellcode:
SetLength(MyArray, Length(MyArray) + x);
Dyn. Array kopieren:
Delphi-Quellcode:
ZweitesDynArray := Copy(MyArray);
Einzelne Elemente in ein neues dyn. Array kopieren:
Delphi-Quellcode:
ZweitesDynArray := Copy(MyArray, 0, 5); // 0..4 kopieren
Dyn. Array freigeben:
Delphi-Quellcode:
MyArray := nil;

Daniel B 21. Nov 2002 21:44

Hi,

globale Var, Irgendwas: TIrgendwas;

Irgendwas.Rec.ID := 1;

Bei jedem einfügen kannst Du eine andere globale Var. hochzählen, z.B. Zähler: integer;

Irgendwas.Rec.ID := 1;
Inc(Zähler);

Grüsse, Daniel :hi:

Christian Seehase 21. Nov 2002 21:44

Moin Thomas,

Array vergrössern:

SetLength(MyDynArray,Length(MyDynArray)+1)

Array verkleinern

SetLength(MyDynArray,Length(MyDynArray)-1) oder SetLength(MyDynArray,high(MyDynArray))

Erster Index:

low(MyDynArray)

Letzter Index:
high(MyDynArray) oder Length(MyDynArray)-1

thomasdrewermann 21. Nov 2002 22:32

Irgendwie kommen da keine Teiler zustande.

Dieser Cde soll die Teilermenge einer Zahl bestimmen:
Delphi-Quellcode:
type tbruch=record
        zaehler:integer;
        nenner:integer;
        positiv:boolean;
end;

type tteiler=record
        zahlen:array of Integer;
        anzahl:integer;
end;
implementation

{$R *.dfm}
function teilermenge(zahl:integer):tteiler;
var i:integer;
begin
result.anzahl:=0;
SetLength(result.zahlen, Length(result.zahlen) + 1);
result.zahlen[length(result.zahlen)-1]:=1;
for i:=2 to (zahl div 2) do
        begin
        if (i mod zahl) = 0 then
                begin
                SetLength(result.zahlen, Length(result.zahlen)+1);
                result.zahlen[length(result.zahlen)-1]:=i;
                result.anzahl:=result.anzahl+1;
                end;
        end;

end;

procedure TForm1.Button1Click(Sender: TObject);
var a:tteiler; i:integer;
begin
label1.Caption:='';
a:=teilermenge(strtoint(edit1.text));
for i:=0 to a.anzahl do
label1.caption:=label1.caption+inttostr(a.zahlen[i])+',';
end;
MFG
Thomas

jbg 21. Nov 2002 22:46

Zitat:

Zitat von thomasdrewermann
Irgendwie kommen da keine Teiler zustande.

Was kommt denn zustande? Etwa eine Exception?
Zitat:

Delphi-Quellcode:
for i:=0 to a.anzahl do
label1.caption:=label1.caption+inttostr(a.zahlen[i])+',';
end;

Schau dir die for-Schleife nochmal genau an.


Zitat:

Delphi-Quellcode:
type tteiler=record
        zahlen:array of Integer;
        anzahl:integer;
end;

Das Feld anzahl benötigst du gar nicht, denn das kannst du mit Length(zahlen) bestimmen, womit dein tteiler dann so deklariert werden kann:
Delphi-Quellcode:
tteiler = array of integer;

thomasdrewermann 21. Nov 2002 22:53

Jetzt sieht das gesamte ding so aus:
Delphi-Quellcode:
type tbruch=record
        zaehler:integer;
        nenner:integer;
        positiv:boolean;
end;

type zahlen=array of Integer;


implementation

{$R *.dfm}
function teilermenge(zahl:integer):zahlen;
var i:integer;
begin
SetLength(result, Length(result) + 1);
result[length(result)-1]:=1;
for i:=2 to (zahl div 2) do
        begin
        if (i mod zahl) = 0 then
                begin
                SetLength(result, Length(result)+1);
                result[length(result)-1]:=i;
                end;
        end;

end;

procedure TForm1.Button1Click(Sender: TObject);
var a:zahlen; i:integer;
begin
label1.Caption:='';
a:=teilermenge(strtoint(edit1.text));
for i:=0 to length(a)-1 do
label1.caption:=label1.caption+inttostr(a[i])+',';
end;
Kommen aber keine Teiler raus :(

jbg 22. Nov 2002 07:36

Du hast den Divisor und Dividend vertauchst:
Zitat:

Delphi-Quellcode:
if (i mod Zahl) = 0 then

Es muss richtig heißen:
Delphi-Quellcode:
if (Zahl mod i) = 0 then

thomasdrewermann 22. Nov 2002 14:00

Mist, was ein dummer Fehler :oops:
Danke für die Lösung.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:09 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz