Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Аналоги динамических массивов в TP, PascalABC

3.3K
21 июня 2011 года
eugrita
24 / / 26.02.2006
полноценного открытого массива скажем type arr=array of integer;
Pascal не поддерживает. Используют аналоги:
 
Код:
type mA=array[1..1] of TRab;
   pA=^mA;
var  A: pA;

далее с к A можно применить выделение памяти GetMem
и обращаться к массиву через указатели типа A^
В Примере классов с использованием этого такое выделение памяти приводит к
сообщению о выходе за граница массива
Код:
type
  Trab=class
  suc: Trab;
  FIO: string;
  NK: kf;
  stavka: integer;
  constructor Create(Fam:string;nkaf:integer);
end;
type mA=array[1..1] of TRab;
   pA=^mA;
Type Tarr = class {динамический массив элементов Trab}
 public
   n: integer;
   A: pA;
   constructor Create;
   procedure add(val: Trab);
 end;
procedure Tarr.add(val: Trab);
 var siz:word;
  begin
   n:=n+1; siz:=n*SizeOf(mA); GetMem(A,siz);//здесь при n>1  ош выход за границы массива
   A^[n]:=val;
  end;

Как быть?
14
22 июня 2011 года
Phodopus
3.3K / / 19.06.2008
Оформите код, нечитаемо
3.3K
22 июня 2011 года
eugrita
24 / / 26.02.2006
[\code] и подобного что есть на любом другом приличном форуме.
Рад юы, да не могу
278
22 июня 2011 года
Alexander92
1.1K / / 04.08.2008
..[ /code] (прямой слэш поставьте вместо обратного).
14
24 июня 2011 года
Phodopus
3.3K / / 19.06.2008
Итак, стало куда лучше (хотя можно еще ну.. ладно) :)
Значится:
1. Не понятно начальное значение n
2. При динамическом выделении индексацию массива стоит бы делать с 0
3. Сделайте тип так: type mA=array[0..65535] of TRab; (можно альтернативно отключить range checks но насчет TP не уверен уже)
4. Метод add, если задуман как понимаю его я, и в этом случае будет некорректно составлять массив - после каждого вызова
10
24 июня 2011 года
Freeman
3.2K / / 06.03.2004
eugrita, в Turbo Pascal есть модуль Objects (уже от Turbo Vision) -- это почти аналог (а точнее, предшественник) Classes из Delphi. В нём есть полноценный класс коллекции -- TCollection. Но не тот TCollection, что в Delphi, а скорее, аналог TList из Delphi.

Как и любой вектор, его можно использовать как динамический массив, что и делается в самом Turbo Vision.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог