OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Воскресенье, 17 Февраль, 2019 13:50

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 235 ]  На страницу Пред.  1, 2, 3, 4, 5 ... 12  След.
Автор Сообщение
СообщениеДобавлено: Вторник, 26 Ноябрь, 2013 20:42 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
ilovb писал(а):
Ну лично мне очевидно, что это уже не цикл. :)
Вот! И все так думают (кроме меня). :D


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 26 Ноябрь, 2013 21:32 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1438
Смотрите:
Красным цветом выделен "путь цикла". Каждое действие на этом пути выполняется ровно N раз.
Думаете я смухлевал в repeat? :) Ничего подобного. С действия 2 начинается цикл, просто это особый случай (N >= 1)
Вложение:
Snap 2013-11-26 at 22.14.46.png
Snap 2013-11-26 at 22.14.46.png [ 38.51 КБ | Просмотров: 4361 ]


А вот варианты с прыжками наружу и внутрь цикла.
Думаю видно как смешиваются пути.
В while получается мешанина логики.
В repeat обратите внимание, что цикл начинается только когда черный путь достигнет действия 2
Вложение:
Snap 2013-11-26 at 22.15.04.png
Snap 2013-11-26 at 22.15.04.png [ 33.48 КБ | Просмотров: 4361 ]


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 26 Ноябрь, 2013 22:42 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1438
Кстати, замечу что repeat - это ни что иное как:
Код:
<действие1>
next := true;
while next do
   <действие2>
   <действие3>
   if cond then
      next := false;
   end;
end;
<действие4>


т.е. просто особый случай использования while.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 27 Ноябрь, 2013 08:19 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
ilovb писал(а):
А вот варианты с прыжками наружу и внутрь цикла.
Думаю видно как смешиваются пути.
В while получается мешанина логики.
В repeat обратите внимание, что цикл начинается только когда черный путь достигнет действия 2
Вложение:
Вложение Snap 2013-11-26 at 22.15.04.png больше недоступно
Что это за боковые чёрные стрелки на Вашем рисунке? Вот правильная картинка:
Вложение:
Cycle.png
Cycle.png [ 3.92 КБ | Просмотров: 4333 ]
Что мы имеем:
1. Цикл имеет один вход и один выход.
2. Точка входа в цикл фиксирована. Проивольные (в середину) попадания в цикл невозможны.
3. Возможная точка выхода из цикла фиксирована. Произвольные выпрыгивания из цикла исключены.

PS: Циклы WHILE и REPEAT являются частными случаями этого цикла. У WHILE отсутствуют блоки 2 и 3, а у REPEAT - 4 и 5.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 27 Ноябрь, 2013 08:43 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
ilovb писал(а):
Код:
   if cond then
      next := false;
   end;

Гы-ы-ы... :)
Код:
   next := ~cond;

PS: Это не одно и то же, но конкретно в данном случае такая замена кода возможна.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 27 Ноябрь, 2013 09:45 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Судя по названию темы, двое "школьников" обучают друг друга программированию :D

Просьба модераторам: перенесите, пожалуйста, обсуждение циклов, начиная вот с этого сообщения Ильи Ермакова, за исключением вот этого сообщения Валерия Лаптева, в новую тему "Стереотипы в построении циклов" или с любым другим подходящим названием. Спасибо!


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 27 Ноябрь, 2013 10:18 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1438
igor писал(а):
ilovb писал(а):
Код:
   if cond then
      next := false;
   end;

Гы-ы-ы... :)
Код:
   next := ~cond;

PS: Это не одно и то же, но конкретно в данном случае такая замена кода возможна.


Тык в repeat условие окончания же :wink:


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 27 Ноябрь, 2013 10:26 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
ilovb писал(а):
Тык в repeat условие окончания же :wink:
И чо?! :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 27 Ноябрь, 2013 10:27 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1438
igor писал(а):
Вложение:
Cycle.png
Что мы имеем:

Имеем два goto :D
Не вижу цикла. Об определениях конечно не спорят, но попробовать стоит :D
Вы можете формально определить цикл? Вот чтобы можно было отличить цикл от goto?

Напомню мое определение:
Цикл - это конечная неразрывная последовательность действий, которая целиком выполняется ровно N раз.
С этой моей точки зрения на вашей картинке цикла нет. :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 27 Ноябрь, 2013 10:29 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1438
igor писал(а):
И чо?! :)

Вау! Тяжелая артиллерия пошла :D


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 27 Ноябрь, 2013 10:39 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 2989
Откуда: Астрахань
ilovb писал(а):
igor писал(а):
И чо?! :)

