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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.03.2009, 21:34   #1
sarutobi
Новичок
Джуниор
 
Регистрация: 24.03.2009
Сообщений: 2
По умолчанию Сложная задача на двумерные массивы(Pascal)

Ввести квадратную матрицу. В каждой строчке средние элементы обнулить (если средних элементов нет, просто вывести матрицу). Циклически сдвинуть все строки так, чтобы на побочной диагонали были эти нули. Пример:
БЫло:
1 2 3 -4 5
6 7 8 9 1
5 -4 3 8 3
8 3 -8 9 1
3 2 1 1 -3
Стало:
-4 5 1 2 0
1 6 7 0 9
5 -4 0 8 3
3 0 9 1 8
0 1 -3 3 2

Таким образом, средняя строка остаётся без изменения, а остальные числа перекидываются циклически, но не просто вставляются рядами.
sarutobi вне форума Ответить с цитированием
Старый 24.03.2009, 22:33   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Код:
uses crt;
type matrix = array[1..100,1..100] of integer;
var
n : integer;
i,j : integer;
M : matrix;

function sredObnul(n : integer; var M : matrix) : boolean;
 var i : integer;
 begin
 if n mod 2 = 0 then
  begin
  sredObnul := false;
  exit;
  end;
 for i:=1 to n do
  M[i,(n div 2) + 1] := 0;
 sredObnul := true;
 end;
{-------------}
procedure sdvigVlevo(n,numstr : integer; k : integer; var M : matrix);
 var j,l,tmp : integer;
 begin
 if k>=n then k := k mod n;
 tmp := M[numstr,1];
 j := 1;
 for l:=1 to n do
  begin
   if l<n then
    begin
    if j+k <= n then
      begin
      M[numstr,j] := M[numstr,j+k];
      j := j + k;
      end
     else
      begin
      M[numstr,j] := M[numstr,j+k-n];
      j := j + k - n;
      end;
    end
   else
    M[numstr,j] := tmp;
  end;
 end;
{--------------}
procedure sdvigVpravo(n,numstr : integer; k : integer; var M : matrix);
 var j,l,tmp : integer;
 begin
 if k>=n then k := k mod n;
 tmp := M[numstr,n];
 j := n;
 for l:=n downto 1 do
  begin
   if l>1 then
    begin
    if j-k >= 1 then
      begin
      M[numstr,j] := M[numstr,j-k];
      j := j - k;
      end
     else
      begin
      M[numstr,j] := M[numstr,j-k+n];
      j := j - k + n;
      end;
    end
   else
    M[numstr,j] := tmp;
  end;
 end;
{---------}

begin
clrscr;
randomize;
write('Vvedite n: ');
readln(n);
for i:=1 to n do
 begin
 for j:=1 to n do
  begin
  M[i,j] := random(10)+1;
  write(M[i,j]:4);
  end;
 writeln;
 end;
writeln;

//--------
if sredObnul(n,M) then
 begin
 for i:=1 to (n div 2) do
  sdvigVpravo(n,i,(n div 2)-i+1,M);
 for i:=(n div 2)+2 to n do
  sdvigVlevo(n,i,i-(n div 2)-1,M);
 end;

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

readln;
end.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 24.03.2009, 23:06   #3
sarutobi
Новичок
Джуниор
 
Регистрация: 24.03.2009
Сообщений: 2
По умолчанию

спасибо большое)
sarutobi вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Двумерные массивы 3 (Pascal) Дима82 Помощь студентам 6 08.06.2008 14:38
Двумерные массивы 2 (Pascal) Дима82 Помощь студентам 3 08.06.2008 09:41
Двумерные массивы (Pascal) Дима82 Помощь студентам 11 07.06.2008 16:54
Pascal двумерные массивы I n n a Паскаль, Turbo Pascal, PascalABC.NET 3 08.05.2008 13:50