|
Главная | Правила | Регистрация | Дневники | Справка | Пользователи | Календарь | Поиск | Сообщения за день | Все разделы прочитаны |
|
Опции темы | Опции просмотра |
16.11.2014, 13:14 | #1 (permalink) |
Новичок
Регистрация: 16.11.2014
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Поворот массива по часовой стрелке на 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 |
16.11.2014, 13:14 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Зарегистрированные ранее пользователи создавали похожие темы Поворот и наклон в CorelDRAW Формирование массива Бегущий огонь на десять шагов Проблема с бегущим огнем на 10 шагов поворот передней панели набок |
16.11.2014, 23:51 | #3 (permalink) |
VIP user
Регистрация: 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. |
17.11.2014, 11:59 | #5 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
17.11.2014, 16:47 | #9 (permalink) |
Специалист
Регистрация: 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. |
17.11.2014, 17:08 | #10 (permalink) |
Новичок
Регистрация: 16.11.2014
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Спасибо, Владимир, огромное)
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
Опции темы | |
Опции просмотра | |
|
|