Помощь - Поиск - Пользователи - Календарь
Полная версия: Сдвиг элемента по кругу!
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Студент*21в.
Всем привет!
Дана программка, которая выполняет сдвиг элементов массива на одну поз. вправо

 program sdvig; 

const n=10;
type mass=array[1..n]of integer;
var i:integer;x:mass;

begin
for i:=1to n do
begin
write(' Введте ',i,'-й элемент массива ');
readln(x[i])
end;
for i:=n-1 downto 2do x[i]:=x[i-1];x[1]:=0;
writeln('Результат');
for i:=1to n do write(x[i] :4);
end.

как сделать так, чтобы первый элемент массива не равнялся нулю, а наследовал значения последнего элемента введенного с клавиатуры?
TarasBer
tmp := x[n];
for i := n downto 2 do x[i] := x[i-1];
x[1] := tmp;
Студент*21в.
Спасибо! А "tmp" это новая переменная? Тогда ее наверно надо указать в разделе описания переменных?
TarasBer
Очевидно, да.
Студент*21в.
понятно) я решил так:
        program sdvig;

const n=10;
type mass=array[1..n]of integer;
var k,i:integer;x:mass;
begin
for i:=1to n do
begin
write(' Введте ',i,'-й элемент массива ');
readln(x[i])
end;
k:=x[9];
for i:=n-1 downto 2do x[i]:=x[i-1];x[1]:=x[10];x[10]:=k;
writeln('Результат');
for i:=1to n do write(x[i] :4);
end.

ну наверно это одно и то же) А вот хотелось бы как-нибудь без дополнительных переменных(
TarasBer
> А вот хотелось бы как-нибудь без дополнительных переменных(

Можно, но бессмысленно, будет больше операций и меньше логичности.

Для двух переменных целого типа обмен без доп. переменной делается так:

Код

x := x xor y;
y := x xor y;
x := x xor y;


Вариант 2 (для переменных целого и вещественного типа, для вещественного возможна потеря точности):

Код

x := x + y;
y := x - y;
x := x - y;


Но эти способы плохи тем, что неправильно работают, если переменные x и y расположены по одному адресу. Это существенно, когда их пытаются запихать в подпрограмму с передачей параметров по ссылке.

Ещё можно перекинуть через регистры.


Для n переменных - обменять x[n] и x[n-1], потом обменять x[n-1] и x[n-2] итд...
Студент*21в.
Спасибо! Буду вникать.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.