а) Найти матрицу B = A^m, где, m - целое число больше единицы;
б) умножить элементы k-ой строки матрицы В на заданное число;
в) вычислить сумму отрицательных элементов полученной матрицы, расположенных под ее главной диагональю в столбцах с четными номерами.
В связи с чем написано:
Код (Показать/Скрыть)
uses crt;
const nmax=10;
type matr=array[1..nmax,1..nmax] of real;
procedure MxM(a1,a2:matr;n:byte;var a3:matr);
var k,j,i:byte;
begin
for k:=1 to n do
for j:=1 to n do
begin
a3[k,j]:=0;
for i:=1 to n do
a3[k,j]:=a3[k,j]+a1[k,i]*a2[i,j];
end;
end;
var e,n,i,j,q,m,l,x,k : integer;
sum:real;
A,B,C:matr;
begin clrscr;
writeln ('vvedite poradok matricy А (ne bolee 10!)');
readln (n);
if (n>10) or (n<=0) then
begin
repeat
writeln('vvedite poradok matricy А (ne bolee 10!)');
readln (n);
until (n>0) and (n<11);
end;
for i:=1 to n do
for j:=1 to n do
begin
write('A[',i,',',j,']=');
readln (A[i,j]);
end;
writeln ('vasha ishodnaaya matrica A:');
for i:=1 to n do
begin
for j:=1 to n do
write (A[i,j]:8:2);
writeln;
end;
write('vvedite stepen m = ');
readln (m) ;
q:=1;
c:=A;
repeat
MxM(c,a,n,b);
c:=b;
q:=q+1;
until q<=m;
writeln ('vasha poluchennaya matrica B:');
for i:=1 to n do
begin
for j:=1 to n do
write (C[i,j]:8:2);
writeln;
end;
write('vvedite nomer k stroki (ne bolshe ',n,'!) = ');
readln (l) ;
if (l>n) or (l<=0) then
begin
repeat
writeln('vvedite nomer k stroki (ne bolshe ',n,'!!!) = ');
readln (l);
until (l<=n) and (l>0) ;
end;
write('vvedite chislo = ');
readln(x);
for i:=1 to n do
c[i,j]:=a[l,i]*x;
for i:=1 to n do
a[l,i]:=c[i,j];
writeln ('poluchennaya matrica B:');
for i:=1 to n do
begin
for j:=1 to n do
write (c[i,j]:8:2);
writeln;
end;
sum:=0;
for i:=1 to n do
for j:=1 to n do
begin
if (i>j) and (c[i,j]<0) and (j mod 2=0) then
sum:=sum+c[i,j];
end;
writeln ('summa otricatelnyh pod glavnoy diagonalyu B = ',sum);
writeln ('dlya vihoda nazhmite enter.');
readln;
end.
Интересует вопрос: почему процедура не выходит на цикл и лишь единажды возводит матрицу в квадрат?