Andrey_aka_Master
Junior Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору на уроках информатики нам говорили, что динамический массив в pascal можно легко создать используюя ооп, вот нашет примерчик в одном факе: Код: .... type TArray = array [0..127] of double; PArray = ^TArray; TDynArray = object p: PArray; count: integer; constructor Create(ACount: integer); { инициализация } procedure SetCount(ACount: integer); { установка количества элементов } procedure Reset; { обнуление данных } destructor Destroy; { уничтожение } end; constructor TDynArray.Create(aCount: integer); begin p := nil; count := 0; SetCount(ACount); end; procedure TDynArray.SetCount(ACount: integer); var np: PArray; begin if count = ACount then Exit; { память не была выделена } if p = nil then begin { новое количество элементов в массиве равно 0 } if ACount <= 0 then begin count := 0; end { новое количество элементов в массиве больше 0 } else begin { выделение памяти } GetMem(p, ACount * sizeof(double)); { обнуление данных } fillchar(p^, ACount * sizeof(double), 0); count := ACount; end; end else begin { новое количество элементов в массиве равно 0 } if ACount <= 0 then begin { освобождение памяти } FreeMem(p, count * sizeof(double)); count := 0; end else begin { выделение памяти } GetMem(np, ACount * sizeof(double)); { требуется увеличить количество элементов } if ACount > count then begin { перемещение старых данных на новое место } move(p^, np^, count * sizeof(double)); { обнуление новых элементов массива } fillchar(np^[count], (ACount - count) * sizeof(double), 0); end else begin { перемещение части старых данных на новое место } move(p^, np^, ACount * sizeof(double)); end; { освобождение старой памяти } FreeMem(p, count * sizeof(double)); p := np; count := ACount; end; end; end; procedure TDynArray.Reset; begin { обнуление данных } fillchar(p^, count * sizeof(double), 0); end; destructor TDynArray.Destroy; begin SetCount(0); end; | Вообще пример для delphi, но для pascal, имхо тоже подойдет. |