Автор Тема: Выход из цикла или смерть Кощея  (Прочитано 92133 раз)

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Выход из цикла или смерть Кощея
« Ответ #45 : Январь 15, 2013, 07:02:29 am »
Голосую за вариант Ильи  :)
PROCEDURE Store (obj: ANYPTR; VAR ptr: ANYPTR): BOOLEAN;
...
Я думал примерно в том же направлении. Только с отдельными процедурами для каждого типа.

А еще можно эти процедуры в массив запихать. И спускаться по этому массиву... (можно рекурсивно)

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Выход из цикла или смерть Кощея
« Ответ #46 : Январь 15, 2013, 07:16:21 am »
А теперь решение... на ДРАКОНе (да простит меня уважаемый топикстартер :) )
Дейкстра ни разу не прав -- GOTO considered rules!!!
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

Илья Ермаков

  • Sr. Member
  • ****
  • Сообщений: 493
    • Просмотр профиля
Re: Выход из цикла или смерть Кощея
« Ответ #47 : Январь 15, 2013, 08:31:24 am »
Соотношение ДРАКОНа и принципов Дейкстры рассматривалось - ДРАКОН не противоречит идеологии доказательного программирование в случае ухода от линейно-блочной топологии управления к плоской. Структурной двумерной, скажем так.
http://2010.it-edu.ru/docs/C4/a4a%20Ермаков%20И.Е1287620722076198.doc

Peter Almazov

  • Sr. Member
  • ****
  • Сообщений: 482
    • Просмотр профиля
Re: Выход из цикла или смерть Кощея
« Ответ #48 : Январь 15, 2013, 08:57:56 am »

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

Товарищ забыл тело цикла, i=i+1.
О чем еще тут можно говорить?

А ведь Илья далеко не самый глупый в этом легионе.

DddIzer

  • Гость
Re: Выход из цикла или смерть Кощея
« Ответ #49 : Январь 15, 2013, 09:04:03 am »

А ведь Илья далеко не самый глупый в этом легионе.
Да ладно - Легион- скажете тоже...

DddIzer

  • Гость
Re: Выход из цикла или смерть Кощея
« Ответ #50 : Январь 15, 2013, 09:07:03 am »
Легион на эту хрень не заставишь даже смотреть...

Илья Ермаков

  • Sr. Member
  • ****
  • Сообщений: 493
    • Просмотр профиля
Re: Выход из цикла или смерть Кощея
« Ответ #51 : Январь 15, 2013, 09:43:08 am »
Товарищ забыл тело цикла, i=i+1.
О чем еще тут можно говорить?
А ведь Илья далеко не самый глупый в этом легионе.

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

Илья Ермаков

  • Sr. Member
  • ****
  • Сообщений: 493
    • Просмотр профиля
Re: Выход из цикла или смерть Кощея
« Ответ #52 : Январь 15, 2013, 09:45:00 am »
Легион на эту хрень не заставишь даже смотреть...

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

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Выход из цикла или смерть Кощея
« Ответ #53 : Январь 15, 2013, 09:45:56 am »
Сразу пример, чтобы было понятно.

Тело цикла (строка "i=i+1") будет выполняться пока истинна коньюнкция всех охран – выражений после while и andwhile. Соответственно, после выхода из цикла будет истинна коньюнкция отрицаний всех охран.

Ада:


Ну и продублирую, а то мало ли что там с картинкой случится:
-- найти первый комплект без иглы
for i in сундуки'Range loop
    заяц := ЗАЯЦ(сундуки(i));
    exit when заяц = null;
    утка := УТКА(заяц);
    exit when утка = null;
    яйцо := ЯЙЦО(утка);
    exit when яйцо = null;
    игла := ИГЛА(яйцо);
    exit when игла = null;
end loop;
Y = λf.(λx.f (x x)) (λx.f (x x))

DddIzer

  • Гость
Re: Выход из цикла или смерть Кощея
« Ответ #54 : Январь 15, 2013, 09:47:35 am »

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

Илья Ермаков

  • Sr. Member
  • ****
  • Сообщений: 493
    • Просмотр профиля
