Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 16.11.2014, 13:14   #1 (permalink)
DDOS
Новичок
 
Регистрация: 16.11.2014
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Поворот массива по часовой стрелке на P шагов

В заданном k-ом слое элементов целочисленного прямоугольного массива matrixnm сдвинуть все элементы на p шагов по часовой стрелке. Номер слоя k и количество шагов p задать с консоли.

Входные данные для n=4, m=5, k=2, p=2:
v_min=-20
v_max=10
Исходный массив:
Код:
  7     -2   -11      3     -5
  5      2     0     10      1 
-15      9   -12      8    -18
  0    -10     9    -13      4
Выходной массив:
Код:
  7     -2   -11      3     -5
  5    -12     9      2      1 
-15      8    10      0    -18
  0    -10     9    -13      4
Помогите пожалуйста)
DDOS вне форума   Ответить с цитированием

Старый 16.11.2014, 13:14
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Зарегистрированные ранее пользователи создавали похожие темы

Поворот и наклон в CorelDRAW
Формирование массива
Бегущий огонь на десять шагов
Проблема с бегущим огнем на 10 шагов
поворот передней панели набок

Старый 16.11.2014, 13:33   #2 (permalink)
DDOS
Новичок
 
Регистрация: 16.11.2014
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Желательно написать в паскале)
DDOS вне форума   Ответить с цитированием
Старый 16.11.2014, 23:51   #3 (permalink)
Gruvi
VIP user
 
Аватар для Gruvi
 
Регистрация: 10.03.2011
Сообщений: 765
Записей в дневнике: 1
Сказал(а) спасибо: 10
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 3453
По умолчанию

Задание очень на ваше похоже:
Дана квадратная матрица A порядка M (M — нечетное число). Начиная с элемента A
1,1 и перемещаясь по часовой стрелке, вывести все
ее элементы по спирали: первая строка, последний столбец, последняя
строка в обратном порядке, первый столбец в обратном порядке, оставшиеся элементы второй строки и т.д.; последним выводится центральный
элемент матрицы.

Код:
uses crt;
const nmax=15;
var a:array[1..nmax,1..nmax]of integer;
    m,i,j:byte;
    x,y,add,dir:integer;
begin
clrscr;
repeat
write('Размер матрицы нечетное число до ',nmax,' m=');
readln(m);
until odd(m)and(m in [1..nmax]);
writeln('Матрица:');
for i:=1 to m do
  begin
    for j:=1 to m do
      begin
        a[i,j]:=(i-1)*m+j;{можно по другому заполнить, это для наглядности}
        write(a[i,j]:4);
      end;
    writeln;
  end;
writeln;
x:=0;{выход слева вверху}
y:=1;
Add:=m; {длина начального пути}
dir:=1;{положительное направление}
while (add<>0) do
begin
  i:=0;
  while (i<>add) do
    begin
    x:=x+dir; {влево или вправо}
    write(a[y,x]:4);
    i:=i+1;
    end;
  i:=0;
  add:=add-1;{прошли отрезок, уменьшаем длину}
  while (i<>add) do
    begin
    y:=y+dir;{вниз или вверх}
    write(a[y,x]:4);
    i:=i+1;
    end;
  dir:=dir*(-1);{прошли 2 отрезка меняем направления}
end;
readln
end.
Gruvi вне форума   Ответить с цитированием
Старый 17.11.2014, 11:55   #4 (permalink)
DDOS
Новичок
 
Регистрация: 16.11.2014
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Да, но у меня цель задачи создать алгоритм, который поворачивает по часовой стрелке К-ый слой матрицы на P шагов)
DDOS вне форума   Ответить с цитированием
Старый 17.11.2014, 11:59   #5 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от DDOS Посмотреть сообщение
Да, но у меня цель задачи создать алгоритм, который поворачивает по часовой стрелке К-ый слой матрицы на P шагов)
Вам действительно это нужно? К какому сроку?
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 17.11.2014, 12:59   #6 (permalink)
DDOS
Новичок
 
