- •Вопрос 29. Ссылочный тип данных. Указатели.
- •Вопрос 30. Динамическая память.
- •Вопрос 31. Очередь.
- •Вопрос 39 Способы обхода дерева
- •Вопрос 3 Жизненный цикл программного продукта
- •Вопрос 32 Стек
- •Вопрос 37 Деревья
- •Вопрос 38 Идеально-сбалансированное дерево
- •Вопрос 40 Дерево поиска
- •Вопрос 45 Конструкторы Деструкторы
- •Вопрос 1 Основные этапы решения задач на эвм.
- •Вопрос 2 Критерии качества программы.
- •Вопрос 10 Тождественность и совместимость типов данных языка Object
- •Вопрос 12 Ввод-вывод информации средствами Delphi
- •Вопрос 34 Линейные динамические структуры данных. Двунаправленые списки.
- •Вопрос 13 Простые операторы языка Object Pascal
- •Вопрос 35 Линейные динамические структуры данных. Кольцевые списки.
- •Вопрос 36 Мультисписки
- •Вопрос 17 Массивы
- •Вопрос 18 Множества
- •Вопрос 11 Выражения и операции в языке Object Pascal.
- •Вопрос 16 Строковый тип данных
- •Вопрос 19 Тип данных запись
- •Вопрос 20 Записи с вариантами
- •Вопрос 43 Классы
Вопрос 29. Ссылочный тип данных. Указатели.
Указатели-переменные, кот. содержат адреса др. переменных. Указатель-тип дан-х, кот. сод. адреса области динамической памяти. Пример: переменная p содержит адрес пер-й x=34, пер-я g сод-т адрес пер-й y=0.54. p 34 (над 34 стоит x),(c g аналогично). Типизированные указатели: Содержат адреса, по кот. в памяти распр- еделяются данные определ-х типов(Var имя указ-ля: ^ базовый тип; var p: ^byte; var g:^real;). Нетипизированные указатели: Содержат адреса, не связанные с конкретными типами данных(Var имя указ-ля: pointer; var p,g:pointer;). (В указателях используется любой базовый тип кроме файлового). Пример: Type M= ^ mas;(тип- указ-ль M на тип mas) mas=arrey[1..10]of real;(описание типа mas)var q:M; (переменная- указ-ль на массив). При описание указатели могут ссылаться на еще необъявленный тип данных (исключение). Используя типизированные указатели с данными, размещенными по этим адресам, можно выполнять все операции, предусмотрееные базовым типом.
Var p1:^char; p2:^zap; Type zap=record b1:byte; b2:real; end;
Если указ-ль не содержит указ-ля, то его объявляют NIL (для типиз. и нетипиз).
Операции над указателями: Писваивание, Отношение(проверка на равенства и неравенства), Получение адреса переменной, Операция разыменования.
Вопрос 30. Динамическая память.
Динамич. обл. памяти расположена за обл. памяти, кот. занимает прога.
HeapOrg-указатель на начало области, HeapEnd-на конец, HeapPtr-на текущее значение границы свободной обл.. Процедуры и функции для типизированных указателей: Процедура New (имя типиз. указ.) выделяет требуемый по размеру участок памяти и заносит его адрес в переменную-указатель; Функция New(имя типиз. указ.):pointer выделяет память и заносит…; Dispose(имя типиз. указ.) освобождает занимаемую указ-м память. Пример: Type TP=^real; var p1^:integer; p2:TP; Для выделения памяти: New(p1); или p2:=New(TP). Для нетипизированных указателей: GetMem(var P:pointer;size:word)-создает в динамич. памяти новую динамич. переменную с заданным размером Size и присваивает ей адрес указателя P . Переменная P указатель может указывать на данные любого типа; FreeMem(var P:pointer;size;word)- освобождает обл. памяти, выделенную процедурой GetMem.
Процедуры и функции для работы с динамической памятью: Size of(x):word- вызывает размер в байтах объекта x; MaxaVall:longlnt-вызывает размер в байтах максимального непрерывного свободного участка области памяти; MemaVall: longlnt-вызывает размер в байтах всей свободной части области памяти-сумму длин всех свободных участков. Примеры:
Type zap=record Type Tz=record Type zap1=record
x:byte; y:char; x:^boolean; y:byte; a:pointer; b:byte; c:char; d:^zap2; end;
z:^byte; end; z:^real; and; zap2=record
var p1:^zap; var p:^Tz; x:byte; y:real; z:pointer; end;
Var q:^ zap1;
Вопрос 31. Очередь.
Л инейная динамич. структура данных, для кот. разрешено добавление элемента в конец очереди, а удаление из начала очереди. Для организации очереди необходимо иметь указатель на начало, конец и на текущий элемент очереди
Создание очереди из целых чисел: TypeToch=^TElement;
TElement=record inf:byte; link:Toch; end;
С оздание первого элемента
Исходное состояние
BegP:=nil; EndP:=nil; p^.inf:=7; p^.link:=nil;
Установка указателей
BegP:=P;
EndP:=P;
Д обавление нового элемента
New(P);
p^.inf:=3; p^.link:=nil;
У становка указателей
EndP^.link:=P;
EndP:=P;
Д обавление нового элемента и переустановка указателей
New(P); P^.inf:=5; P^.link:=nil;
EndP^.link:=P; EndP:=P;
Удаление элемента из очереди
BegP:=BegP.link;
Dispose(P);