Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

лек.№6 информ

.pdf
Скачиваний:
8
Добавлен:
18.03.2015
Размер:
206.89 Кб
Скачать

ЛЕКЦИЯ 7. ПАСКАЛЬ. РАЗРАБОТКА И ИСПОЛЬЗОВАНИЕ МОДУЛЕЙ

ПЛАН

6.1.РАЗРАБОТКА МОДУЛЕЙ

6.2.СТАНДАРТНЫЕ МОДУЛИ

6.2.1.Модуль СRT

6.2.1.1Управление экраном в текстовом режиме

6.2.1.2Управление клавиатурой

6.2.1.3Работа с символьными переменными

6.2.1.4Работа со строковыми переменными

6.2.1.5Управление звуковыми сигналами

6.1. Разработка модулей

Unit

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

Исполняемая часть, Implementation (описание процедур: заголовок, разделы описания и выполнения, заголовки которых перечислены в интерфейсной части, а также локальных имен типов, меток, констант и переменных, используемых в ини-

циирующей части).

 

 

 

Инициирующая часть , Begin.. End. (блок операторов,

выполняемых при под-

ключении модуля к основной программе).

 

 

 

Фрагмент 1.

 

 

 

 

Структура модуля имеет вид:

 

 

 

Unit Name_M; { Name_M - имя модуля }

 

 

{-----------------------------------------------------------------------------------------------------------------

 

 

}

 

Interface { Интерфейсная часть модуля}

 

 

{------------------------------------------------------------

 

раздел описания глобальных имен}

 

Type MM=array[1..10, 1..10] of real; {описание типа}

 

 

Var Max_F, Min_F: real; {описание глобальных переменных}

{------------------------------------------------------------------------------------------------------------------

 

 

}

 

Procedure Name_P(p1: real; p2: MM);

 

 

 

{описание заголовков процедуры}

 

 

 

Function Name_f(p3,p4:real):real; { и функции}

 

{-----------------------------------------------------------------------------------------------------------------

 

 

}

Implementation

{Исполняемая часть модуля}

{---------------------------------------------------------------

раздел описания локальных имен}

Const C = 'Подключен модуль Name_M';

{ задание локальной константы}

Procedure Name_P; {Полное описание процедуры}

{ Раздел описания процедуры}

Begin { Раздел выполнения процедуры} End;

Function Name_f: real; {Полное описание функции}

{ Раздел описания функции}

 

Begin { Раздел выполнения функции}

End;

{-----------------------------------------------------------------------------------------------------------------

}

BEGIN { Инициирующая часть модуля}

 

Writeln(C); {операторы модуля}

 

END.

Модуль записывается в файл с именем модуля, например, Name_M. pas.

Затем файл компилируется, например, Name_M. tpu, и записывается в каталог, указанный в опции Options, Directories, EXE & TPU, иначе - в текущий каталог.

При запуске программы, использующей модуль, файл с расширением ". tpu" ищется в каталоге, указанном в опции Options, Directories, EXE & TPU или Unit Directories, либо в текущем каталоге.

Program Pr_1;

Uses Name_M1, Name_M2;

Фрагмент 2. Пример разработки и подключения модуля работы с матрицами.

Unit MATR_1;

{--------------------------------------------------------------------------------------------------------------

}

Interface

{--------------------------------------------------------------------------------------------------------------

}

Type

M = array[1..10, 1..10] of real;

M1 = array[1..10] of real;

Procedure MAT_1(a:M; var b:M; n: word);

Procedure MAT_2(a:M; var b:M1; n: word);

{--------------------------------------------------------------------------------------------------------------

 

}

Implementation

 

{--------------------------------------------------------------------------------------------------------------

 

}

Procedure MAT_1;{создание матрицы "B", транспонированной к "A"}

var i, j: word;

 

begin

for i:=1 to N do

for j:=1 to N do b[i,j]:=a[j,i]

end;

 

 

{-------------------------------------------------------------------------------------------------------------

 

}

Procedure MAT_2; {расчет квадратов диагональных элементов}

var i, j: word;

 

begin

for i:=1 to N do

b[i]:=a[i,i]*a[i,i]

end;

 

 

{---------------------------------------------------------------------------------------------------------------

 

}

END.

 

 

Пояснение работы:

В основной программе PR_1 подключается модуль MATR_1 и используются проце-

дуры MAT_1 и MAT_2.

Program PR_1;

Uses MATR_1;

Type MM = M; MM1 = M1;

Var a1,a2,a3: MM; b1,b2: MM1; i,j,n: word;

Begin Writeln('введите размерность матрицы N='); Readln(n);

Randomize;

for i:=1 to n do for j:=1 to n do a1[i,j]:=random(20)+1; MAT_1(a1, a2, n); MAT_1(a2, a3, n);

MAT_2(a1, b1, n); MAT_2(a2, b2, n) end.

В результате двойного транспонирования исходной матрицы "a1" (из "a1" в "a2", из "a2" в "a3") получается матрица "a3" тождественная "a1" .

Матрицы "b1" и "b2" содержат квадраты диагональных элементов матриц "a1" и "a2". Типы массивов фактических параметров должны соответствовать типам массивов формальных параметров, описанных в модуле MATR_1. Можно использовать имена типов, заданные в интерфейсной части модуля или задавать новые имена типов.

