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

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

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

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> Поменять местом с помощью цикла.
Dranik7
сообщение 8.10.2010 20:15
Сообщение #1


Новичок
*

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

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


Текст задачи:

Поменяйте содержимое трех ячeек a,b,c.
(обмен выполняeтся циклически a->b, b->c, c->a).
дополнительных переменных не использовать

Помогите решить

Сообщение отредактировано: Dranik7 - 9.10.2010 18:49
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 8.10.2010 20:34
Сообщение #2


Гость






Сам-то пробовал? Задача на 3 минуты, если подумать smile.gif и решается в 4 шага. В чем затруднения у тебя, расскажи?

P.S. Для разминки - сначала попробуй решить задачу для ДВУХ переменных, не пользуясь дополнительной.
 К началу страницы 
+ Ответить 
TarasBer
сообщение 8.10.2010 21:02
Сообщение #3


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

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

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


А какого типа переменные?

> Задача на 3 минуты, если подумать

Я в своё время не осилил.


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Unconnected
сообщение 8.10.2010 21:14
Сообщение #4


mea culpa
*****

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

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


Такая, только с двумя переменными, была года два назад на какой-то олимпиаде... осилил, методом научного тыка.) Ну для 3х не сильно отличаться будет.


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 8.10.2010 23:06
Сообщение #5


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(volvo @ 8.10.2010 21:34) *
Задача на 3 минуты, если подумать
Думанье включается в 3 мин? ))
У меня не было случая ее порешать ((, я прочитал сразу в какой-то книге (о вреде чтения, кстати)). Я сильно сомневаюсь, что я бы ее асилел..


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Unconnected
сообщение 8.10.2010 23:58
Сообщение #6


mea culpa
*****

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

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


Я чего-то недопонял, или все дело правда тут?)

var a,b,c:integer;

Procedure swap(var v1,v2:integer);
begin
inc(v1,v2);
v2:=v1-v2;
v1:=v1-v2;
end;

begin
read(a,b,c);
swap(a,b);
swap(b,c);
swap(c,a);
write(a,' ',b,' ',c);
end.


Кстати, кажется, такой обмен (a->b, b->c, c->a) эквивалентен b->c..

Сообщение отредактировано: Unconnected - 9.10.2010 0:01


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
TarasBer
сообщение 9.10.2010 0:13
Сообщение #7


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

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

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


> Кстати, кажется, такой обмен (a->b, b->c, c->a) эквивалентен b->c..

swap(c,a) тут лишний.


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 9.10.2010 0:35
Сообщение #8


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(TarasBer @ 9.10.2010 1:13) *
> Кстати, кажется, такой обмен (a->b, b->c, c->a) эквивалентен b->c..

swap(c,a) тут лишний.
yes2.gif
Un, ты слишком буквально трактовал условие )). Если бы условие было a->b, b->a (что означает: значение из a должно перейти в b, а значение из b перейти в a) - ты бы тоже два раза свопил? ))


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Unconnected
сообщение 9.10.2010 0:41
Сообщение #9


mea culpa
*****

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

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


Ну как бы для наглядности) Да я вообще то и написал это, в том посте))


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 9.10.2010 4:36
Сообщение #10


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(Unconnected @ 9.10.2010 1:41) *
то и написал это
Так ты то написал или это? ))

Но!.. Un, ты забыл кое-что важное. В таком виде процедура swap не пройдет теста..


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 9.10.2010 10:41
Сообщение #11


Гость






Цитата
В таком виде процедура swap не пройдет теста..
А кроме всего прочего - она и не нужна тут ни разу, все делается гораздо проще. yes2.gif
 К началу страницы 
+ Ответить 
Unconnected
сообщение 9.10.2010 11:10
Сообщение #12


mea culpa
*****

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

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



var a,b,c:integer;

begin
read(a,b,c);
c:=a+b+c;
b:=c-b-a;
a:=c-b-a;
a:=c-b-a;
c:=c-b-a;
write(a,' ',b,' ',c);
end.




Ну мне вообще проще было бы по первому способу...)

Сообщение отредактировано: Unconnected - 9.10.2010 11:12


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 9.10.2010 11:17
Сообщение #13


Гость






Цитата
Ну мне вообще проще было бы по первому способу...)
Ну, вообще-то твой последний способ неправильный, тебя все время тянет сделать что-нибудь лишнее:

Running "f:\programs\pascal\test.exe "
3 9 2
3 2 9


- это неправильное поведение программы...
 К началу страницы 
+ Ответить 
Unconnected
сообщение 9.10.2010 11:22
Сообщение #14


mea culpa
*****

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

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


Цитата
- это неправильное поведение программы...


Чего это вдруг оно неправильное? smile.gif


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 9.10.2010 11:34
Сообщение #15


Гость






А что, правильное? Значение A у тебя вообще не меняется, скажем. Это так надо? Вообще написано, что старое значение A должно было перейти в B, а потом ей должно присвоиться новое значение - бывшее раньше в C...
 К началу страницы 
+ Ответить 
Unconnected
сообщение 9.10.2010 11:44
Сообщение #16


mea culpa
*****

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

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


Но, в итоге содержание ячеек таким же и должно получиться ведь (эквивалентное b<->c)? Да, и правда, тут, наверное, важен сам процесс (наряду с неиспользованием доп.переменных).. Но и "чистого" обмена, по-моему, тут тоже не получится, будут левые действия, как сейчас.

Сбили с панталыку в начале темы, оптимизаторы ))


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Dranik7
сообщение 9.10.2010 17:21
Сообщение #17


Новичок
*

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

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


Unconnected, в обоих вариантах нет циклов, а надо с помощью цикла
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
TarasBer
сообщение 9.10.2010 17:48
Сообщение #18


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

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

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


> a:=c-b-a;
> a:=c-b-a;

Зачем 2 раза? Один раз тут лишний, если его убрать, всё будет нормально.

> Unconnected, в обоих вариантах нет циклов, а надо с помощью цикла

В условии сказано, что нужен циклический обмен, этот код и делает цилический обмен.
А если нужно, чтобы был цикл for i := ..., то надо, чтобы числа были не в переменных a, b, c, а в массиве, и требование, чтобы первый элемент перешёл в последний, а остальные сдвинулись на единичку назад.


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Unconnected
сообщение 9.10.2010 18:13
Сообщение #19


mea culpa
*****

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

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


Цитата

Зачем 2 раза? Один раз тут лишний, если его убрать, всё будет нормально.


Он там не лишний.. "нормально" и сейчас, если иметь в виду конечный результат.

Сообщение отредактировано: Unconnected - 9.10.2010 18:13


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
TarasBer
сообщение 9.10.2010 18:26
Сообщение #20


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

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

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


> если иметь в виду конечный результат

Конечный результат - это не то, что получается в результате 3 парных перестановок. Понимаешь?


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

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

 



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