AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Was sind Dynamische Arrays??

Ein Thema von Doenerimperator · begonnen am 30. Sep 2008 · letzter Beitrag vom 1. Okt 2008
Antwort Antwort
Seite 1 von 2  1 2      
Doenerimperator

Registriert seit: 28. Sep 2008
8 Beiträge
 
#1

Was sind Dynamische Arrays??

  Alt 30. Sep 2008, 20:44
Hi leute!
Ich habe ein Problem, nämlich einen schlechten Informatikunterricht.
Wir haben in der Schule gelernt, dass man bei einem Array die obere Grenze von Anfang an festlegen muss.
Nun stand ich aber bei Programmieren vor einem Problem. Ich wollte zum beispiel mehrere shapes erscheinen lassen, aber ich wusste nich wie viele. Die Anzahl sollte also variabel sein. Ich hab erst mal ein Array aus seeeeeehr vielen shapes erstellt.
Das ist aber glaube ich nicht sehr Speicherschonend. Ich habe ein bischen im Internet gesucht und dymaische Arrays gefunden.
Sie wurden immer wieder erwähnt aber eine ausreichende Anleitung hab ich nirgends gefunden.

Meine Frage ist also, ob irgendwer nen tutorial kennt, oder es schnell hier posten könnte, wenn es nicht zu umfangreich ist.


Dies ist mein erster Eintrag hier und meine Delphikenntnisse beschränken sich auf ein jahr informatikunterricht und einige Recherchen.

Hoffe, dass ihr mir helfen könnt.
  Mit Zitat antworten Zitat
Gerome

Registriert seit: 4. Sep 2002
Ort: Server-Raum im Keller
316 Beiträge
 
#2

Re: Was sind Dynamische Arrays??

  Alt 30. Sep 2008, 20:51
Bei einem dynamischen Array ist der Name auch das Motto: Es ist in seiner Größe variabel.

Du kannst es deklarieren als "MeinArray : Array of Sonstwas" und wenn Du es brauchst, hast Du meist eine grobe Idee davon, wie groß es denn sein soll. Dann benutzt Du "SetLength(MeinArray, 5)" und setzt das Array damit auf eine Länge von 5 Elementen (die mit 0 bis 4 durchnummeriert werden).

Wenn Du später merkst, dass das eng wird, dann lässt Du einfach ein neues SetLength los und vergrößerst Dein Array auf diese Weise: "SetLength(MeinArray, 10)" vergrößert Dein Array um weitere 5 Elemente auf nun insgesamt 10 Elemente. Die bisherigen Elemente bleiben erhalten, es wird einfach "angebaut". Du kannst die Größe auch verringern, dann fallen ggf. Elemente "über den Tisch".


Problem an der Sache ist: Besonders effizient sind sie nicht, die dynamischen Arrays. Immer dann, wenn Du die Größe änderst, wird das Array im Speicher komplett umkopiert. Wenn Du diese Tatsache im Hinterkopf behältst und die Größe des Arrays eben nicht permanent änderst, sondern etwa immer gleich am Stück 10 oder meinetwegen auch 100 neue Elemente reservierst, kann man mit der "Nicht-Effizienz" oftmals leben. Fall nicht könnte man beispielsweise zu Listen greifen.
Es lebe der eigene Keller.
  Mit Zitat antworten Zitat
Benutzerbild von Corpsman
Corpsman

Registriert seit: 8. Nov 2005
Ort: nähe Stuttgart
981 Beiträge
 
Delphi XE2 Professional
 
#3

Re: Was sind Dynamische Arrays??

  Alt 30. Sep 2008, 20:55
hi Doenerimperator

und herzlich willkommen hier.

als erstes vorweg, ja du hast richtig gelesen es gibt Dynamische arrays und dere Benutzung ist ganz einfach. Die genaue Erklärung kann ich dir nu nicht schreiben, weil ich gerade nicht viel zeit habe. Aber derren Nutzung sei hier mal Verraten :

Delphi-Quellcode:
type TBlub = Array of TShape; // es ist besser das als Typ zu machen weil du dadurch diesen als Parameter einer Function / Procedure übergeben kannst
(*
GANZ WICHTIG alle Dynamischen Arrays fangen bei 0 an und gehen bis n -1
*)

var Arr : TBlub; // So ist dann deine Variable anstatt statisch var Arr : Array[ 0.. 15 ] of Tshape

      n : Integer;
begin

  // Mit Setlength bekommt das Array seine Größe, erst danach darfst du auf die Elemente zugreifen
  n := 10;
  Setlength(arr, n );
  for n := 0 to 9 do
    arr[n] := Tshape.create(form1); // .. Ganz normal Arbeiten wie das bei statisch auch ist


  // vor programmende gebe ich den Speicher immer wieder frei mit

  setlength( arr, 0 );
