Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка_pascal.doc
Скачиваний:
13
Добавлен:
27.09.2019
Размер:
1.43 Mб
Скачать

31. Сведения об ученике состоят из его имени и фамилии и наименование класса (года обучения и буквы), в котором он учится. Дан файл f, содержащий сведения об учениках школы:

а) выяснить, имеются ли в школе однофамильцы;

б) выяснить, имеются ли однофамильцы в каких-либо параллельных классах;

в) выяснить, имеются ли однофамильцы в каком-нибудь классе;

г) ответить на вопросы а) и б), но в отношении учеников, у которых совпадают и имя, и фамилия;

д) выяснить, в каких классах насчитывается 35 учащихся;

е) выяснить, на сколько человек в восьмых классах больше, чем в десятых;

ж) собрать в файле g сведения об учениках 9-х и 10-х классов, поместив вначале сведения об учениках класса 9 а затем 9 б и т.д., затем 10 а, 10 б и т.д.;

з) получить список учеников данного класса по следующим образцам:

 фамилия, имя, наименование класса;

 имя, фамилия, наименование класса;

 наименование класса, имя, фамилия.

32. Дан файл f, содержащий те же самые сведения об учениках школы, что и в предыдущей задаче, и дополнительно отметки, полученные учениками в четверти:

а) выяснить, сколько учеников школы не имеют оценок ниже четырех;

б) собрать в файле g сведения о лучших из школы, т.е. об учениках, не имеющих оценок ниже четырех и по сумме баллов не уступающих другим в своем и параллельном классах.

33. Сведения об автомобиле состоят из его номера и фамилии владельца. Дан файл f, содержащий сведения о нескольких автомобилях. Найти:

а) фамилии владельцев и номера автомобилей марки;

б) количество автомобилей каждой марки.

34. Дан файл f, содержащий различные даты. Каждая дата – это число, месяц и год. Найти:

а) год с наименьшим номером;

б) все весенние даты;

с) самую позднюю дату.

35. Дан файл f, содержащий сведения о книгах. Сведения о каждой из книг – это фамилия автора и год издания.

а) Найти названия книг данного автора, изданных с 1960 г.

б) Определить, имеется ли книга с названием «Информатика». Если да, то сообщить фамилию автора и год издания. Если таких книг несколько, то сообщить имеющиеся сведения обо всех этих книгах.

36. Дан файл f, который содержит номера телефонов сотрудников учреждения: указывается фамилия сотрудника, его инициалы и номер телефона. Найти телефон сотрудника по его фамилии и инициалам.

37. Дан файл f, содержащий сведения о кубиках: размер каждого кубика (длина ребра в сантиметрах), его цвет (красный, желтый, зеленый или синий) и материал (деревянный, металлический, картонный). Найти:

а) количество кубиков каждого из перечисленных цветов и их суммарный объем;

б) количество деревянных кубиков с ребром 3 см и количество металлических кубиков с ребром, большим 5 см.

38. Дан файл f, содержащий сведения о веществах: указывается название вещества, его удельный вес и проводимость (проводник, полупроводник, изолятор).

а) Найти удельные веса и названия всех полупроводников.

б) Выбрать данные о проводниках и упорядочить их по убыванию удельных весов.

39. Дан файл f, содержащий сведения об экспортируемых товарах: указывается наименование товара, страна, импортирующая товар, и объем поставляемой партии в штуках. Найти страны, в которые экспортируется данный товар, и общий объем его экспорта.

40. Даны два файла f1 и f2. Файл f1 – это инвентарный файл, содержащий сведения о том, сколько изделий каких видов продукции хранится на складе (вид продукции задается его порядковым номером). Файл f2 – это вспомогательный файл, содержащий сведения о том, на сколько уменьшилось или увеличилось количество изделий по некоторым видам продукции. Вспомогательный файл может содержать несколько сообщений о продукции одного вида или не содержать ни одного такого сообщения. Обновить инвентарный файл на основе вспомогательного, образовав новый файл g.

41. Дан файл f, содержащий сведения об игрушках: указывается название игрушки (например, кукла, кубики, мяч, конструктор и т.д.), ее стоимость в копейках и возрастные границы детей, для которых игрушка предназначена (например, для детей от двух до пяти лет). Получить следующие сведения:

а) названия игрушек, цена которых не превышает 4 руб. и которые подходят детям 5 лет;

б) цену самого дорогого конструктора, оформленную по образцу: ... руб. ... коп.;

с) названия наиболее дорогих игрушек (цена которых отличается от цены самой дорогой игрушки не боле чем на 1 руб.);

д) названия игрушек, которые подходят как детям 4 лет, так и детям 10 лет;

е) цены всех кубиков, оформленные по образцу, указанному в. б);

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

з) имеется ли мяч ценой 2 руб. 50 коп., предназначенный детям от 3 до 8 лет; если нет, занести сведения о6 этой игрушке в файл f.

42. Дан текстовый файл f, содержащий программу на языке Паскаль. Проверить эту программу на несоответствие числа открывающих и закрывающих круглых скобок. Считать, что каждый оператор программы

а) занимает не более одной строки файла f;

б) может занимать произвольное число строк файла f.

43. Дан текстовый файл f. Получить все его строки содержащие более 60 символов.

44. Дан текстовый файл f. Переписать в файл g все компоненты файла f с заменой в них символа 0 на символ 1 и наоборот.

45. Дан текстовый файл f. Получить самую длинную строку файла. Если в файле имеется несколько с наибольшей длиной, то получить одну из них.

46. Дан текстовый файл f. Записать в «перевернутом» виде строки файла f в файл g. Порядок строк в файле g должен

а) совпадать с порядком исходных строк в файле f',

б) быть обратным по отношению к порядку строк исходного файла.

47. Дан текстовый файл f. Переписать компоненты файла f в файл g, вставляя в начало каждой строки по одному пробелу. Порядок компонент должен быть сохранен.

48. Даны текстовый файл, строка s. Найти все строки файла f, содержащие в качестве фрагмента строку s.

49. Дан текстовый файл f. Исключить пробелы, стоящие в концах его строк. Результат поместить в файл f1.

Контрольные вопросы

1. Какие файловые типы определены в языке Pascal?

2. Приведите примеры описания переменных файлового типа?

3. Перечислите общие процедуры для работы с файлами?

4. Определите порядок открытия файла для чтения (записи)?

5. При помощи каких операторов производится ввод–вывод данных из файлов различных типов?

Лабораторная работа №8

Тема: «Графика»

Цель работы является:

 освоение инициализации графического режима;

 изучение основных процедур и функций для работы с графикой;

 формирование графических изображений;

 рисование графика функции с помощью точек, линий и отрезков линий;

 получение навыков программирования с использованием графического режима.

Задание на выполнение лабораторной работы

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

Программа должна включать:

 объявление переменных целых и вещественных типов;

 ввод исходных данных;

 вычисление значения выражений в соответствии с вариантом задания;

 отображение результатов в графическом виде.

Средства и оборудование

Персональная ЭВМ, среда программирования Borland Pascal.

Теоретические основы

Графический режим используется для отображения графической информации на экран. Для создания изображений и управления графическими режимами используется модуль Graph, содержащий типы, константы, переменные и подпрограммы для работы с графикой.

Программа, использующая графику, должна содержать вызов процедур инициализирующих графический режим. Процедура инициализации имеет вид:

InitGraph(var Gd, Gm: Integer; DriverPath: String);

где Gd, Gm – тип адаптера и графический режим; DriverPath – путь к графическому драйверу egavga.bgi.

Пример. Инициализация графического режима с обработкой ошибок инициализации.

Program Ex1;

uses Graph;

var

Gd, Gm: Integer;

DriverPart: String;

begin

DetectGraph(Gd, Gm); {автоматическое определение значений переменных Gd и Gm}

DriverPart := ’’; {файл egavga.bg находится в текущей директории}

InitGraph(gd, gm, DriverPart); {инициализация графического режима}

if GraphResult <> 0 then {обработка ошибок инициализации}

begin

Write(‘Error=’, GraphResul);

Halt; {прекращение выполнения программы}

end;

……

CloseGraph; {закрытие графического режима}

end.

Рисование графических примитивов и фигур осуществляется следующими процедурами:

GetMaxX: Integer, GetMaxY: Integer – возвращают максимальные координаты экрана;

) – перемещает текущий указатель в точку с координатами ;

PutPixel(x, y, Color: Integer) – выводит на экран точку с координатами цветом Color;

 – соединяет линией точки с координатами и ;

 – строит прямоугольник с диагональю ; SetColor(Color: Integer) – определяет цвет линии;

SetFillStyle(Pattern, Color: Word) – назначает шаблон заливки, где Pattern определяет вид шаблона, а Color – цвет;

 – выводит прямоугольник, внутренняя область которого залита по текущему шаблону;

 – выводит сектор эллипса, внутренняя область которого залита по текущему шаблону;

 – выводит эллипс текущим цветом и заполняет его по текущему шаблону;

 – заливает область вокруг точки с координатами , ограниченную линией цветом Border.

Варианты заданий

1. Построить:

а) треугольник с вершинами (100, 100), (150, 100), (80, 170);

б) прямоугольник с вершинами (80, 80), (170, 80), (170, 150), (80, 150);

в) пятиугольник с вершинами (100, 100), (150, 100), (170, 120), (150, 140), (100, 140), (80, 120);

г) шестиугольник с вершинами (120, 100), (140, 120), (140, 140), (120, 160), (100, 140), (100, 120);

д) выполнить задания а)–г), дополнив каждое из них требованием заливки построенной плоской фигуры.

2. Построить и залить квадрат со стороной 30 пиксел, центр которого совмещен с центром экрана. Стороны квадрата должны быть параллельны осям координат экрана.

3. Построить и залить прямоугольник со сторонами 30 и 50 пиксел, центр которого совмещен с центром экрана. Стороны прямоугольника должны быть параллельны осям координат экрана.

4. Построить и залить круг радиуса 40 пиксел, центр которого совмещен с центром экрана.

5. Построить графики линейной функции для k = 0.1, 0.2, 0.3, …, 1.

6. Построить графики функций:

а) ; б)  ; в) ;

г) ; д)  ; е) .

7. Построить графики функций:

а) , a=0, b=, n=40;

б) , a=–, b=, n=50;

в) , a=–1, b=2, n=30;

г) , a = –1, b=3, n = 40;

д) , a = –1, b = 4, n = 50;

е) , a = –1, b = 3, n = 40;

ж) , a=–/2, b = 2, n = 50;

з) , a = –3, b = 3, n = 50.

8. Исследовать область определения и построить графики следующих функций;

а)  ; б)  ; в)  ;

г)  ; д)  ; е)  ;

ж)  ; з)  ; и)  ;

к)  ; л)  ; м)  .

9. Построить кривые по заданному параметрическому представлению.

а) Окружность радиуса r с центром в начале координат: , , .

б) Эллипс с большой и малой полуосями, равными соответственно r1 и r2 и расположенными параллельно осям координат: , , .

в) Улитка Паскаля (рис. 1): , , a > 0, b > 0, . Рассмотреть случаи, когда , , .

b > 2a

a < b < 2a

a > b

Рис. 1.

Рис. 2.

г) Кардиоида (рис. 2); а > 0, .

д) Эпициклоида (рис. 3): , , , . Рассмотреть следующие случаи: если есть целое положительное число, ; если , где p и q – положительные целые взаимно простые числа, .

Рис. 3

е) Астроида (рис. 4): , , .

ж) Циссоида (рис. 5): , , , .

Рис. 4.

Рис. 5.

Рис. 6.

з) Строфоида (рис. 6): , , , .

и) Конхоида Никомеда (рис. 7): , ,  – правая ветвь,  – левая ветвь, , .

Рассмотреть случаи, когда , , .

Рис. 7.

10 Построить кривые по их уравнениям в полярных координатах .

а) Овалы Кассини (рис. 8):

.

Рассмотреть случаи, когда , , .

Рис. 8.

б) Лемниската (рис. 9): , .

Рис. 9.

11. Построить спираль вокруг начала координат с n витками и внешним радиусом r; начальное направление спирали образует с осью ОХ угол . Параметрическое представление спирали: , , , .

12. Запрограммировать движение прямоугольника (окружности, эллипса) по заданной траектории (задача 9).

13. Столбчатая диаграмма (гистограмма) представляет собой набор прямоугольников, основания которых равны, а высоты пропорциональны числовым величинам, взятым из некоторой совокупности. Для большей наглядности прямоугольники диаграммы обычно заливают различными цветами.

Даны семь действительных положительных чисел . Построить гистограмму для этих значений.

14. Постройте гистограмму, отражающую статистику выпуска космических аппаратов в период 1990–1999 гг. по сводной таблице 1 для отдельно взятой страны.

15. Построить гистограмму, отражающую общее количество запущенных космических аппаратов в год за весь период 1990–1999 гг.

16. Построить гистограмму, отражающую нагрузку конвейера за час, если в течение первых 10 мин нагрузка составила 33 %, 20 мин – 45 %, 30 – 41 %, 40 – 45 %, 50 – 51 %, и в течение 60 мин нагрузка составила 58 %.

17. Круговая диаграмма – это круг, площади секторов которого пропорциональны соответствующим числовым величинам, взятым из некоторой совокупности. Для большей наглядности секторы диаграмм закрашивают в разные цвета.

Даны семь действительных положительных чисел . Построить круговую диаграмму для этих значений.

18. Построить круговую диаграмму процентного содержания расходов предприятия, если 30 % всех расходов приходится на заработную плату, 35 % – на налоги, 25 % – на закупку сырья и 10 % – на ремонт оборудования.

19. Атмосфера содержит 78 % азота и около 21 % кислорода. Остальную часть составляют другие газы: водород, йод, неон и т.д. Построить круговую диаграмму «Состав атмосферы».

20. Построить круговую диаграмму «Основные типы почв Земли», если красноземы занимают 19 % всей суши, сероземы с солончаками 17 %, почвы гор 16 %, материковые льды 11 %, дерново-подзолистые с болотными 9 %, буроземы 7 %, каштановые с солонцами 7 %, черноземы 6 % и на почвы пойм и почвы тундры приходится по 4 % всей суши.

21. Около 4 % населения земли «левши», остальные «правши». Покажите это соотношение в виде круговой диаграммы.

22. Постройте круговую диаграмму долголетия животных, если продолжительность жизни бегемота 41год, носорога – 40лет, медведя – 34года, кошки – 23года, собаки – 22, обезьяны – 20 лет.

23. Земля находится от Солнца, в среднем, на расстоянии 150 млн км, среднее расстояние от Меркурия до Солнца 58 млн км, от Венеры – 108 млн, от Марса – 228 млн, от Юпитера – 789 млн, от Сатурна – 1426 млн, от Урана – 2870 млн и от Нептуна до Солнца среднее расстояние составляет 4493 млн км. Постройте круговую диаграмму «Расстояние планет до Солнца», округлив результаты до сотых долей.

24. Ученые считают, что из всех видов змей, существующих на земле, 15% ядовитые. Остальные для человека не опасны. Изобразите это соотношение в виде круговой диаграммы.

25. Построить круговую диаграмму, отражающую долю каждого государства в выпуске космических аппаратов за отдельно взятый год.

Таблица 1.

Статистика запусков космических аппаратов

на период 01.01.1990–01.01.1999 гг.

Год запуска

Государство, осуществившее запуск

Общее количество

Израиль

Индия

Китай

Россия

США

Франция

Япония

1990

1

7

96

35

15

6

160

1991

1

84

28

15

2

130

1992

1

5

77

24

13

1

121

1993

2

60

20

17

1

100

1994

2

6

64

29

11

3

115

1995

1

2

42

32

15

2

94

1996

1

3

32

38

15

2

91

1997

1

8

48

62

20

4

143

1998

10

45

79

14

2

150

1999

3

17

47

51

12

122

Всего

2

8

51

595

147

147

23

1226

Контрольные вопросы

1. Поясните назначение и параметры процедур: InitGraph, CloseGraph, DrawPolyLine, LineTo, LineRel, PutPixel, SetLineStyle, SetTextStyle, SetColor и OutTextXY.

2. Как производится перемещение фигур по экрану?

3. Поясните назначение и параметры процедур: ClearDevice, SetFillStyle, FloodFill, Delay, Bar, FillEllipse, Circle, Sector, PieSlice, RectAngle.

Лабораторная работа №9

Тема: «Множества и записи»

Целью работы является:

  • освоение объявления множеств данных;

  • изучение основных характеристик множеств данных и особенностей работы с ними;

  • освоение объявления комбинированных типов данных – записей;

  • получение навыков работы с записями.

Задание на выполнение лабораторной работы

Разработать схему алгоритма и программу в соответствии с вариантом задания.

Программа должна включать:

  • объявление переменных типа множество или запись;

  • ввод исходных данных;

  • вычисления в соответствии с вариантом задания;

  • вывод результатов выполнения программы.

Средства и оборудование

Персональная ЭВМ, среда программирования Borland Pascal.

Теоретические основы

Множество – совокупность однотипных объектов (элементов), выбранная из универсального множества. Количество элементов, входящих в множество не может быть больше 256. А порядковые номера элементов множества изменяются от 0 до 255.

Множество можно определить в разделах Type и var. Для задания множества следует использовать зарезервированные слова Set of, затем указываются элементы множества в виде перечисления или диапазона:

type

Alfa = Set of ‘A’..’Z’;

Count = Set of 0..9;

Operations = Set of (Plus, Minus, Mult, Divid);

var

CharSet: Alfa;{ идентично CharSet:Set of ‘A’..’Z’;}

Тип элементов множества называется базовым типом. При задании элементов множества они перечисляются через запятую (допустимо указывать диапазон) и помещаются в квадратные скобки:

const

Index: Count = [0, 2, 3, 9];

Запись – совокупность объектов (полей) различного типа, объединенных одним названием. Количество полей записи не ограничено. Поля записи могут иметь любой тип кроме файлового. Запись задается с помощью зарезервированного слова record после которого идет перечисление полей с указание их типа. Описание записи заканчивается словом end:

type

Complex = record

Re: Real;

Im:Real;

end;

var

X:Complex;

Data = record

Year: Integer;

Month: 1..12;

Day: 1..31;

end;

При задании значений константе поля записи заключаются в круглые скобки и разделяются «;». Для задания значения каждого поля указывается имя поля и через двоеточие его значение:

const

Y: Complex = (Re: 10.5; Im: -0.7);

Доступ к полям записи осуществляется указанием имени переменной (константы) и через точку имени поля:

X.Re := 0.6;

X.Im := 2;

Data.Year := 2002;

Data.Month := 12;

Data.Day := 31;

Для того, чтобы каждый раз не писать имя переменной (константы) при обращении к ее полям используется оператор над записями With:

with Data do

begin

Year := 2002;

Month := 12;

Day := 31;

end;

Варианты заданий

  1. Дано множество натуральных чисел A, находящихся в диапазоне от 0 до 99.

    1. Описать функцию card(A), подсчитывающую количество элементов в множестве А;

    2. Описать процедуру print(A), выводящую на экран элементы множества А в порядке возрастания (убывания);

  2. Дано множество малых латинских букв L.

    1. Описать процедуру print(A), печатающую в алфавитном порядке все элементы множества L.

    2. Проверить, являются ли символы введенного слова элементами множества L.

    3. Подсчитать количество согласных и гласных букв среди элементов множества L.

    4. Проверить, является ли введенные символы элементом множества. Если нет, добавить их в множество. Вывести на экран исходное и полученное множества.

  3. Даны 2 множества некоторых целых положительных чисел А и В. Вычислить:

    1. А*В-А;

    2. A-(A-B);

    3. (A+B)-(A-B)-(B-A);

    4. (A-B)+(B-A)+A*B.

