home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------- *)
- (* PTRARRAY.PAS *)
- (* (C) 1991 Timo Becker & DMV-Verlag *)
- (* Sprache: Turbo Pascal *)
- (* Funktion: Demonstration für dynamischen Arrays *)
- (* ------------------------------------------------- *)
- PROGRAM PtrArray;
-
- USES Crt;
-
- CONST
- MaxDataSize = 65535;
-
- TYPE
- BaseType = LONGINT;
-
- CONST
- BaseSize = SizeOf(BaseType);
- MaxElmnt = MaxDataSize DIV BaseSize;
-
- TYPE
- Elemente = 1..MaxElmnt;
- MaxArray = ARRAY[Elemente] OF BaseType;
- MaxArPtr = ^MaxArray;
-
- PROCEDURE Summe(Feld : MaxArPtr; Size : Elemente);
- VAR
- i : Elemente;
- BEGIN
- Feld^[Size+1] := 0;
- FOR i := 1 TO Size DO
- Inc(Feld^[Size + 1], Feld^[i]);
- END;
-
- VAR
- TabelleA : ARRAY [1..5] OF BaseType;
- TabelleB : MaxArPtr;
- Count : Elemente;
- i : Elemente ABSOLUTE Count;
- Taste : CHAR;
-
- BEGIN
- TextAttr := LightGray;
- ClrScr;
-
- (* Übergabe von Arrays mit fester Größe: *)
- WriteLn('Summe von 4 Ganzzahlen: ');
- FOR i:=1 TO 4 DO BEGIN
- Write(i,'. Eintrag: ');
- ReadLn(TabelleA[i]);
- END;
- Summe(@TabelleA, 4);
- WriteLn('Summe: ',TabelleA[5]);
- WriteLn;
- WriteLn('Summe von beliebig vielen Ganzzahlen: ');
-
- (* Laufzeitdimensionierung von Arrays: *)
- REPEAT
- Write('Wieviel Elemente (1..', MaxElmnt - 1,')? ');
- ReadLn(Count);
- GetMem(TabelleB, (Count + 1) * BaseSize);
- FOR i:=1 TO Count DO BEGIN
- Write(i:5, '. Eintrag: ');
- ReadLn(TabelleB^[i]);
- END;
- Summe(TabelleB, Count);
- WriteLn('Summe: ', TabelleB^[Count + 1]);
- FreeMem(TabelleB, Count * BaseSize);
- WriteLn;
- Write('Noch mal (J/N) ? ');
- REPEAT
- Taste := UpCase(ReadKey);
- UNTIL (Taste = 'J') OR (Taste = 'N');
- WriteLn(Taste);
- WriteLn
- UNTIL Taste = 'N'
- END.
- (* ------------------------------------------------- *)
- (* Ende von PTRARRAY.PAS *)
-