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

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

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

> Сдвиг элемента по кругу!
Студент*21в.
сообщение 2.04.2010 9:30
Сообщение #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 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 6)
TarasBer
сообщение 2.04.2010 9:50
Сообщение #2


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

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

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


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


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Студент*21в.
сообщение 2.04.2010 9:55
Сообщение #3


Новичок
*

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

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


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


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

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

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


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


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Студент*21в.
сообщение 2.04.2010 10:34
Сообщение #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 
 К началу страницы 
+ Ответить 
TarasBer
сообщение 2.04.2010 11:00
Сообщение #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 
 К началу страницы 
+ Ответить 
Студент*21в.
сообщение 2.04.2010 11:11
Сообщение #7


Новичок
*

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

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


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

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

 



- Текстовая версия 20.07.2025 10:37
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"