Задачи 4-6 решить с помощью множеств.

  1. Дан текст из строчных латинских букв и цифр, за которым следует точка. Определить:

    1. каких букв – гласных или согласных – больше в этом тексте;

    2. первые вхождения букв в текст, сохраняя их исходный взаимный порядок;

    3. все буквы, входящие в текст не менее двух раз;

    4. количество цифр в тексте;

    5. определить долю букв в тексте.

  1. Дано множество некоторых целых положительных чисел. Найти:

    1. найти среднее значение элементов множества;

    2. найти минимальный элемент множества;

    3. найти максимальный элемент множества;

    4. сумму элементов множества;

    5. количество элементов, которые больше среднего значения элементов множества.

В следующих заданиях создать текстовый файл, содержащий список из 10 записей в соответствии с вариантом задания. Написать программу считывающую данные из файла, произвести над ним требуемые действия. Сам список в виде таблицы и результаты работы программы вывести на экран.

  1. Список группы студентов: Ф.И.О., год рождения, место жительства, сданные экзамены: математика, физика, химия, история. Вычислить средний бал, выборка из списка по среднему баллу или первой букве фамилии или по году рождения.

  2. Список группы студентов: Ф.И.О., год рождения, пол, место жительства, сданные экзамены: математика, физика, история. Вычислить средний бал, выборка из списка по среднему баллу или первым двум буквам фамилии или по полу.

  3. Список группы студентов: Ф.И.О., год рождения, место жительства, сданные экзамены: математика, физкультура, история. Вычислить средний бал, выборка из списка по среднему баллу или первым трем буквам фамилии или по оценке по физкультуре.

  4. Список группы студентов: Ф.И.О., год рождения, место жительства, сданные экзамены: математика, физкультура, история. Вычислить средний бал, выборка из списка по среднему баллу или первым трем буквам фамилии или по году рождения.

  5. Список группы студентов: Ф.И.О., год рождения, место жительства, сданные экзамены: математика, история, зачеты: по физкультуре и ТТП. Вычислить средний бал, выборка из списка по среднему баллу или последним трем буквам фамилии или по зачету по ТТП.

  6. Список группы лыжников: Ф.И.О., год рождения, место жительства, вес, рост, результаты бега на 10 и 20 км. Вычислить средний результат по двум дистанциям, выборка из списка по среднему результату или первым трем буквам фамилии или году рождения.

  7. Список группы бегунов на короткие дистанции: Ф.И.О., год рождения, пол, место жительства, вес, рост, результаты бега на 100 и 200 м. Вычислить средний результат по двум дистанциям, выборка из файла по среднему результату или последним трем буквам фамилии или полу.

  8. Список группы лыжников: Ф.И.О., год рождения, пол, место жительства, вес, рост, результаты бега на 10 и 20 км. Вычислить средний результат по двум дистанциям, выборка из файла по среднему результату или последним трем буквам фамилии или полу.

  9. Список группы бегунов на средние дистанции: Ф.И.О., год рождения, пол, место жительства, вес, рост, результаты бега на 800 и 1500 м. Вычислить средний результат по двум дистанциям, выборка из файла по среднему результату или последним двум буквам фамилии или росту.

  10. Список группы лыжников: Ф.И.О., год рождения, пол, место жительства, вес, рост, результаты бега на 30 и 20 км. Вычислить средний результат по двум дистанциям, выборка из файла по среднему результату или последним трем буквам фамилии или весу.

  11. Список личной библиотеки студента: автор, наименование книги, наименование города и издательства, год издания, объём в стр. Вычислить общий объём библиотеки в стр., среднюю толщину книги. Выборка из файла по первым трём буквам автора или по году издания.

  12. Список личной библиотеки студента: автор, наименование книги, город и издательство, год издания, объём в стр. Вычислить общий объём библиотеки в стр., среднюю толщину книги. Выборка из файла по последним трём буквам автора или по наименованию издательства издания.

  13. Список личной библиотеки студента: автор, наименование книги, город и издательство, год издания, объём в стр. Вычислить общий объём библиотеки в стр., среднюю толщину книги. Выборка из файла по фамилии автора или по месту издания или по объёму книги в страницах.

  14. Кадровый список предприятия: Ф.И.О., год рождения, пол, место жительства, образование, специальность, месячный оклад. Вычислить месячный фонд заработной платы с учётом уральского коэффициента = 15%. Выборка из файла по последним трем буквам фамилии или году рождения или по окладу.

  15. Кадровый список предприятия: Ф.И.О., год рождения, пол, место жительства, образование, специальность, разряд, месячный оклад. Вычислить месячный фонд заработной платы с учётом уральского коэффициента = 15% и премии в 20%. Выборка из файла по первым трем буквам фамилии или году рождения или полу.

  16. Кадровый список предприятия: Ф.И.О., год рождения, пол, место жительства, образование, специальность, месячный оклад. Вычислить месячный фонд заработной платы с учётом уральского коэффициента = 15%. Выборка из файла по последним трем буквам фамилии или году рождения или по окладу.

  17. Кадровый список предприятия: Ф.И.О., год рождения, пол, место жительства, образование, специальность, месячный оклад. Вычислить месячный фонд заработной платы с учётом уральского коэффициента = 15% и средний оклад по предприятию. Выборка из файла по фамилии или году рождения или по месту жительства.

  18. Кадровый список предприятия: Ф.И.О., год рождения, пол, место жительства, образование, семейное положение, количество детей, среднемесячный доход на семью. Вычислить общий доход сотрудников по предприятию. Выборка из файла по фамилии или году рождения или по доходу.

  19. Кадровый список предприятия: Ф.И.О., год рождения, пол, место жительства, образование, семейное положение, количество детей, среднемесячный доход на семью. Вычислить общий доход сотрудников по предприятию. Выборка из файла по фамилии или году рождения или по доходу.

  20. Кадровый список предприятия: Ф.И.О., год рождения, место жительства, образование, семейное положение, количество детей, среднемесячный доход семьи. Вычислить общий доход сотрудников по предприятию. Выборка из файла по фамилии или месту жительства или по количеству детей.

  21. Метеосводка за месяц: день, месяц, средняя температура за день, максимальная сила ветра, осадки в мм. Вычислить средние температуру, силу ветра и сумму осадков за месяц. Выборка из файла по дню, по температуре, по осадкам.

  22. Метеосводка за год: месяц, год, средняя температура за месяц, максимальная сила ветра, осадки в мм. за месяц. Вычислить средние температуру , силу ветра и сумму осадков за год. Выборка из файла по дню, по температуре, осадкам.

