fliegermichl hat geschrieben:Kann man in Pascal ein mehrdimensionales Array mit unterschiedlich langen Reihen definieren?
Nur mit dynamischen arrays.
Ich würde eine zentrale Zugriffsfunktion definieren, etwa so:
Code: Alles auswählen
type
dachtypenty =
(dt_none,
dtpultdach, dtsatteldach, dtwalmdach, dtkrueppelwalmdach, dtzeltdach,
dtturm, dtmansarddach1, dtmansarddach2, dtwinkelbau, dt3giebelbau,
dttbau, dttonnendach, dtrechteckbau, dtlbau, dthbau, dtschleppgaube,
dtsattelgaube, dtwalmgaube,
dtkrueppelwalmgaube, dtspitzgaube, dttrapezgaube, dttonnengaube,
dtschweifgaube, dtfledermausgaube, dtkamin, dtdachfenster
);
steildachtypen = dtpultdach..dttonnendach;
flachdachtypen = dtrechteckbau..dthbau;
gaubentypen = dtschleppgaube..dtfledermausgaube;
dachgruppenty = (dg_steildach,dg_flachdach,dg_gauben);
gruppeninfoty = record
first,last: dachtypenty;
end;
const
gruppeninfo: array[dachgruppenty] of gruppeninfoty =
((first: low(steildachtypen); last: high(steildachtypen)),
(first: low(flachdachtypen); last: high(flachdachtypen)),
(first: low(gaubentypen); last: high(gaubentypen))
);
function getdachtyp(const gruppe: int32; item: int32): dachtypenty;
//zero based values
begin
result:= dt_none;
if (gruppe >= ord(low(dachgruppenty))) and
(gruppe <= ord(high(dachgruppenty))) then begin
with gruppeninfo[dachgruppenty(gruppe)] do begin
item:= item + ord(first);
if (item >= ord(first)) and (item <= ord(last)) then begin
result:= dachtypenty(item);
end;
end;
end;
end;
(ungeprüft!).