Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

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






Примеры и задачи.






Рассмотрим пример:

Рассмотрим пример размещения и освобождения разнотипных динамических переменных в куче.

Type

Tst1=string[7];

Tst2=string[3];

Var

i, i1, i2, i3, i4: ^integer;

r^: real;

s1: ^Tst1;

s2: ^Tst2;

Begin

New(i1);

i1^: =1;

New(i2);

i2^: =2;

New(i3);

i3^=3;

New(i4);

i4^: =4;

disроsе (i2); {освобождается второе размещение}

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

i^: =5;

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

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

r^: =6;

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}

 

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

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


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.007 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал