OberonCore
https://forum.oberoncore.ru/

Интересный сайт - обучение школьников С++ и Паскаль
https://forum.oberoncore.ru/viewtopic.php?f=88&t=2008
Страница 4 из 13

Автор:  ilovb [ Пятница, 29 Ноябрь, 2013 10:16 ]
Заголовок сообщения:  Re: Интересный сайт - обучение школьников С++ и Паскаль

Вот мне творческая задача:
Описать синтаксис этого языка и реализовать транслятор. :)

Думаю, что это будет полезное упражнение.

Автор:  igor [ Пятница, 29 Ноябрь, 2013 10:19 ]
Заголовок сообщения:  Re: Интересный сайт - обучение школьников С++ и Паскаль

ilovb писал(а):
Помня об этой теореме, полезно при этом не забывать и замечание Дейкстры:
Цитата:
Упражнения по более или менее механическому переводу произвольной схемы алгоритма в схему без переходов, однако, не рекомендуются. При этом не ожидается, что результирующая схема будет более понятной, чем исходная.
Источник: "О вреде оператора GOTO".

Автор:  ilovb [ Пятница, 29 Ноябрь, 2013 10:27 ]
Заголовок сообщения:  Re: Интересный сайт - обучение школьников С++ и Паскаль

Ну это действительно так. Схема без переходов становится совершенно ненаглядной. В двухмерных изображениях алгоритмов несколько другие правила, имхо. И существование Дракона это подтверждает.


ps Проблема то в том и заключается, что вы хотите любую двухмерную схему иметь в виде одномерной структурной программы. Т.е. вы не хотите мириться с тем фактом, что при преобразовании схемы в структурный линейный текст, неизбежно вылезут дублирования, коих на схеме не было. Ведь так?

Автор:  igor [ Пятница, 29 Ноябрь, 2013 10:45 ]
Заголовок сообщения:  Re: Интересный сайт - обучение школьников С++ и Паскаль

Кстати, если кто не в курсе, в цифровой технике, на мой взгляд есть некий аналог теоремы Бёма-Якопини: любое цифровое устройство (хоть комбинационное, хоть последовательностное) можно построить, используя только лишь один базовый логический элемент 2И-НЕ (в нужном количестве). Принципиальная электрическая схема устройства при этом, в полном соответствии с замечанием Дейкстры, в общем случае не становится ни проще, ни понятнее. На практике в распоряжении разработчика находится широкий набор как базовых логических элементов (если собирать схему на "рассыпухе"), так и готовых интегральных схем (регистры, триггеры и т.д.)

Автор:  igor [ Пятница, 29 Ноябрь, 2013 10:48 ]
Заголовок сообщения:  Re: Интересный сайт - обучение школьников С++ и Паскаль

ilovb писал(а):
ps Проблема то в том и заключается, что вы хотите любую двухмерную схему иметь в виде одномерной структурной программы. Т.е. вы не хотите мириться с тем фактом, что при преобразовании схемы в структурный линейный текст, неизбежно вылезут дублирования, коих на схеме не было. Ведь так?
Я пока воздержусь от ответа. Хочу досконально во всём этом разобраться.

Автор:  ilovb [ Пятница, 29 Ноябрь, 2013 23:43 ]
Заголовок сообщения:  Re: Интересный сайт - обучение школьников С++ и Паскаль

Рекомендую перечитать раздел "О понимании программ" из статьи Дейкстры "Заметки по структурному программированию"

Автор:  igor [ Суббота, 30 Ноябрь, 2013 08:50 ]
Заголовок сообщения:  Re: Интересный сайт - обучение школьников С++ и Паскаль

ilovb писал(а):
Рекомендую перечитать раздел "О понимании программ" из статьи Дейкстры "Заметки по структурному программированию"
Уже перечитываю, в том числе и другие источники.

Автор:  igor [ Суббота, 30 Ноябрь, 2013 13:05 ]
Заголовок сообщения:  Re: Интересный сайт - обучение школьников С++ и Паскаль

igor писал(а):
Хочу досконально во всём этом разобраться.
Пока что я понял только то, что языки Оберон, Оберон-2 и Компонентный Паскаль не отвечают принципам структурного программирования. Вот такая вот суровая правда. Но я пока не утверждаю, что это плохо (или хорошо). Просто констатирую факт.
Кстати, в последней ревизии языка Оберон неструктурный оператор LOOP(EXIT) уже отсутствует. (Тоже просто факт, без комментариев)

Автор:  ilovb [ Суббота, 30 Ноябрь, 2013 22:34 ]
Заголовок сообщения:  Re: Интересный сайт - обучение школьников С++ и Паскаль

