Zitat von
Karstadt:
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.