помогите составить основной алгоритм для решения задачи
она сформулирована так:
ВВести целое число К, которая является размерностью квадратной матрицы и натуральное число N- исходные данные
Сформировать матрицу и повернуть ее по часовой стрелке на N шагов...
очень буду признателен, если выложите именно рекурсивную процедуру для поворота матрицы....хотя можно и другими способами(просто наш препод любит рекурсии)...
оч смешно.....а что нибудь по серьезнее можно?....мне реально нужна помощь..или ссылку скиньте, если где нибудь уже есть
Вот поворот матрицы на 90 градусов (это ты называешь шагом?).
Используй ее несколько раз, если нужно.
const
k=4;
var
a,b: array[1..k,1..k]of integer;
i,j: integer;
begin
for i:=1 to k do for j:=1 to k do a[i,j]:=Random(10);
for i:=1 to k do begin
for j:=1 to k do Write(a[i,j]);
WriteLn
end;
WriteLn;
for i:=1 to k do for j:=1 to k do b[i,j]:=a[-j+k+1,i];
for i:=1 to k do begin
for j:=1 to k do Write(b[i,j]);
WriteLn
end;
end.
спасибо...но не много не то......под шагом тут понимается на сколько символов надо сдвинуть, а не поворот под градусом
то есть к примеру первый a[1,1] при шаге в 1 символ сдвинется на a[2,1], при шаге в 3 символа на a[4,1]...
то есть поворот все же есть...но по другому
у меня похожее задание было на защите лабы ток там было только по кромке здвинуть...
попробуу обяснить как я зделал:
береш а11 заносиш в буфер, пото опишуеш проход по кромке матрице, и в етом проходе здвигаеш на 1 елемент, и потом вставляеш из буфера на положеное место,
тоесть
на рисунке розовоей линией показан проход по кромке а зеленой как здвигать елементы, после прохода а11 поставить на а12(первый рядок второй столбец, я приывик сначала строки писать)
в общем 11 можно задатьь в проходе цыкла от 1 до count/2 и будет здвигатся "каждая кромка"
если нужно здинуть N раз то нужно во те все запустить еще в одном цикле N раз
for i:=1 to k div 2 do begin
b:=a[i,i];
for j:=i to k-i do a[j,i]:=a[j+1,i];
for j:=i to k-i do a[k-i+1,j]:=a[k-i+1,j+1];
for j:=k-i downto i do a[j+1,k-i+1]:=a[j,k-i+1];
for j:=k-i downto i+1 do a[i,j+1]:=a[i,j];
a[i,i+1]:=b
end;
спасибо..вы мне очень помогли
ps простите меня за мое не умение правильно формулировать задачу.....но это не мои слова..так как я привел задачу такой, какой продиктовала нам наша преподавательница..слово в слово....и термины теже
Lapp
ты можеш проставить коментарии своего кода
for i:=1 to k div 2 do begin
b:=a[i,i];
for j:=i to k-i do a[j,i]:=a[j+1,i];
for j:=i to k-i do a[k-i+1,j]:=a[k-i+1,j+1];
for j:=k-i downto i do a[j+1,k-i+1]:=a[j,k-i+1];
for j:=k-i downto i+1 do a[i,j+1]:=a[i,j];
a[i,i+1]:=b
end;
Выполняю обещанное)).
for i:=1 to k div 2 do begin {цикл по слоям (квадратам), от внешнего к внутреннему}
b:=a[i,i]; {сохраняем левый верхний элемент}
for j:=i to k-i do a[j,i]:=a[j+1,i]; {поэлементно двигаем левую сторону квадрата вверх на одну позицию}
for j:=i to k-i do a[k-i+1,j]:=a[k-i+1,j+1]; {двигаем нижнюю сторону влево}
for j:=k-i downto i do a[j+1,k-i+1]:=a[j,k-i+1]; {двигаем правую сторону вниз}
for j:=k-i downto i+1 do a[i,j+1]:=a[i,j]; {двигаем верхнюю сторону вправо - кроме последнего элемента}
a[i,i+1]:=b {кладем сохраненный элемент во вторую позицию верхней стороны квадрата}
end;