Вау! Тяжелая артиллерия пошла :D

Определение вашего цикла - в студию!
Очевидно, что ваш цикл - НЕ структурный.
Что иногда приводит к разного рода сложностям.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 27 Ноябрь, 2013 10:44 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
ilovb писал(а):
igor писал(а):
Вложение:
Cycle.png

Напомню мое определение:
Цикл - это конечная неразрывная последовательность действий, которая целиком выполняется ровно N раз.
С этой моей точки зрения на вашей картинке цикла нет. :)
Для цикла не важно, целиком или не целиком выполняется последовательность. Циклы строятся исходя из инварианта цикла (эх, жаль Petr Almazov сюда не заходит, он бы сказал своё веское слово).
Имеет значение можем ли мы быть уверены в том, что постусловие соблюдаются после выхода из цикла. Посмотрите на мою последнюю картинку, там это гарантируется, потому что вы не можете "выпрыгнуть" из цикла минуя это условие.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 27 Ноябрь, 2013 10:59 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1438
Вы говорите о цикле, а не определяете сам цикл. Попробуйте таки формально.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 27 Ноябрь, 2013 11:35 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
ilovb писал(а):
Вы говорите о цикле, а не определяете сам цикл. Попробуйте таки формально.

Цикл - это конечная кольцевая последовательность операторов, выполнение которой прекращается по постусловию цикла, причём на каждой итерации непосредственно в момент проверки постусловия цикла соблюдается инвариант цикла.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 27 Ноябрь, 2013 11:42 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Валерий Лаптев писал(а):
Определение вашего цикла - в студию!
Очевидно, что ваш цикл - НЕ структурный.
Что иногда приводит к разного рода сложностям.
Ну, тогда и Ваше определение цикла - в студию! До кучи. :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 27 Ноябрь, 2013 12:22 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1438
igor писал(а):
ilovb писал(а):
Вы говорите о цикле, а не определяете сам цикл. Попробуйте таки формально.

Цикл - это конечная кольцевая последовательность операторов, выполнение которой прекращается по постусловию цикла, причём на каждой итерации непосредственно в момент проверки постусловия цикла соблюдается инвариант цикла.

Отлично. Определение есть. А теперь попробуйте придумать вермишель из goto, которая бы не попала под это определение. Сможете? :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 27 Ноябрь, 2013 13:19 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 2989
Откуда: Астрахань
igor писал(а):
Валерий Лаптев писал(а):
Определение вашего цикла - в студию!
Очевидно, что ваш цикл - НЕ структурный.
Что иногда приводит к разного рода сложностям.
Ну, тогда и Ваше определение цикла - в студию! До кучи. :)

Я придерживаюсь определения вашего оппонента с добавлением об инварианте.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 27 Ноябрь, 2013 16:44 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
ilovb писал(а):
igor писал(а):
Цикл - это конечная кольцевая последовательность операторов, выполнение которой прекращается по постусловию цикла, причём на каждой итерации непосредственно в момент проверки постусловия цикла соблюдается инвариант цикла.
Отлично. Определение есть. А теперь попробуйте придумать вермишель из goto, которая бы не попала под это определение. Сможете? :)
Не вижу смысла в подобном занятии. Поясните пожалуйста.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 27 Ноябрь, 2013 16:46 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Валерий Лаптев писал(а):
Я придерживаюсь определения вашего оппонента с добавлением об инварианте.
Тогда у меня вопрос к Вам и к моему оппоненту. Скажите пожалуйста, чем продиктовано ваше требование, что последовательность действий в цикле должна "целиком выполняться N раз"?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 27 Ноябрь, 2013 17:01 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1438
igor писал(а):
Не вижу смысла в подобном занятии. Поясните пожалуйста.

Если нельзя отличить цикл от goto, то зачем эти циклы вообще нужны?
Имхо, ценность циклов заключается в том, что они просты.
В структурном программировании вместо вермишели из goto мы имеем простую схему:
Последовательность + Ветвления + Циклы(в моем определении).

igor писал(а):
Тогда у меня вопрос к Вам и к моему оппоненту. Скажите пожалуйста, чем продиктовано ваше требование, что последовательность действий в цикле должна "целиком выполняться N раз"?

Тем, что если не придерживаться этого требования, то мы автоматически возвращаемся к программированию на ассемблере.
цикл + break/exit = goto + if


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 235 ]  На страницу Пред.  1, 2, 3, 4, 5 ... 12  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2019, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB