Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Сдвиг элемента по кругу!

Автор: Студент*21в. 2.04.2010 13:30

Всем привет!
Дана программка, которая выполняет сдвиг элементов массива на одну поз. вправо

 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 2.04.2010 13:50

tmp := x[n];
for i := n downto 2 do x[i] := x[i-1];
x[1] := tmp;

Автор: Студент*21в. 2.04.2010 13:55

Спасибо! А "tmp" это новая переменная? Тогда ее наверно надо указать в разделе описания переменных?

Автор: TarasBer 2.04.2010 14:23

Очевидно, да.

Автор: Студент*21в. 2.04.2010 14:34

понятно) я решил так:

        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 2.04.2010 15:00

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

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

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

Код

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в. 2.04.2010 15:11

Спасибо! Буду вникать.