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

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

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

 
 Ответить  Открыть новую тему 
> Задача на забитие гвоздя ), хозяйкам на заметку: шуруп забитый молотком держится прочнее гвоздя за
SKVOZNJAK
сообщение 13.12.2006 1:58
Сообщение #1


Профи
****

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

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


Не влезло: "винченного отвёрткой"


Садисткая задача. Имеется цикл :

for a:=b to c do begin

end;

Все приведённые переменные типа Int64. Имеющийся у вас компилятор поддеpживает операции с такими переменными, но считает недопустимым строить на них циклы. Внимание задание! Напишите заменитель цикла, наиболее изящное решение. Код должен нормально работать при любых допустимых значениях переменных a,b,c.

Сообщение отредактировано: SKVOZNJAK - 13.12.2006 7:56
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
eXtractor
сообщение 14.12.2006 1:08
Сообщение #2


Новичок
*

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

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


И почему мое сообщение удалили?
Ладно, повторю. Это не подойдет?
a:=b;
while a<>c do begin

inc(a);
end;


М
Не удалили. Было временно скрыто по известным тебе причинам. Сейчас действительно удаляю, раз уж сдублировано.. Lapp

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


Гуру
*****

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

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


Цитата
Имеющийся у вас компилятор поддеpживает операции с такими переменными, но считает недопустимым строить на них циклы .

eXtractor, как думаешь while это цикл?

Ну можно построить конструкцию с меткой и if.
Типа:

a:=b;
метка
inc(a);
if a<=c then goto метка



--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 14.12.2006 1:55
Сообщение #4


Гость






eXtractor, а подумать не забыл? Сказано же было:
Цитата
Код должен нормально работать при любых допустимых значениях переменных a,b,c.
Делаем:

a := -1;
b := -2;

{ твой цикл }

и наслаждаемся smile.gif ...

Bokul, а ты пробовал на FPC сделать цикл FOR на параметре Int64? Не делается, а While - проходит... Так что, While скорее можно использовать, чем нельзя...
 К началу страницы 
+ Ответить 
Bokul
сообщение 14.12.2006 2:11
Сообщение #5


Гуру
*****

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

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


Цитата
Bokul, а ты пробовал на FPC сделать цикл FOR на параметре Int64?

Нет, но и в моем варианте нету цикла FOR.


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
eXtractor
сообщение 14.12.2006 8:13
Сообщение #6


Новичок
*

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

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


Цитата(volvo @ 14.12.2006 1:55) *
eXtractor, а подумать не забыл? Сказано же было:
Делаем:

a := -1;
b := -2;

{ твой цикл }

и наслаждаемся smile.gif ...


В задаче использован именно to — так его тоже зациклит при таких числах.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 14.12.2006 9:00
Сообщение #7


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

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

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


volvo, ты имел в виду
b:=-1;
c:=-2;
?
Цитата(eXtractor @ 14.12.2006 9:13) *

В задаче использован именно to — так его тоже зациклит при таких числах.

Нет, цикл for не станет выполняться совсем, если конечная величина меньше начальной. Проверка выполняется перед входом и проверка эта не на равенство, а на "больше".
Интересно, что даже при начальной величине меньше конечной твой цикл не выполнит последнего шага (при а=с), а for должен выполнить.


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


Гость






Цитата(Lapp @ 14.12.2006 8:00)
volvo, ты имел в виду
b:=-1;
c:=-2;
?
yes2.gif Именно... Опечатка вышла...
 К началу страницы 
+ Ответить 
SKVOZNJAK
сообщение 14.12.2006 13:05
Сообщение #9


Профи
****

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

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


Заметьте, не я произнёс на этот раз goto smile.gif Хотя именно его и пришлось использовать для поиска фразы в длинных файлах вместо for. Просто интересно было посмотреть как вы будете выкручиваться чтобы не произнести это слово. Вообще-то под переменной C я понимал конец файла - 0 или величину положительную, про другой вариант не подумал. С такими условиями вроде так.

a:=b;
if c<a then goto 2;
1:

if a=c then goto 2;
inc(a);
goto 1;
2:

Под линуксом как-то удавалось накормить for конечной величиной меньше начальной. При выполнении начальная величина многократно возрастала. Баг конкретной версии компилятора.

Сообщение отредактировано: SKVOZNJAK - 14.12.2006 13:25
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Michael_Rybak
сообщение 14.12.2006 16:05
Сообщение #10


Michael_Rybak
*****

Группа: Модераторы
Сообщений: 1 046
Пол: Мужской
Реальное имя: Michael_Rybak

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


Либо я чего-то не понимаю, либо одно из двух. Объясните мне плиз, почему while не подходит?

a := b;
while a <= c do begin
...
Inc(a);
end;



Всегда считал, что for работает именно так.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
SKVOZNJAK
сообщение 14.12.2006 21:18
Сообщение #11


Профи
****

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

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


Как оказалось подходит, компилятор не ругается. Прикол сорвался( Но всё равно, в сложных циклах со множеством условий и необходимостью выйти строго в определённой точке просто цикл подходит слабо. Нужно задачу дробить на множество подзадач. В СИ как то умудряются обходиться без меток, наверно меньше узких мест или ещё что то.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 14.12.2006 22:23
Сообщение #12


Perl. Just code it!
******

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

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


А из-за чего вообще нельзя мутить цикл for для int64 ? Тип то "целый".


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Michael_Rybak
сообщение 15.12.2006 14:35
Сообщение #13


Michael_Rybak
*****

Группа: Модераторы
Сообщений: 1 046
Пол: Мужской
Реальное имя: Michael_Rybak

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


Цитата(SKVOZNJAK @ 14.12.2006 20:18) *

Как оказалось подходит, компилятор не ругается. Прикол сорвался( Но всё равно, в сложных циклах со множеством условий и необходимостью выйти строго в определённой точке просто цикл подходит слабо. Нужно задачу дробить на множество подзадач. В СИ как то умудряются обходиться без меток, наверно меньше узких мест или ещё что то.


В моей практике встречаются довольно сложные циклы (пишу на с++), и goto пользуюсь крайне редко; может раза два за последний год. Обычно break и continue с головой хватает, а если в цикле сильно много кода, то возникает вопрос, а не разбить ли это дело на процедуры в целях читабельности. Тогда и goto обычно сам собой уходит за ненадобностью.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 15.12.2006 14:57
Сообщение #14


Гость






Цитата
В моей практике встречаются довольно сложные циклы <...>, и goto пользуюсь крайне редко;

yes2.gif +1 ... Причем я использую (когда уже приходится) только goto вниз - но не наверх...
 К началу страницы 
+ Ответить 
SKVOZNJAK
сообщение 18.12.2006 19:08
Сообщение #15


Профи
****

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

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


А в чём разница, если гото потом обратно в цикл возвращает, то это уже аналог процедуры.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



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