Показать сообщение отдельно
Старый 25.03.2014, 10:00   #6 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Madara Посмотреть сообщение
Пробовал через одну переменную сделать, не получилось(
Хорошо, попробуйте предложить такой вариант:
Код:
Type
 Vector=Array[1..5] of Integer;
 Matr=Array[1..5] of Vector;
Var
 A,B:Matr;
 p,q:Integer;

Procedure Izmena(s1,s2:Integer; Var C:Matr);
var
 V:Vector;
begin
 V:=C[s1];
 C[s1]:=C[s2];
 C[s2]:=V;
end;

Begin
 A[1,1]:=3; A[1,2]:=2; A[1,3]:=4; A[1,4]:=1;
 A[2,1]:=5; A[2,2]:=2; A[2,3]:=3; A[2,4]:=1;
 A[3,1]:=6; A[3,2]:=4; A[3,3]:=5; A[3,4]:=1;
 B[1,1]:=3; B[1,2]:=2; B[1,3]:=5; B[1,4]:=1; B[1,5]:=7;
 B[2,1]:=9; B[2,2]:=1; B[2,3]:=2; B[2,4]:=6; B[2,5]:=5;
 B[3,1]:=1; B[3,2]:=8; B[3,3]:=4; B[3,4]:=7; B[3,5]:=1;
 B[4,1]:=2; B[4,2]:=0; B[4,3]:=9; B[4,4]:=3; B[4,5]:=5;
 B[5,1]:=7; B[5,2]:=2; B[5,3]:=3; B[5,4]:=1; B[5,5]:=4;
 Writeln('Исходная матрица А:');
 for p:=1 to 3 do
  begin
   for q:=1 to 4 do Write(A[p,q]:3);
   writeln;
  end;
 writeln;
 Writeln('Исходная матрица В:');
 for p:=1 to 5 do
  begin
   for q:=1 to 5 do Write(B[p,q]:3);
   writeln;
  end;
 writeln;
 Izmena(2,3,A);
 Izmena(2,4,B);
 Writeln('Меняем строки');
 Writeln;
 Writeln('Измененная матрица А:');
 for p:=1 to 3 do
  begin
   for q:=1 to 4 do Write(A[p,q]:3);
   writeln;
  end;
 writeln;
 Writeln('Измененная матрица В:');
 for p:=1 to 5 do
  begin
   for q:=1 to 5 do Write(B[p,q]:3);
   writeln;
  end;
End.
А не понравится - можно и так (скорее всего, Ваш многоуважаемый имел в виду что-то в этом роде):
Код:
Type
 Matr=Array[1..5,1..5] of Integer;
Var
 A,B:Matr;
 p,q:Integer;

Procedure Izmena(s1,s2:Integer; Var C:Matr);
var
 j,D:Integer;
begin
 for j:=1 to 5 do
  begin
   D:=C[s1,j];
   C[s1,j]:=C[s2,j];
   C[s2,j]:=D;
  end;
end;

Begin
 A[1,1]:=3; A[1,2]:=2; A[1,3]:=4; A[1,4]:=1;
 A[2,1]:=5; A[2,2]:=2; A[2,3]:=3; A[2,4]:=1;
 A[3,1]:=6; A[3,2]:=4; A[3,3]:=5; A[3,4]:=1;
 B[1,1]:=3; B[1,2]:=2; B[1,3]:=5; B[1,4]:=1; B[1,5]:=7;
 B[2,1]:=9; B[2,2]:=1; B[2,3]:=2; B[2,4]:=6; B[2,5]:=5;
 B[3,1]:=1; B[3,2]:=8; B[3,3]:=4; B[3,4]:=7; B[3,5]:=1;
 B[4,1]:=2; B[4,2]:=0; B[4,3]:=9; B[4,4]:=3; B[4,5]:=5;
 B[5,1]:=7; B[5,2]:=2; B[5,3]:=3; B[5,4]:=1; B[5,5]:=4;
 Writeln('Исходная матрица А:');
 for p:=1 to 3 do
  begin
   for q:=1 to 4 do Write(A[p,q]:3);
   writeln;
  end;
 writeln;
 Writeln('Исходная матрица В:');
 for p:=1 to 5 do
  begin
   for q:=1 to 5 do Write(B[p,q]:3);
   writeln;
  end;
 writeln;
 Izmena(2,3,A);
 Izmena(2,4,B);
 Writeln('Меняем строки');
 Writeln;
 Writeln('Измененная матрица А:');
 for p:=1 to 3 do
  begin
   for q:=1 to 4 do Write(A[p,q]:3);
   writeln;
  end;
 writeln;
 Writeln('Измененная матрица В:');
 for p:=1 to 5 do
  begin
   for q:=1 to 5 do Write(B[p,q]:3);
   writeln;
  end;
End.
Цитата:
Сообщение от Madara Посмотреть сообщение
P.S. немного изменил программу...
Ох, уж и изменили... Ну зачем, объясните Вы мне, присвоение исходных значений элементов матриц загонять ВНУТРЬ тела цикла?!!! Таким образом, для первой матрицы Вы осуществляете это присвоение 12 раз, а для второй - 25 раз!!!! Оно Вам надо?
Между прочим, по моему разумению, именно на этот момент должен был в первую очередь обратить внимание почтеннейший, вместо того, чтобы ловить блох в части оптимизации алгоритма обмена строк.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070