igor писал(а):
Кстати, в последней ревизии языка Оберон неструктурный оператор LOOP(EXIT) уже отсутствует. (Тоже просто факт, без комментариев)


Еще отсутствует неструктурный RETURN :wink: Последний Оберон, возможно, единственный чистый структурный язык.

Автор:  ilovb [ Суббота, 30 Ноябрь, 2013 23:40 ]
Заголовок сообщения:  Re: Интересный сайт - обучение школьников С++ и Паскаль

ilovb писал(а):
Илья Ермаков писал(а):
Процесс выполнения которой имеет вид: Проверка; { Действия; Проверка }

Это сообщение натолкнуло на любопытную фантазию :)

Еще нафантазировалась такая картинка:
Вложение:
Snap 2013-12-01 at 00.24.48.png
Snap 2013-12-01 at 00.24.48.png [ 71.3 КБ | Просмотров: 5068 ]


Тут структурная программа изображена в виде дерева, где каждая ветка (последовательность S) растет из первичного охранника B(BEGIN) и оканчивается вторичным охранником E(END)

(Bn, Sn, ..., Sn, En) - это ветка по номером n

Так и напрашивается императивный лисп! :D
Код:
(B0,
   (B1,
      S1,
      (B2,
         S2,
      E2),
      S1,
   E1),
   S0,
   (B3,
      S3,
      (B4,
         S4, S4,
      E4),
      S3, S3,
   E3),
   S0, S0, S0, S0,
E0)

Автор:  ==== [ Воскресенье, 01 Декабрь, 2013 06:13 ]
Заголовок сообщения:  Re: Интересный сайт - обучение школьников С++ и Паскаль

Построение блок схем программы в виде дерева рассмотрено на форуме здесь - " Альтернативный ВИЗУАЛЬНЫЙ СТРУКТУРНЫЙ ПОДХОД К АЛГОРИТМАМ".

Предложена методика для практического применения.

Автор:  Илья Ермаков [ Воскресенье, 01 Декабрь, 2013 13:05 ]
Заголовок сообщения:  Re: Интересный сайт - обучение школьников С++ и Паскаль

ilovb писал(а):
ilovb писал(а):
Илья Ермаков писал(а):
Тут структурная программа изображена в виде дерева, где каждая ветка (последовательность S) растет из первичного охранника B(BEGIN) и оканчивается вторичным охранником E(END)


В теории схем это называется древесной развёрткой алгоритма (если не путаю).

А циклический алгоритм даёт бесконечно рекурсивные ветки в таком дереве...

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

Автор:  Ильченко Эдуард [ Воскресенье, 01 Декабрь, 2013 13:59 ]
Заголовок сообщения:  Re: Интересный сайт - обучение школьников С++ и Паскаль

ilovb писал(а):
ps Проблема то в том и заключается, что вы хотите любую двухмерную схему иметь в виде одномерной структурной программы. Т.е. вы не хотите мириться с тем фактом, что при преобразовании схемы в структурный линейный текст, неизбежно вылезут дублирования, коих на схеме не было. Ведь так?

Не могли бы Вы привести пример (или ссылку) двухмерной схемы, которую невозможно преобразовать в структурный линейный текст, кроме как использовав дублирование?

Автор:  ilovb [ Воскресенье, 01 Декабрь, 2013 14:44 ]
Заголовок сообщения:  Re: Интересный сайт - обучение школьников С++ и Паскаль

Эдуард, смотрите в этом сообщении: viewtopic.php?f=88&t=2008#p83930

2 igor:
Вирт таки прокомментировал этот формализм!
Цитата:
The following, and last two, examples of problems are added to show that often the need for an exit in the middle construct is based a preconceived notion rather than on a real necessity, and that sometimes an even better solution is found when sticking to the fundamental constructs.

http://www.inf.ethz.ch/personal/wirth/A ... ograms.pdf
стр. 254-255

ps Даже холодок по спине. Статья будто после прочтения этой ветки написана... :D
Вложение:
Snap 2013-12-01 at 15.49.15.png
Snap 2013-12-01 at 15.49.15.png [ 8.68 КБ | Просмотров: 5021 ]

Мое замечание про два goto...
Вложение:
Snap 2013-12-01 at 15.48.47.png
Snap 2013-12-01 at 15.48.47.png [ 16.53 КБ | Просмотров: 5021 ]

Исходный while, с которого началось обсуждение...
Вложение:
Snap 2013-12-01 at 15.49.30.png
Snap 2013-12-01 at 15.49.30.png [ 11.08 КБ | Просмотров: 5021 ]