6.2.Стандартные модули

6.2.1.Модуль СRT

6.2.1.1 Управление экраном в текстовом режиме

Uses CRT;

 

 

Табл. 1

Наименование

Параметры процедуры

Результат выполнения

процедуры

 

процедуры

TextMode(N);

N - тип Word

Задание текстового режима ра-

N=0

(40x25)-CGA- ч. б.

боты монитора.

 

 

 

N=1

(40x25) -CGA,

Экран очищается, курсор уста-

N=2

(80x25) -EGA, VGA,

навливается в позицию 1, 1.

N=3

(80x25) цветной

Цвета исходные: белые символы

N=N+256

(80x43)-EGA цветной

на черном экране

Ym

(80x50)-VGA цветной

Наибольшие значения координат

N=7

(80x25)-монохромный; (80

Хm:= Lo(WindMax)+1;

 

колонок х 25 строк );

Ym:= Hi(WindMax)+1;

 

 

 

Window(x1, y1, x2,

x1, y1, x2, y2 - тип Byte

Задание окна на экране. Курсор

y2);

1 <= x1 < x2 <= Xm, 1 <= y1

устанавливается в позицию (1, 1)

 

< y2 <= Ym

в системе координат окна. Пре-

 

в системе координат экра-

вышение координат экрана игно-

 

на.

рируется.

Наименование

Параметры процедуры

Результат выполнения

процедуры

 

процедуры

TextBackGround(N);

N - тип Byte, 0 <=N<= 7

Назначение цвета фона. При

 

 

N>7 N:= N mod 8

Clrscr;

Использование процедуры

Очистка активного окна, экрана

 

после TextBackGround(N);

курсор устанавливается в пози-

 

закрашивает активное окно

цию (1, 1). Закрашивание окна.

TextColor(N);

N - тип Byte 0 <=N<= 15 а

Назначение цвета символов.

 

также при N:= N + 128 вы-

При N>15, N:= N mod 16,

 

вод мерцающих символов -

 

GotoXY(x, y);

x, y - тип Byte

Установка курсора в позицию (

 

 

x, y ) в системе координат актив-

 

 

ного окна, экрана.

InsLine;

 

Вставка пустой строки.

DelLine;

 

Удаление строки в позиции

 

 

курсора.

ClrEol;

 

Стирание символов от позиции

 

 

курсора до конца строки.

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

 

повышенная (HighVideo;),

 

 

 

 

 

пониженная (LowVideo;)

 

 

 

 

 

нормальная (NormVideo;)

 

 

 

 

 

Функции, возвращающие

номер

текущего столбца (WhereX;) и строки

(WhereY;), типа - Byte.

 

 

 

 

 

В процедурах TextBackGround(N); и TextColor(N); параметр N назначает цвета:

 

 

 

 

 

Табл. 2

0

Black, черный

 

8

 

DarkGray, темно-серый

1

Blue, синий

 

9

 

LightBlue, ярко-синий

2

Green, зеленый

 

10

 

LightGreen, ярко-зеленый

3

Cyan, голубой

 

11

 

LightCyan, ярко-голубой

4

Red, красный

 

12

 

LightRed, ярко-красный

5

Magenta, фиолетовый

 

13

 

LightMagenta, ярко-фиолетовый

6

Brown, коричневый

 

14

 

Yellow, желтый

7

LightGray, ярко-серый

 

15

 

White, белый

 

Мерцание символов можно получить,

также задавая: N:= N + 128;

 

В процедурах TextBackGround(N);

и TextColor(N); вместо N можно использо-

вать наименование цвета, например:

 

N:=1; TextColor(N); { либо } TextColor(Blue);

6.2.1.2 Управление клавиатурой

KeyPressed; - возвращает значение True (тип Boolean) - если была нажата любая клавиша (кроме Ctrl, Alt, NumLock и т. п. ), иначе - False.

ReadKey; - возвращает символ нажатой клавиши (тип Char).

Repeat Writeln('Нажмите скорее любую клавишу') until KeyPressed; Repeat Writeln('Нажмите клавишу "А"'); c:=ReadKey until c='А';

Для очистки буфера клавиатуры применяются операторы:

While KeyPressed Do c:=ReadKey;

Фрагмент 3.

Приведем пример программы, выводящей на экран в различных текстовых режимах надпись в виде ступеньки с заданным шагом "dx" по оси "х", в каждой строке "у" , начиная с позиции (1, 1).

PROGRAM FAM; Uses CRT;

var N : word; f, dx, x, y, i, j, xm, ym : byte; BEGIN

for i:=0 to 9 do begin {режимы работы монитора } if i<4 then N:=i else N:=256+i-4; if i=9 then N:=7;

textMode(N);

xm:=lo(WindMax)+1; ym:=hi(WindMax)+1; write('xm=',xm, '_ym=',ym, '_N=',N, '_Нажмите Enter');readln; TextBackGround(1);clrscr;TextColor(14);x:=1;

f:=8; dx:=3; { f - длина фамилии + курсор, dx - приращение отступа} for j:=1 to ym-1 do begin y:=j;

if (xm-x-f)<0 then x:=1; { контроль выхода надписи за экран } gotoXY(x, y); write('ФАМИЛИЯ'); x:= x + dx; end; Writeln; write('Нажмите Enter'); readln end;

TextMode(3)

END.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]