Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4 - Файлы_Массивы_Подпрограммы.doc
Скачиваний:
6
Добавлен:
14.03.2016
Размер:
1.43 Mб
Скачать

Л. Р.

«типизированные файлы, массивы и подпрограммы»

Студент

Иванов И. И.

Группа

ХХ-999

Дата

дд.мм.гг

Допуск

Выполнение

Отчет

Условие задачи

Ввести файлы и , вывести их. Сформировать квадратную матрицу максимально возможного размера из положительных элементов этих файлов и аналогичную матрицу из отрицательных элементов файлов. Главную диагональ матрицы, в которой больше четных элементов заменить на максимум соответствующего файла (для файла , а для - ). (прим.: при решении использовать подпрограммы)

Тестовые примеры

Входные данные:

файл F1

1 2 3 4 5 6 -3 4 -6 0 0 4 3 4 -5

файл F2

2 3 4 5 6 -4 -5 -10 3 4 -4 2 -1 0 3 5

Выходные данные:

в файле F1 положительных 10

в файле F1 отрицательных 3

в файле F2 положительных 10

в файле F2 отрицательных 5

матрица A1 имеет размерность: 4

матрица A2 имеет размерность: 2

Матрица A1 после формирования:

1 2 3 4

5 6 4 4

3 4 2 3

4 5 6 3

Матрица A2 после формирования:

-3 -6

-5 -4

в матрице A1 больше четных

максимум файла F1:6

Матрица A1 после формирования:

6 2 3 4

5 6 4 4

3 4 6 3

4 5 6 6

Блок-схема

Листинг программы на Pascal

program MaxMInExch;

const L=10;

type T2M = array[1.. L,1..L] of integer;

Tname = string[4];

TF = file of integer;

var A1,A2: T2M;

F1,F2 :TF;

N1,N2,i1,i2,j1,j2:byte;

maxF1,maxF2,Npol1,Notr1,kchet1,kchet2,Npol2,Notr2:integer;

// процедура для ввода файла

procedure VvodF(var F:TF; const name:Tname);

var buf:integer;

begin

rewrite(F);

writeLn('введите первую компоненту файла ', name);

writeLn('999 - окончание ввода');

readLn(buf);

while buf<>999 do

begin

write(F,buf);

writeLn('введите следующую компоненту:');

readLn(buf);

end;

end;

// процедура для вывода файла

procedure VivodF(var F:TF; const name:Tname);

Var buf:integer;

begin

reset(F);

writeLn('Выводим файл ', name);

while not EOF(F) do

begin

read(F,buf);

write(buf:5);

end;

writeLn;

end;

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

procedure PodschetPolOtr(var F:TF; var Npol,Notr: integer);

var kP,kO:byte;

buf:integer;

begin

reset(F);

kP:=0; // положительные

kO:=0; // отрицательные

while not EOF(F) do

begin

read(F,buf);

if buf>0 then

inc(kP)

else if buf<0 then

inc(kO);

end;

// передаем полученные значения в глобальный модуль

Npol:=kP;

Notr:=kO;

end;

// функция поиска максимума в файле

function MaxInF(var F:TF):integer;

var max,buf:integer;

begin

reset(F);

read(F,max);

while not EOF(F) do

begin

read(F,buf);

if buf>max then

max:=buf;

end;

MaxInF:=max;

end;

// процедура для вывода матрицы

procedure VivodMx(const A:T2m; const N,M: byte; const name:Tname);

var i,j:byte;

begin

writeLn('Матрица ',name,' после формирования:');

for i:=1 to N do

begin

for j:=1 to M do

write(A[i,j]:4);

writeLn;

end;

end;

// функция для подсчета числа четных в матрице

function PodschetChet(const A:T2m; const N,M:byte):integer;

var kCh:integer;

i,j:byte;

begin

kCh:=0; // четные

for i:=1 to N do

for j:=1 to M do

if A[i,j] mod 2 = 0 then

inc(kCh);

// передаем полученные значения в глобальный модуль

PodschetChet := kCh;

end;

// замена главной диагонали матрицы на ch

procedure ZamenaDiag(var A:T2m; const N: byte; const ch:integer);

var i:byte;

begin

for i:=1 to N do

A[i,i]:=ch;

end;

// формирование матриц из файла

procedure formMxFromFile(var F:Tf; var A1,A2:T2m; var i1,j1,i2,j2:byte);