Контрольные вопросы

  1. Дайте определение множества.

  2. Какого типа могут быть элементы множества?

  3. Какие операции допустимы над множествами?

  4. Что такое запись?

  5. Что такое поля записи?

  6. С какой целью возможно использование вариантной части записи?

  7. Какого типа могут быть поля записи?

  8. Для чего необходим оператор над записями?

Лабораторная работа №10

Тема: «Динамические переменные»

Целью работы является:

  • получение навыков программирования с использованием динамической памяти;

  • изучить особенности работы с переменными ссылочного типа.

Задание на выполнение лабораторной работы

Разработать схему алгоритма в соответствии с вариантом задания и программу, реализующую этот алгоритм.

Программа должна включать:

  • объявление динамических переменных;

  • ввод исходных данных;

  • вывод результатов выполнения программы.

Средства и оборудование

Персональная ЭВМ, среда программирования Borland Pascal.

Теоретические основы

В языке Pascal есть возможность по ходу выполнения программы выделять и освобождать необходимую память для размещения в ней данных. Таким образом, можно организовать динамические (изменяющие размеры) структуры данных. Оперативная память при этом используется наиболее эффективно. Область памяти, где можно выделять участки для размещения данных и освобождать их, называется динамической памятью, а переменные для работы с этой областью памяти называются динамическими (указатели).

Указатель содержит адрес поля в динамической памяти, хранящего величину определенного типа. Сам указатель располагается в статической памяти. Указатель описывается в разделе описания переменных следующим образом:

var <идентификатор> : ^<имя типа>;

Примеры описания указателей:

type Massiv = array[1..100] of Integer;

var P1 : ^Integer;

P2 : ^String;

Pm : ^Massiv;

Здесь P1 – указатель на динамическую величину целого типа; P2 – указатель на динамическую величину строкового типа; Pm – указатель на динамический массив, тип которого задан в разделе type.

Память под динамическую величину, связанную с указателем, выделяется в результате выполнения стандартной процедуры NEW:

NEW(P1); NEW(P2); NEW(Pm);

После их выполнения в динамической памяти оказывается выделенным место под три величины (две скалярные и один массив). Дальнейшая работа с динамическими переменными происходит точно так же, как со статическими переменными соответствующих типов. Им можно присваивать значения, их можно использовать в качестве операндов в выражениях, параметров подпрограмм и т.д.:

P1^ := 25;

P2^ := 'Write';

for i := 1 to 100 do Pm^[i] := i;

Когда работа с динамической переменной завершена необходимо освободить память, которая отводилась для этой переменной. Для этого используется процедура dispose:

Dispose(P1);

Dispose(P2);

Dispose(Pm);

Варианты заданий

  1. Определить сколько места занимают в динамической памяти следующие структуры:

    1. переменная целого типа;

    2. переменная вещественного типа;

    3. переменная символьного типа;

    4. массив из десяти элементов целого типа;

    5. строка, содержащая 30 символов;

    6. Запись с двумя полями целого и символьного типа.

  2. Заполнить массив целых чисел случайным образом. Размерность массива не ограничена (в рамках динамической памяти), задается с клавиатуры. Определить, сколько места занимает в динамической памяти данный массив, а также:

    1. определить максимальный элемент массива;

    2. определить минимальный элемент массива;

    3. найти среднее значение элементов массива;

    4. упорядочить массив по убыванию;

    5. упорядочить массив по возрастанию;

    6. найти наименьшее из четных чисел, входящих в последовательность;

    7. найти наибольшее из нечетных чисел, входящих в последовательность;

    8. подсчитать количество нечетных чисел, входящих в последовательность;

    9. подсчитать количество четных чисел, входящих в последовательность;

    10. заменить все четные числа нулями;

    11. подсчитать среднеарифметическое;

    12. подсчитать среднегеометрическое;

    13. подсчитать сумму квадратов элементов массива.

  3. Даны два вектора a,b и действительное число x.. Размерность векторов не ограничена (в рамках динамической памяти) и задается с клавиатуры. Определить, сколько места занимают в динамической памяти данные массивы, а так же определить:

    1. a  x; b  x;

    2. a / x; b / x;

    3. a + x b;

    4. a - x b;

    5. b - x a;

    6. x a b;

    7. a  (x b);

    8. b  (x a).

  4. Даны квадратная матрица A. Элементы вектора и матрицы задаются случайным образом. Размерность матрицы не ограничена (в рамках динамической памяти), задается с клавиатуры. Определить, сколько места занимают в динамической памяти данный массив, а так же определить:

    1. Найти сумму элементов по периметру матрицы и под побочной диагональю.

    2. Найти сумму элементов по периметру матрицы и над побочной диагональю.

    3. Найти сумму элементов на главной и побочной диагоналям.

    4. Найти сумму элементов над главной и над побочной диагоналям.

    5. Найти сумму элементов под главной и побочной диагоналям.

    6. Заполнить квадратную матрицу генератором случайных чисел таким образом, чтобы элементы главной диагонали были равны единице.

    7. Заполнить квадратную матрицу генератором случайных чисел таким образом, чтобы элементы побочной диагонали были равны единице.

    8. Определить, является ли заданная целочисленная квадратная матрица симметричной (относительно главной оси).

    9. Найти сумму элементов первой строки и последнего столбца.

    10. Найти сумму элементов первого столбца и последней строки.

    11. Найти наибольшее из значений элементов первой строки и последнего столбца.

    12. Найти наибольшее из значений элементов главной диагонали и двух соседних с ней линий.

    13. Найти наибольшее из значений элементов побочной диагонали и двух соседних с ней линий.

    14. Найти наибольшее из значений элементов, находящихся над главной диагональю.

    15. Найти наибольшее из значений элементов, находящихся под главной диагональю.

    16. Найти наибольшее из значений элементов, находящихся над побочной диагональю.

    17. Найти наибольшее из значений элементов, находящихся под побочной диагональю.

  5. Даны квадратные матрицы A, B и векторc. Элементы вектора и матрицы задаются случайным образом. Размерность матриц не ограничена (в рамках динамической памяти), задается с клавиатуры. Определить, сколько места занимают в динамической памяти данные массивы, а так же определить:

    1. A c;

    2. A  B;

    3. A + B;

    4. A - B;

    5. AT;

    6. BT c;

    7. AT + B;

    8. AT + BT;

    9. AT  B;

    10. AT  BT;

