OberonCore https://forum.oberoncore.ru/ |
|
Интересный сайт - обучение школьников С++ и Паскаль https://forum.oberoncore.ru/viewtopic.php?f=88&t=2008 |
Страница 2 из 13 |
Автор: | igor [ Вторник, 26 Ноябрь, 2013 20:42 ] |
Заголовок сообщения: | Re: Интересный сайт - обучение школьников С++ и Паскаль |
ilovb писал(а): Ну лично мне очевидно, что это уже не цикл. Вот! И все так думают (кроме меня).
|
Автор: | ilovb [ Вторник, 26 Ноябрь, 2013 21:32 ] |
Заголовок сообщения: | Re: Интересный сайт - обучение школьников С++ и Паскаль |
Смотрите: Красным цветом выделен "путь цикла". Каждое действие на этом пути выполняется ровно N раз. Думаете я смухлевал в repeat? Ничего подобного. С действия 2 начинается цикл, просто это особый случай (N >= 1) Вложение: А вот варианты с прыжками наружу и внутрь цикла. Думаю видно как смешиваются пути. В while получается мешанина логики. В repeat обратите внимание, что цикл начинается только когда черный путь достигнет действия 2 Вложение:
|
Автор: | ilovb [ Вторник, 26 Ноябрь, 2013 22:42 ] |
Заголовок сообщения: | Re: Интересный сайт - обучение школьников С++ и Паскаль |
Кстати, замечу что repeat - это ни что иное как: Код: <действие1> next := true; while next do <действие2> <действие3> if cond then next := false; end; end; <действие4> т.е. просто особый случай использования while. |
Автор: | igor [ Среда, 27 Ноябрь, 2013 08:19 ] |
Заголовок сообщения: | Re: Интересный сайт - обучение школьников С++ и Паскаль |
ilovb писал(а): А вот варианты с прыжками наружу и внутрь цикла. Что это за боковые чёрные стрелки на Вашем рисунке? Вот правильная картинка:Думаю видно как смешиваются пути. В while получается мешанина логики. В repeat обратите внимание, что цикл начинается только когда черный путь достигнет действия 2 Вложение: Вложение Snap 2013-11-26 at 22.15.04.png больше недоступно Вложение: Cycle.png [ 3.92 КБ | Просмотров: 12052 ] 1. Цикл имеет один вход и один выход. 2. Точка входа в цикл фиксирована. Проивольные (в середину) попадания в цикл невозможны. 3. Возможная точка выхода из цикла фиксирована. Произвольные выпрыгивания из цикла исключены. PS: Циклы WHILE и REPEAT являются частными случаями этого цикла. У WHILE отсутствуют блоки 2 и 3, а у REPEAT - 4 и 5. |
Автор: | igor [ Среда, 27 Ноябрь, 2013 08:43 ] |
Заголовок сообщения: | Re: Интересный сайт - обучение школьников С++ и Паскаль |
ilovb писал(а): Код: if cond then next := false; end; Гы-ы-ы... Код: next := ~cond; PS: Это не одно и то же, но конкретно в данном случае такая замена кода возможна. |
Автор: | igor [ Среда, 27 Ноябрь, 2013 09:45 ] |
Заголовок сообщения: | Re: Интересный сайт - обучение школьников С++ и Паскаль |
Судя по названию темы, двое "школьников" обучают друг друга программированию Просьба модераторам: перенесите, пожалуйста, обсуждение циклов, начиная вот с этого сообщения Ильи Ермакова, за исключением вот этого сообщения Валерия Лаптева, в новую тему "Стереотипы в построении циклов" или с любым другим подходящим названием. Спасибо! |
Автор: | ilovb [ Среда, 27 Ноябрь, 2013 10:18 ] |
Заголовок сообщения: | Re: Интересный сайт - обучение школьников С++ и Паскаль |
igor писал(а): ilovb писал(а): Код: if cond then next := false; end; Гы-ы-ы... Код: next := ~cond; PS: Это не одно и то же, но конкретно в данном случае такая замена кода возможна. Тык в repeat условие окончания же |
Автор: | igor [ Среда, 27 Ноябрь, 2013 10:26 ] |
Заголовок сообщения: | Re: Интересный сайт - обучение школьников С++ и Паскаль |
ilovb писал(а): Тык в repeat условие окончания же И чо?!
|
Автор: | ilovb [ Среда, 27 Ноябрь, 2013 10:27 ] |
Заголовок сообщения: | Re: Интересный сайт - обучение школьников С++ и Паскаль |
igor писал(а): Вложение: Cycle.png Что мы имеем:Имеем два goto Не вижу цикла. Об определениях конечно не спорят, но попробовать стоит Вы можете формально определить цикл? Вот чтобы можно было отличить цикл от goto? Напомню мое определение: Цикл - это конечная неразрывная последовательность действий, которая целиком выполняется ровно N раз. С этой моей точки зрения на вашей картинке цикла нет. |
Автор: | ilovb [ Среда, 27 Ноябрь, 2013 10:29 ] |
Заголовок сообщения: | Re: Интересный сайт - обучение школьников С++ и Паскаль |
igor писал(а): И чо?! Вау! Тяжелая артиллерия пошла |
Автор: | Валерий Лаптев [ Среда, 27 Ноябрь, 2013 10:39 ] |
Заголовок сообщения: | Re: Интересный сайт - обучение школьников С++ и Паскаль |
ilovb писал(а): igor писал(а): И чо?! Вау! Тяжелая артиллерия пошла Определение вашего цикла - в студию! Очевидно, что ваш цикл - НЕ структурный. Что иногда приводит к разного рода сложностям. |
Автор: | igor [ Среда, 27 Ноябрь, 2013 10:44 ] |
Заголовок сообщения: | Re: Интересный сайт - обучение школьников С++ и Паскаль |
ilovb писал(а): igor писал(а): Вложение: Cycle.png Напомню мое определение: Цикл - это конечная неразрывная последовательность действий, которая целиком выполняется ровно N раз. С этой моей точки зрения на вашей картинке цикла нет. Имеет значение можем ли мы быть уверены в том, что постусловие соблюдаются после выхода из цикла. Посмотрите на мою последнюю картинку, там это гарантируется, потому что вы не можете "выпрыгнуть" из цикла минуя это условие. |
Автор: | ilovb [ Среда, 27 Ноябрь, 2013 10:59 ] |
Заголовок сообщения: | Re: Интересный сайт - обучение школьников С++ и Паскаль |
Вы говорите о цикле, а не определяете сам цикл. Попробуйте таки формально. |
Автор: | igor [ Среда, 27 Ноябрь, 2013 11:35 ] |
Заголовок сообщения: | Re: Интересный сайт - обучение школьников С++ и Паскаль |
ilovb писал(а): Вы говорите о цикле, а не определяете сам цикл. Попробуйте таки формально. Цикл - это конечная кольцевая последовательность операторов, выполнение которой прекращается по постусловию цикла, причём на каждой итерации непосредственно в момент проверки постусловия цикла соблюдается инвариант цикла. |
Автор: | igor [ Среда, 27 Ноябрь, 2013 11:42 ] |
Заголовок сообщения: | Re: Интересный сайт - обучение школьников С++ и Паскаль |
Валерий Лаптев писал(а): Определение вашего цикла - в студию! Ну, тогда и Ваше определение цикла - в студию! До кучи.
Очевидно, что ваш цикл - НЕ структурный. Что иногда приводит к разного рода сложностям. |
Автор: | ilovb [ Среда, 27 Ноябрь, 2013 12:22 ] |
Заголовок сообщения: | Re: Интересный сайт - обучение школьников С++ и Паскаль |
igor писал(а): ilovb писал(а): Вы говорите о цикле, а не определяете сам цикл. Попробуйте таки формально. Цикл - это конечная кольцевая последовательность операторов, выполнение которой прекращается по постусловию цикла, причём на каждой итерации непосредственно в момент проверки постусловия цикла соблюдается инвариант цикла. Отлично. Определение есть. А теперь попробуйте придумать вермишель из goto, которая бы не попала под это определение. Сможете? |
Автор: | Валерий Лаптев [ Среда, 27 Ноябрь, 2013 13:19 ] |
Заголовок сообщения: | Re: Интересный сайт - обучение школьников С++ и Паскаль |
igor писал(а): Валерий Лаптев писал(а): Определение вашего цикла - в студию! Ну, тогда и Ваше определение цикла - в студию! До кучи. Очевидно, что ваш цикл - НЕ структурный. Что иногда приводит к разного рода сложностям. Я придерживаюсь определения вашего оппонента с добавлением об инварианте. |
Автор: | igor [ Среда, 27 Ноябрь, 2013 16:44 ] |
Заголовок сообщения: | Re: Интересный сайт - обучение школьников С++ и Паскаль |
ilovb писал(а): igor писал(а): Цикл - это конечная кольцевая последовательность операторов, выполнение которой прекращается по постусловию цикла, причём на каждой итерации непосредственно в момент проверки постусловия цикла соблюдается инвариант цикла. Отлично. Определение есть. А теперь попробуйте придумать вермишель из goto, которая бы не попала под это определение. Сможете? |
Автор: | igor [ Среда, 27 Ноябрь, 2013 16:46 ] |
Заголовок сообщения: | Re: Интересный сайт - обучение школьников С++ и Паскаль |
Валерий Лаптев писал(а): Я придерживаюсь определения вашего оппонента с добавлением об инварианте. Тогда у меня вопрос к Вам и к моему оппоненту. Скажите пожалуйста, чем продиктовано ваше требование, что последовательность действий в цикле должна "целиком выполняться N раз"?
|
Автор: | ilovb [ Среда, 27 Ноябрь, 2013 17:01 ] |
Заголовок сообщения: | Re: Интересный сайт - обучение школьников С++ и Паскаль |
igor писал(а): Не вижу смысла в подобном занятии. Поясните пожалуйста. Если нельзя отличить цикл от goto, то зачем эти циклы вообще нужны? Имхо, ценность циклов заключается в том, что они просты. В структурном программировании вместо вермишели из goto мы имеем простую схему: Последовательность + Ветвления + Циклы(в моем определении). igor писал(а): Тогда у меня вопрос к Вам и к моему оппоненту. Скажите пожалуйста, чем продиктовано ваше требование, что последовательность действий в цикле должна "целиком выполняться N раз"? Тем, что если не придерживаться этого требования, то мы автоматически возвращаемся к программированию на ассемблере. цикл + break/exit = goto + if |
Страница 2 из 13 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |