Массив целых чисел х[1]... х[п] «свернуть в кольцо» и повернуть вправо на К позиций (К может быть больше п).
Заранне спасибо!
Выложите то что смогли сделать,даже если не работает.Чтоб было видно,что вы пытались хотябы это решить.
program jopa;
uses crt;
type mas=array[1..1000] of integer;
var m:mas;k,tmp,i,n:integer;
begin
clrscr;
writeln('vvedi n');
readln(n);
writeln('vvedi ',n,' elementov massiva');
for i:=1 to n do
readln(m[i]);
writeln('vvedi kolichestvo pozicii sdviga');
readln(k);
for i:=1 to k do
begin
tmp:=n;
for i:=n downto k do
m[i]:=m[i-1];
m[1]:=tmp
end;
for i:=1 to n do
write(m[i]:3);
readln;
end.
Посмотри http://forum.pascal.net.ru/index.php?showtopic=23922&hl=move+%F1%E4%E2%E8%F8
Посмотрел! Всё равно правильно работать не хочет(( Видимо я вообще дурак полный(
2 аll
что означает «свернуть в кольцо»?
для чего предназначена процедура Move(A[2], A[i], (size - 1)*Sizeof(integer)); и что за переменные в нее вводятся?
расскажите пожалуйста.
program jopa;
uses crt;
type mas=array[1..1000] of integer;
var m:mas;k,tmp,i,n:integer;
begin
clrscr;
writeln('vvedi n');
readln(n);
writeln('vvedi ',n,' elementov massiva');
for i:=1 to n do
readln(m[i]);
writeln('vvedi kolichestvo pozicii sdviga');
readln(k);
for i:=1 to k do
begin
tmp:=n;
for i:=n downto k do
{m[i]:=m[i-1];}
Move(m[2], m[i], (n - 1)* n, of(integer))
m[1]:=tmp;
end;
for i:=1 to n do
write(m[i]:3);
readln;
end.
Ну во первых ты в tmp присваиваеш n а потом первому элементу присваиваеш n,это уже косяк,тебе надо значение н-ого элемента....А во вторых тебе четко написали,как работает процедура movе,а ты что мудриш зачем какие то два цикла???плюс сдвинуть надо вправо,а ты влево двигаеш.И повторить эту операцию надо n-k раз.
for j:=1 to n-k do
begin
tmp:=m[n];
Move(m[1], m[i], (n + 1)* n, of(integer))
m[1]:=tmp;
end;
for j:=1 to n-k do
begin
tmp:=m[n];
Move(m[1], m[i], (n + 1)* n, of(integer))
m[1]:=tmp;
end;
for k:=1 to n1 do begin //n1-это сколько сдвигов
j:=a[n];
for i:=n downto 2 do a[i]:=a[i-1];
a[1]:=j
end;
for k:=1 to n1 do begin //n1-это сколько сдвигов
j:=a[n];
for i:=n downto 2 do a[i]:=a[i-1];
a[1]:=j
end;
for j:=1 to n-k do
begin
tmp:=m[n];
Move(m[2], m[i], (n - 1)* n);
m[1]:=tmp;
end;
for j:=1 to k do
begin
tmp:=m[n];
for i:=n downto 2 do
m[i]:=m[i-1];
m[1]:=tmp;
end;
Лучше - так:
// k = число сдвигов, n = размер массива
for i := 1 to k mod n do begin
tmp := m[n];
Move(m[1], m[2], (n-1)*sizeof(integer));
m[1]:=tmp;
end;
// k = число сдвигов, n = размер массива
for i := 1 to k mod n do begin
tmp := m[n];
Move(m[1], m[2], (n-1)*sizeof(integer));
m[1]:=tmp;
end;
А что есть сдвиг на К при К больше N??По сути это сдвиг на разность К и N,просто делаеш условие,если к меньше N оставляеш то что было,если больше то чуть чуть изменяеш и вуаля...
Вольво а у меня вопрос о приотитете действий.
Krjuger в первую очередь, а с ним и все остальные: ВНИМАТЕЛЬНО смотрим на ответы, которые появляются в теме: там MOD не для красоты, между прочим... Я надеюсь, объяснять, как работает MOD не надо? Какие, блин, условия еще придумали? Запустите компилятор уже, и проверьте, а не ДОГАДЫВАЙТЕСЬ...
Добавлено через 2 мин.
Название темы изменено!)
Вот итоговый код программы:
program jopa;
uses crt;
type mas=array[1..1000] of integer;
var m:mas;k,tmp,i,n,n1:integer;
begin
clrscr;
writeln('vvedi n');
readln(n);
writeln('vvedi ',n,' elementov massiva');
for i:=1 to n do
readln(m[i]);
writeln('vvedi kolichestvo pozicii sdviga');
readln(k);
for i := 1 to k mod n do
begin
tmp := m[n];
Move(m[1], m[2], (n-1)*sizeof(integer));
m[1]:=tmp;
end;
for i:=1 to n do
write(m[i]:3);
readln;
end.