Peter Almazov писал(а):
Илья, спасибо ответы.
Илья Ермаков писал(а):
Программист всегда должен исходить из того, что предусловие может быть нарушено надсистемой.
Именно для этого мы используем ASSERT, не так ли?
Мне такие рассуждения не нравятся. Так можно очень далеко зайти.
Если есть вероятность нарушения предусловия надсистемой, то нужно так и формулировать предусловие.
Есть идеальный случай, а есть реальность. В которой всегда будут опечатки. Поэтому стопоры ошибок в виде ASSERT необходимы всюду, где только возможно.
Составляем процедуру - мы не знаем, когда и откуда она будет использована. Это - внешний мир, его всегда надо проверять. Хороший стиль - алгоритм должен отказаться работать, если предусловия не соблюдены.
Т.е. из нарушения предусловий следует не непредсказуемое поведение, а строгий авост.
Цитата:
Илья Ермаков писал(а):
Это не линейный поиск. Это простой линейный проход (линейный просмотр Дейкстры).
Мне вот непонятно, нахрена было устраивать на ровном месте путаницу с термином "линейный поиск". Зачем "отменять" Дейкстру и Гриса? Ну использовали бы другой термин – "последовательный поиск", что ли.
Так в переводе Дейкстры термин "линейный просмотр", если мне память не изменяет.
Цитата:
Кроме того, незаметно произошла подмена метода Дейкстры на два частных случая. Остальные случаи вообще не рассматриваются, я вижу постоянные попытки свести всё к "двум базовых схемам".
Так кто виноват, что большинство циклов - это обработка последовательностей. Некий dataflow. Расчётные циклы с варьированием по некоторому закону нескольких величин - редкость в массовом программировании.
А ПП и ЛП сами вытекают, как только у нас в постусловии возникло A или E.
Цитата:
По поводу цикла вида
Код:
WHILE rd.view = NIL DO
.. что-то делается с ch..
rd.ReadChar(ch)
END
все очень просто: в заголовке цикла стоит охрана, тело цикла выполняется только тогда, когда охрана истинна. Продвигаемя вперед, пока это можно делать, это же классика. Отрицания нет даже в "ходе мыслей".
Извините, это как раз технарские рассуждения. "Цикл крутится пока...". "Классика" - это то, что назначение каждого блока программы - обеспечить постусловие. Решить уравнение в предикатах, можно так сказать.
Поэтому интересует ЦЕЛЬ, для которой построен цикл. Целевой предикат.
Цитата:
Про "специфику управляющих алгоритмов", извините, НЕ ВЕРЮ. Я уже цитировал Дейкстру, который столкнулся со "спецификой экономических алгоритмов", и убедился что её нет.
Примеры, которыми сопровождаются рассказы о Драконе, не имеют никакой специфики, кроме их предельной примитивности.
Хотите верьте - хотите нет. Поведение во времени и вычисление, как трансформация данных, - разные вещи. Структурный алгоритм и конечный автомат - различающиеся формализмы.
Попробуйте перепишите структурно мне автомат вот этого протокола:
viewtopic.php?f=62&t=1148А метод Дейкстры (способ рассуждения о поведении системы в терминах логических утверждений), вообще говоря, не ограничивается только классическими структурными конструкциями.
Автоматное программирование - это широкий арсенал формальных методов и инструментов. Для встроенки это практически стандарт.
http://ru.wikipedia.org/wiki/%D0%90%D0% ... 0%B8%D0%B5http://softcraft.ru/auto.shtml