Консультация № 174924
06.12.2009, 12:33
35.00 руб.
0 7 2
Составить программу на языке программирования Паскаль, вызывающую процедуру или функцию, позволяущую решить следующую задачу: даны две квадратные вещественные матрицы порядка 10х10. Вывести на экран квадрат той из них, у которой наименьший след (сумма диагональных элементов), считая, что такая матрица одна.

Обсуждение

давно
Профессор
401888
1232
06.12.2009, 13:09
общий
это ответ
Здравствуйте, Семашкина Надежда Сергеевна!
Решение задачи в приложении.

Приложение:
uses crt;
const n=10;{размер матриц}
type matr=array[1..n,1..n] of real;{их тип}
procedure Vvod(var mt:matr);{создание матриц}
var i,j:byte;
begin
for i:=1 to n do
for j:=1 to n do
mt[i,j]:=9*random;{числа берем небольшие, инче при умножении они окажутся очень большими}
end;

procedure Vyvod(var mt:matr; s:string);{вывод матриц на экран}
var i,j:byte;
begin
writeln('Матрица ',s);
for i:=1 to n do
begin
for j:=1 to n do
write(mt[i,j]:7:1);
writeln;
end;
writeln;
end;

function Sled(mt:matr):real;{вычисление суммы элементов главной диагонали - следа матрицы}
var sm:real;
i:byte;
begin
sm:=0;
for i:=1 to n do
sm:=sm+mt[i,i];{элементы главной диагонали}
Sled:=sm;
end;

procedure Kvadrat(m1:matr;var m2:matr);{возведение в квадрат - умножение матрицы на себя}
var k,j,i:byte;
begin
for k:=1 to n do
for j:=1 to n do
begin
m2[k,j]:=0;
for i:=1 to n do
m2[k,j]:=m2[k,j]+m1[k,i]*m1[i,j];{суммируем произведения элементов строк, на соответствующие элементы столбцов}
end;
end;

var a,b,c:matr;
i,j,m:byte;
s:string;
begin
clrscr;
randomize;
Vvod(a);{создаем матрицы}
Vvod(b);
Vyvod(a,'A:');{выводим на экран}
writeln('След матрицы А=',Sled(a):0:1);{вычисляем и выводим след}
writeln('Нажмите Enter...');
readln;
Vyvod(b,'B:');
writeln('След матрицы B=',Sled(b):0:1);
writeln('Нажмите Enter...');
readln;
if Sled(a)>Sled(b)then{срвниваем следы, который больше}
begin
s:='C=A^2:';{название новой матрицы}
Kvadrat(a,c);{выполняем умножение}
Vyvod(c,s);{выводим на экран}
end
else
begin
s:='C=A^2:';
Kvadrat(a,c);
Vyvod(c,s);
end;
readln
end.
Неизвестный
06.12.2009, 13:27
общий
это ответ
Здравствуйте, Семашкина Надежда Сергеевна.
Программа в приложении.
Процедура Ent осуществляет ввод данных в массив
Quad - все остальное
В ней - sum - определяет сумму элементов главной диагонали
mysqr - перемножает
show - выводит на экран


Приложение:
Program p1;
uses crt;
type ar = array[1..10,1..10] of real;
var a1,a2 : ar;
Procedure Ent(var a:ar);
var i,j:integer;
begin
randomize;
for i:=1 to 10 do
for j:=1 to 10 do
a[i,j]:=random(10);
end;
Procedure Quad(a1,a2:ar);
var a:ar;
s1,s2:real;

function sum(a:ar):real;
var i,j:integer;
s:real;
begin
s:=0;
for i:=1 to 10 do
s:=s+a[i,i];
sum:=s;
end;
procedure mysqr(var a:ar);
var i,j,k:integer;
m:ar;
s:real;
begin
for i:=1 to 10 do
begin

for j:=1 to 10 do
begin
s:=0;
for k:=1 to 10 do
s:=s+a[i,k]*a[k,j];
m[i,j]:=s;
end;
end;
a:=m;
end;
procedure show(a:ar);
var i,j:integer;
begin
for i:=1 to 10 do
begin
for j:=1 to 10 do
write(a[i,j]:7:2,' ');
writeln;
end;
end;

begin
s1:=sum(a1);
s2:=sum(a2);
if s1>=s2 then a:=a2 else a:=a1;
mysqr(a);
show(a);

end;

begin
Ent(A1); Ent(a2);
Quad(A1,A2);
readln;
end.
5
Неизвестный
06.12.2009, 17:34
общий
Юрий Борисович! Проверила вашу программу. Все работает, но только выдает не квадрат матрицы, а не понятно какие числа. Поясните
давно
Профессор
401888
1232
06.12.2009, 21:47
общий
Надежда Сергеевна, а Вы точно знаете как получается произведение матрицы на матрицу? Я проверил на небольших матрицах, и, с учетом округлений, порядок чисел абсолютно совпадает. Интересно как Вы проверяли матрицу 10х10 вещественных чисел? Это вручную вычисления не для слабонервных. Возможно я ошибаюсь, но мне кажется что Вы просто возводили в квадрат элементы матрицы. Если так, то Вы ошибаетесь.
давно
Профессор
401888
1232
06.12.2009, 21:48
общий
На всякий случай почитайте здесь.

Википедия
Неизвестный
07.12.2009, 22:28
общий
Да, вы правы. Просто давно не работала с матрицами, немного подзабыла. Спасибо!!!
Неизвестный
08.12.2009, 18:07
общий
Уважаемый, Юрий Борисович, вы не могли бы написать блок-схему к вашей программе?
Форма ответа