- •Московский государственный технический университет
- •Содержание.
- •Предисловие
- •Лабораторная работа №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 p: Pint;
…
p:= New(Pint);
При размещении в динамической памяти объекта размещается в качестве второго параметра обращения к New указывать имя конструктора.
Release(Ptr) – освобождает участок кучи. Здесь Ptr – указатель, любого типа, в котором предварительно было сохранено процедурой Mark значение указателя кучи. Освобождается участок кучи от адрес, хранящегося в Ptr, до конца кучи. Одновременно уничтожается список всех свободных фрагментов, которые, возможно, были созданы процедурами DisPose или FreeMem.
2. Демонстрационные примеры
Пример 5.1. Создать программу для поиска цифровых символов в некоторой строке. Написать на языке ТР 7.1 модуль stsearch.tpu, выполняющий поиск цифровых символов. Программа должна обладать одноуровневым меню, иметь опцию импорта строки из текстового файла (файл должен существовать по указанному адресу и не использоваться другими приложениями). Выход из программы возможен по выбору определенного пункта меню, нажатии клавиши Esc, либо комбинации клавиш “Ctrl + C”.
Program StSearch1;
Uses crt, stsearch;
Type win = record
X1,y1,x2,y2: word;
text: string[20];
end;
Var npos,I,n,j :integer;
ch1,ch2 :char;
nstr,path,autstr :string;
f1 :text;
const menu: array[1..4] of win =
((x1:5; y2:4; x2:21; y2:4; text: ‘Ввести строку’ )
(x1:5; y2:5; x2:21; y2:5; text: ‘Импорт из файла’ )
(x1:5; y2:6; x2:21; y2:6; text: ‘Просмотр цифр’ )
(x1:5; y2:7; x2:21; y2:7; text: ‘Выход’ ));
Procedure DrawWin(w: win; attr: byte); {изображение пункта меню}
begin
with w do
begin
textattr := attr; {устанавливает атрибуты текста}
window (x1,y1,x2,y2); {создает окно с указанными координатами}
clrscr;
gotoXY(2,1);
write(text);
end;
end;
Procedure DrawMenu(npos: integer); {последовательное изображение пунктов меню}
begin
clrcsr;
for i:=1 to 4 do
if i=npos then drawwin(menu[i], 255{94}) else drawwin (menu[i],29{30});
end;
begin {основная программа}
npos :=1; {исходная позиция выделенного пункта меню}
drawmenu (npos);
repeat
ch1 := readkey;
if ch = #0 then ch2 := 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],94); {выделение следующего пункта меню}
end;
end;
#80: begin {если нажата клавиша «вниз»}
if npos < 4 then {если не нижний пункт меню}
begin
drаwwin(menu[npos],30);
npos := npos + 1;
drawwin (menu [npos],94);
end;
end;
end;
#13: begin {если нажата клавиша «Enter»}
window (1,1,80,25);
textattr := 7;
clrscr;
textcolor (cyan);
case npos of
1: begin {выбран первый пункт меню}
writeln (menu[npos]. text);
write (‘>>’);
readln (instr);
end;
2: begin {выбран второй пункт меню}
textcolor (red);
writeln (menu[npos].text);
textcolor (white);
write (‘Введите путь >> ’);
readln (path);
assign (f1, path);
reset (f1); {rewrite (f1);}
readln (f1,instr);
end;