- •Московский государственный технический университет
- •Содержание.
- •Предисловие
- •Лабораторная работа №1 Процедурные типы
- •1. Теоретические сведения
- •Var X: real; I: integer;
- •X, y : byte;
- •VarFunc : FuncType;
- •I : integer;
- •2.Задачи для самостоятельного решения
- •Лабораторная работа №2 Модули
- •Теоретическая часть
- •Структура модулей
- •Связь модулей друг с другом
- •ISwap(a,b);
- •Var I, y :integer;
- •2.2. Практическая часть
- •Interface
- •Implementation
- •I: Integer;
- •3. Задачи, для самостоятельного решения
- •Лабораторная работа №3 Меню
- •1. Теоретическая часть
- •Var X,y,I: byte;
- •XUpLeft;
- •Var npos,I: integer;
- •Case npos of
- •Лабораторная работа №4.
- •2.Задачи, для самостоятельного решения:
- •Лабораторная работа № 5 Указатели. Связанные списки
- •1. Теоретические сведения
- •1.1. Указатели
- •1.2. Связные списки записей
- •1.3. Управление связанным списком записей (на примере)
- •1.3.1. Построение списка
- •Var ListOfChecks, CurrentCheck: pCheck;
- •1.3.2. Перемещение по списку
- •Var p: Pint;
- •2. Демонстрационные примеры
- •X1,y1,x2,y2: word;
- •Var npos,I,n,j :integer;
- •3: Begin
- •Interface
- •Задачи 1..4. Создать типизированный файл записей, содержащих сведения о багаже пассажира. Структура записи имеет следующий вид:
- •Var rec, beg, endd, current: pnt;
- •Задача 5. Создать типизированный файл записей, содержащих сведения об автомобиле. Структура записи имеет следующий вид:
- •Var rec, beg, endd, current : pnt;
- •Задача 22. Создать типизированный файл записей, содержащих сведения о книгах. Структура записи имеет следующий вид:
- •1.2.Объект и инкапсуляция
- •1.3. Иерархия объектов и наследование
- •Visible: Boolean;
- •Init(x1,y1);
- •Interface
- •Interface
- •X,y : Integer;
- •Visible : Boolean;
- •Implementation
- •Var Temp : Word;
- •Var Temp : Word;
- •Var gm,gd:Integer;
- •Xp:Point;
- •Xs:Square;
- •Xps:PaintSquare;
- •InitGraph(Gd,Gm,'');
- •2. Демонстрационные примеры
- •X,y:integer;
- •Inherited init(ax,ay);
- •Задача 12. Простые объекты.
- •Задача 14. Простые объекты.
- •Задача 15. Простые объекты.
- •Задача 20. Простые объекты.
- •Задача 21. Простые объекты.
- •Задача 22. Простые объекты.
- •Задача 23. Простые объекты.
- •Задача 25. Простые объекты.
- •Лабораторная работа №8 Статические объекты
- •Теоретическая часть
- •1.1.Вывод точек и линий
- •1.2.Вывод многоугольников
- •Виды закраски определяется константами.
- •1.3.Вывод дуг, окружностей, эллипсов
- •1.4.Вывод текста
- •Демонстрационные примеры
- •Лабораторная работа №9
- •2. Задачи, для самостоятельного решения
- •Лабораторная работа №10
- •1.2. Перенос изображения
- •1.3. Масштабирование изображения
- •1.4. Масштабирование рисунка
- •1.5. Поворот изображения
- •1.5.1.Поворот точки
- •1.5.2. Поворот рисунка
- •1.6. Композиция преобразований
- •2. Демонстрационные примеры
- •X,y:integer;
- •1: CloseGraph;
- •3.Задачи, для самостоятельного решения
- •Лабораторная работа №12 Рубежный контроль №2
- •Задачи, для самостоятельного решения
Var X,y,I: byte;
Begin
NormVideo;
ClrScr;
for I:=1 to 40 do
begin
X:= Succ(Random(80));
Y:= Succ(Random(25));
Window (X, Y, X+Random(20), Y+Random(8));
TextBackGround(Random(8));
ClrScr;
Write(‘Вывод в окно’, ^G,I:); { ^G - подает звуковой сигнал}
Delay(300);
end
End.
Программа последовательно генерирует 40 окон, границы и фон выбирается случайным образом. В каждое окно выводится сообщение. Необходимо помнить, что Crt поддерживает только текущее окно, информация из предыдущих окон теряется для пользователя, если он сам об этом не позаботиться.
Для сохранения координат окон можно воспользоваться следующей структурой:
Type WinRecord – record
XUpLeft;
YUpLeft;
XLowRight;
YLowRight: byte;
end;
const MaxWin = 10;
Var WinMas: array[1..MaxWin] of WinRecord;
При включении данного фрагмента в пользовательскую программу можно сохранять координаты и устанавливать до 10 различных окон вывода.
Окна часто используются в программах для скроллинга (прокрутки) текстовой информации. Этот процесс проще всего реализовать с помощью процедур InsLine и DelLine.
Пример 3.2.
Program DemoInsLine;
Uses Crt;
Var I: byte;
Begin
Window (20,6,60,15);
ClrScr;
for I:=1 to 10 write (‘Вывод в окно’);
for I:=1 to 5 do
begin
GotoXY(1,1);
InsLine;
write(‘Вставка строки’);
Delay(500);
end
End.
2. Демонстрационные примеры
Пример 3.3. Разработать вертикальное меню из четырех пунктов:
New, open, save, exit. Окно меню синего цвета, названия пунктов должны быть выведены желтым цветом. Выделение пункта выполнить фиолетовым цветом фона. Реализовать выход по выбору пункта «exit».
При разработке алгоритма программы выделим 2 подпрограммы:
подпрограмму рисования пункта меню как окна с текстом внутри;
подпрограмму рисования меню с выделенным пунктом.
В процессе работы основная программа вводит коды клавиш и организует работу меню. После завершения работы такая программа должна восстановить стандартное окно 25х80 и стандартные цвета символа и фона MS DOS.
Program ex;
Uses crt;
Var npos,I: integer;
ch1,ch2: char;
Type
win = record {описываем тип окон пунктов меню}
x1,y1,x2,y2: word; {координаты окна}
text: string [8]; {название пункта меню}
end;
{описываем массив окон пунктов меню}
const menu: array [1..4] of win =
((x1:5; y1:4; x2:15; y2:4; text: ‘new’),
(x1:5; y1:5; x2:15; y2:5; text: ‘open’),
(x1:5; y1:6; x2:15; y2:6; text: ‘save’),
(x1:5; y1:7; x2:15; y2:7; text: ‘new’));
{процедура рисования пункта меню}
Procedure DrawWin (w: win; attr: byte);
Begin
With w do
Begin
TextAttr:= attr; {устанавливаем атрибут окна пункта}
Windows (x1,y1,x2,y2); {устанавливаем окно пункта}
Clrscr; {высвечиваем окно пункта}
GotoXY(2,1); {устанавливаем курсор}
Write(text); {выводим название пункта меню}
End;
End;
{процедура рисования меню с выделением пунктов npos}
procedure DrawMenu ( npos: integer);
begin
clrscr;
for i:=1 to 4 do
if i = npos then DrawWin (menu[i],94) {выводим выделенный пункт}
else DrawWin (menu [i],30); {выводим невыделенный пункт}
end;
{основная программа}
begin
npos:= 1; {выделенный пункт меню}
DrawMenu (npos); {выводим меню}
Repeat
Ch1:= ReadKey; if ch1=#0 then ch1:=ReadKey;
Case ch1 of
#0: case ch2 of
#72: begin {стрелка вверх}
if npos > 1 then {если не верхний пункт}
begin
DrawWin(menu[npos], 30); {убираем выделение текущего пункта меню}
Npos:=Npos - 1; {переходим к предыдущему пункту}
DrawWin(menu[Npos],90); {выделяем новый пункт}
End;
End;
#80: begin
if Npos <4 then {если не нижний пункт}
begin
DrawWin(menu[npos],30); {убираем выделение текущего пункта}
Npos:=npos+1; {переходим к следующему пункту}
DrawWin (menu[npos],94); {выделяем новый пункт}
End;
End;
End; {case интерпретации расширенного кода}
#13: begin
Window(1,1,80,25);
TextAttr:=7;
ClrScr; {очищаем экран}