Студопедия
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

NEW(I4);

I4^:=4; (*1*)

DISРОSЕ (I2); {освобождается второе размещение}

NEW (I); {память нужного размера (в данном случае два байта) выделяется на первом свободном месте от начала кучи, достаточном для размещения данной переменной; в этом примере - это участок, который занимала переменная I2^, ее адрес остался в указателе I2 }

I^:=5; (*2*)

DISPOSE(I3); {освобождается третье размещение}

NEW(R); {память под переменную типа REAL выделяется в вершине кучи, так как размер дырки с адресом I3 (2 байта) мал для размещения переменной типа REAL, для которой необходимо 6 байт }

R^:=6; (*3*)

WRITELN (R^); { ВЫВОД: 6.0000000000E+00}

END.

 

В следующем примере используется массив указателей.

USES CRT;

VAR R: ARRAY [1..10] OF ^REAL;

I: 1..10;

BEGIN

RANDOMIZE; {инициализация генератора случайных чисел}

FOR I:=1 TO 10 DO

BEGIN

NEW(R[I]);

R[I]^:=RANDOM; {генерация случайных вещ.чисел в диапазоне 0 <= r[i]^ < 1}

WRITELN(R[I]^); {Вывод случайных чисел в экспоненциальной форме}

END;

END.

Работа с динамическими массивами

При работе с массивами практически всегда возникает задача настройки программы на фактическое количество элементов массива. В зависимости от применяемых средств решение этой задачи бывает различным.

Первый вариант -использование констант для задания размерности массива.

PROGRAM FIRST;

CONST N: INTEGER = 10; { либо N = 10; }

VAR A: ARRAY [1..N] OF REAL;

I: INTEGER;

BEGIN

FOR I:= 1 TO N DO

BEGIN

WRITELN (' Введите ', I, ' -ый элемент массива ');

READLN (A[I])

END; { И далее все циклы работы с массивом используют N}

Такой способ требует перекомпиляции программы при каждом изменении числа обрабатываемых элементов.

Второй вариант - программист планирует некоторое условно максимальное (теоретическое) количество элементов, которое и используется при объявлении массива. При выполнении программа запрашивает у пользователя фактическое количество элементов массива, которое должно быть не больше теоретического. На это значение и настраиваются все циклы работы с массивом.

PROGRAM SECOND;

VAR A: ARRAY [1..25] OF REAL;

I, NF: INTEGER;

BEGIN

WRITELN ( 'Введите фактическое число элементов массива <= 25 ');

READLN (NF);

FOR I:= 1 TO NF DO

BEGIN

WRITELN ( 'Введите ', I, ' -ый элемент массива ');

READLN (A[I])

END; { И далее все циклы работы с массивом используют NF }

Этот вариант более гибок и технологичен по сравнению с предыдущим, так как не требуется постоянная перекомпиляция программы, но очень нерационально расходуется память, ведь ее объем для массива всегда выделяется по указанному максимуму. Используется же только часть ее.

Вариант третий - в нужный момент времени надо выделить динамическую память в требуемом объеме, а после того, как она станет не нужна, освободить ее.




Дата добавления: 2014-12-18; просмотров: 81 | Поможем написать вашу работу | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2025 год. (0.007 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав