OberonCore
https://forum.oberoncore.ru/

Объяснение циклов начинающим
https://forum.oberoncore.ru/viewtopic.php?f=7&t=2191
Страница 3 из 4

Автор:  Valery Solovey [ Пятница, 18 Декабрь, 2009 12:13 ]
Заголовок сообщения:  Re: Объяснение циклов начинающим

А по-моему, второе является частным случаем первого. В связи с чем фраза "Тут у Вас смешаны во едино два разных понятия" приобретает новый смысл : ).

И ещё мне кажется, что Вы переоцениваете Форму.

Автор:  Peter Almazov [ Пятница, 18 Декабрь, 2009 12:15 ]
Заголовок сообщения:  Re: Объяснение циклов начинающим

Galkov писал(а):
НО, этот подход таки заслуживает академического изучения. И как результат - преврашения в "академичный подход"
Славно, и результат даже заранее предсказан.
А по хорошему, надо бы на равных рассматривать и такой результат: "закрыто из-за тупиковости и бесперспективности направления". Отрицательный результат - тоже результат.

Автор:  Galkov [ Пятница, 18 Декабрь, 2009 12:35 ]
Заголовок сообщения:  Re: Объяснение циклов начинающим

2Peter Almazov: предсказывать результаты работы человека мало знакомого - не самое умное занятие.
Но как-то этого предсказателя характеризующее.
Особенно, если предсказание делаются о предмете, в котором не разбираешься.

2Valery Solovey: да ничуть. Посмотрите на линейный код: из него тоже выносятся инварианты, о которых Вы проявили заботу.
И про итеративно/рекурсивные задачи - не они определяют высокий статус цикла, а наоборот...
Да, для их решения очень полезен метод "тупого повторения" (плюс еще кое-что математическое)
Но "тупое повторение" может иметь великую пользу и без верхнего полета математической мысли.
Мне именно так представляется :)

Ну хочу я по какому-то условию дать 143 импульса (электрических, например) куда-то. Очень нужная работа, несмотря на "тупость".

Автор:  Peter Almazov [ Пятница, 18 Декабрь, 2009 12:59 ]
Заголовок сообщения:  Re: Объяснение циклов начинающим

2Galkov: Да я и не предсказывал результат. В отличие от. Я говорю, что получение заранее заданного результата - не совсем (или совсем не) научный подход.

Автор:  Valery Solovey [ Пятница, 18 Декабрь, 2009 13:09 ]
Заголовок сообщения:  Re: Объяснение циклов начинающим

Galkov писал(а):
да ничуть. [...]
Возможно я и неправ, но Вы не привели аргументов, показывающих, что "непараметризованный" цикл не является частным случаем "пареметризованного".

Автор:  Galkov [ Пятница, 18 Декабрь, 2009 14:14 ]
Заголовок сообщения:  Re: Объяснение циклов начинающим

Валерий, чего-то я не пойму предмета беседы....
Какой такой павлин-мавлин ??? Кто такой параметризированный цикл ???
Цикл, это такая простая синтаксическая конструкция из двух других: условия, и тела цикла. Семантика этой конструкции определяется... и т.д. в соответствии с классиками.
А связаны они между собой через декларативную часть, или нет - да не его это дело... Пофиг ему.
Могут быть связаны, могут быть и нет - он не перестанет от этого быть Циклом

Это я так понимаю. А Вы :?:
Или по другому: чем неправильно такое понимание :?:

Автор:  Иван Кузьмицкий [ Пятница, 18 Декабрь, 2009 14:19 ]
Заголовок сообщения:  Re: Объяснение циклов начинающим

Galkov писал(а):
Цикл, это такая простая синтаксическая конструкция из двух других: условия, и тела цикла.

Извините, не смог удержаться: "Ложка - это конструкция из держала, черпала и перемычки" :)

Автор:  Дмитрий Колосов [ Пятница, 18 Декабрь, 2009 14:21 ]
Заголовок сообщения:  Re: Объяснение циклов начинающим

Валерий Лаптев писал(а):
Я в первой своей книжке "С++.Экспресс-курс" в 2003 писал так:
...
Все правильно.
...
Операторы вывода отличаются один от другого всего в двух местах: в текстовой константе и в выражении умножения. Хотелось бы заменить десять очень похожих операторов одним-единственным, который отработает за все десять.
Это не пустой интерес программиста, которому лень написать десять почти одинаковых строк, это очень важная проблема.
...
Поэтому сокращение текста программы за счет однотипных вычислений — это очень важное действие.

Разумеется, это можно сделать, если повторить выполнение оператора вывода десять раз. И при каждом повторении (которые в программировании обычно называются итерациями) требуется изменить текстовую константу и второй множитель в выражении умножения. Для решения этих проблем мы ...


