Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Примеры и задачи.
Рассмотрим пример: Рассмотрим пример размещения и освобождения разнотипных динамических переменных в куче. 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}
Такой способ требует перекомпиляции программы при каждом изменении числа обрабатываемых элементов. Второй вариант - программист планирует некоторое условно максимальное (теоретическое) количество элементов, которое и используется при объявлении массива. При выполнении программа запрашивает у пользователя фактическое количество элементов массива, которое должно быть не более теоретического. На это значение и настраиваются все циклы работы с массивом.
|