Вариант Валерия Лаптева...
Вложение:
Snap 2013-12-01 at 15.48.59.png
Snap 2013-12-01 at 15.48.59.png [ 10.47 КБ | Просмотров: 5021 ]

Автор:  igor [ Воскресенье, 01 Декабрь, 2013 18:18 ]
Заголовок сообщения:  Re: Интересный сайт - обучение школьников С++ и Паскаль

Ух, ты! Полный расклад :)
ilovb писал(а):
ps Даже холодок по спине. Статья будто после прочтения этой ветки написана... :D
История ходит по кругу...

ilovb писал(а):
Вирт таки прокомментировал этот формализм!
Цитата:
The following, and last two, examples of problems are added to show that often the need for an exit in the middle construct is based a preconceived notion rather than on a real necessity, and that sometimes an even better solution is found when sticking to the fundamental constructs.

http://www.inf.ethz.ch/personal/wirth/A ... ograms.pdf
стр. 254-255
Не уверен, что я правильно понял предложение. Поправьте пожалуйста, если что:
Цитата:
Следующий, и два последние, примеры проблем были добавлены чтобы показать, что часто необходимость в выходе из середины конструкции основана больше на предвзятом мнении, чем на реальной необходимости, и что иногда равное лучшее решение основано на привязке к фундаментальным конструкциям.
Если я правильно понял, Вирт в 1974 году не одобрял выходы из середины цикла.

Автор:  ilovb [ Воскресенье, 01 Декабрь, 2013 18:44 ]
Заголовок сообщения:  Re: Интересный сайт - обучение школьников С++ и Паскаль

Все так. Ключевая мысль вот:
Цитата:
...основана больше на предвзятом мнении, чем на реальной необходимости...

Автор:  ilovb [ Воскресенье, 01 Декабрь, 2013 19:45 ]
Заголовок сообщения:  Re: Интересный сайт - обучение школьников С++ и Паскаль

Ну и последний комментарий Вирта по этому вопросу:
Цитата:
Porting the Oberon Compiler from Oberon to Oberon-07
Niklaus Wirth, 15. 8. 2007
...
Features that had been removed
1. The Loop Statement
There were only 4 loop statements in the compiler – a sign of good programming ☺. The principal
characteristic of the loop statement is that it allows several termination points. Thus, there is no
general recipe for translating it into a repeat or while statement. In my experience, a careful
search for a new formulation is worth while. In all cases, the new solution turned out to be more
satisfactory.

...


ps Фразу "There were only 4 loop statements in the compiler – a sign of good programming" лично я не понял, ибо компилятор был набит этими Loop под завязку.

Добавлено:
Еще комментарий:
Цитата:
It had been thought that the while statement with the termination condition at its entry, and the
repeat statement with the termination condition at its end must be amended by a general and
flexible construct with termination conditions anywhere. The loop statement with its exit
statements represents, however, a break with the idea of a structured language, where properties
of a statement can be derived from those of its components. The loop statement with its
syntactically unconnected exit statements does not allow this. It has therefore been deleted from
the language together with the associated exit statement

http://www.inf.ethz.ch/personal/wirth/O ... eron07.pdf

Автор:  igor [ Понедельник, 02 Декабрь, 2013 06:47 ]
Заголовок сообщения:  Re: Интересный сайт - обучение школьников С++ и Паскаль

По поводу двух скрытых goto внутри цикла. Раз все молчат, тогда скажу я. :)
Демонстрация наличия внутри цикла двух скрытых goto сама по себе не может служить доказательством неструктурности этого оператора. Аналогичное "доказательство" можно было бы применить и к структурному циклу WHILE:
Код:
L1: if ~C then goto L2;
    <statement sequence>;
    goto L1;
L2: ...

Автор:  ilovb [ Понедельник, 02 Декабрь, 2013 07:28 ]
Заголовок сообщения:  Re: Интересный сайт - обучение школьников С++ и Паскаль

Никто и не говорил, что это что-то доказывает.

Илья Ермаков писал(а):
А циклический алгоритм даёт бесконечно рекурсивные ветки в таком дереве...

Значит не совсем такое дерево. На моей схеме уже есть и ветвления и циклы. Ветка выполняется если B и повторяется пока E

Автор:  igor [ Понедельник, 02 Декабрь, 2013 08:31 ]
Заголовок сообщения:  Re: Интересный сайт - обучение школьников С++ и Паскаль

ilovb писал(а):
Никто и не говорил, что это что-то доказывает.
Значит вопрос о неструктурности цикла с выходом из середины для меня остаётся открыт (по крайней мере до тех пор, пока я не дойду до того места у Дейкстры, где он это доказывает).

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