OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Среда, 17 Июль, 2019 07:23

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




Начать новую тему Ответить на тему  [ Сообщений: 58 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
СообщениеДобавлено: Пятница, 17 Апрель, 2009 07:47 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Илья Ермаков писал(а):
Вы даже не знаете, что такое предусловие. Я так понял, что за предусловие Вами принято "условие цикла WHILE".
Вообще-то, если он имел в виду бесконечный цикл ("Например цикл, который управляет подачей топлива в двигатель, в зависимости от нагрузки..."), то там неважно какое предусловие, а постусловия и вовсе нет, так как нет условия завершения этого цикла...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 17 Апрель, 2009 08:07 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
sia писал(а):
Говоря о циклах я имел в виду самый общий случай, безотносительно навешиваемого
или подразумеваемого контекста, то есть: WHILE any_func() DO any_action() END;
Где any_func() и any_action() - произвольные функции, которые в общем случае имеют
свой контекст, но он может быть закрыт или неизвестен. Это могут быть системные вызовы,
какие-то библиотечные функции...

Строить какие-то предположения относительно них в общем случае - нельзя. Поэтому все
рассуждения о доказательности или сходимости или конечности - неправомерны в общем случае.

Для этого язык должен предусматривать какие-то контракты или просто запрещать побочные эффекты в невинных на первый взгляд функциях и доступ к изменяемым глобальным переменных из этих функций. Рассуждать об инвариантах в этом случае станет горзадо проще...

sia писал(а):
GOTO start;
WHILE any_func() DO start: any_action(); END;

// если any_action делает контекст для any_func, то так пожалуй лучше, чем

any_action(); //Если код строк 50 и не вынесен в процедуру, то дублирование.
WHILE any_func() DO any_action(); END;

Легко переписывается в
repeat any_action() until not any_func();


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 17 Апрель, 2009 08:17 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9127
Откуда: Россия, Орёл
sia писал(а):
Не имел удовольствия читать. Преподаватели часто выражаются цветасто, с расчётом на внимание.

Не имели удовольствие вообще учиться в направлении программирования, как видно.
А Кушниренко и его соавторы - люди с яснейшим пониманием сути программирования; развивавшие идеи Ершова - и уж на порядок больше вас программировавшие. Одна реализация образовательных комплексов и офисных пакетов на всех моделях ПЭВМ чего стоит (а при 64к памяти писать приходилось именно на ассемблере, столь вами, видимо, уважаемом).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 17 Апрель, 2009 08:26 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9127
Откуда: Россия, Орёл
Geniepro писал(а):
Вообще-то, если он имел в виду бесконечный цикл ("Например цикл, который управляет подачей топлива в двигатель, в зависимости от нагрузки..."), то там неважно какое предусловие, а постусловия и вовсе нет, так как нет условия завершения этого цикла...

Предусловие важно всегда. До запуска этого самого цикла должны быть соблюдены некоторые предусловия (управляемый объект введён в нужное состояние и т.п.) Даже если действительно ничего не нужно, то такое предусловие (тождественно истинное) надо проговаривать и прописывать явно. (А то условие, которое стоит после слова WHILE, представьте себе, никакого отношения к предусловиям не имеет, а ровно наоборот - это отрицание одного из термов постусловия - т.е. цели цикла).

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 17 Апрель, 2009 08:31 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9127
Откуда: Россия, Орёл
Geniepro писал(а):
sia писал(а):
GOTO start;
WHILE any_func() DO start: any_action(); END;

// если any_action делает контекст для any_func, то так пожалуй лучше, чем

any_action(); //Если код строк 50 и не вынесен в процедуру, то дублирование.
WHILE any_func() DO any_action(); END;

Легко переписывается в
repeat any_action() until not any_func();


В общем случае там ситуация будет ровно такая, как я указал - схема "полный проход". Т.е. есть действие, которое выполняется на один раз меньше, чем другое ("шаговое") - и repeat-ом уже не выкрутиться. Естественное решение - составить цикл, который выполняет одинаковое число раз проверку и полезное действие, а дополнительное шаговое действие вынести до цикла (у него особый смысл, оно инициализирующее в таких ситуациях). Есть и "удаление гландов через анус" - вломить внуть блока с помощью GOTO, чтобы нарушить его логику работы (повтор всех конструкций тела одинаковое число раз) и не писать "лишнее".


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 17 Апрель, 2009 09:17 

Зарегистрирован: Четверг, 25 Май, 2006 09:20
Сообщения: 42
Откуда: Королёв М. О.
Geniepro писал(а):
Илья Ермаков писал(а):
Вы даже не знаете, что такое предусловие. Я так понял, что за предусловие Вами принято "условие цикла WHILE".
Вообще-то, если он имел в виду бесконечный цикл ("Например цикл, который управляет подачей топлива в двигатель, в зависимости от нагрузки..."), то там неважно какое предусловие, а постусловия и вовсе нет, так как нет условия завершения этого цикла...


Кхм... Уважаемый Geniepro, Вам доводилось автомобилем управлять?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 17 Апрель, 2009 10:52 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Если цикл заканчивается при выключении бортового компьютера, то это малоинтересно с точки зрения программирования.
В других случаях в этом цикле просто перекрывается топливная заслонка, а сам цикл остаётся работать...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 17 Апрель, 2009 11:25 
Аватара пользователя

Зарегистрирован: Суббота, 12 Июль, 2008 22:49
Сообщения: 572
Откуда: Россия, Санкт-Петербург
При чтении этого форума у меня сложилось чёткое убеждение что люди говорят об одном и том же с разных позиций в силу своего жизненного опыта (не уровня знаний).

Чётко наметилось несколько подходов:
Программирование - это математика.
Программирование - это логика.
Программирование - это ... ясного термина мне подобрать не удаётся, но в целом можно свести к умению "здаво мыслить".
Естественно, что каждый из этих подходов складывался по мере того как человек приходил в программирование. Кто-то купил книжку "Освой С++ за 21 день" (здравомыслящие люди). Кому-то на занятиях по информатике/программированию рассказывали про безусловные и условные операторы, или даже про дискретную матиематику (логика). А кто-то самостоятельно понял, что определённым программным конструкциям соответствуют определённые математические операции (математика).
К сожалению я ни разу не встречал, чтобы на занятиях по информатике/программированию давали математических подход. И книжек таких тоже видел очень мало (хватит пальцев одной руки и то не всех).

Это причины разногласий. И вы будете спорить до посинения, каждый отстаивая свою - верную точку зрения. "Здравомыслящий" человек (я не хочу никого обидеть, просто пользуюсь определённым выше термином) не может понять "математической конструкции алгоритма". Она ему чужда и неудобна, потому что, скорее всего, определённым разделам математики (например теории графов) не уделялось достаточно внимания и отсутствует умение "накинуть" граф на алгоритм и привести к простому (изоморфному) виду.

Я думаю что никто не будет спорить о том, что нужно повышать общий математических уровень программистов (путь и в далёкой перспективе) и стремиться прийти к "математическому" программированию. А математика не любит вольностей. Структурный подход это первый шаг навстречу математике, но к сожалению это почти всё, что у нас пока имеется.

Я предлагаю участникам переосмыслить свое отношение к программированию в целом и к обсуждаемым здесь вопросам в частности и быть более лояльными друг к другу и попытаться понять друг друга попробывав мыслить как опонент. И тогда станет понятно почему вас не понимают, и где вы правы, а где и нет.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 17 Апрель, 2009 12:10 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
Madzi писал(а):
Кто-то купил книжку "Освой С++ за 21 день" (здравомыслящие люди).

На эту тему хорош эпиграф к учебнику "How to Design Programs, Second Edition" (Matthias Felleisen, Robert Bruce Findler, Matthew Flatt, Shriram Krishnamurthi):
Цитата:
Bad programming is easy. Idiots can learn it in 21 days, even if they are dummies.

Good programming requires thought, but everyone can do it and everyone can experience the satisfaction that comes with it. The price is worth paying for the sheer joy of the discovery process, the elegance of the result, and the commercial benefits with which a systematic program design process comes.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 17 Апрель, 2009 12:32 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8169
Откуда: Троицк, Москва
Madzi писал(а):
Чётко наметилось несколько подходов:
Программирование - это математика.
Программирование - это логика.
Программирование - это ... ясного термина мне подобрать не удаётся, но в целом можно свести к умению "здаво мыслить"...
Предлагаю термин: оптимистическое рукосуйство. По-моему, очень ясно передает, так сказать, самую суть.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 17 Апрель, 2009 12:37 
Аватара пользователя

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1040
Откуда: Россия, Чебоксары
Madzi писал(а):
Кто-то купил книжку "Освой С++ за 21 день" (здравомыслящие люди).
Кавычки пропущены. Сам такой "здравомыслящий", горький опыт до сих пор не изжит...


Последний раз редактировалось Alexey_Donskoy Пятница, 17 Апрель, 2009 12:42, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 17 Апрель, 2009 12:38 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8169
Откуда: Троицк, Москва
Madzi писал(а):
Я предлагаю участникам переосмыслить свое отношение к программированию ...
Надо просто базовую технику поставить, как в любом виде спорта и в любом ремесле.

Представим себе дворового футболера, с пеной у рта защищающего удар пыром и ненужность спец. отработки разнообразных ударов внешней и внутренней стороной стопы. Дико же.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 17 Апрель, 2009 16:01 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9127
Откуда: Россия, Орёл
А касательно математики... У меня какое-то смутное наблюдение, что многим даже подкованным в ней программистам упор исключительно на дискретку (и теоретико-множественные разделы, особенно у ФП-шников) как-то "сушит мозги", что ли... Теряется "живость", ощущение связи моделей с реальностью; того, что естественно, а что нет.

В этом смысле дейкстровское понимание программирования как-то гораздо ближе к "непрерывной", "естественнонаучной" математике, к матану тому же.

Прошу понимать это моё сообщение как просто смутные соображения.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 17 Апрель, 2009 16:40 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
igor писал(а):
Судя по Вашим сообщениям в этой ветке, я делаю осторожный вывод, что Вы новичок в программировании. Или, по крайней мере, не реализовали пока достаточно сложные проекты.


Ядро линукса - достаточно крупный проект? И когда оно коллапснется под грузом goto? :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 17 Апрель, 2009 16:51 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Madzi писал(а):
"Здравомыслящий" человек (я не хочу никого обидеть, просто пользуюсь определённым выше термином) не может понять "математической конструкции алгоритма".


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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 17 Апрель, 2009 16:53 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1538
Откуда: Беларусь, Минск
Постоянно коллапсается. Я дома на своей машине не мог видео смотреть - после нескольких первых минут фильма ядро падало.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 17 Апрель, 2009 16:56 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Valery Solovey писал(а):
Постоянно коллапсается. Я дома на своей машине не мог видео смотреть - после нескольких первых минут фильма ядро падало.


К сожалению это не может служить доказательством вины goto или "неправильных" циклов. Потому что альтернативы "без goto" масштаба линукса (про винду вообще молчу) где все работает просто нет.

P.S. Напомню старый анекдот:
- Твоя программа неправильно написана!
- Зато она работает, а твоя - нет.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 17 Апрель, 2009 17:23 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9127
Откуда: Россия, Орёл
Vlad писал(а):
Или он просто видит, что "математическая конструкция" преобразованная известным методом в код, нечитабельна и провоцирует ошибки при сопровождении. Я бы назвал таких людей "прагматичными".

Конечно, нечитабельна. Если не знать правил, по которым построена - как она может быть читабельна?
Это как человеку, не знающему электроники, дать читать принципиальную схему.
Но он может вполне знать практическую электрику и успешно этак кабели тянуть. И даже попытаться смастрячить что-то самопальное на реле, обходясь без электроники :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 17 Апрель, 2009 17:35 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Vlad писал(а):
igor писал(а):
Судя по Вашим сообщениям в этой ветке, я делаю осторожный вывод, что Вы новичок в программировании. Или, по крайней мере, не реализовали пока достаточно сложные проекты.

Ядро линукса - достаточно крупный проект? И когда оно коллапснется под грузом goto? :)
Не знал, что sia пишет ядра для Линуксов :) (именно ему предназначалось моё сообщение).

А что, правда что ядро Линукс кишит операторами GOTO?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 17 Апрель, 2009 17:36 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Илья Ермаков писал(а):
Конечно, нечитабельна. Если не знать правил, по которым построена - как она может быть читабельна?


Если она построена не по правилам эргономики - как она может быть читабельна?

Илья Ермаков писал(а):
Это как человеку, не знающему электроники, дать читать принципиальную схему.


У принципиальных электрических схем, между прочим, тоже есть определенные эргономические правила, никак не связанные с сутью того, что там происходит с точки зрения электроники. Чего стоит один только значок заземления - чем не goto? ;)


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

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


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

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


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

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