Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.03.2009, 19:45   #1
zidan671
 
Регистрация: 12.03.2009
Сообщений: 4
По умолчанию Транспонировать квадрат,в нижнем левом углу которого находится минимальный элемент

Помогите пожалуйста....
Дана матрица 5*5)необходимо разработать модуль,содержащий процедуры и функции,решающие следующие задачи:
Транспонировать квадрат,в нижнем левом углу которого находится минимальный элемент матрицы
zidan671 вне форума Ответить с цитированием
Старый 12.03.2009, 20:00   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Вот вам процедура, которая это делает:
Код:
procedure transkvadr(M : matrix; n : integer);
 var i,j,mi,mj,len,k : integer;
 begin
 mi :=1; mj:=1;
 for i:=1 to n do
  for j:=1 to n do
   if M[i,j]<M[mi,mj] then
    begin
    mi := i;
    mj := j;
    end;

 len := 1;
 for i:=mi downto 1 do
  inc(len);
 k := 1;
 for j:=mj to n do
  inc(k);
 if k<len then len := k;
 {----------}
 for i:=mi-len+1 to mi do
  for j:=i to mj+len-1 do
   begin
   k := M[i,j];
   M[i,j] := M[j,i];
   M[j,i] := k;
   end;
 {----------}

 for i:=1 to n do
  begin
  for j:=1 to n do
   write(M[i,j]:4);
  writeln;
  end;
 writeln;
 end;
Здесь тип matrix должен быть объявлен как:
Код:
type matrix = array[1..100,1..100] of integer;
n - порядок матрицы.

Пример программы:
Код:
uses crt;
type matrix = array[1..100,1..100] of integer;

const n=5;
var
a : matrix;
i,j : integer;

procedure transkvadr(M : matrix; n : integer);
 var i,j,mi,mj,len,k : integer;
 begin
 mi :=1; mj:=1;
 for i:=1 to n do
  for j:=1 to n do
   if M[i,j]<M[mi,mj] then
    begin
    mi := i;
    mj := j;
    end;

 len := 1;
 for i:=mi downto 1 do
  inc(len);
 k := 1;
 for j:=mj to n do
  inc(k);
 if k<len then len := k;
 {----------}
 for i:=mi-len+1 to mi do
  for j:=i to mj+len-1 do
   begin
   k := M[i,j];
   M[i,j] := M[j,i];
   M[j,i] := k;
   end;
 {----------}

 for i:=1 to n do
  begin
  for j:=1 to n do
   write(M[i,j]:4);
  writeln;
  end;
 writeln;
 end;
{-----------}

begin
clrscr;
randomize;
for i:=1 to n do
 begin
 for j:=1 to n do
  begin
  a[i,j] := random(30);
  write(a[i,j]:4);
  end;
 writeln;
 end;
writeln;
writeln('-----------');
transkvadr(a,n);
readln;
end.
В модуль сами переделаете. В него нужно включить определение типа matrix и процедуру.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 12.03.2009, 20:20   #3
zidan671
 
Регистрация: 12.03.2009
Сообщений: 4
По умолчанию

Спасибо большое))!!!немного не понял что такое len?это необходимо для нахождения размерности квадрата?
и что такое inc(k)?просто в других лабах мы вроде такое не использовали

Последний раз редактировалось zidan671; 12.03.2009 в 20:29.
zidan671 вне форума Ответить с цитированием
Старый 12.03.2009, 20:25   #4
capta1n
Форумчанин
 
Аватар для capta1n
 
Регистрация: 06.12.2008
Сообщений: 613
По умолчанию

Код:
unit matrica;

interface
 const
  size_matrix = 5;
 type
  item = array [1..size_matrix,1..size_matrix] of integer;
 function check ( var m : item; n1 : byte ) : boolean;
 procedure transport ( var m : item; n1 : byte);

implementation

 function check;
 var
  i,k,mem_row,mem_col : byte;
  min : integer;
 begin
   min:=m[1,1];
   for i:=1 to n1 do
    for k:=1 to n1 do
     if m[i,k]<min then
     begin
       mem_row:=i;
       mem_col:=k;
       min:=m[i,k]
     end;
   if (mem_row=n1) and (mem_col=1) then check:=true
                                   else check:=false
 end;

 procedure transport;
 var
  i,k : byte;
  buf : integer;
 begin
   for i:=1 to n1 do
    for k:=i to n1 do
    begin
      buf:=m[i,k];
      m[i,k]:=m[k,i];
      m[k,i]:=buf
    end
 end;

end.
Программа для теста юнита:
Код:
program prog;
uses matrica;
var
 a : item;
 i,k : byte;
 n : integer;
