Л. Р. «типизированные файлы, массивы и подпрограммы» |
Студент |
Иванов И. И. |
Группа |
ХХ-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);