- •1.Интегрированная среда разработки Delphi
- •2.Структура программы и типы в языке Delphi
- •3.Линейные структуры
- •4.Структуры с ветвлениями
- •5.Циклы с неизвестным числом повторений
- •6.Циклы с заданным числом повторений
- •Задание к работе
- •7.Массивы
- •8.Файлы
- •9.Подпрограммы
- •10.Динамическая память Подготовка к работе
- •Контрольные вопросы
- •Задание к работе
- •Задание 1
- •Задание 2
- •11.Исключения
10.Динамическая память Подготовка к работе
По рекомендуемой литературе изучить:
назначение динамической памяти,
назначение и свойства указателей,
операции с динамическими структурами,
фрагментацию данных в динамической памяти.
Составить программы решения задач.
Контрольные вопросы
Что такое динамическая память?
Назначение и свойства указателей.
Типизированные указатели.
Указатель Pointer.
Процедура выделения New(p) динамической памяти для типизированных структур.
Процедура освобождения Dispose(p) динамической памяти для типизированных структур.
Процедура выделения GetMem(p,size) динамической памяти для структур произвольного размера.
Процедура освобождения FreeMem(p,size) динамической памяти для структур произвольного размера.
Задание к работе
Программа демонстрации работы с типизированными динамическими структурами. Создать динамические структуры ds1 и ds2, выполнить над ними операцию op, после чего освободить память для указанных структур в порядке, обратном выделению. Проект – консольное приложение.
Программа скоростного копирования файла произвольного размера (файл prg_8_1.exe) из папки 08_01 в папку 10_02 с использованием ДП и процедур GetMem и FreeMem.
Варианты заданий представлены в табл. 10 .9.
табл. 10.9. Варианты заданий
№ |
ds1 |
ds2 |
op |
1 |
Word |
Real |
сложение |
2 |
Real |
Integer |
умножение |
3 |
Integer |
byte |
вычитание |
4 |
byte |
Word |
деление |
5 |
Word |
Real |
сложение |
6 |
Real |
Integer |
умножение |
7 |
Integer |
byte |
вычитание |
8 |
byte |
Word |
деление |
9 |
Real |
Real |
сложение |
10 |
Integer |
Integer |
умножение |
11 |
byte |
byte |
вычитание |
12 |
Word |
Word |
деление |
13 |
Real |
Real |
сложение |
14 |
Integer |
Integer |
умножение |
15 |
byte |
byte |
вычитание |
Пример выполнения
Задание 1
Создать динамические структуры типов byte и word, выполнить над ними операцию сложения, после чего освободить память для указанных структур в порядке, обратном выделению. Проект – консольное приложение. Окно работающего приложения задания 1 показано на рис. 10 .23.
Листинг программы:
program Prg_10_1;
{$APPTYPE CONSOLE}
uses
SysUtils,RusTrans;
var
p1:^Byte=Nil; //Указатели с инициализацией
p2:^Word=Nil;
Result:real;
begin
writeln(Rus('Объект p1'));
new(p1); // Выделить ДП под p1
writeln(Rus(' Размер p1='),SizeOf(p1));
writeln(Rus(' Размер p1^='),SizeOf(p1^));
writeln(Rus('Объект p2'));
new(p2); // Выделить ДП под p2
writeln(Rus(' Размер p2='),SizeOf(p2));
writeln(Rus(' Размер p2^='),SizeOf(p2^));
writeln;
writeln(Rus('Введите операнды'));
write(' a=');
readln(p1^); //Присвоить значение р1
write(' b=');
readln(p2^); //Присвоить значение р2
Result:=p1^+p2^; //Операция с р1 и р2}
writeln('p1^=',p1^);
writeln('p2^=',p2^);
writeln(Rus('Результат операции = '),Result:5:2);
readln;
Dispose(p2); //Освободить ДП под р2
p2:=Nil;
Dispose(p1); //Освободить ДП под р1
p1:=Nil;
writeln;
write('p1=');
if p1=Nil then writeln('Nil'); // Указатель p2 пуст
write('p2=');
if p2=Nil then writeln('Nil'); // Указатель p2 пуст
readln;
end.
рис. 10.23. Окно работающего приложения задания 1