Регистрация: 16.11.2014
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Здравствуйте, Владимир, к сред)Но чем быстрее, тем лучше.
DDOS вне форума   Ответить с цитированием
Старый 17.11.2014, 13:06   #7 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от DDOS Посмотреть сообщение
Здравствуйте, Владимир, к сред)Но чем быстрее, тем лучше.
Хорошо, попробую сегодня сделать.
Vladimir_S вне форума   Ответить с цитированием
Старый 17.11.2014, 15:59   #8 (permalink)
Mokingbird
Новичок
 
Регистрация: 13.11.2014
Сообщений: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Тоже интересно, задание похожее))
Mokingbird вне форума   Ответить с цитированием
Старый 17.11.2014, 16:47   #9 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Ну вот, пожалуйста:
Код:
Uses CRT;

Const
 N_max=10;
 M_max=16;
 V_min=-20;
 V_max=10;

Type
 Matrix=Array[1..N_max,1..M_max] of Integer;
 Vector=Array[1..2*(N_max+M_max)-3] of Integer;

Var
 N,M,Nv,k,p,i,j:Byte;
 A:Matrix;
 V:Vector;

Procedure Vect(Av:Matrix; var Vv:Vector);
var q,r,d:byte;
begin
 d:=0;
 for r:=k to M-k do
  begin
   Inc(d);
   Vv[d]:=A[k,r];
  end;
 for q:=k to N-k do
  begin
   Inc(d);
   Vv[d]:=A[q,M-k+1];
  end;
 for r:=M-k+1 downto k+1 do
  begin
   Inc(d);
   Vv[d]:=A[N-k+1,r];
  end;
 for q:=N-k+1 downto k+1 do
  begin
   Inc(d);
   Vv[d]:=A[q,k];
  end;
end;

Procedure Sh(var Vs:vector);
var
 q,r:byte;
begin
 for q:=1 to p do
  begin
   for r:=Nv downto 1 do Vs[r+1]:=Vs[r];
   Vs[1]:=Vs[Nv+1];
  end;
end;

Procedure Matr(Vm:Vector);
var q,r,d:byte;
begin
 d:=0;
 for r:=k to M-k do
  begin
   Inc(d);
   A[k,r]:=Vm[d];
  end;
 for q:=k to N-k do
  begin
   Inc(d);
   A[q,M-k+1]:=Vm[d];
  end;
 for r:=M-k+1 downto k+1 do
  begin
   Inc(d);
   A[N-k+1,r]:=Vm[d];
  end;
 for q:=N-k+1 downto k+1 do
  begin
   Inc(d);
   A[q,k]:=Vm[d];
  end;
end;

Begin
 ClrScr;
 Randomize;
 Write('  Number of lines = ');
 Readln(N);
 Write('Number of columns = ');
 Readln(M);
 Repeat
  Write('  Number of layer = ');
  Readln(k);
  If (k>(N div 2)) or (k>(M div 2)) then writeln ('Too big!!!');
 Until (k<=(N div 2)) and (k<=(M div 2));
 Nv:=2*(N+M)-8*k+4;
 Write('            Shift = ');
 Readln(p);
 Writeln;
 for i:=1 to N do
  begin
   for j:=1 to M do
    begin
     A[i,j]:=V_min+ Random(V_max-V_min+1);
     if (((i=k) or (i=N-k+1)) and ((j>=k) and (j<=M-k+1))) or
        (((j=k) or (j=M-k+1)) and ((i>k) and (i<M-k))) then textcolor(12);
     write(A[i,j]:4);
     NormVideo;
    end;
   writeln;
  end;
 Writeln;
 Writeln;
 Vect(A,V);
 Sh(V);
 Matr(V);
 for i:=1 to N do
  begin
   for j:=1 to M do
    begin
     if (((i=k) or (i=N-k+1)) and ((j>=k) and (j<=M-k+1))) or
        (((j=k) or (j=M-k+1)) and ((i>k) and (i<M-k))) then textcolor(12);
     write(A[i,j]:4);
     NormVideo;
    end;
   writeln;
  end;
 Readkey
End.
Миниатюры
matr01.jpg  
Vladimir_S вне форума   Ответить с цитированием
Старый 17.11.2014, 17:08   #10 (permalink)
DDOS
Новичок
 
Регистрация: 16.11.2014
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Спасибо, Владимир, огромное)
DDOS вне форума   Ответить с цитированием
Ads

Яндекс

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

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 20:29.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.