Автор Тема: Вычисление квадратной матрицы, pascal  (Прочитано 2936 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Vogelfrei

  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Вычисление квадратной матрицы, pascal
« : 11 Декабря 2011, 23:24:53 »
Вычисление квадратной матрицы (проблема с вызовом процедур)
Имеется задание:
составить подпрограмму-функцию для нахождения суммы элементов квадратной матрицы находящихся выше главной диагонали и определить максимальную из указанных сумм для матриц
\(X=A^{2}+B^{3}, Y=AA^{T}+BB^{T}\)
 где А,В - исходные произвольно заданные матрицы размером 5х5

 Program kyrs;
 const
 Nmax=5;
 type
 Matrics=array[1..nmax, 1..nmax] of integer;
 Masiv=array[1..nmax] of integer;
 var
 a,b,a2,b2,b3,at,bt,ata,btb,x,y:matrics;
 m,n:masiv;
 i,j,t:integer;
 sx,sy:real;

 Procedure input (var a:matrics);
 var i,j:integer;
 begin
 for i:=1 to 5 do
 for j:=1 to 5 do
 begin
 write ('[',i,',',j,']=');
 read(a[i,j]);
 end;
 for i:=1 to 5 do
 begin
 for j:=1 to t do
 write(a[i,j]);
 writeln
 end;
 end;
 Procedure umn (a,b:matrics; var a2:matrics);
 var
 i,j,k,s:integer;
 begin
 for i:=1 to 5 do
 for j:=1 to 5 do
 begin
 s:=0;
 b:=a;
 for k:=1 to 5 do
 s:=s+a[k,i]*b[j,k];
 a2[i,j]:=s;
 end;
 end;
 Procedure summa (a,b:matrics; var x:matrics);
 var
 i,j:integer;
 begin
 for i:=1 to 5 do
 for j:=1 to 5 do
 x[i,j]:= a[i,j]+b[i,j];
 end;

 Procedure over (x:matrics; Var s:real);
 var
 z:real;
 Begin
 z:=0;
 for i:= 1 to 4 do
 for j:= 2 to 5 do
 s:=z+x[i,j];
 Writeln('summa elementov vishe glavnoi diagonali=', s:5);
 end;
 Procedure transp(a:matrics; var at:matrics);
 var
 i,j:integer;
 begin
 for i:=1 to 5 do
 for j:=1 to 5 do
 at[i,j]:=a[i,j]
 end;
 begin
 writeln('vvedite elementi matricy a');
 input(a);
 writeln('vvedite elementy matricy b');
 input(b);

а вот дальше не пойму как присвоить значение полученное с помошью процедуры к переменной(

 a2:=umn[a,a];
 b2:=umn(b,b);
 b3:=umn(b2,b);
 at:=trans(a);
 bt:=trans(b);
 ata:=umn(a,at);
 btb:=umn(b,bt);
 x:=summa(a2,b3);
 y:=summa(ata,btb);
 sx:=over(x);
 sy:=over(y);
 if sx>sy
 then
 writeln('max=',sx);
 else writeln('max=', sy);
 if sx=sy;
 then writeln('oni ravni!');
 readln;
 end.
 end.
« Последнее редактирование: 21 Января 2012, 11:23:01 от Asix »

Оффлайн wital1984

  • Постоялец
  • ***
  • Сообщений: 189
    • Просмотр профиля
Этот код a2:=umn[a,a]; подходит для функций, а не процедур. Для процедуры записываете просто umn(a,a,a2); в результате должен появиться массив a2=a*a

Оффлайн Vogelfrei

  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
спасибо большое)
 код теперь выглядит вот так:

begin
 writeln('vvedite elementi matricy a');
 input(a);
 writeln('vvedite elementy matricy b');
 input(b);
 umn(a,a,a2);
 umn(b,b,b2);
 umn(b2,b,b3);
 trans(a,at);
 trans(b,bt);
 umn(a,at,ata);
 umn(b,bt,btb);
 summa(a2,b3,x);
 summa(ata,btb,y);
 over(x,sx);
 over(y,sy);

программа скомпилировалась, но теперь после ввода матрицы прога вылетает с ошибкой 201(

Оффлайн wital1984

  • Постоялец
  • ***
  • Сообщений: 189
    • Просмотр профиля
 коде  for j:=1 to t do  по смыслу нужна 5 вместо t. А вообще, лучше выполнять программу по шагам. Еще бы посоветовал делать промежуточные выводы. Так лучше видно, как процедуры работают, в какой ошибка.

 

Помогите решить задачу. Для матрицы создать следующие функции.

Автор алина 11

Ответов: 1
Просмотров: 4801
Последний ответ 24 Января 2010, 17:54:21
от InfStudent
С++ и матрица. Для каждого столбца матрицы определить сумму элементов

Автор Sven

Ответов: 2
Просмотров: 7208
Последний ответ 30 Января 2011, 18:29:15
от Данила
Помогите решить задачи на СИ, про матрицы и символьные строки.

Автор katerinka777

Ответов: 4
Просмотров: 6677
Последний ответ 25 Апреля 2010, 12:56:01
от InfStudent
Вывод матрицы в файл и на консоль С++

Автор sir. Andrey

Ответов: 1
Просмотров: 4975
Последний ответ 21 Октября 2010, 14:48:36
от sir. Andrey
матрицы, нужна помошь

Автор lelia222

Ответов: 28
Просмотров: 8799
Последний ответ 08 Октября 2009, 16:27:01
от Данила