Роман М. писал(а):
Насколько я понимаю, готовых структур данных наподобие этого нет. Или же есть?
Особенность в том, что массив можеть менять размер?
Тогда такой готовой структуры данных в КП нет.
Но можно реализовать самостоятельно. Примерно так:
Код:
CONST
  size0 = 16;
TYPE
  ArrayList* = POINTER TO RECORD
    size-: INTEGER;
    p-: POINTER TO ARRAY OF Item
  END;
PROCEDURE NewArrayList* () : ArrayList ;
  VAR alist: ArrayList;
BEGIN
  NEW(alist); NEW(alist.p, size0); alist.size := 0;
  RETURN alist
END NewArrayList;
PROCEDURE (a: ArrayList) Add* (x: Item) , NEW ;
  VAR p: POINTER TO ARRAY OF Item;
    i: INTEGER;
BEGIN
  IF a.size = LEN(a.p^) THEN
    NEW(p, 2*a.size);
    FOR i := 0 TO a.size-1 DO p[i] := a.p[i] END;
    a.p := p
  END;
  a.p[a.size] := x; INC(a.size)
END Add;
Правда, доступ к массиву надо будет либо осуществлять через процедуры, либо открыть доступ к массиву (как в этом примере: если меняется значение уже существующего элемента, можно написать a.p[i] := x).