Dr. Ra, может Freeman и прав... Можно задание уточнить? Нужно сдвигать циклически сам массив, или его элементы?
Поясню на примере. Есть вектор <1, 2, 3, 4, 5> Можно сдвинуть весь вектор например на 2 позиции влево, и получим вектор <3, 4, 5, 1, 2>. А можно сдвинуть элементы вектора, и получим: <1 сдвинутая на К позиций влево, 2 сдвинутая на К позиций влево, и т.д.>
Что имеется в виду?
Автор: Dr. Ra 13.04.2005 3:06
Цитата(volvo @ 12.04.05 22:51)
Что имеется в виду?
Необходимо, ЭЛЕМЕНТЫ заданого вектора циклически сдвинуть на К позиций влево.
Зы. Я попробывал через перестановку чисел в массиве, что-то не очень выходит...
Автор: Dr. Ra 14.04.2005 1:42
Интересно, на меня, что все забили???
Автор: volvo 14.04.2005 1:43
Ну так Freeman же дал правильное решение... Чем оно не устраивает?
Добавлено: Не нравится ассемблер, тогда вот Паскаль:
function rol(x: word; const k: byte): word; var i: byte; begin for i := 1 to k do begin x := (x shl 1) or byte(((x and $8000) = $8000)); end; rol := x end;
const n = 10; k = 2; a: array[1 .. n] of word = (32000, 2, 3, 4, 5, 6, 7, 8, 9, 10);
var i, T: integer; begin for i := 1 to n do begin a[i] := rol(a[i], k); write(a[i]:4); end; writeln; end.
Автор: Dr. Ra 14.04.2005 22:58
Цитата(volvo @ 13.04.05 22:43)
Не нравится ассемблер, тогда вот Паскаль:
Спасибо, конечно, но вот проблемма - мы еще не прошли процедур и ф-й. Если я сдам задачку в таком виде, препод заподозрит меня в халтуре и то , что задачку не я делал.
Можно ли сделать эту задачу без применения процедур???
Автор: volvo 14.04.2005 23:07
Цитата(Dr. Ra @ 14.04.05 18:58)
Можно ли сделать эту задачу без применения процедур???
:yes: Легко...
const n = 10; k = 2; a: array[1 .. n] of word = (32000, 2, 3, 4, 5, 6, 7, 8, 9, 10);
var i, j: integer; begin for i := 1 to n do begin for j := 1 to k do begin a[i] := (a[i] shl 1) or byte(((a[i] and $8000) = $8000)); end; write(a[i]:4); end; writeln; end.
Автор: -Павел- 27.11.2006 21:10
Цитата(volvo @ 12.04.2005 18:55)
Как же ты программу написал, если не понял, что означает циклический сдвиг?
Это, кстати, значит, что при сдвиге влево первый элемент массива становится последним...
Было: 123456 К = 2 Стало: 345612
А вы не могли бы представить код программы, которая как раз и выполняет сие действо, т.е. 12345->сдвиг при k=2->34512. K должно быть переменным числом. Неделю бьюсь уже, с двумя массивами придумал, всё работает, но препод говорит, что нужно с одним.
Автор: volvo 27.11.2006 21:25
size - размер массива A ...
for i := 1 to K do begin { <--- Проделываем K раз }
T := A[1]; { <--- Запоминаем первый элемент } for j := 1 to size - 1 do A[j] := A[j+1]; { <--- Сдвигаем все элементы кроме первого на один влево } A[size] := T; { <--- Устанавливаем бывший первый на последнюю позицию }
end;
Автор: -Павел- 28.11.2006 3:01
Цитата(volvo @ 27.11.2006 17:25)
size - размер массива A ...
for i := 1 to K do begin { <--- Проделываем K раз }
T := A[1]; { <--- Запоминаем первый элемент } for j := 1 to size - 1 do A[j] := A[j+1]; { <--- Сдвигаем все элементы кроме первого на один влево } A[size] := T; { <--- Устанавливаем бывший первый на последнюю позицию }
end;
Ну что я могу сказать... Мастер, честное слово... Спасибо большое!
Автор: Гость 8.12.2007 19:29
У меня похожая задача. Над сдвинуть циклически вправо. Может кто поможет ? Заранее спасибо.
Автор: volvo 8.12.2007 19:38
T := a[size]; for j := size downto 2 do A[j] := A[j - 1]; a[1] := T;