Контрольные вопросы

  1. Какие переменные относятся к статическим, а какие к динамическим?

  2. С какой целью используются динамические переменные?

  3. Какова графическая модель использования динамических переменных.

  4. Каковы правила определения указателей.

  5. Какие процедуры используются для создания динамических переменных?

  6. Нарисуйте графическую модель результата создания динамической переменной.

  7. Какие функции позволяют определить наличие свободной памяти для динамических переменных?

Лабораторная работа №11

Тема: «Динамические структуры»

Целью работы является:

  • освоение объявления динамических структур;

  • изучение основных свойств и особенностей работы с динамическими структурами;

  • получение навыков программирования с очередями, стеками и списками.

Задание на выполнение лабораторной работы

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

Программа должна включать:

  • объявление динамической структуры;

  • формирование и, обработка динамической структуры в соответствии с вариантом задания;

  • вывод результатов выполнения программы.

Средства и оборудование

Персональная ЭВМ, среда программирования Borland Pascal.

Теоретические основы

Динамические структуры – это последовательности взаимосвязанных динамических переменных. Для описания динамических структур применяется запись не менее чем с двумя полями, одно из них – указатель на следующий элемент динамической структуры, другие поля определяют данные структуры:

type

PComp = ^Comp;

Comp = record

D: T;

Next:Pcomp;

end;

где Т – тип данных динамической структуры. Поле данных может быть переменной, массивом, множеством или записью. Различают следующие виды динамических структур – стек, очередь и список.

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

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

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

Для формирования стека требуется три переменных указателя (вершина стека и две вспомогательные), очереди – четыре (начало и конец очереди и две вспомогательные переменные) и списка – пять переменных типа указатель (начало и конец списка и три вспомогательные переменные).

Варианты заданий

  1. Составить программу, которая формирует стек, добавить в него произвольное количество компонент, а так же:

    1. определить длину стека;

    2. проверить, упорядочены ли элементы списка по возрастанию;

    3. проверить, упорядочены ли элементы списка по убыванию;

    4. найти количество элементов, совпадающих с последним элементом;

    5. найти наименьшее из четных элементов (T = Integer);

    6. найти наибольшее из нечетных элементов (T = Integer);

    7. подсчитать количество нечетных элементов (T = Integer);

    8. подсчитать количество четных элементов (T = Integer);

    9. найти среднее арифметическое элементов (T=Extended);

    10. найти среднее геометрическое элементов (T=Extended);

    11. подсчитать количество положительных элементов (Т = Extended);

    12. подсчитать количество отрицательных элементов (Т = Extended);

    13. подсчитать количество нулей (Т = Extended);

    14. подсчитать сумму квадратов элементов (Т = Extended);

    15. найти сумму элементов (Т = Extended);

    16. найти количество элементов, начинающихся с указанного символа (T = String);

    17. найти количество элементов, оканчивающихся на какой-либо символ (T = String);

    18. найти элемент, состоящий из наибольшего числа символов (T = String);

    19. найти количество элементов, начинающихся и оканчивающихся на один и тот же символ (T = String);

    20. найти количество элементов содержащих какую-то подстроку (T = String);

    21. найти количество симметричных элементов (T = String).

  2. Составить программу, которая формирует очередь, добавить в него произвольное количество компонент, выполнить соответствующие операции и вычисления, приведенные в задаче 1.

  3. Взяв за основу данные из вариантов 7-28 из лабораторной работы № 9, создать динамическую структуру данных – односвязный список. Произвести выборку, описанную в лабораторной работе №9. Описать процедуры вставки, поиска, редактирования и удаления элементов списка.

Контрольные вопросы

  1. Какие модели динамических структур вы знаете?

  2. Какие ссылочные переменные требуются для работы с динамическими структурами?

  3. Как установить указатель на следующий элемент динамической структуры?

  4. Опишите алгоритм для поиска данных в динамическом списке.

  5. Опишите алгоритм для удаления динамической цепочки.

  6. Составьте графическую модель для дополнения динамической структуры.

Лабораторная работа №12

Тема: «Объекты»

Целью работы является:

  • изучение объявления объектов;

  • освоение назначения полей и методов объекта;

  • изучение правил работы с полями и методами объектов;

  • получение навыков программирования с объектами.

Задание на выполнение лабораторной работы

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

Программа должна включать:

  • объявление объекта;

  • обработку данных и проведение необходимых действий в соответствии с вариантом задания;

  • вывод результатов выполнения программы.

Средства и оборудование

Персональная ЭВМ, среда программирования Borland Pascal.

Теоретические основы

В основе объектно-ориентированного программирования лежит понятие объекта, сочетающего в себе данные (свойства объекта) и действия над ними (поведение объекта).

Объект похож на стандартный тип запись, но кроме полей данных он включает в себя подпрограммы для обработки этих данных (методы). Объединение в одном объекте данных и действий над ними называется инкапсуляцией.

Объявление типа объект:

type

Point = object

x, y: integer;

color: byte;

procedure draw;

end;

procedure Point.draw;

begin

PutPixel(x, y, color);

end;

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

Объект является типом данных. Его можно использовать при описании различных переменных: массивов, множеств, записей и т.д. Переменная объектного типа – это экземпляр объекта.

Доступ к методам и полям объекта осуществляется указанием имени переменной типа объект, затем ставится точка и имя поля, либо имя метода.

