Название: Алгоритмы и программы (Афанасьева Т. В.)

Жанр: Информационные системы и технологии

Просмотров: 1339


10.1. разработка пользовательских модулей

 

Рассмотрим структуру модуля.

 

unit <идентификатор>; { Имя модуля }

 

{ интерфейсная часть - открытая часть}

 

interface           { Начало раздела объявлений }:

uses      { Используемые при объявлении модули }

const    { Подраздел объявления доступных глобальных}

{ констант }

type      { Подраздел объявления доступных глобальных}

{ типов }

var       { Подраздел объявления доступных глобальных}

{переменных }

label     { Подраздел объявления доступных глобальных}

{ меток }

procedure         { Заголовки доступных процедур }

function            { Заголовки доступных функций }

 

{ реализационная часть – закрытая часть }

 

implementation { Начало раздела инициализации }:

uses      { Используемые при реализации модули }

label     { Подраздел объявления скрытых глобальных }

{меток}

const    { Подраздел объявления скрытых глобальных }

{констант }

type      {Подраздел объявления скрытых глобальных типов}

var       { Подраздел объявления скрытых глобальных}

{переменных }

procedure         { описание процедур }

function            { описание функций }

 

{ инициализационная часть.}

 

begin    { Основной блок модуля }

end.

 

Заголовок модуля специфицирует имя модуля, которое вы будете использовать для обращения к нему в разделе USES вашей программы.

В интерфейсной части описываются константы, типы, переменные,

процедуры и функции доступные пользователю данного модуля.

В интерфейсной части записаны только заголовки процедур и функций. Их тела расположены в разделе реализации.

Реализационная часть содержит тела всех доступных процедур и функций.

Также  в          ней      описаны         скрытые          константы,     типы,  переменные,

процедуры и функции не доступные пользователю данного модуля.

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

 

Пример 10.1. Модуль, содержащий одну процедуру сортировки элементов массива, стоящих на четных местах.

unit lov_1m;

interface uses crt;

type arr=array[1..10] of integer;

procedure mas(var a:arr);

 

implementation

Procedure mas; {процедура сортировки mas методом парных перестановок}

var s,q,i,j,k,f,m:integer;

Begin repeat

s:=0;

For i:=2 to 8 do

If i mod 2=0 then          {выбор элементов, стоящих на четных

местах}

 

 

If a[i]>a[i+2] then begin            {сортировка элементов по

возрастанию}

 

 

until s=0; end;{mas} End.

j:=a[i]; a[i]:=a[i+2]; a[i+2]:=j; s:=s+1;

end;

 

 

Программа, использующая вышеописанный модуль LOV_1.PAS.

 

Program REX;  {программа с использованием процедуры модуля}

uses lov_1m,crt;           {подключение модуля lov_1m}

var

myarray:arr;{тип arr описан в модуле lov_1m}

i,k,q,j,s:integer; Begin

clrscr;

randomize;

Write(' Исходная последовательность: '); For i:=1 to 10 do

begin

myarray[i]:=random(55); {заполнение массива случайными

элементами}

 

 

Write(myarray[i]:2,' ');

 

 

lov_1m}

end; Writeln;

Write(' Новая последовательность: ');