Последовательность обучения, согласно Кушниренко, такая (поправьте, если ошибаюсь):
  1. понятие Исполнителя, система команд исполнителя, команды-действия;
  2. линейная последовательность команд;
  3. цикл "N раз";
  4. команды-вопросы (возвращающие логическую константу);
  5. команда ветвления;
  6. цикл с предусловием;

и всё это - до величин!
и вопросов их именования, хранения значения и использования.

т.е. разводить понятия до тех пор, пока не будет возможности сформировать ориентировочную основу действия.

Автор:  Valery Solovey [ Пятница, 18 Декабрь, 2009 14:51 ]
Заголовок сообщения:  Re: Объяснение циклов начинающим

Galkov писал(а):
Это я так понимаю. А Вы :?:
Не то, чтобы я считал Вашу точку зрения такой уж там какой-то неправильной... Просто есть и другие варианты, и если их не назвать, то новички посчитают Ваш вариант единственными или по крайней мере самым верным. А остальное будут игнорировать.
Galkov писал(а):
Тут у Вас смешаны во едино два разных понятия
1) Представление некого массива как бы разных действий, как некого единого, но чем-то параметризированного
2) Объединение тупой конструкции большого количества, уже одинаковых, действий - в единую конструкцию по имени Цикл
Всё-таки они должны быть смешаны. И то, что в силу определённых причин Вы рассматриваете вторй вариант особо (так удобно), не должно служить поводом считать их взаимоисключающими: второе - частный случай первого.

Если это сразу объяснить - но тут возникает проблема: как объяснить это правильно - то человек не будет пытаться через второй вариант выразить то, что не подходит под него по определению. Человек будет понимать, что столкнулся с ситуацией более широкой, и должен использовать для решения более широкий вариант.

Автор:  Galkov [ Пятница, 18 Декабрь, 2009 15:27 ]
Заголовок сообщения:  Re: Объяснение циклов начинающим

Иван Кузьмицкий писал(а):
Извините, не смог удержаться: "Ложка - это конструкция из держала, черпала и перемычки" :)
А я даже больше скажу: если мы не научились объяснять сложные вещи на уровне "держала и черпала", но без существенных упрощений - значит мы сами не очень разбираемся в теме.
В стародавние времена, шеф учил меня: если ты не можешь на пальцах рассказать про знак и степень альфы для отличия гиромагнитного отношения электрона от двойки - значит ты занимаешься не своим делом.

Т.е., "держало и черпало" - очень важные методологические инструменты :D
((Хотя я уже где-то говорил это, кажется))

Автор:  Galkov [ Пятница, 18 Декабрь, 2009 16:00 ]
Заголовок сообщения:  Re: Объяснение циклов начинающим

Valery Solovey писал(а):
Всё-таки они должны быть смешаны
Мне кажется, что - не факт.
Ну вот сделал я гениальное обобщение MyFunc ((которое выделено отдельно в отдельную функцию только по причине " скажем так, для удобства" - тут я с Вами совершенно согласен))
А употреблю ли после этого цикл, или сделаю несколько линейных вызовов - второй разговор. И оба варианта будут правильны.
Наоборот: кинул на улицу какой-то строб, и ожидаю "акнолиджа". И где тут "гениальное обобщение", если тело цикла просто пустое ??? Или это не цикл ???

Чего получается: одно без другого может существовать. Вместе - тоже могут.
Не получается у меня сделать вывод, что должны быть смешаны :)

Автор:  Иван Кузьмицкий [ Пятница, 18 Декабрь, 2009 16:53 ]
Заголовок сообщения:  Re: Объяснение циклов начинающим

Galkov писал(а):
Т.е., "держало и черпало" - очень важные методологические инструменты :D
((Хотя я уже где-то говорил это, кажется))


Смысл ложки лежит в тарелке супа, а не в "черпале".

Автор:  Илья Ермаков [ Пятница, 18 Декабрь, 2009 20:49 ]
Заголовок сообщения:  Re: Объяснение циклов начинающим

Дмитрий Колосов писал(а):
Последовательность обучения, согласно Кушниренко, такая (поправьте, если ошибаюсь):
  1. понятие Исполнителя, система команд исполнителя, команды-действия;
  2. линейная последовательность команд;
  3. цикл "N раз";
  4. команды-вопросы (возвращающие логическую константу);
  5. команда ветвления;
  6. цикл с предусловием;

и всё это - до величин!
и вопросов их именования, хранения значения и использования.

т.е. разводить понятия до тех пор, пока не будет возможности сформировать ориентировочную основу действия.


Да, всё почти так.

Только команды ветвления - после цикла с предусловием. Т.к. их особенность - вместо одного пути выполнения в программе порождают несколько. Видимо, Кушниренко и его коллеги сочли более разумным сначала натренировать работу с условиями на базе однопутевой конструкции WHILE, для которой, к тому же, уйму дидактических примеров можно придумать.