begin
  n:=size_matrix;
  randomize;
  for i:=1 to n do
   for k:=1 to n do a[i,k]:=random(10);
  a[n,1]:=-1;

  for i:=1 to n do
  begin
    for k:=1 to n do write (a[i,k],'|');
    writeln
  end;
  writeln;
  if check (a,n) then transport (a,n);

  for i:=1 to n do
  begin
    for k:=1 to n do write (a[i,k],'|');
    writeln
  end;
  readln
end.
capta1n вне форума Ответить с цитированием
Старый 12.03.2009, 20:35   #5
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
немного не понял что такое len?это необходимо для нахождения размерности квадрата?
и что такое inc(k)?
len - длина стороны квадрата.
inc(k) - можете заменить на
k := k + 1;
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 12.03.2009, 20:50   #6
zidan671
 
Регистрация: 12.03.2009
Сообщений: 4
По умолчанию

Спасибо)теперь всё понятно)
zidan671 вне форума Ответить с цитированием
Старый 13.03.2009, 15:44   #7
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Цитата:
Транспонировать квадрат,в нижнем левом углу которого находится минимальный элемент матрицы
Т.е. если есть матрица
1 1 1 1 1
2 2 2 2 2
3 0 3 3 3
4 4 4 4 4
5 5 5 5 5
То должна получиться
1 1 2 0 1
2 1 2 3 2
3 1 2 3 3
4 4 4 4 4
5 5 5 5 5
Что-то я этого не увидел этого ни в одной из предложенных программ.
puporev вне форума Ответить с цитированием
Старый 13.03.2009, 16:18   #8
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

puporev, Премного благодарен! ) Действительно.. Как-то не заметил.

Исправленный вариант. Проверил несколько раз, вроде все так.

Код:
uses crt;
type matrix = array[1..100,1..100] of integer;

const n=5;
var
a : matrix;
i,j : integer;

procedure transkvadr(M : matrix; n : integer);
 var i,j,mi,mj,len,k : integer;
 begin
 mi :=1; mj:=1;
 for i:=1 to n do
  for j:=1 to n do
   if M[i,j]<M[mi,mj] then
    begin
    mi := i;
    mj := j;
    end;

 len := 0;
 for i:=mi downto 1 do
  inc(len);
 k := 0;
 for j:=mj to n do
  inc(k);
 if k<len then len := k;

  {----------}

 for i:=1 to len do
  for j:=i+1 to len do
   begin
   k := M[mi-len+i,mj+j-1];
   M[mi-len+i,mj+j-1] := M[mi-len+j,mj+i-1];
   M[mi-len+j,mj+i-1] := k;
   end;
 {----------}

 for i:=1 to n do
  begin
  for j:=1 to n do
   write(M[i,j]:4);
  writeln;
  end;
 writeln;
 end;
{-----------}

begin
clrscr;
randomize;
for i:=1 to n do
 begin
 for j:=1 to n do
  begin
  a[i,j] := random(40);
  write(a[i,j]:4);
  end;
 writeln;
 end;
writeln;

{ для проверки }
{for i:=1 to n do
 begin
 for j:=1 to n do
  begin
  a[i,j] := i;
  if (j=2) and (i=3) then a[i,j] := 0;
  write(a[i,j]:4);
  end;
 writeln;
 end;
          }
writeln('-----------');
transkvadr(a,n);
readln;
end.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 13.03.2009, 16:51   #9
capta1n
Форумчанин
 
Аватар для capta1n
 
Регистрация: 06.12.2008
Сообщений: 613
По умолчанию

http://ru.wikipedia.org/wiki/Транспонированная_матрица

матрицу надо брать всю, а не кусок

Последний раз редактировалось capta1n; 13.03.2009 в 16:58.
capta1n вне форума Ответить с цитированием
Старый 13.03.2009, 16:58   #10
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

capta1n
Измените в вашей программе:
Код:
 a[n,1]:=-1;
на
Код:
a[3,1]:=-1;
и она перестанет работать.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
заменить любой минимальный элемент максимальным и сменить знак максимального элемента противоположным Рітка-кулеметчиця Паскаль, Turbo Pascal, PascalABC.NET 2 26.01.2009 17:45
Получить новый одномерный массив В,каждый элемент которого равен мин элементу строк исходной матрицы Artimbulidor Помощь студентам 6 29.12.2008 18:51
Вставить первую строку после строки, в которой находится первый встреченный максимальный элемент. JiLiYa Паскаль, Turbo Pascal, PascalABC.NET 4 03.12.2008 12:13
одномерный массив, каждый элемент которого равен наибольшему по модулю элементу соответствующего столбца ruslan09-93 Помощь студентам 2 15.11.2008 20:26
найти минимальный элемент в каждой строке матрицы и записать все минимальные элементы в отдельный массив W_P Помощь студентам 6 28.12.2007 00:24