Консультация № 110325
20.11.2007, 20:29
0.00 руб.
0 3 3
Уважаемые эксперты, помогите справиться со следующими задачками:

1. Даны две действительные квадратные матрицы порядка N. Получить новую матрицу умножением элементов каждой строки первой матрицы на наибольшое из значений элементов соответствующей строки второй матрицы.

2. Дана действительная квадратная матрица порядка N. Преобразовать матрицу по правилу: строку с номером N сделать столбцом с номером N, а столбец сделать строкой с номером N.

Обсуждение

Неизвестный
20.11.2007, 21:16
общий
это ответ
<font color=red><b>!!!</b></font>
Здравствуйте, Lifestyle!

вот ответ на пункт 2.

const
n=...; // сколько елементов в матрице n*n. <font color=#cc0000>{1. Комментарии в Pascal могут писаться либо в фигурных скобках, либо использую сочетание (* *)}</font>
var
i,j:integer;
a:array[1..n,1..n] of string; // наша матрица <font color=#cc0000>{2. Почему Вы используете строковую матрицу, если в вопросе четко указано "действительная квадратная матрица"}</font>

begin // сам алгоритм преобразования
<font color=#cc0000>b</font>:=a; <font color=#cc0000>{3. Откуда появилась неизвестная переменная?}</font>
for i:= 1 to n do
begin
j:=i+n-1;
a[i,j]:=a[j,i]; <font color=#cc0000>{4. Как это вы умудрились переопределить элементы строки и столбца используя всего один оператор?}</font>
end;
end.

в приложении есть пример преобразования матрици размером 2*2<p><fieldset style=‘background-color:#EFEFEF; width:80%; border:red 1px solid; padding:10px;‘ class=fieldset><font color=red><i>Ответ неверный! Такое впечатление, что ответ вообще был снят с потолка... (не проверен абсолютно)!!!</i>
-----
</font><font color=#777777 size=1><b>• Отредактировал: <a href=/info/user/14422 target=_blank>Gh0stik</a></b> (Профессор)
<b>• Дата редактирования:</b> 20.11.2007, 23:24</font></fieldset>

Приложение:
const n=2; // сколько елементов в матрице n*n var i,j:integer; a:array[1..n,1..n] of string; // наша матрица begin a[1,1]:=‘A‘; a[1,2]:=‘C‘; a[2,1]:=‘B‘; a[2,2]:=‘D‘; b:=a; for i:= 1 to n do begin j:=i+n-1; a[i,j]:=a[j,i]; // writeln(a[i,j]); end; writeln(a[1,1],a[1,2]); writeln(a[2,1], a[2,2]); readln; end.
Неизвестный
21.11.2007, 00:13
общий
это ответ
Здравствуйте, Lifestyle!

В противовес привожу верный ответ решения задачи №2.
<code><b>const</b> n=5;
<b>var</b> a:<b>array</b> [<font color=purple>1</font>..n, <font color=purple>1</font>..n] <b>of</b> integer;
     i,j,v,t:integer;
<b>begin</b>
  t:=n; <font color=green>{переменная в которой определен номер столбца и строки, которые подвержены преобразованию}</font>
  randomize;
  writeln(<font color=blue>‘old‘</font>);
  <b>for</b> i:=1 <b>to</b> n <b>do</b> <font color=green>{заполняем матрицу произольными данными}</font>
  <b>begin</b>
   <b>for</b> j:=1 <b>to</b> n <b>do</b>
    <b>begin</b>
       a[i,j]:=random(<font color=purple>100</font>); <b>write</b>(a[i,j]:3);
    <b>end</b>;
    writeln;
  <b>end</b>;
  <b>for</b> i:=1 <b>to</b> n <b>do</b> <font color=green>{выполняем преобразования, по сути это транспонирование строки и столбца}</font>
  <b>begin</b>
    v:=a[t,i];
    a[t,i]:=a[i,t];
    a[i,t]:=v;
  <b>end</b>;
  writeln(<font color=blue>‘new‘</font>);
    <b>for</b> i:=1 <b>to</b> n <b>do</b> <font color=green>{выводим измененную матрицу}</font>
  <b>begin</b>
   <b>for</b> j:=1 <b>to</b> n <b>do</b> <b>write</b>(a[i,j]:3);
    writeln;
  <b>end</b>;
<b>end</b>.</code>

Good Luck!!!
Неизвестный
25.11.2007, 09:44
общий
это ответ
Здравствуйте, Lifestyle!
В решении первой задачи использовал процедуры. В начале создаю две матрицы потом из второй извлекаю максимальный элемент для каждой строки. В конце умножаю каждый элемент полученого вектора на каждый элемент первой матрицы.
В решении второй задачи (транспонирование матрицы) просто переписал элементы матрицы.


Приложение:
{110325_1}uses crt;const N=10;type vector = array[1..10]of integer; matrix = array[1..10] of vector;var A,B:matrix; V :vector;procedure init_matrix(var X:matrix);var i,j:integer;begin for i:=1to N do begin for j:=1to N do begin X[i,j]:=1+random(10); end; end;end;procedure output_matrix(X:matrix);var i,j:integer;begin for i:=1to N do begin for j:=1to N do begin if j=N then begin write(X[i,j]:4); writeln; end else begin write(X[i,j]:4); end; end; end;end;procedure get_max_vector(var Y:vector;X:matrix);var i,j,max:integer;begin for i:=1to N do begin max:=X[i,1]; for j:=1to N do begin if X[i,j]>max then max:=X[i,j]; end; Y[i]:=max; end;end;procedure multiplication(var X:matrix;Y:vector);var i,j:integer;begin for i:=1to N do begin for j:=1to N do begin X[i,j]:=X[i,j]*Y[i]; end; end;end;begin clrscr; randomize; textmode(co80+font8x8); init_matrix(A); init_matrix(B); output_matrix(A); writeln; output_matrix(B); get_max_vector(V,B); multiplication(A,V); writeln; output_matrix(A); readln;end.{110325_2}uses crt;const N=10;type vector = array[1..10]of integer; matrix = array[1..10] of vector;var A:matrix;procedure init_matrix(var X:matrix);var i,j:integer;begin for i:=1to N do begin for j:=1to N do begin X[i,j]:=1+random(10); end; end;end;procedure output_matrix(X:matrix);var i,j:integer;begin for i:=1to N do begin for j:=1to N do begin if j=N then begin write(X[i,j]:4); writeln; end else begin write(X[i,j]:4); end; end; end;end;procedure trip_the_matrix(var X:matrix);var i,j:integer; tmp:matrix;begin for i:=1to N do begin for j:=1to N do begin tmp[j,i]:=X[i,j]; end; end; X:=tmp;end;begin clrscr; randomize; textmode(co80+font8x8); init_matrix(A); output_matrix(A); trip_the_matrix(A); writeln; output_matrix(A); readln;end.
Форма ответа