Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
posobie.doc
Скачиваний:
27
Добавлен:
31.03.2015
Размер:
1.43 Mб
Скачать

7.4. Примеры оформления процедур во внешних модулях

Пример 1.В варианте решения задачиm.0с процедурой (§ 6.5, пример 1, с. 89) перенесем процедуру в отдельный модульm0_unt.

Внешний модуль (файлm0_unt. pas)

unit m0_unt;

Interface

const

nmax=100; mmax=100;

type

diap=1..nmax; { для m,n,i }

matr=array[1..mmax,1..nmax] of real;

procedure provstr(m,n,i: diap; var a:matr;var y2:boolean);

Implementation

procedure provstr(m,n,i: diap; var a:matr;var y2:boolean);

var j:diap;

begin

< операторы >

end;

end.

Вызывающая программа

program ..... ;

uses m0_unt;

{описание глобальных типов и констант размещено во внешнем модуле} var

{описания переменных головного модуля}

m,n,i,j,k:diap; {описание типа доступно из модуля}

a:matr; {описание типа доступно из модуля}

y1,y2:boolean;

< описание процедуры >

begin

< ввод и вывод данных >

y1:=false; i:=1;

while not y1 and (i<=m) do

begin

{А01. Проверка строки}

provstr(m,n,i,a,y2); {описание процедуры доступно из модуля}

if y2 then

begin

y1:=true; k:=i

end;

i:=i+1;

end;

< вывод результата >

end.

Пример 2. В задаче mas_3 все процедуры разместим в модуле proc.pas.

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

Внешний модуль

unit proc;

Interface

{описание глобальных типов и констант }

const

nmax=20;

type

massiv=array[1..nmax] of real;

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

procedure input(var n:byte; var mas:massiv; var dat1:text);

procedure output(n:byte; var mas:massiv; name_mas:char; var res1:text);

procedure summa(n:byte;mas:massiv;var s:real);

Implementation

procedure input(var n:byte; var mas:massiv; var dat1:text);

…….

begin

…….

end;

procedure output(n:byte; var mas:massiv; name_mas:char; var res1:text);

…….

begin

…….

end;

procedure summa(n:byte;mas:massiv;var s:real)

…….

begin

…….

end;

end.

Вызывающая программа

programmas3 (dat,res);

uses proc;

{описание глобальных типов и констант размещено во внешнем модуле} var

{описания переменных головного модуля}

na,nb,nc:byte;

a,b,c:massiv; {все массивы одного типа, доступного из модуля}

sa,sb,sc:real;

name:char;

dat,res:text; {файловые переменные для входного и выходного файлов} {описание процедур размещено во внешнем модуле }

begin

assign (dat, paramstr(1)); reset(dat);

assign (res,paramstr(2)); rewrite(res);

writeln (res, ' <Заголовок по обр1>');

{ввод и вывод массивов}

input(na,a,dat); {ввод массива a}

output (na, a,'a', res); { вывод массива a по обр 2, 3}

input(nb,b,dat); { ввод массива b}

output (nb, b,'b', res); { вывод массива b по обр 4, 5}

input(nc,c,dat); { ввод массива c}

output (nc, c,'c',res); {вывод массива c по обр 6, 7}

{подсчет сумм элементов }

summa(10,a,sa); {обработка.10 элементов массива a из 20 элементов}

summa(20,b,sb); {обработка.20 элементов массива b из 20 элементов}

summa(15,c,sc); {обработка.15 элементов массива c из 20 элементов}

< вывод sa,sb,sc по обр 8>

< сравнение sa,sb,sc и формирование name >

< вывод name по обр 9>

close(dat); close(res);

end.

Вариант с локализацией файловой переменной и всех операций с файлом в процедуре

Каждый массив разместим в своем файле. Имена этих файлов будем задавать как параметры программы: 1-й параметр – файл с массивом а, 2-й – с массивомb, 3-й – с массивомс.

В процедуру ввода будем передавать как параметр имя входного файла. Назовем этот параметр name_inp.

Имя выходного файла зададим как 4-й параметр программы.

В процедуру вывода будем передавать как параметр имя выходного файла. Назовем этот параметр name_out.

Тогда последовательность обработки, касающейся работы с файлами, такова:

  • открытие и запись заголовка в выходной файл; закрытие его;

  • для каждого массива вызов процедур чтения из отдельного массива и записи в общий результирующий массив путем добавления в конец;

  • открытие результирующего массива и добавление в конец результатов.

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

Внешний модуль

unit proc;

Interface

{описание глобальных типов и констант }

const

nmax=20;

type

massiv=array[1..nmax] of real;

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

procedure input(var n:byte; var mas:massiv; name_inp:string);

procedure output(n:byte; var mas:massiv; name_mas:char; name_out:string);

procedure summa(n:byte;mas:massiv;var s:real);

Implementation

procedure input(var n:byte; var mas:massiv; name_inp:string);

var

dat: text; {локальная файловая переменная}

begin

assign (dat, name_inp);

reset (dat);

< ввод числа и значений элементов согласно входной форме>

close (dat);

end;

procedure output(n:byte; var mas:massiv; name_mas:char; name_out:string);

var

res: text; {локальная файловая переменная}

begin

assign (res, name_out);

append (res); {открытие текстового файла для добавления в конец}

< вывод числа и значений элементов согласно выходной форме >

close (res);

end;

procedure summa(n:byte;mas:massiv;var s:real);

var

i:byte;

begin

< операторы подсчета s >

end;

end.

Вызывающая программа

programmas3 (.....);

uses proc;

var

na,nb,nc:byte;

a,b,c:massiv;

sa,sb,sc:real;

name:char;

res:text; {локализованная в головном модуле файловая переменная для выходного файла}

name_res: string; {локализованная в головном модуле строка - имя выходного файла}

in_a,in_b,in_c:string; { локализованные в головном модуле строки - имена входных файлов}

begin

{инициация выходного файла и вывод в него заголовочного текста}

name_res:= paramstr(4); {чтобы не обращаться многократно к paramstr}

assign (res, name_res); rewrite(res);

writeln (res, ‘ <Заголовок по обр1 >’);

close (res); {закрытие выходного файла, так как процедура вывода предусматривает

открытие}

{ввод и вывод массивов}

in_a:= paramstr(1);

input (na, a,in_a); {ввод массива из соответствующего входного файла}

output (na, a,’a’, name_res); {вывод массива в конец постепенно формируемого выходного файла}

in_b:= paramstr(2);

input (nb, b, in_b); {ввод массива из соответствующего входного файла}

output (nb, b, ‘b’,name_res); {вывод массива в конец выходного файла}

in_c:= paramstr(3);

input (nc, c,in_c); {ввод массива из соответствующего входного файла}

output (nc, c, ‘c’,name_res); {вывод массива в конец выходного файла}

{подсчет нужных сумм: обращения к процедуре summa }

summa(na,a,sa);

summa(nb,b,sb);

summa(nc,a,sa);

< сравнение sa,sb,sc и формирование name >

{открытие выходного файла для добавления в конец и вывод в него результатов}

append(res);

< вывод результатов в файл>

close(res);

end.

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