Re: Выход из цикла или смерть Кощея
« Ответ #55 : Январь 15, 2013, 09:53:22 am »
Если в программе "мало ветвлений", то никакой практически пользы от графики не обнаружится.
Как только становится "много ветвлений" (какая-нибудь логика на верхнем уровне бизнес-приложения, или логика в системах управления типа вот таких циклов - они там любят быть как раз, в СУ) - начинает проявляться польза - и, мне кажется, я достаточно много попытался объяснить, почему, с примерами.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Выход из цикла или смерть Кощея
« Ответ #56 : Январь 15, 2013, 09:55:18 am »

Впрочем, у меня тоже большинство графики идёт "мимо кассы", знакомо.
Да, я про это и говорю, но, с другой стороны, тот же Жаринов, не в состоянии вразумительно ответить на вопрос о преимуществах восприятия двумерных форм (точне, его ответы не только не вызывают желания тренировать это восприятие - но вызывают отвращение к этой тематике).
С другой стороны я лично хорошо знаю, а точнее плотно работаю (в одном проекте) с людьми у которых явно преобладает восприятие двумерных форм над символьным мышлением. Любой элементарнейший алгоритм воспринимается только в виде чего-то двумерного (конечный автомат там нарисованый, или блок-схема).

Эти люди - электронщики. Не те которые процессора на fpga в VHDL делают, а те которые там платы разводят, под микроконтроллеры пишут и т.д.

Я с ужасом думаю, что будет если придется им объяснять что-то не тривиальное. То, что на ЯВУ декомпозируется легко и просто (особенно с учетом типизации и прочего) а вот попробуй ка это на 2D схеме нарисовать... 2D схема это ж уровень ассемблера.
Y = λf.(λx.f (x x)) (λx.f (x x))

Илья Ермаков

  • Sr. Member
  • ****
  • Сообщений: 493
    • Просмотр профиля
Re: Выход из цикла или смерть Кощея
« Ответ #57 : Январь 15, 2013, 09:56:07 am »
Между прочим, Пётр всегда возмущается на ДРАКОН с позиций, что ДРАКОН посягает на "дейкстровское миропонимание".
А Дейкстра, согласитесь, в первую очередь занимался проблемами циклических участков алгоритмов, вычисляющего характера.
И ДРАКОН там нахрен не сдался.
А там, где начинается ветвистая логика, принятие решений, там инварианты как-то вообще, знаете, не помогают :)

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Выход из цикла или смерть Кощея
« Ответ #58 : Январь 15, 2013, 09:57:35 am »
Если в программе "мало ветвлений", то никакой практически пользы от графики не обнаружится.
Как только становится "много ветвлений" (какая-нибудь логика на верхнем уровне бизнес-приложения, или логика в системах управления типа вот таких циклов - они там любят быть как раз, в СУ) - начинает проявляться польза - и, мне кажется, я достаточно много попытался объяснить, почему, с примерами.
Если становится действительно МНОГО ветвлений, то графика также становится бесполезное - ибо все в черточках, графика становится перегруженной и не воспринимается вообще.

У графики одна проблема - она работает в очень узком диапазоне. Если ветвлений совсем мало - графика бесполезна, если ветвлений весьма много, графика опять бесполезна. Где-то по середине графика может дать более наглядное представление алгоритма для одного класса людей.
Y = λf.(λx.f (x x)) (λx.f (x x))

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Выход из цикла или смерть Кощея
« Ответ #59 : Январь 15, 2013, 10:02:09 am »
Ада:
-- найти первый комплект без иглы
for i in сундуки'Range loop
    заяц := ЗАЯЦ(сундуки(i));   exit when заяц = null;
    утка := УТКА(заяц);         exit when утка = null;
    яйцо := ЯЙЦО(утка);         exit when яйцо = null;
    игла := ИГЛА(яйцо);         exit when игла = null;
end loop;

Нет принципиального отличия от моего варианта:
// Найти первый комплект без иглы -- низкоуровневая имитация монады Maybe
for (int i = 0; i < сундуки.Length; i++)
{
    заяц = сундуки[i];          if (заяц == null) break;
    утка = заяц.ИзвлечьУтку();  if (утка == null) break;
    яйцо = утка.ИзвлечьУтку();  if (яйцо == null) break;
    игла = яйцо.ИзвлечьУтку();  if (игла == null) break;
}
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…