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

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

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

 
 Ответить  Открыть новую тему 
> Сдвиг элемента по кругу!
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 37
Пол: Мужской
Реальное имя: Александр

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


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

 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.

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


Злостный любитель
*****

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

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


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


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


Новичок
*

Группа: Пользователи
Сообщений: 37
Пол: Мужской
Реальное имя: Александр

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


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


Злостный любитель
*****

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

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


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


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


Новичок
*

Группа: Пользователи
Сообщений: 37
Пол: Мужской
Реальное имя: Александр

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


понятно) я решил так:
        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.

ну наверно это одно и то же) А вот хотелось бы как-нибудь без дополнительных переменных(
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Злостный любитель
*****

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

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


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

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

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

Код

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] итд...


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


Новичок
*

Группа: Пользователи
Сообщений: 37
Пол: Мужской
Реальное имя: Александр

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


Спасибо! Буду вникать.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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