Варианты заданий

  1. Разработать объект КНИГА. Книгу характеризуют название, автор, стоимость, шифр. Описать методы создания объекта, изменения цены и шифра.

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

  3. Разработать объект АВТОМОБИЛЬ. Автомобиль характеризуют марка, номер, стоимость, производитель, хозяин. Описать методы создания объекта, изменения номера и метод продажи автомобиля.

  4. Разработать объект СТУДЕНТ. Студента характеризуют фамилия, имя, отчество, факультет, номер группы, курс. Описать методы создания объекта, перевод студента на другой факультет и на следующий курс.

  5. Разработать объект ЧЕЛОВЕК. Человека характеризуют фамилия, имя, отчество, пол, адрес. Описать методы создания объекта, смены пола и адреса.

  6. Разработать объект СТРАНА. Страну характеризуют название, форма правления, столица, площадь. Описать методы создания объекта, смены столицы, площади, формы правления.

  7. Разработать объект КОМПЬЮТЕР. Придумать характеристики компьютера и описать методы создания объекта, модернизации компьютера.

  8. Разработать объект ПРЕДПРИЯТИЕ. Предприятие характеризуют название, юридический адрес, директор. Описать методы создания объекта, смены адреса, площади, директора.

  9. Разработать объект СПОРТСМЕН. Спортсмена характеризуют фамилия, имя, отчество, рекорды на дистанции 50 и 100 метров, список побед на турнирах. Описать методы создания объекта, побития рекордов, победы на турнире.

  10. Разработать объект КОМАНДА. Команду характеризуют название, тренер, занятое место в предыдущие годы. Описать методы создания объекта, смены названия, тренера, завершение турнира в текущем году.

  11. Разработать объект ЖУК: символ ‘G’, перемещаемый по экрану в текстовом режиме с помощью клавиш со стрелками.

  12. Разработать объект СОСУД с одним входом и одним выходом. В сосуде может храниться жидкость. Максимальный объем жидкости в сосуде равен V. При однократном нажатии клавиши ‘+’ происходит наполнение сосуда жидкостью объемом Va. При нажатии клавиши '-‘ - слив жидкости объемом Vb. Придумать методы для отображения текущего заполнения сосуда.

  13. Построить модель броуновского движения молекул в прямоугольном сосуде. Отдельные молекулы описать как объекты.

  14. Разработать объект КУРСОР в графическом режиме. Управление курсором должно осуществляться нажатием клавиш со стрелками на клавиатуре.

  15. Разработать объект ЗМЕЙКА. Змейка состоит из последовательности символов. Управление головой змейки должно осуществляться нажатием клавиш со стрелками на клавиатуре.

  16. Разработать объект ОКНО. Окно имеет прямоугольную форму, заголовок, рамку, умеет перемещаться и изменять свои размеры.

  17. Разработать объект ВЕКТОР в трехмерном евклидовом пространстве, который задан декартовыми координатами. Обязательные функции ввода, вывода вектора и функция представления текущего вектора в полярных координатах.

  18. Описать объект УГОЛ на плоскости. Угол характеризуется величиной угла и содержит функции ввода-вывода величины угла, перевода величины угла в радианы и нахождения синуса угла.

  19. Описать объект СТРОКА. Описание СТРОКИ должно включать: содержание, позицию на экране, видео атрибуты символов, а также функции ввода-вывода строки в указанное место, установки координат вывода строки, установку видео атрибутов строки.

  20. Разработать объект ТОЧКА на экране в текстовом режиме. Должны быть представлены следующие возможности: высвечивание точки, определение видима ли точка в данный момент.

Контрольные вопросы

  1. В чем заключается понятие инкапсуляции?

  2. Почему абстрактный подход повышает надежность и мобильность программ?

  3. Чем отличается объект от экземпляра объекта?

  4. Возможно ли объект использовать для описания новых типов данных?

  5. Возможно ли использовать динамические переменные типа объект?

  6. Как можно вызвать метод объекта?

  7. Как можно получить доступ к полю объекта? Перечислите достоинства и недостатки различных методов доступа?

Лабораторная работа №13

Тема: «Иерархии объектов»

Целью работы является:

  • изучение свойств наследования и полиморфизма;

  • изучение правил построения иерархий объектов.

Задание на выполнение лабораторной работы

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

Программа должна включать:

  • объявление предка и наследников иерархии;

  • обработку данных и проведение необходимых действий в соответствии с вариантом задания;

  • вывод результатов выполнения программы.

Средства и оборудование

Персональная ЭВМ, среда программирования Borland Pascal.

Теоретические основы

Другим важным свойством объектно-ориентированного программирования, наряду с инкапсуляцией, является свойство наследования - это возможность определения нового объекта как расширения уже существующего объекта посредством сохранения полей и методов предка и описания лишь новых полей и методов. Таким образом, создается иерархия объектов (иерархическое дерево), начиная с некоторого простого первоначального объекта – предка и заканчивая более сложными объектами – наследниками, включающими в себя все свойства и методы предков. У предка может быть много наследников, но у наследника может быть только один предок. Описание наследника отличается от описания предка только тем, что после слова object в круглых скобках указывается имя объекта-предка.

Пример. Создать иерархию объектов: вершина – точка, ее наследники – отрезок и окружность.

Point = object

x,y: integer;

visible: boolean;

procedure init(initx, inity);

procedure draw;

function getx: integer;

function gety: integer;

End;

Circle = object (point)

radius: integer;

procedure init(initx, inity, initr);

procedure draw;

function getr: integer;

end;

Line = object (point)

x1, y1: integer;

procedure init(initx, inity, initrx1, initry1);

procedure draw;

function getx1: integer;

function gety1: integer;

end;

В приведенном примере объект – предок и все объекты – наследники имеют методы с одинаковым именем, но выполняющие схожие действия – отображение объекта на экране. Эта возможность – иметь несколько подпрограмм с одним и тем же именем – называется полиморфизмом.

