
- •Билет 2 Лексическая структура языка Pascal.
- •Билет 3 Структура Pascal-программы. Составной оператор. Константы. Переменные.
- •Билет 4. Концепция переменной языка паскаль.
- •Билет 5 Концепция типа данных языка Pascal.
- •Билет 6 Простые типы.
- •Билет 7 Стандартные типы языка Pascal.
- •Билет 8 Тип Boolean
- •Билет 9 Перечисляемый тип.
- •Билет 10. Ограниченные типы (диапазоны).
- •Билет 11 Условный оператор
- •Билет 12 Оператор варианта
- •Билет 13 Оператор цикла с постусловием
- •Билет 14 Оператор цикла с предусловием
- •Билет 15 Оператор цикла с параметром
- •Билет 16 Составные типы
- •Билет 17 Массивы, примеры использования
- •Билет 18 Записи, примеры использования
- •Билет 19 Оператор сцепления
- •Билет 20 Записи с вариантами
- •Билет 21 Множества (определение, примеры, операции).
- •Билет 22 Представления множеств, примеры использования.
- •Билет 22. Представления множеств.
- •Билет 23 Файловые типы
- •Билет 24 Операции с файлами
- •Билет 25 Текстовые файлы
- •Билет 26 Типизированные файла
- •Билет 27 Нетипизированные файлы
- •Билет 28 Процедуры и функции
- •Билет 29 Описание процедур и функций
- •Билет 30 Локальные и глобальные переменные
- •Билет 31 Параметры процедур и функций
- •Билет 32 открытые параметры.
- •Билет 33. Нетипизированные параметры.
- •Билет 34. Необходимость и преимущества модульного программирования. Структура модуля в языке Pascal.
- •Билет 35. Процедурный тип. Передача процедур и функций в качестве параметра.
- •Билет 36. Рекурсия.
- •Билет 37. Рекурсия и итерация.
- •Билет 38. Линейный поиск.
- •Билет 39. Поиск делением пополам.
- •Билет 40. Сортировка.
- •Билет 41. Сортировка простыми включениями.
- •Билет 42. Сортировка бинарными включениями
- •Билет 43. Сортировка простым выбором.
- •Билет 44. Сортировка простым обменом(пузырек).
- •Билет 45. Шейкер-сортировка.
- •Билет 46. Сортировка шелла.
- •Билет 47. Сортировка с разделением(быстрая сортировка).
- •Билет 48. Ссылочные типы.
- •Билет 49. Динамические структуры данных.
- •Билет 50. Создание и уничтожение динамических переменных.
- •Билет 51. Связные списки.
- •Билет 52. Связные списки. Создание очередного элемента. Просмотр списка.
- •Билет 53. Добавление компонента в середину списка.
- •Билет 54. Исключение компонент из середины списка.
- •Билет 55. Рекурсивная обработка списка.
- •Билет 56. Двусвязные кольца.
- •Билет 57. Деревья. Двоичные деревья. Двоичные деревья поиска.
- •Билет 58. Добавление узла к двоичному дереву поиска.
- •Билет 59. Поиск в двоичном дереве.
- •Билет 60. Просмотр двоичного дерева.
- •Билет 61. Удаление из дерева.
- •Билет 62. Деревья общего вида.
Билет 50. Создание и уничтожение динамических переменных.
эти действия реализуются в Pascal стандартными процедурами New, Dispose. Процедура New – параметр ее переменная ссылочного типа. Действие процедуры:
1 В кучи отводится место для хранения переменной, тип которой совпадает с базовым типом указателя параметра.
2 Переменной переданной в параметре присваивается указатель на отведенную область в памяти.
Type point=record x,y: integer; color: byte;end; var pnt:^point; begin new(pnt); pnt.^.x:=xmouse; pnt.^.y:=ymouse; p^.color:=blue
В Pascal есть возможность представить процедуру New в форме функции. В этом случае в качестве «параметра» функции задается ссылочный тип, а результатом является указатель этого типа, ссылающийся на отведенную область для значения базового типа.
Type point=record x,y: integer; color: byte;end; pntptr:^point; var pnt:pntptr; begin new(pntptr);…
Переменной pnt присваивается адрес области памяти достаточный для хранения переменной базового типа (pntptr).
Для освобождения памяти, отведенной с помощью процедуры или функции New используется процедура dispose. Параметром является указатель на динамическую переменную. Var pnt:^point; begin new(pnt); …dispose(pnt)…end.
Существует важная проблема – возможное исчерпание динамической области. Для повышения надежности программы следует проверить текущее состояние динамической памяти при каждом обращении к процедуре new. Это можно сделать при помощи стандартной функции MaxAvail (возвращает максимальный размер свободного участка динамической памяти). Для определения необходимого размера воспользуемся функцией Size of.
Пример if MaxAvail>Size of (point) then pnt:=new(pntptr);
Существуют следующие процедуры GetMem(var p:pointer;Size:word); FreeMem(var p:pointer;Size:word);
Билет 51. Связные списки.
Самый простой способ соединить, или связать, множество элементов — это расположить их линейно в связанном списке, или в оче¬реди. В этом случае каждый элемент содержит только одну ссылку, связывающую его со следующим элементом списка. Пусть тип Т - запись, поля которой состоят из трех компонент: идентифици¬рующего ключа, ссылки на следующий элемент и, возможно, другой информации.
type Т = record key: integer;
next: ^T end
Список элементов типа Т показан на рис. Ссылка head указывает на первую компоненту списка.
Динамическими объектами здесь являются записи типа Point с полями, содержащими атрибуты необходимых объектов (н-р, точек; их м.б. произвольное кол-во, их можно объединить в ломаную, перерисовать и т.д.). Первоначально список пуст, указатель head установлен в nil.
type link=^point; point=record x,y: integer; color,mask: byte; next: link end; var head,p: link; begin head:=nil; p:=new(link); p^.x:=xmouse; p^.y:=ymouse; p^.color:=curcolor; p^.mark:=curmt; p^.next:=head; head:=p;…end.
Последние два оператора годятся для вставки очередного элемента в список. Первым в списке будет элемент, вставленный последним.
Билет 52. Связные списки. Создание очередного элемента. Просмотр списка.
См. 51 вопрос +
Н-р, перерисовать маркеры другим цветом.
var cur: link;
begin cur:= head;
while cur<>nil do begin
drawmarker(cur^.x, cur^.y, cur^.color, cur^.type);
cur:=cur^.next end;
end.
Первым будет рисоваться маркер, созданный последним, т.к. связанный список соответствует структуре LIFO.