В программе использывается 2 матрицы А и B которые находятся в 2-ух отдельных файлах. (прикреплены). Должно происходить деление матриц с выделением нулевого блока!
Шаг 1.Вывод матриц А и В. Те что в файле!!!
Шаг 2 Разбиение и собственно вывод блоков матриц А и В после деления:
Что касается того как должны быть поделены матрицы то нужно делить их так что бы выделить максимально большой нулевой блок и матрицу нужно брать которая больше, соответственно ето матрица B. В матрице В я выделил максимально большой нулевой блок(так как показано) в соответствии с тем как поделина мтрица В, матрица А делится соответствующим образом (т.е. что б поделить матрицу А, нужно смотреть на матрицу В и делить ее (матрицу А) с соответствием матрицы В)......потому что в дальнейшем мне нужно будет нахождить результирующую матрицу С которая будет получена в результате перемножения соответствующих блоков А и В.
Шаг 3. Вывод матрицы С полученой в результате перемножения блоков матриц А и В за следующим алшоритмом.
Так как во втором шаге, только для матрицы С.
Код
Program Labor2; uses crt; var
A:text;
B:text;
f:text;
MatrA:array[1..7, 1..7] of integer;
MatrB:array[1..7,1..7] of integer;
TempMatr:array[1..7,1..7] of integer;
A1:array[1..7,1..7] of integer;
A0:array[1..7,1..7] of integer;
A2:array[1..7,1..7] of integer;
A3:array[1..7,1..7] of integer;
B1:array[1..7,1..7] of integer;
BO:array[1..7,1..7] of integer;
B2:array[1..7,1..7] of integer;
B3:array[1..7,1..7] of integer;
C1:array[1..7,1..7] of integer;
C2:array[1..7,1..7] of integer;
C21:array[1..7,1..7] of integer;
C22:array[1..7,1..7] of integer;
C3:array[1..7,1..7] of integer;
C4:array[1..1,1..7] of integer;
i, j , k, x, y, rowa, cola, rowb, colb, sumcl, sumc2, rozbivAX, rozbivAY,
rozbivBX,rozbivBY:integer;
{Процедура чтения матриц А и В из файлов}
procedure ReadAB;
Begin
Assign(f, 'A.txt');
Reset(f);
Assign(f,'B.txt');
Reset(f); {init file}
Readln(A);
Read(A,rowa);
Readln(A);
Read(A,cola);
Readln(A);
Read(A,rozbivAX);
Readln(A);
Read(A,rozbivAY);
Readln(A);
{Chtenye MatrixA iz fila}
For i:=1 to rowa do
Begin
For j:=1 to cola do
Read(A,matrA[i,j]);
Readln(A);
End;
Close(A);
Readln(B);
Read(B,rowb);
Readln(B);
Read(B,colb);
Readln(B);
Read(B,rozbivBX);
Readln(B);
Read(B,rozbivBY);
Readln(B);
Readln(B);
{Chtenye MatrixA iz fila}
For i:=1 to rowb do
Begin
For j:=1 to colb do
Read(B,matrB[i,j]);
Readln(B);
End;
Close(B);
end;
{npoцедура вывода матрицы A}
procedure writeMatrA;
Begin
writeln(f,'A');
writeln(f,'Matrica A budet hfpbita x= f,rozbivAX,f y= f,rozbivAY');
for i:=1 to rowa do
begin
for j:=1 to cola do
write (f,MatrA[i,j]); writeln;
end;
writeln;
writeln;
End;
{процедура вывода матрицы B}
procedure writeMatrB;
Begin writeln(f,'Matrica B');
writeln(f,'Matrica B budet hfpbita x= f,rozbivBX,f y= f,rozbivBY');
for i:=1 to rowb do
begin
for j:=1 to colb do
write (f,MatrB[i,j]);
writeln;
end;
writeln;
writeln;
End;
{процедура разбиения матрицы A}
procedure RozbivMatrixA;
begin
{Блок получения подматрицы A1}
x:=1; y:=1;
for i:=1 to rozbivAX do
begin
for j:=1 to rozbivAY do
Begin
a1[x,y]:=MatrA[i,j];
inc(y);
End;
inc(x);
end;
{Блок получения подматрицы А0}
x:=1;y:=1;
for i:=1 to rozbivAX do
begin
for j:=rozbivAY+1 to cola do
Begin
A0[x,y]:=MatrA[i,j];
inc(y);
End;
inc(x);
end;
{Блок получения подматрицы А2}
x:=1; y:=1;
for i:=rozbivAX+1 to rowa do
begin
for j:=1 to rozbivAY do
Begin
A2[x,y]:=MatrA[i,j];
inc(y);
End;
inc(x);
end;
{Блок получения подматрицы А3}
x:=1; y:=1;
for i:=rozbivAX+1 to rowa do
begin
for j:=rozbivAY+1 to cola do
Begin
A3[x,y]:=MatrA[i,j];
inc(y);
End;
inc(x);
end;
{Блок вывода подматрицы матрицы А}
ClrScr;
Writeln('podmatrici A');
Writeln('Al');
x:=1; y:=1;
for i:=1 to rozbivAX do
begin
for j:=1 to rozbivAY do
Begin
write (' ',A1[x,y]);
inc(y);
End;
inc(x);
writeln;
end;
writeln;
Writeln('A0');
x:=1; y:=1;
for i:=1 to rozbivAX do
begin
for j:=rozbivAY+1 to cola do
Begin
write ('',A0[x,y]);
inc(y);
End;
inc(x);
writeln;
end;
writeln;
Writeln('A2');
x:=1; y:=1;
for i:=rozbivAX+1 to rowa do
begin
for j:=1 to rozbivAY do
Begin
write (' ',A2[x,y]);
inc(y);
End;
inc(x);
writeln;
end;
writeln;
Writeln('A3');
x:=1; y:=1;
for i:=rozbivAX+1 to rowa do
begin
for j:=rozbivAY+1 to cola do Begin
write (' ',A3[x,y]);
inc(y);
End; inc(x);
writeln;
end;
end;
{Процедура разбиения матрицы В}
procedure RozbivMatrixB;
begin
{Блок получения подматрицы В1}
x:=1; y:=1;
for i:=1 to rozbivBX do
begin
for j:=1 to rozbivBY do
Begin
b1[x,y]:=MatrB[i,j];
inc(y);
End;
inc(x);
end;
{Блок получения подматрицы В0}
x:=1; y:=1;
for i:=1 to rozbivBX do
begin
for j:=rozbivBY+1 to colb do
Begin
A0[x,y]:=MatrB[i,j];
inc(y);
End;
inc(x);
end;
{Блок получения подматрицы В2}
x:=1; y:=1;
for i:=rozbivBX+1 to rowb do
begin
for j:=1 to rozbivBY do
Begin
B2[x,y]:=MatrB[i,j];
inc(y);
End;
inc(x);
end;
{Блок получения подматрицы В3}
x:=1; y:=1;
for i:=rozbivBX+1 to rowb do
begin
for j:=rozbivBY+1 to colb do
Begin
B3[x,y]:=MatrB[i,j];
inc(y);
End;
inc(x);
end;
{Блок вывода подматриц матрицы В}
ClrScr;
Writeln(' podmatrici B');
Writeln('B1');
x:=1; y:=1;
for i:=1 to rozbivBX do
begin
for j:=1 to rozbivBY do
Begin
write (' ',B1[x,y]);
inc(y);
End;
inc(x);
writeln;
end;
writeln;
Writeln('B0');
x:=1; y:=1;
for i:=1 to rozbivBX do
begin
for j:=rozbivBY+1 to colb do
Begin
write (' ',B3[x,y]);
inc(y);
End;
inc(x);
writeln;
end;
writeln;
Writeln('B2');
x:=1; y:=1;
for i:=rozbivBX+1 to rowb do
begin
for j:=1 to rozbivBY do
Begin
write (' ',B2[x,y]);
inc(y);
End;
inc(x);
writeln;
end;
writeln;
Writeln('B3');
x:=1; y:=1;
for i:=rozbivBX+1 to rowb do
begin
for j:=rozbivBY+1 to colb do
Begin
write (' ',B3[x,y]);
inc(y);
End;
inc(x);
writeln;
end;
end;
{Блок перемножения подматриц и вывод на экран подматриц матрицы С}
procedure peremnogenie;
begin
sumcl:=0;
{C1}
for i:=1 to rozbivAX do
for j:=1 to rozbivBY do
begin
for k:=1 to rozbivBX do
begin
sumcl:=sumcl+ (A1 [i, k] *B1 [k,j]);
end;
C1[i,j]:=sumcl; sumcl:=0;
end;
{C2}
sumcl:=0;
for i:=1 to rowa-rozbivAX do
for j:=1 to rozbivBY do
begin for k:=1 to rozbivBY do
begin
sumcl :=sumcl+ (A2[i,k] *B1 [k, j] );
end;
C21[i,j]:=sumcl;
sumcl:=0;
end;
sumc2:=0;
for i:=1 to rowa-rozbivAX do
for j:=1 to colb-rozbivBX do
begin
for k:=1 to colb-rozbivBX do
begin
sumc2:=sumc2+(A3[i,k]*B2 [k, j] );
end;
C22 [i,j] :=sumc2;
sumc2:=0;
end;
for i:=1 to rowa-rozbivAX do
for j:=1 to rozbivBY do
C2[i, j]:=C21[i,j]+C22[i,j];
{CO}
for i:=1 to 3 do
for j:=1 to 3 do
C3[i,j]:=0;
{C3} sumcl:=0;
for i:=1 to rowa-rozbivAX do
for j:=1 to rowb-rozbivBY do
begin
for k:=1 to rowb-rozbivBY do
begin
sumcl :=sumcl+ (A3 [i, k] *B3 [k, j] );
end;
C21 [i,j]:=sumcl;
sumcl:=0;
end;
{Вывод матриц C}
Clrscr;
Writeln ('C1');
for i:=1 to rozbivAX do
begin
for j:=1 to rozbivBY do
write (' ',C1[i,j]);
writeln;
end;
writeln;
writeln ('C2');
for i:=1 to rowa-rozbivAX do
begin
for j:=1 to rozbivBY do
write (' ',C2[i,j]);
writeln;
end;
writeln;
Writeln('CO');
for i:=1 to 1 do
begin
for j:=1 to 1 do
write (' ',C3[i,j]);
writeln;
end;
writeln;
Writeln('C3');
for i:=1 to rowa-rozbivAX do
begin
for j:=1 to rowb-rozbivBY+1 do
write (' ',C4[i,j]);
writeln;
end;
writeln;
end;
BEGIN
clrscr;
ReadAB;
writeMatrA;
writeMatrB;
Readln;
RozbivMatrixA;
readln;
RozbivMatrixB;
readln;
peremnogenie;
writeln;
writeln;
readkey;
END.
A:text;
B:text;
f:text;
MatrA:array[1..7, 1..7] of integer;
MatrB:array[1..7,1..7] of integer;
TempMatr:array[1..7,1..7] of integer;
A1:array[1..7,1..7] of integer;
A0:array[1..7,1..7] of integer;
A2:array[1..7,1..7] of integer;
A3:array[1..7,1..7] of integer;
B1:array[1..7,1..7] of integer;
BO:array[1..7,1..7] of integer;
B2:array[1..7,1..7] of integer;
B3:array[1..7,1..7] of integer;
C1:array[1..7,1..7] of integer;
C2:array[1..7,1..7] of integer;
C21:array[1..7,1..7] of integer;
C22:array[1..7,1..7] of integer;
C3:array[1..7,1..7] of integer;
C4:array[1..1,1..7] of integer;
i, j , k, x, y, rowa, cola, rowb, colb, sumcl, sumc2, rozbivAX, rozbivAY,
rozbivBX,rozbivBY:integer;
{Процедура чтения матриц А и В из файлов}
procedure ReadAB;
Begin
Assign(f, 'A.txt');
Reset(f);
Assign(f,'B.txt');
Reset(f); {init file}
Readln(A);
Read(A,rowa);
Readln(A);
Read(A,cola);
Readln(A);
Read(A,rozbivAX);
Readln(A);
Read(A,rozbivAY);
Readln(A);
{Chtenye MatrixA iz fila}
For i:=1 to rowa do
Begin
For j:=1 to cola do
Read(A,matrA[i,j]);
Readln(A);
End;
Close(A);
Readln(B);
Read(B,rowb);
Readln(B);
Read(B,colb);
Readln(B);
Read(B,rozbivBX);
Readln(B);
Read(B,rozbivBY);
Readln(B);
Readln(B);
{Chtenye MatrixA iz fila}
For i:=1 to rowb do
Begin
For j:=1 to colb do
Read(B,matrB[i,j]);
Readln(B);
End;
Close(B);
end;
{npoцедура вывода матрицы A}
procedure writeMatrA;
Begin
writeln(f,'A');
writeln(f,'Matrica A budet hfpbita x= f,rozbivAX,f y= f,rozbivAY');
for i:=1 to rowa do
begin
for j:=1 to cola do
write (f,MatrA[i,j]); writeln;
end;
writeln;
writeln;
End;
{процедура вывода матрицы B}
procedure writeMatrB;
Begin writeln(f,'Matrica B');
writeln(f,'Matrica B budet hfpbita x= f,rozbivBX,f y= f,rozbivBY');
for i:=1 to rowb do
begin
for j:=1 to colb do
write (f,MatrB[i,j]);
writeln;
end;
writeln;
writeln;
End;
{процедура разбиения матрицы A}
procedure RozbivMatrixA;
begin
{Блок получения подматрицы A1}
x:=1; y:=1;
for i:=1 to rozbivAX do
begin
for j:=1 to rozbivAY do
Begin
a1[x,y]:=MatrA[i,j];
inc(y);
End;
inc(x);
end;
{Блок получения подматрицы А0}
x:=1;y:=1;
for i:=1 to rozbivAX do
begin
for j:=rozbivAY+1 to cola do
Begin
A0[x,y]:=MatrA[i,j];
inc(y);
End;
inc(x);
end;
{Блок получения подматрицы А2}
x:=1; y:=1;
for i:=rozbivAX+1 to rowa do
begin
for j:=1 to rozbivAY do
Begin
A2[x,y]:=MatrA[i,j];
inc(y);
End;
inc(x);
end;
{Блок получения подматрицы А3}
x:=1; y:=1;
for i:=rozbivAX+1 to rowa do
begin
for j:=rozbivAY+1 to cola do
Begin
A3[x,y]:=MatrA[i,j];
inc(y);
End;
inc(x);
end;
{Блок вывода подматрицы матрицы А}
ClrScr;
Writeln('podmatrici A');
Writeln('Al');
x:=1; y:=1;
for i:=1 to rozbivAX do
begin
for j:=1 to rozbivAY do
Begin
write (' ',A1[x,y]);
inc(y);
End;
inc(x);
writeln;
end;
writeln;
Writeln('A0');
x:=1; y:=1;
for i:=1 to rozbivAX do
begin
for j:=rozbivAY+1 to cola do
Begin
write ('',A0[x,y]);
inc(y);
End;
inc(x);
writeln;
end;
writeln;
Writeln('A2');
x:=1; y:=1;
for i:=rozbivAX+1 to rowa do
begin
for j:=1 to rozbivAY do
Begin
write (' ',A2[x,y]);
inc(y);
End;
inc(x);
writeln;
end;
writeln;
Writeln('A3');
x:=1; y:=1;
for i:=rozbivAX+1 to rowa do
begin
for j:=rozbivAY+1 to cola do Begin
write (' ',A3[x,y]);
inc(y);
End; inc(x);
writeln;
end;
end;
{Процедура разбиения матрицы В}
procedure RozbivMatrixB;
begin
{Блок получения подматрицы В1}
x:=1; y:=1;
for i:=1 to rozbivBX do
begin
for j:=1 to rozbivBY do
Begin
b1[x,y]:=MatrB[i,j];
inc(y);
End;
inc(x);
end;
{Блок получения подматрицы В0}
x:=1; y:=1;
for i:=1 to rozbivBX do
begin
for j:=rozbivBY+1 to colb do
Begin
A0[x,y]:=MatrB[i,j];
inc(y);
End;
inc(x);
end;
{Блок получения подматрицы В2}
x:=1; y:=1;
for i:=rozbivBX+1 to rowb do
begin
for j:=1 to rozbivBY do
Begin
B2[x,y]:=MatrB[i,j];
inc(y);
End;
inc(x);
end;
{Блок получения подматрицы В3}
x:=1; y:=1;
for i:=rozbivBX+1 to rowb do
begin
for j:=rozbivBY+1 to colb do
Begin
B3[x,y]:=MatrB[i,j];
inc(y);
End;
inc(x);
end;
{Блок вывода подматриц матрицы В}
ClrScr;
Writeln(' podmatrici B');
Writeln('B1');
x:=1; y:=1;
for i:=1 to rozbivBX do
begin
for j:=1 to rozbivBY do
Begin
write (' ',B1[x,y]);
inc(y);
End;
inc(x);
writeln;
end;
writeln;
Writeln('B0');
x:=1; y:=1;
for i:=1 to rozbivBX do
begin
for j:=rozbivBY+1 to colb do
Begin
write (' ',B3[x,y]);
inc(y);
End;
inc(x);
writeln;
end;
writeln;
Writeln('B2');
x:=1; y:=1;
for i:=rozbivBX+1 to rowb do
begin
for j:=1 to rozbivBY do
Begin
write (' ',B2[x,y]);
inc(y);
End;
inc(x);
writeln;
end;
writeln;
Writeln('B3');
x:=1; y:=1;
for i:=rozbivBX+1 to rowb do
begin
for j:=rozbivBY+1 to colb do
Begin
write (' ',B3[x,y]);
inc(y);
End;
inc(x);
writeln;
end;
end;
{Блок перемножения подматриц и вывод на экран подматриц матрицы С}
procedure peremnogenie;
begin
sumcl:=0;
{C1}
for i:=1 to rozbivAX do
for j:=1 to rozbivBY do
begin
for k:=1 to rozbivBX do
begin
sumcl:=sumcl+ (A1 [i, k] *B1 [k,j]);
end;
C1[i,j]:=sumcl; sumcl:=0;
end;
{C2}
sumcl:=0;
for i:=1 to rowa-rozbivAX do
for j:=1 to rozbivBY do
begin for k:=1 to rozbivBY do
begin
sumcl :=sumcl+ (A2[i,k] *B1 [k, j] );
end;
C21[i,j]:=sumcl;
sumcl:=0;
end;
sumc2:=0;
for i:=1 to rowa-rozbivAX do
for j:=1 to colb-rozbivBX do
begin
for k:=1 to colb-rozbivBX do
begin
sumc2:=sumc2+(A3[i,k]*B2 [k, j] );
end;
C22 [i,j] :=sumc2;
sumc2:=0;
end;
for i:=1 to rowa-rozbivAX do
for j:=1 to rozbivBY do
C2[i, j]:=C21[i,j]+C22[i,j];
{CO}
for i:=1 to 3 do
for j:=1 to 3 do
C3[i,j]:=0;
{C3} sumcl:=0;
for i:=1 to rowa-rozbivAX do
for j:=1 to rowb-rozbivBY do
begin
for k:=1 to rowb-rozbivBY do
begin
sumcl :=sumcl+ (A3 [i, k] *B3 [k, j] );
end;
C21 [i,j]:=sumcl;
sumcl:=0;
end;
{Вывод матриц C}
Clrscr;
Writeln ('C1');
for i:=1 to rozbivAX do
begin
for j:=1 to rozbivBY do
write (' ',C1[i,j]);
writeln;
end;
writeln;
writeln ('C2');
for i:=1 to rowa-rozbivAX do
begin
for j:=1 to rozbivBY do
write (' ',C2[i,j]);
writeln;
end;
writeln;
Writeln('CO');
for i:=1 to 1 do
begin
for j:=1 to 1 do
write (' ',C3[i,j]);
writeln;
end;
writeln;
Writeln('C3');
for i:=1 to rowa-rozbivAX do
begin
for j:=1 to rowb-rozbivBY+1 do
write (' ',C4[i,j]);
writeln;
end;
writeln;
end;
BEGIN
clrscr;
ReadAB;
writeMatrA;
writeMatrB;
Readln;
RozbivMatrixA;
readln;
RozbivMatrixB;
readln;
peremnogenie;
writeln;
writeln;
readkey;
END.