Das fürs erste, evtl hat noch jemand zeit und läst noch ein paar erklärende Worte dazu raus.
Arbeiten soltlest du damit schon können.

corpsman
Uwe
My Sitewww.Corpsman.de

My marble madness clone Balanced ( ca. 70,0 mb ) aktuell ver 2.01
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#4

Re: Was sind Dynamische Arrays??

  Alt 30. Sep 2008, 20:57
Ein Tutorial wird dazu nicht nötig sein, weil die sache eigentlich verdammt einfach ist.
Delphi-Quellcode:
type
  TMyArray = array of integer;

implementation

procedute DoSth;
var
  myarray: TMyArray;
  i: integer;
begin
  setlength(MyArray, 3); // Länge des Arrays auf 3 setzen
  for i := 0 to high(MyArray) do // high(MyArray) gibt den höchsten Index des Arrays zurück, hier 2.
                                 // Alternative: length(MyArray) - gibt die Länge zurück, in diesem fall 3
    MyArray[i] := i+1; // Zugriff auf Elemente ist wie gehabt

  // am Ende der procedure wird der Speicher des dynamischen Arrays automatisch wieder freigegeben
end;
Auch mehrdimensionale Arrays sind möglich:
Delphi-Quellcode:
type
  TMyArray2D = array of array of integer;

implementation

procedute DoSth2D;
var
  myarray: TMyArray2D;
  i,j: integer;
begin
  setlength(MyArray, 3, 4); // Länge des Arrays auf 3*4 setzen
  for i := 0 to high(MyArray) do
    for j := 0 to high(MyArray[i]) do
      MyArray[i,j] := ...;
end;
falls du mal mehrdimensionale arrays bracuhst, die nciht rechteckig sind, kannst du die Löngen für die Sub-Elemente auch einzeln setzen:
Delphi-Quellcode:
procedute DoSth2D;
var
  myarray: TMyArray2D;
  i,j,r: integer;
begin
  setlength(MyArray, 3); // Breite 3
  for i := 0 to high(MyArray) do
  begin
    r := random(5);
    setlength(myarray,r); // zufällige höhe
  end;
end;
  Mit Zitat antworten Zitat
Doenerimperator

Registriert seit: 28. Sep 2008
8 Beiträge
 
#5

Re: Was sind Dynamische Arrays??

  Alt 30. Sep 2008, 21:02
Ok, danke für eure schnellen Antworten!
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#6

Re: Was sind Dynamische Arrays??

  Alt 30. Sep 2008, 21:05
Was ich eben noch schreiben wollte, aber vergessen habe: Je nach dem, was du machen willst, solltest du dir auch mal Listen anschauen. (Stichwort Delphi-Referenz durchsuchenTList. Es gibt bereits einige abgelietete Klassen für verschiedene datentypen, z.b. TStringlist, und eine TIntegerlist gibt es afair auch)
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Was sind Dynamische Arrays??

  Alt 30. Sep 2008, 21:11
Ich hoffe mal, dass das mit Delphi 2009 auch ein Ende hat.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Gerome

Registriert seit: 4. Sep 2002
Ort: Server-Raum im Keller
316 Beiträge
 
#8

Re: Was sind Dynamische Arrays??

  Alt 30. Sep 2008, 21:13
Zitat von Apollonius:
Ich hoffe mal, dass das mit Delphi 2009 auch ein Ende hat.

Nein, auch mit Delphi 2009 funktionieren die dynamischen Arrays. Nur lassen sie sich jetzt noch typisieren. Aber das wollte ich jemandem, der in diesem Moment sein "erstes Mal" mit diesen Arrays hat, nicht zumuten.
Es lebe der eigene Keller.
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#9

Re: Was sind Dynamische Arrays??

  Alt 30. Sep 2008, 21:17
Zitat von Gérome:
Nein, auch mit Delphi 2009 funktionieren die dynamischen Arrays. Nur lassen sie sich jetzt noch typisieren. Aber das wollte ich jemandem, der in diesem Moment sein "erstes Mal" mit diesen Arrays hat, nicht zumuten.
Ich denke er meinte die Stringliste und die Integerliste.
  Mit Zitat antworten Zitat
brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#10

Re: Was sind Dynamische Arrays??

  Alt 1. Okt 2008, 12:36
@Doenerimperator:
Muss ja kein schlechter Inforamtik-Unterricht sein. Ich z.B. konnte zu meiner Zeit auch keine dynamischen Array verwenden, denn unter Delphi3 gabs die noch nicht.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:56 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