Варианты заданий

  1. Построить иерархию объектов. Человек – студент – студент дипломник. Описать методы работы со студентами: зачисление, отчисление, окончание учебы, перевода его на другой факультет, на другой курс, смену названия диплома или руководителя. Предусмотреть возможность получения информации о студентах учащихся на определенном курсе или факультете, об отчисленных студентах, о каком-то дипломнике.

  2. Создать объект животное, имеющий классификацию, цвет, число потомков. Создать производный объект – домашнее животное, имеющий кличку, хозяина. Определить методы появления нового животного, смены клички или числа потомков. Предусмотреть возможность получения информации обо всех животных, имеющих определенного хозяина и о животных данной классификации.

  3. Создать объект машина, имеющий марку, число цилиндров, мощность, номер автомобиля, хозяина. Создать производный объект – грузовик, имеющий грузоподъемность кузова. Определить методы появления нового автомобиля, изменения марки, номера автомобиля и грузоподъемности. Предусмотреть возможность получения информации об автомобилях, имеющих указанное число цилиндров и об автомобилях, имеющих грузоподъемность меньше какой-либо величины.

  4. Создать иерархию объектов мебель - стол, кровать. Определить методы появления новой мебели, смены цены, количества матрасов на кровати, изменения у стола цвета столешницы. Предусмотреть возможность получения информации о мебели данной стоимости, о кроватях, имеющих данное количество матрасов, и о столах со столешницей определенного цвета.

  5. Создать класс транспортные средства, автомобиль, грузовик, пароход и самолет. Создать из них иерархию. Определить методы создания транспортного средства, изменения водоизмещения парохода, максимальной высоты полета самолета, грузоподъемности грузовика. Предусмотреть возможность получения информации о каждом виде транспортных средств.

  6. Создать объект жидкость, имеющий название, плотность. Создать производный объект - спиртные напитки, имеющий крепость и производные от него - вино и пиво. Определить методы создания жидкости, переназначения плотности и крепости. Предусмотреть возможность получения информации обо всех винах и пиве определенного вида.

  7. Построить иерархию объектов. Человек – школьник. Описать методы зачисления, отчисления школьника, окончания учебы, перевода его в другую школу, в следующий класс. Предусмотреть возможность получения информации о школьниках учащихся в определенном классе или школе.

  8. Создать объект человек, имеющий фамилию, имя, отчество, возраст, вес. Создать производный объект - совершеннолетний, имеющий номер паспорта и производный от него – военнообязанный, имеющий военный билет. Определить методы создания объекта, переназначения возраста, номера паспорта и военного билета.

  9. Создайте объект точка, которая имеет координаты и цвет. Создать производные объекты - эллипсов и окружностей, имеющие радиусы, цвет и тип заливки. Определить методы, создания объектов, вывода на экран, изменения координат и цветов, вычисление площади.

  10. Создать объекты четырехугольников, квадратов и прямоугольников. Создать из них иерархию. Определить методы создания объектов, вывода на экран, изменения координат и цветов, вычисление площади и периметра.

  11. Создать иерархию объектов окно и окно с заголовком. Создать методы создания объектов, вывода на экран, изменения высоты и ширины окна, смены цвета рамки окна, заголовка.

  12. Создать объект колоду карт. Конструкторы колоды должны инициализировать колоду упорядочено и случайным образом. Создать производный объект от колоды – пасьянс, в котором выбираются по три карты и, если две крайние одного цвета, то их выбрасывают.

  13. Построить иерархию, создать методы, создания объектов, отображения, перемещения, изменения размеров и цвета для следующих объектов:

    1. координаты - точка - горизонтальная линия - горизонтально-вертикальное перекрестье;

    2. координаты – точка – окружность – дуга;

    3. координаты – точка – эллипс - эллиптическая дуга;

    4. координаты – точка – окружность – сектор;

    5. координаты – точка – прямоугольник - параллелепипед;

    6. координаты – точка – заштрихованный эллипс - заштрихованный сектор;

    7. координаты – точка – окружность – заштрихованный сектор.

Контрольные вопросы

  1. В чем суть наследования?

  2. Может ли объект иметь нескольких потомков?

  3. Может ли объект иметь нескольких предков?

  4. Опишите преимущества использования принципа наследования?

  5. Что такое иерархическое дерево объектов?

  6. В чем заключается принцип полиморфизма?

Лабораторная работа №14

Тема: «Динамические объекты»

Целью работы является:

  • изучение свойств позднего связывания;

  • изучение правил описания виртуальных методов;

  • освоение конструкторов и деструкторов объектов.

Задание на выполнение лабораторной работы

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

Программа должна включать:

  • объявление динамического объекта;

  • описание конструктора и деструктора;

  • создание иерархии динамических объектов.

Средства и оборудование

Персональная ЭВМ, среда программирования Borland Pascal.

Теоретические основы

Связывание объектов с соответствующими им методами называется ранним, если оно происходит на этапе компиляции. Если связывание объектов с методами происходит на этапе выполнения, то оно называется поздним. Использование механизмов позднего связывания возможно только для экземпляров объектов, описанных динамически.

Замещаемые (полиморфные) методы объектов, для которых необходимо реализовать механизм позднего связывания, называют виртуальными и отмечают в описании объекта специальным ключевым словом virtual. Одни и те же виртуальные методы должны иметь одинаковые заголовки у всех объектов данной иерархии. Методы, не помеченные как виртуальные, называются статическими. Например, метод Draw может быть описан следующим образом:

procedure Draw; virtual;

Вызов статических методов в программе ничем не отличается от вызова обычных процедур и функций и определяется на этапе компиляции программы (раннее связывание). Замещаемый метод, описанный как виртуальный, должен описываться виртуальным у всех потомков данного объекта. Для объектов, имеющих виртуальные методы, транслятор на этапе компиляции формирует специальную таблицу виртуальных методов (ТВМ), содержащую адреса виртуальных методов, и помещает данную таблицу в сегмент данных программы. Для всех экземпляров данного объекта ТВМ является общей. Для того, чтобы инициализировать значение поля адреса ТВМ для данного экземпляра объекта вводится специальный метод constructor - конструктор, который ничем не отличается от обычной процедуры, но перед своим выполнением заносит смещение ТВМ в поле адреса ТВМ для экземпляра данного объекта. Конструктор обычно связывают с методом инициализации значений полей объекта. Например, для объекта Point метод Init можно объявить конструктором. Для этого ключевое слово procedure необходимо заменить на constructor. Один объект может содержать несколько конструкторов с различными именами. Однако, из одного конструктора объекта нельзя вызывать другой конструктор этого же объекта. До вызова конструктора в основной программе можно обращаться только к статическим методам объекта. Причем сами статические методы в этом случае не должны содержать вызовы любых виртуальных методов.

Для правильного освобождения динамической памяти экземпляром объекта необходимо использовать специальный метод, который называется деструктором. Если объект не имеет свои динамические поля (включая поля предков), то деструктор является пустой процедурой:

destructor Destroy; virtual;

begin

end;

Пример. Динамически описать объект точка его наследника - отрезок.

Pointptr = ^point;

point = object { объект--точка }

x,y : integer;

color : word;

constructor init(xc,yc: integer; cc: word);

destructor destroy; virtual;

function getx: integer;

function gety: integer;

function getcolor: word;

procedure show; virtual;

end;

Lineptr = ^line;

line = object(point) { объект--линия }

x1,y1 : integer;

constructor init(xc,yc,x1c,y1c: integer; cc: word);

function getx1: integer;

function gety1: integer;

procedure show; virtual;

end;

Варианты заданий

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

Контрольные вопросы

  1. В чем суть раннего и позднего связывания?

  2. Может ли данный объект иметь несколько конструкторов?

  3. Какие методы называются виртуальными? Статическими?

  4. Для чего используются виртуальные методы?

  5. Что такое таблица виртуальных методов? Ее назначение?

  6. Может ли конструктор быть объявлен виртуальным методом? Как осуществляется вызов виртуального метода?

  7. Что такое деструктор? Его назначение?

  8. Может ли деструктор быть виртуальным методом? А статическим?

  9. С чем связана необходимость иметь деструктор? Для каких объектов деструктор не нужен? А конструктор?

Лабораторная работа №15

Тема: «Типы данных, определяемые пользователем.