Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
delphi / песни о паскале.pdf
Скачиваний:
62
Добавлен:
26.03.2016
Размер:
5.16 Mб
Скачать

Глава 52

Динамические переменные

нельзя даже освободить! Так объем свободной памяти в куче уменьшается, что и породило выражение «утечка памяти».

К счастью, после завершения программы операционная система сама освободит всю занятую программой память, включая потерянные участки. Не тревожьтесь — память вашего компьютера не пострадает!

В последующих главах мы построим несколько «боевых» программ с применением динамических переменных.

Итоги

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

Память для динамических переменных выделяется из кучи – области свободной памяти, которой заведует операционная система.

У динамических переменных нет имен, поэтому доступ к ним возможен только через указатели.

Для выделения памяти вызывают процедуру New, она помещает в указатель адрес созданной переменной.

Когда надобность в динамической переменной отпадает, занятую ею память освобождают процедурой Dispose.

Обращение с динамическими переменными требует аккуратности; остерегайтесь таких ошибок, как висячие ссылки и утечка памяти.

Аслабо?

А) Сравните размеры переменных и указателей на них, воспользуйтесь для этого следующей программкой. Напишите нечто подобное для переменных других типов.

type

pb = ^byte;

pw = ^word;

pe = ^extended;

var

b : byte;

w : word;

e : extended;

begin

 

 

 

Writeln(SizeOf(b):5, SizeOf(pb):5);

Writeln(SizeOf(w):5, SizeOf(pw):5);

Writeln(SizeOf(e):5, SizeOf(pe):5);

Readln;

end.

411

Глава 52

Динамические переменные

Б) Найдите ошибки в следующей программе и объясните их.

var p1, p2 : ^integer; begin

p1 := 10; p2^:= 20; New(p1); p2:= p1;

p1^:= 'Привет!'; Dispose(p1); Dispose(p2);

end.

Задачи на темы предыдущих глав

В) Ник обожал музыку. Но компьютерный музыкальный проигрыватель раздражал программиста, поскольку при случайном выборе мелодий повторял одни песни, напрочь забывая о других. Предположим, в списке 10 песен, но звучали только три из них: 3, 6, 5, 6, 3, 6, 5 и т.д.

Ник создал «справедливый» проигрыватель, выбирающий мелодии иначе. Все песни состояли в одном из двух списков: «белом» или «черном». Изначально все они были в «белом» списке, и очередная мелодия выбиралась из него случайно, а после проигрывания ставилась в конец «черного». Если в этот момент в «черном» списке состояла половина мелодий, то первая мелодия из «черного» списка возвращалась в «белый». Затем снова случайно выбиралась мелодия из «белого» списка. Так гарантировалось отсутствие повторов ранее проигранных песен в течение достаточно длительного времени. Создайте программу, генерирующую случайные числа (мелодии) в диапазоне от 1 до N представленным выше методом. Значение N не превышает 255.

Г) Распечатывая числовое множество, мы выводили все его элементы по одному, не заботясь об экономии бумаги или места на экране. Напишите экономную процедуру печати множества, учитывающую подряд идущие диапазоны чисел. Вот примеры желаемой распечатки:

1,5..255

0..200,210..255

0..255

2,5,7,10..20,30..40

412

Соседние файлы в папке delphi