IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Тема: Массивы, Циклический сдвиг
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 9
Пол: Мужской

Репутация: -  0  +


Дана задача:
Элементы заданого вектора циклически сдвинуть на К позиций влево.

Я программу-то написал, но так и не понял, что значит: сдвинуть циклически.
Можете обьяснить?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата(Dr. Ra @ 12.04.05 18:39)
Я программу-то написал, но так и не понял, что значит: сдвинуть циклически.

Как же ты программу написал, если не понял, что означает циклический сдвиг?

Это, кстати, значит, что при сдвиге влево первый элемент массива становится последним...


Было: 123456
К = 2
Стало: 345612
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





Группа: Пользователи
Сообщений: 9
Пол: Мужской

Репутация: -  0  +


Цитата(volvo @ 12.04.05 19:55)
Как же ты программу написал, если не понял, что означает циклический сдвиг?

Это, кстати, значит, что при сдвиге влево первый элемент массива становится последним...


Было: 123456
К = 2
Стало: 345612




АААА....понятно, а я решил что просто надо из каждого элемента вычесть К чисел.
Спасибо!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


-
****

Группа: Пользователи
Сообщений: 480
Пол: Мужской

Репутация: -  4  +


Код

asm
mov ax,chislo
ror ax,5 {циклический сдвиг вправо на 5 бит}
mov chislo,ax
end;


--------------------
бб
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5





Группа: Пользователи
Сообщений: 9
Пол: Мужской

Репутация: -  0  +


Цитата(FreeMan @ 12.04.05 20:17)
Код

asm
mov ax,chislo
ror ax,5 {циклический сдвиг вправо на 5 бит}
mov chislo,ax
end;



:no: Ничего не разобрал, а что такое mov и ror???
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Dr. Ra, может Freeman и прав... Можно задание уточнить? Нужно сдвигать циклически сам массив, или его элементы?

Поясню на примере. Есть вектор <1, 2, 3, 4, 5> Можно сдвинуть весь вектор например на 2 позиции влево, и получим вектор <3, 4, 5, 1, 2>. А можно сдвинуть элементы вектора, и получим: <1 сдвинутая на К позиций влево, 2 сдвинутая на К позиций влево, и т.д.>

Что имеется в виду?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7





Группа: Пользователи
Сообщений: 9
Пол: Мужской

Репутация: -  0  +


Цитата(volvo @ 12.04.05 22:51)
Что имеется в виду?


Необходимо, ЭЛЕМЕНТЫ заданого вектора циклически сдвинуть на К позиций влево.

Зы. Я попробывал через перестановку чисел в массиве, что-то не очень выходит...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8





Группа: Пользователи
Сообщений: 9
Пол: Мужской

Репутация: -  0  +


Интересно, на меня, что все забили??? sad.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






Ну так 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.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10





Группа: Пользователи
Сообщений: 9
Пол: Мужской

Репутация: -  0  +


Цитата(volvo @ 13.04.05 22:43)
Не нравится ассемблер, тогда вот Паскаль:


Спасибо, конечно, smile.gif но вот проблемма - мы еще не прошли процедур и ф-й.
Если я сдам задачку в таком виде, препод заподозрит меня в халтуре и то , что задачку не я делал. smile.gif

Можно ли сделать эту задачу без применения процедур???
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гость






Цитата(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.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Гость






Цитата(volvo @ 12.04.2005 18:55) *

Как же ты программу написал, если не понял, что означает циклический сдвиг?

Это, кстати, значит, что при сдвиге влево первый элемент массива становится последним...


Было: 123456
К = 2
Стало: 345612


А вы не могли бы представить код программы, которая как раз и выполняет сие действо, т.е. 12345->сдвиг при k=2->34512. K должно быть переменным числом. Неделю бьюсь уже, с двумя массивами придумал, всё работает, но препод говорит, что нужно с одним.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Гость






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;
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Гость






Цитата(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;


Ну что я могу сказать... Мастер, честное слово... good.gif Спасибо большое!
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Гость






У меня похожая задача. Над сдвинуть циклически вправо. Может кто поможет ? Заранее спасибо.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Гость






T := a[size];
for j := size downto 2 do A[j] := A[j - 1];
a[1] := T;

вместо того, что было...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Гость






пасиб! все работает.
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.03.2024 16:15
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name