Автор:  Info21 [ Суббота, 19 Декабрь, 2009 00:49 ]
Заголовок сообщения:  Re: Объяснение циклов начинающим

Илья Ермаков писал(а):
Да, всё почти так.
По-моему, эта последовательность -- с поправками или без -- не однозначно правильная.
В том смысле, что возможна и сильно другая, но не менее эффективная.
Причем без "цикла N раз" :)

Автор:  Alexey_Donskoy [ Суббота, 19 Декабрь, 2009 08:15 ]
Заголовок сообщения:  Re: Объяснение циклов начинающим

Имхо, опять смешение синтаксиса и семантики, формы и содержания!

Решительно не вижу, чем по сути "Выполнить N раз" отличается от "повторять, пока не посинеет". Алгоритмически - конструкция из действия и условия с переходом! Всё!

Математики, поймите же наконец, что итерация (сходимость и т.п. мат. понятия) вовсе не является сутью цикла!
Напротив, ряд задач (в т.ч. с математическим методом итерации) удобно решается алгоритмическим инструментом "цикл"!

Вот учиться правильно пользоваться инструментами на конкретных задачах и классах задач - дело нужное. Только не путать при этом задачу, метод и инструмент!!!

Автор:  Trurl [ Суббота, 19 Декабрь, 2009 11:59 ]
Заголовок сообщения:  Re: Объяснение циклов начинающим

Alexey_Donskoy писал(а):
Решительно не вижу, чем по сути "Выполнить N раз" отличается от "повторять, пока не посинеет".

По сути - это разница между общерекурсивными и частично рекурсивными функциями. ;)

Автор:  Galkov [ Суббота, 19 Декабрь, 2009 13:15 ]
Заголовок сообщения:  Re: Объяснение циклов начинающим

Да, трудно с математиками :lol:
[offtop]как-то бодался с авторами системы моделирования (MVS), пытался триггер Шмидта изобразить. Ну никак не получалось их убедить, что одно из трех решений на передаточной ф-ии - "не фиическое".
Так и не получилось ведь, хотя причина и следствие - у них на схеме были стрелочками обозначены
[/offtop]

Прав Алексей :!:
Вот пример я уже приводил: жду внешнего сигнала (бит в LPT-порте). Даже sleep-а не делаю, потому-что делов на несколько микросекунд.
И это не теория, а правда жизни. Это Цикл или нет :?:
И где тут общерекурсивность, частичная рекурсивность, итеративность, или какая иная Нечистая Сила :?:

Спрашивается, зачем вводить новые сущности без необходимости...

Автор:  Доровских Александр [ Суббота, 19 Декабрь, 2009 14:36 ]
Заголовок сообщения:  Re: Объяснение циклов начинающим

Ну, блин, господа ученые, намудрили!
Как я теперь сыну буду объяснять понятие цикла?
Я не препод, не физик, не математик. Я строитель. В моем понимании цикл - это набор каких-либо однотипных действий.
Каменщик, например. Зацепил раствор мастерком, набросил на кладку, взял кирпич, уложил, поправил. И по новой.
Это тело цикла.
А сколько раз он это сделает - десять раз по чертежу, пока стенка не кончится, пока есть материалы - это условие.
Это так или я не прав?

Автор:  Info21 [ Суббота, 19 Декабрь, 2009 14:40 ]
Заголовок сообщения:  Re: Объяснение циклов начинающим

Доровских Александр писал(а):
Ну, блин, господа ученые, намудрили!
...
Это так или я не прав?
Это так. А господа -- не ученые (не считая хитроумного Trurl'я).

Надо бы для философии циклов и проч. отдельную ветку, что ли :)

Автор:  Илья Ермаков [ Суббота, 19 Декабрь, 2009 16:20 ]
Заголовок сообщения:  Re: Объяснение циклов начинающим

Info21 писал(а):
В том смысле, что возможна и сильно другая, но не менее эффективная.
Причем без "цикла N раз" :)


Наверняка возможна.

Что касается меня, то я некогда пытался сразу разбирать общий WHILE. Сейчас так и есть, но до Блэкбокса - на занятии, где вообще понятие алгоритма вводится, и на житейских примерах демонстрируется. Там как раз две конструкции объясняются - охрана и цикл. По лекции Дейкстры.

Когда пошло программирование, то проще показать сначала цикл с конкретным числом повторов - там как раз "эстафета" выходит: процедуры - повторное использование с счёт вызовом процедур - свёртывание повтора в цикл со счётчиком - параметризация процедуры и использование параметра в цикле со счётчиком.
Вот только один нюанс: с этого года я под циклом со счётчиком имею в виду i := 0; WHILE i < count DO ... INC(i) END :) Т.к. WHILE в общей форме разобрали (и в граф. эквиваленте тоже) на обще-алгоритмическом занятии, то всё логично выстраивается.

Страница 3 из 4 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/