Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Mehrmeninsionales Array mit Extenden und Boolean werten (https://www.delphipraxis.net/75664-mehrmeninsionales-array-mit-extenden-und-boolean-werten.html)

Karstadt 23. Aug 2006 09:01


Mehrmeninsionales Array mit Extenden und Boolean werten
 
Hallo. Ich muss 16 Spaltiges Array füttern. 8 Spalten sind für Zahlen reserviert und weitere 8 spalten von Typ Boolean für Überprüfung ob der Wert in der in der X (1-8) Spalte belegt ist.

Spalte 1 = 2000,99 Wert ist nicht belegt
Spalte 1 = 2001,99 WErt ist nicht belegt.


und so muss ich mit 8 weiteren Zahlenspalten arbeiten. Wie kan ich so ein Aray reservieren und wie schreibe ich die werte in die jewalige Spalte rein. Dankeschön

WoTo 23. Aug 2006 09:21

Re: Mehrmeninsionales Array mit Extenden und Boolean werten
 
Hallo,

vielleicht so in etwa:

Delphi-Quellcode:
type
  rWert = record
            Wert : integer;
            Belegt : boolean;
          end;

var
  arWert : Array (0..7) of rWert;

begin
  arWert[1].Wert := 1;
  arWert[1].Belegt := true;
usw.
end.
Ist nicht getestet, nur einfach heruntergeschrieben. Sollte nur eine Idee aufzeigen.

Gruß,
Woto

Amateurprofi 23. Aug 2006 12:56

Re: Mehrmeninsionales Array mit Extenden und Boolean werten
 
Ich hielte es für eleganter die boolean-Werte wegzulassen und die extended-werte, die nicht belegt sind, mit NaN zu füllen.
NaN ist in der Unit Math definiert
Die Prüfung, ob ein Wert eine NaN ist, kann mit der Funktion IsNaN vorgenommen werden, die ebenfalls in Math steht.

Karstadt 24. Aug 2006 10:50

Re: Mehrmeninsionales Array mit Extenden und Boolean werten
 
Zitat:

Zitat von Amateurprofi
Ich hielte es für eleganter die boolean-Werte wegzulassen und die extended-werte, die nicht belegt sind, mit NaN zu füllen.
NaN ist in der Unit Math definiert
Die Prüfung, ob ein Wert eine NaN ist, kann mit der Funktion IsNaN vorgenommen werden, die ebenfalls in Math steht.

was ist daran besser?


Delphi-Quellcode:
type
  rWert = record
            Wert : integer;
            Belegt : boolean;
          end;

var
  arWert : Array (0..7) of rWert;

begin
  arWert[1].Wert := 1;
  arWert[1].Belegt := true;
end.
verstehe ich das falsch, oder kann ich nur ein Datensatz pro Array(0..7) anlegen?

wenn ich den Wert 2,3,4,5, belegen will, wie würde ich dann vorgehen?

H4ndy 24. Aug 2006 11:48

Re: Mehrmeninsionales Array mit Extenden und Boolean werten
 
Zitat:

Zitat von Karstadt
verstehe ich das falsch, oder kann ich nur ein Datensatz pro Array(0..7) anlegen?
wenn ich den Wert 2,3,4,5, belegen will, wie würde ich dann vorgehen?

Ganz einfach: Indem du auf die anderen Elemente zugreifst ;)
Delphi-Quellcode:
arWert[0].Wert := 1;
arWert[0].Belegt := true;

arWert[1].Wert := 12323;
arWert[1].Belegt := true;

arWert[2].Wert := 34564356;
arWert[2].Belegt := true;
...
Es wurde ein Array (0..7) angelegt, d.h. es beinhaltet 8 Elemente mit dem
Index 0 bis Index 7. Wenn dir oft of-by-one-Fehler passieren, kannst du dir
auch ein Array (1..8) deklarieren, was auch 8 Elemente hat, aber bei dem Index 1 beginnt.

Amateurprofi 24. Aug 2006 12:03

Re: Mehrmeninsionales Array mit Extenden und Boolean werten
 
Zitat:

Zitat von Karstadt
Zitat:

Zitat von Amateurprofi
Ich hielte es für eleganter die boolean-Werte wegzulassen und die extended-werte, die nicht belegt sind, mit NaN zu füllen.
NaN ist in der Unit Math definiert
Die Prüfung, ob ein Wert eine NaN ist, kann mit der Funktion IsNaN vorgenommen werden, die ebenfalls in Math steht.

was ist daran besser?


Delphi-Quellcode:
type
  rWert = record
            Wert : integer;
            Belegt : boolean;
          end;

var
  arWert : Array (0..7) of rWert;

begin
  arWert[1].Wert := 1;
  arWert[1].Belegt := true;
end.
verstehe ich das falsch, oder kann ich nur ein Datensatz pro Array(0..7) anlegen?

wenn ich den Wert 2,3,4,5, belegen will, wie würde ich dann vorgehen?

Besser ist (meiner Meinung nach), daß Du keinen zusätzlichen Boolean-Wert brauchst.

also so:

Delphi-Quellcode:
var arwert:Array[0..7] of extended; // oder double / single

begin
   // wenn wert belegt wird
   arWert[1] := 2001.99;
 
   // wenn wert nicht belegt ist
  arWert[1] :=NaN;
end;
Die spätere Auswertung geht dann so
Delphi-Quellcode:
   if not IsNaN(arWert[1]) then // ist belegt
      else // ist nicht belegt
Angenommen du hättest ein Array of Pointer oder ein Array of Strings, dann würdest Du leere Strings oder ungültige Pointer auch nicht durch einen zusätzlichen Boolean markieren sondern bei Strings auf '' prüfen bzw auf Nil bei Pointern.

Karstadt 24. Aug 2006 14:25

Re: Mehrmeninsionales Array mit Extenden und Boolean werten
 
Kann ich diese Wer 0..7 zur laufzeit setzen?

Array (0..7) of rWert;

Thanatos81 24. Aug 2006 15:15

Re: Mehrmeninsionales Array mit Extenden und Boolean werten
 
Ja, mit dynamischen Arrays. Da müsste die Deklaration zB:
Delphi-Quellcode:
var
  myArray : array of Extended;
lauten.
Um die Länge festzulegen:
Delphi-Quellcode:
SetLength(myArray, 4)
Die aktuelle Länge kannst du so abfragen:
Delphi-Quellcode:
length(myArray)
Den Index des letzten Wertes bekommst du so:
Delphi-Quellcode:
high(myArray)
Index des ersten Wertes:
Delphi-Quellcode:
low(myArray)
Ansonsten schau mal in die OH unter dynamische Arrays, da steht auch einiges ;-)


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