mas(myarray); {обращение к процедуре сортировки mas модуля

 

For i:=1 to 10 do Write(myarray[i]:2,' ');

End.

 

Пример 10.2. Модуль, содержащий коонстанты и 3 процедуры. unit lov_3m;     {модуль lov_3m}

interface uses crt;

type arr=array[1..5,1..5] of integer;

const fam=' Задача. Расположить элементы двумерного массива в нечетных     ';

const fam1='     строках по возрастанию их значений.        ';

const fam2='     После просмотра результатов программы нажмите

<Esc>. ';

 

procedure win1(x1,y1,x2,y2,c,b:byte); {вывод окна }

procedure win2(x1,y1,x2,y2,c,b:byte); {вывод окна с мерцающими символами}

procedure mas(var g:arr);          {сортировка массива}

 

implementation

Procedure win2;           {процедура win2}

begin

window(x1,y1,x2,y2);               {окно} textbackground(c);       {цвет экрана} textcolor(b+blink);      {цвет мерцающего символа} end;

Procedure win1;           {процедура win1}

begin

window(x1,y1,x2,y2);                           {окно} textbackground(c);                   {цвет экрана} textcolor(b);     {цвет символа} end;

Procedure mas; var i,j,k,f,m:integer; begin

for i:=1 to 5 do

if i mod 2<>0 then        {поиск нечетных строк}

for j:=1 to 5 do

begin    {сортировка элементов по }

{возрастанию}

m:=g[i,j];

k:=j;

for f:=j+1 to 5 do

if g[i,f]<m then begin m:=g[i,f];

k:=f;

end; g[i,k]:=g[i,j]; g[i,j]:=m;

end;

end;{mas}

end.

Программа, использующая модуль LOV_3.PAS.

Program mod_sort;

uses lov_3m; var myarray:arr;

i,j,x11,x12,y11,y12,a1,b1:byte; Begin

randomize;

writeln(fam);     {печать констант fam,fam1,fam2}

writeln(fam1); writeln; writeln(fam2);

win1(13,15,68,22,14,15);        {установка окна win1}

writeln(' Данная матрица');

writeln;

win1(13,17,68,22,7,0);            {установка окна win1}

for i:=1 to 5 do for j:=1 to 5 do

myarray[i,j]:=random(88);         {заполнение массива случайными элементами}

for i:=1 to 5 do begin

for j:=1 to 5 do

write(myarray[i,j]:3);     {печать элементов массива}

writeln;

end;

win2(50,15,68,22,4,15);          {установка окна win2}

writeln(' Полученная матрица');

mas(myarray);  {обращение к процедуре mas}

win1(52,17,68,22,7,0);

for i:=1 to 5 do begin

for j:=1 to 5 do

write(myarray[i,j]:3);     {печать полученной матрицы}

writeln;

end; End.

 

Пример 10.3. Модуль с разделом инициализации.

 

unit lov_4m; {модуль lov_4m использует раздел инициализации}

interface uses crt;

type arr=array[1..5,1..5] of integer;

f:text;

procedure mas(var a:arr);

 

implementation

 

Procedure mas; {процедура поиска минимального и максимального элемента}

var i,j,Min,Max:integer;

begin    {поиск max. и min. элементов} Max:=A[1,1];

Min:=A[1,1]; For i:=1 to 5 do

For j:=1 to 5 do begin

If A[I,j]>=Max

then Max:=A[I,j]; If A[i,j]<=Min

then Min:=A[i,j];

 

 

end;

end;

begin {раздел инициализации}

assign(f,'love.dat');

rewrite(f); End.

 

Программа, использующая модуль LOV_4M.

 

Program rifle; {программа использует модуль с разделом инициализации}

uses lov_4m;    {подключение модуля lov_4m}

var

A : arr; {массив описан в модуле lov_4m} B :array[1..5,1..5] of integer;

I,j:byte;

Z,P : integer; Max,Min:real;

Begin Randomize; Writeln;

Writeln(' Задача. Заменить все отрицательные элементы ' ); Writeln('       матрицы А(5,5)          ');

Writeln('           на 0, если сумма Min. и Max. эл–ов этой '); Writeln ('         матрицы');

Writeln('           меньше произвольного числа P,которое '); Writeln ('          задается с      клавиатуры.   '); Writeln;

Writeln;

Write('  Введите любое целое число:P='); READLN(P);

writeln('            Данная матрица        ');

writeln;

For I:=1 to 5 do begin

For J:=1 to 5 do begin

A[I,j]:=Random(55);    {заполнение матрицы} A[i,j]:=A[i,j]–50;

Write(A[i,j]:3,' ');

Writeln(F,A[I,j]); {запись в файл, описанный и открытый в }

{          модуле lov_4m}

end; Close(F); end;

mas(a); {обращение к процедуре mas} Reset(F);     {открытие файла для считывания} writeln(' Полученная матрица ');

writeln;

For I:=1 to 5 do begin

For j:=1 to 5 do begin

READLN(F,A[I,j]);     {считывание из файла} If (Min+Max<P) and (A[I,j]<0)

then

A[I,j]:=0

Write(A[I,j]:3,' ');

end; writeln; end;

Close(F);          {закрытие файла} End.

 

Задания для самостоятельного выполнения

ТРЕБОВАНИЯ! Создайте и откомпилируйте свой модуль, в который включите:

1) описания ранее разработанных вами подпрограмм,

2) описание типов, переменных и констант, например, тип – массив,

константа – назначение программы.

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