Delphi-PRAXiS

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

Vukloc 1. Nov 2011 12:39

Delphi-Version: 7

Array initialisieren
 
Habe hier etwas rumgebastelt, um mal mit den Array anzufangen.

Ist nichts großes, es geht hier nur darum zufällige Zahlen zu generieren und diese mit Hilfe eines Array als Bildpunkt darzustellen, damit man dann später die Verteilung der Zufallszahlen als Balkendiagramm erkennen kann.

Das ganze sieht so aus:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
 var
  Durchgaenge,n,Zufallswert,x: Integer; //Variablen deklarieren
  AZufall: Array [1..600] of Integer; //Array mit 600 Feldern

 begin
  Durchgaenge:=StrToInt(Edit2.Text); //Anzahl der Durchgänge
  x:=PaintBox1.ClientHeight; //Höhe der PaintBox in x schreiben
  PaintBox1.Refresh; //Refreshen der PaintBox

 For n := 1 to 600 do //Schleife Array initialisieren
  Begin //Start Array initialisieren
   AZufall[n]:=0; //Array-Wert auf 0 setzen
  end;//Ende Array initialisieren

 Randomize; //Zufallsgenerator starten

 For n := 1 to durchgaenge do //Schleife für Ausgabe der Werte
  Begin //Start Ausgabe
   Zufallswert:=Random(600)+1; //Zufallswert 1-600 generieren
   inc (AZufall[Zufallswert]); //Array hochzählen
   PaintBox1.Canvas.Pixels[Zufallswert,x-AZufall[Zufallswert]]:=ClBlack; //Einzeichnen des Punktes
  end; //Ende Ausgabe

end;
Finde jetzt nur den Schritt zum initialisieren des Array (also alle Werte auf 0 setzen) etwas umständlich, da gibt es doch bestimmt eine bessere und elegantere Lösung. Für Hinweise und Hilfen wäre ich dankbar.

DeddyH 1. Nov 2011 12:46

AW: Array initialisieren
 
Versuch mal:
Delphi-Quellcode:
ZeroMemory(@aZufall, SizeOf(AZufall));

himitsu 1. Nov 2011 12:46

AW: Array initialisieren
 
Delphi-Quellcode:
FillChar(MyArray[0], Length(MyArray) * SizeOf(MyArray[0]), 0); // für satische und dynamische Arrays (geht also immer)

FillChar(MyArray[0], SizeOf(MyArray), 0); // für statische Arrays

FillChar(MyArray, SizeOf(MyArray), 0); // für statische Arrays (da hier ja der erste Wert und das Array selber am gleichen Platz beginnen)
:!: Aber nur für Arrays in welchen keine Strings, Interfaces und andere dynamischen Arrays enthalten sind.

[add]
Delphi-Quellcode:
ZeroMemory(@x, SizeOf(AZufall));
entspricht
Delphi-Quellcode:
FillChar(x, SizeOf(AZufall), 0);
Was einem halt lieber ist.


PS: Wenn du sofort danach eh das Array (neu) befüllst (also nochmal initialisierst), kannst'e dir das Initialisieren sparen.

PSS: Randomize nur einmal (bei Programmstart) aufrufen :!:

Vukloc 1. Nov 2011 12:53

AW: Array initialisieren
 
Na da sag ich doch mal ganz lieb dankeschön


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:44 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