home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / extra18 / pastrick / ptrarray / ptrarray.pas < prev   
Encoding:
Pascal/Delphi Source File  |  1991-12-18  |  2.0 KB  |  80 lines

  1. (* ------------------------------------------------- *)
  2. (*                    PTRARRAY.PAS                   *)
  3. (*        (C) 1991 Timo Becker & DMV-Verlag          *)
  4. (* Sprache:  Turbo Pascal                            *)
  5. (* Funktion: Demonstration für dynamischen Arrays    *)
  6. (* ------------------------------------------------- *)
  7. PROGRAM PtrArray;
  8.  
  9. USES Crt;
  10.  
  11. CONST 
  12.   MaxDataSize = 65535;
  13.  
  14. TYPE  
  15.   BaseType = LONGINT;
  16.  
  17. CONST
  18.   BaseSize = SizeOf(BaseType);
  19.   MaxElmnt = MaxDataSize DIV BaseSize;
  20.  
  21. TYPE
  22.   Elemente = 1..MaxElmnt;
  23.   MaxArray = ARRAY[Elemente] OF BaseType;
  24.   MaxArPtr = ^MaxArray;
  25.  
  26.   PROCEDURE Summe(Feld : MaxArPtr; Size : Elemente);
  27.   VAR
  28.     i : Elemente;
  29.   BEGIN
  30.     Feld^[Size+1] := 0;
  31.     FOR i := 1 TO Size DO
  32.       Inc(Feld^[Size + 1], Feld^[i]);
  33.   END;
  34.  
  35. VAR 
  36.   TabelleA : ARRAY [1..5] OF BaseType;
  37.   TabelleB : MaxArPtr;
  38.   Count    : Elemente;
  39.   i        : Elemente ABSOLUTE Count;
  40.   Taste    : CHAR;
  41.  
  42. BEGIN
  43.   TextAttr := LightGray;
  44.   ClrScr;
  45.  
  46.   (* Übergabe von Arrays mit fester Größe: *)
  47.   WriteLn('Summe von 4 Ganzzahlen: ');
  48.   FOR i:=1 TO 4 DO BEGIN
  49.     Write(i,'. Eintrag: ');
  50.     ReadLn(TabelleA[i]);
  51.   END;
  52.   Summe(@TabelleA, 4);
  53.   WriteLn('Summe: ',TabelleA[5]);
  54.   WriteLn;
  55.   WriteLn('Summe von beliebig vielen Ganzzahlen: ');
  56.  
  57.   (* Laufzeitdimensionierung von Arrays: *)
  58.   REPEAT
  59.     Write('Wieviel Elemente (1..', MaxElmnt - 1,')? ');
  60.     ReadLn(Count);
  61.     GetMem(TabelleB, (Count + 1) * BaseSize);
  62.     FOR i:=1 TO Count DO BEGIN
  63.       Write(i:5, '. Eintrag: ');
  64.       ReadLn(TabelleB^[i]);
  65.     END;
  66.     Summe(TabelleB, Count);
  67.     WriteLn('Summe: ', TabelleB^[Count + 1]);
  68.     FreeMem(TabelleB, Count * BaseSize);
  69.     WriteLn;
  70.     Write('Noch mal (J/N) ? ');
  71.     REPEAT
  72.       Taste := UpCase(ReadKey);
  73.     UNTIL (Taste = 'J') OR (Taste = 'N');
  74.     WriteLn(Taste);
  75.     WriteLn
  76.   UNTIL Taste = 'N'
  77. END.
  78. (* ------------------------------------------------- *)
  79. (*              Ende von PTRARRAY.PAS                *)
  80.