- •Лабораторная работа №9
- •1. Теоретическая часть
- •1.1. Использование стандартных модулей в языке программирования Pascal. Модуль crt.
- •1.2. Использование нестандартных модулей в языке программирования Pascal.
- •Заголовок модуля.
- •Интерфейс.
- •Исполнительная часть.
- •Секция инициализации.
- •Использование модуля в основной программе.
- •1.3 Пример составления программы на языке Pascal с использованием подключаемых нестандартных модулей и расширенным пользовательским интерфейсом.
- •2. Практическая часть
- •2.1 Требования к выполнению работы:
- •2.2 Варианты индивидуальных заданий.
Заголовок модуля.
Заголовок модуля состоит из служебного слова Unit и названия модуля. Например: Unit NameMod;
При отладке модуля он помещается в обыкновенный файл с расширением .pas, но имя этого файла должно совпадать с именем модуля.
Интерфейс.
Через интерфейс осуществляется взаимодействие модуля с основной программой или модуля с модулями. Начинается интерфейс со слова Interface. Интерфейс может содержать раздел Uses, разделы описания меток, констант, типов, переменных, подпрограмм.
В Uses могут быть указаны имена тех модулей, которые используются в данном модуле. Далее, как и в программах, указываются те объекты модуля, которые передаются в другие программы или модули. Константы, типы, переменные описываются как обычно. Для подпрограмм здесь указывается только заголовок, но с указанием списка параметров. Любой из разделов может отсутствовать.
Исполнительная часть.
Исполнительная часть модуля начинается со слова Implementation и может содержать раздел Uses, разделы описания меток, констант, типов, переменных, подпрограмм.
В Uses здесь указывают имена модулей, которые используются в данном модуле, не дублируясь с интерфейсом, список локальных меток, констант, типов и переменных, которые используются внутри этого модуля. Далее идет раскрытие всех подпрограмм. В заголовках подпрограмм можно не указывать список параметров.
Секция инициализации.
В некоторых случаях перед вызовом модуля необходимо произвести установку некоторых начальных исходных данных или выполнить какие-то действия.
Если перед концом модуля end поместить зарезервированное слово begin, а между ними – операторы, то получившийся составной оператор, похожий на основное тело программы, становится секцией инициализации модуля. В ней инициализируются структуры данных (переменных), которые использует программный модуль или которые он делает доступными программе, использующей данный модуль.
При выполнении программы, использующей некоторый модуль, секция инициализации этого модуля вызывается перед запуском основного тела программы. Если программа использует более одного модуля, то секции инициализации всех модулей вызываются (в порядке, указанном в операторе uses в программе) перед тем, как выполнить основное тело программы.
Использование модуля в основной программе.
Для того, чтобы использовать модуль в основной программе, в начале этой программы необходимо указать uses и имя модуля. После этого в программе можно использовать любой объект, записанный в интерфейсе данного модуля.
При отладке программы необходимо сначала отладить все используемые ей модули, начиная с самого младшего, т.е. с того, в котором нет обращения к другому модулю. При успешной компиляции модуля создается файл с расширением .tpu и тем же именем.
1.3 Пример составления программы на языке Pascal с использованием подключаемых нестандартных модулей и расширенным пользовательским интерфейсом.
Задание: Составить программу с использованием нестандартных модулей в соответствии со следующими требованиями:
– в первом модуле выполнить ввод и сортировку по возрастанию массива целых чисел A(30).
– во втором модуле выполнить ввод элементов квадратной матрицы действительных чисел B(3x3) и найти в ней максимальный элемент.
В основной программе предусмотреть меню из трех пунктов: Обработка массива, Обработка матрицы, Выход. Переход между пунктами меню осуществлять с помощью клавиш «Вверх» и «Вниз». Меню разместить в левом верхнем углу экрана. Цвет активного пункта меню задать синим, неактивного – серым. Фоновый цвет задать черным, а цвет шрифта – желтым.
При выборе первого или второго пункта меню должны вызываться подпрограммы из соответствующих модулей.
Решение.
Первый модуль назовем Unit1_9 и выполним в нем ввод и сортировку массива целых чисел с помощью двух процедур – VvodMas и SortMas.
Второй модуль назовем Unit2_9 и выполним в нем ввод и поиск минимального элемента в квадратной матрицу действительный чисел с помощью двух процедур – VvodMatr и MinMatr.
Основная программа будет обеспечивать прорисовку м переход между пунктами меню, а также выполнение действий при выборе каждого пункта меню.
1.3.1 Текст программы и модулей на языке Pascal.
Модуль Unit1_9.pas (обработка массива)
unit unit1_9;
interface
type mas=array[1..30] of integer;
Procedure VvodMas(n:byte;var x:mas);
Procedure SortMas(n:byte;var x:mas);
implementation
Procedure VvodMas;
var i:byte;
begin
writeln('Massiv:');
for i:=1 to n do
begin
x[i]:=random(50)-25;
write(x[i]:6);
if i mod 10 = 0 then writeln;
end
end;
Procedure SortMas;
var i,j:byte;
Xx:integer;
begin
for i:=1 to n-1 do
begin
for j:=1 to n-i do
begin
if x[j]>x[j+1]
then begin
Xx:=x[j];
x[j]:=x[j+1];
x[j+1]:=Xx;
end;
end;
end;
writeln('New massiv:');
for i:=1 to n do
begin
write(x[i]:6);
if i mod 10 = 0 then writeln;
end;
end;
end.
Модуль Unit2_9.pas (обработка матрицы)
unit unit2_9;
interface
type matr=array[1..3,1..3] of real;
Procedure VvodMatr(m:byte;var y:matr);
Procedure MinMatr(m:byte; y:matr);
implementation
Procedure VvodMatr;
var i,j:byte;
begin
writeln('Matrix:');
for i:=1 to m do
begin
for j:=1 to m do
begin
y[i,j]:=20*random-10;
write(y[i,j]:6:2);
end;
writeln;
end;
end;
Procedure MinMatr;
var i,j,imin,jmin:byte;
Min:real;
begin
Min:=y[1,1];
imin:=1;
jmin:=1;
for i:=1 to m do
for j:=1 to m do
if y[i,j]<Min
then begin
Min:=y[i,j];
imin:=i;
jmin:=j;
end;
writeln('Minimalniy element v matrice: element nomer ',imin,',',jmin,', ravniy ',Min:6:2);
end;
end.
Основная программа (меню)
program Primer9;
Uses crt,unit1_9,unit2_9;
Const
Enter = #13; {Код клавиши Enter}
Esc = #27; {Код клавиши Esc}
Up = #72; {Код клавиши Up}
Down = #80; {Код клавиши Down}
kolvo=3; {Kolvo – количество пунктов меню}
x_top=1; {x_top – координата x верхнего левого угла меню}
y_top=1; {y_top - координата y верхнего левого угла меню }
menu: array [1..3] of string[30] = (' Massiv',' Matrix',' Exit'); {пункты}
var
ch:char; {переменная для считывания кода нажатой клавиши}
nomer: byte; {номер текущего пункта меню}
A: mas; B: matr;
Begin
TextBackGround(black); {устанавливается черный фон}
Window(1,1,80,25); {рисуется окно на весь экран}
clrscr;
nomer:=1; {номер пункта меню - 1}
TextColor(yellow); {желтый цвет текста}
TextBackGround(lightgray); {светло-серый фон текста}
while nomer<=kolvo do
begin
windowx_top,y_top+nomer,x_top+8,y_top+nomer); {рисуется окно шириной 8}
{для текущего пункта меню nomer}
clrscr;
write(menu[nomer]); {в это окно выводится название пункта меню}
nomer:=nomer+1; {переход к следующему пункту меню}
end;
nomer:=1; {номер пункта меню - 1}
while (ch<>Esc) do {пока не нажата клавиша Esc}
begin
TextBackGround(blue); {синий фон текста}
window(x_top,y_top+nomer,x_top+8,y_top+nomer);{окно активного пункта меню}
clrscr;
write (menu[nomer]); {в это окно выводится название пункта меню}
ch:=readkey; {в ch считывается код нажатой клавиши}
TextBackGround(lightgray); {светло-серый фон текста}
window (x_top,y_top+nomer,x_top+8,y_top+nomer); {неактивный пукнт меню}
clrscr;
write (menu[nomer]); {выводится название пункта меню}
case ch of {выбор кода нажатой клавиши}
Up: if nomer<>1 {Нажата клавиша Вверх. Если не первый пункт меню}
then nomer:=nomer-1 {то переход к пункту меню на 1 выше}
else nomer:=kolvo; {иначе переход к последнему пункту меню}
Down: if nomer<>kolvo {Нажата Вниз. Если не последний пункт меню}
then nomer:=nomer+1 {то переход к пункту меню на 1 ниже}
else nomer:=1; {иначе переход к 1му пункту меню}
Enter: begin if nomer=1 {Нажата Enter. Если пункт меню первый }
then begin
window(1,1,80,25); {окно на весь экран}
TextBackGround(black); {черный фон}
clrscr;
VvodMas(30,A); {вызов процедур из Unit1_9}
SortMas(30,A); {вызов процедур из Unit1_9}
readln; {задержка результатов на экране}
end;
if nomer=2 {если пункт меню-второй}
then begin
clrscr;
window(1,1,80,25); {окно на весь экран}
TextBackGround(black); {черный фон}
clrscr;
VvodMatr(3,B); {вызов процедур из Unit2_9}
MinMatr (3,B); {вызов процедур из Unit2_9}
readln; {задержка результатов на экране}
end;
if nomer=3 then exit; {если пункт меню 3, то выход}
clrscr; {очистка экрана и далее прорисовка меню}
TextBackGround(lightgray);
while nomer<=kolvo do
begin
window (x_top,y_top+nomer,x_top+8,y_top+nomer);
clrscr;
write(menu[nomer]);
nomer:=nomer+1;
end;
nomer:=1;
end;
end;
end;
End.
1.3.2 Результаты работы программы.
Меню:
Massiv
Matrix
Exit
Результаты при выборе первого пункта меню:
Massiv:
-25 -24 18 -15 -12 8 -10 -17 -7 -4
-21 -2 -22 17 -23 -11 20 -7 13 -9
9 17 10 -10 -17 -9 -2 -13 16 -12
New massiv:
-25 -24 -23 -22 -21 -17 -17 -15 -13 -12
-12 -11 -10 -10 -9 -9 -7 -7 -4 -2
-2 8 9 10 13 16 17 17 18 20
Результаты при выборе первого пункта меню:
Matrix:
9.64 2.98 -2.51
5.75 -4.54 -0.47
9.85 -2.24 -3.45
Minimalniy element v matrice: element nomer 2,2, ravniy -4.54
