Автор Тема: Наглядность схем для алгоритмов.  (Прочитано 15997 раз)

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Наглядность схем для алгоритмов.
« Ответ #15 : Июнь 25, 2012, 11:06:43 pm »
Все равно. Ветвления/состояния на драконовских схемах выглядят лучше.
Состояния и переходы много лучше выглядят на схеме конечного автомата. А это ни разу не дракон.

Какое именно представление ты понимаешь под "схемой конечного автомата". КА можно и в табличной форме выразить. Только это будет ни разу не нагляднее дракона.
Табличное представление оно разное бывает... Помнится когда автоматы эти мутил табличками получалось нагляднее иногда чем схемами. Особенно если приходилось потом править.

А под схемой конечного автомата я конечно же понимаю STD (state transition diagram).
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Наглядность схем для алгоритмов.
« Ответ #16 : Июнь 25, 2012, 11:12:26 pm »
Табличное представление оно разное бывает... Помнится когда автоматы эти мутил табличками получалось нагляднее иногда чем схемами. Особенно если приходилось потом править.

Никто и не говорит об абсолютном превосходстве. Речь о востребованности. Вот я и говорю, что дракон вполне востребован.

А под схемой конечного автомата я конечно же понимаю STD (state transition diagram).

Ну и херня этот твой STD :) Запиши на нем обсуждаемый алгоритм. Дракон будет лучше.

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Наглядность схем для алгоритмов.
« Ответ #17 : Июнь 25, 2012, 11:17:52 pm »
Табличное представление оно разное бывает... Помнится когда автоматы эти мутил табличками получалось нагляднее иногда чем схемами. Особенно если приходилось потом править.

Никто и не говорит об абсолютном превосходстве. Речь о востребованности. Вот я и говорю, что дракон вполне востребован.
Для того чтобы он был востребован нужно очертить класс задач для которых он подходит лучше чем все остальное :-) Пока что я вижу (в плане разработки ПО) что на Драконе хорошо и приятно реализуются/описываются только тривиальные алгоритмы с которыми проблем в классических языках и так нет.

А под схемой конечного автомата я конечно же понимаю STD (state transition diagram).
Ну и херня этот твой STD :) Запиши на нем обсуждаемый алгоритм. Дракон будет лучше.
А в этой задаче разве много состояний с переходами из состояния в состояние? По моему, тут у нас просто довольно линейный алгоритм с ветвлением.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Наглядность схем для алгоритмов.
« Ответ #18 : Июнь 25, 2012, 11:24:31 pm »
А в этой задаче разве много состояний с переходами из состояния в состояние? По моему, тут у нас просто довольно линейный алгоритм с ветвлением.
Всмотрелся в алгоритм. Посыпаю голову пеплом. Естественно он не линейный. Алгоритм рекурсивный. И эта самая его рекурсивность тут ключевая. И, что характерно, на драконовской схеме они ну никак в глаза не бросается. Уверен, что если бы в алгоритме был бы цикл, в драконе его бы радостно красиво нарисовали бы (там вроде бы есть соответствующий примитив) акцентировав на нем внимание. А если у нас вдруг рекурсия (да еще не хвостовая), которая вообще говоря сложнее и интересней цикла, то все. Нуль варазительности.

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

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Наглядность схем для алгоритмов.
« Ответ #19 : Июнь 25, 2012, 11:51:10 pm »
Для того чтобы он был востребован нужно очертить класс задач для которых он подходит лучше чем все остальное :-) Пока что я вижу (в плане разработки ПО) что на Драконе хорошо и приятно реализуются/описываются только тривиальные алгоритмы с которыми проблем в классических языках и так нет.

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

А в этой задаче разве много состояний с переходами из состояния в состояние? По моему, тут у нас просто довольно линейный алгоритм с ветвлением.

Я бы предложил тебе записать его на твоем любимом ЯП. Но спор будет все равно ни о чем, потому что приличной драконовской схемы (без мусора) все равно нет, а специально рисовать я ее не буду :)

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Наглядность схем для алгоритмов.
« Ответ #20 : Июнь 25, 2012, 11:56:51 pm »
Для того чтобы он был востребован нужно очертить класс задач для которых он подходит лучше чем все остальное :-) Пока что я вижу (в плане разработки ПО) что на Драконе хорошо и приятно реализуются/описываются только тривиальные алгоритмы с которыми проблем в классических языках и так нет.
Я ж говорил про свой опыт: спеки сложного поведения. Непосредственно алгоритмы - я не пробовал на нем делать. Но из того, что я видел в "чужих" схемах - таки алгоритмы на нем выглядят хорошо (если правильно составлены).
Слушай, по моему я окончательно отупел от embedded-разработки, обработки сигналов и йфонов - я не могу постичь разницу между спеками сложного поведения и  описанием алгоритма.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Наглядность схем для алгоритмов.
« Ответ #21 : Июнь 25, 2012, 11:57:43 pm »
PS. В тексте алгоритма я рекурсию обнаружил быстрее чем на драконоидной схеме.

Ну блин. На нем еще и параллельные процессы не отобразить. Не говоря о таких повседневных вещах как исключения (уже поэтому можно на нем ставить крест как непосредственном трансляторе в ЯВУ). Ну и что? Это все частности. Если эти штуки в твоих задачах принципиальны - ну не используй дракон :) Я его использовал только пару раз и давно. Но с той задачей он справился великолепно. Подвернется еще что-то подобное - опять заиспользую.

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Наглядность схем для алгоритмов.
« Ответ #22 : Июнь 26, 2012, 12:08:53 am »
Слушай, по моему я окончательно отупел от embedded-разработки, обработки сигналов и йфонов - я не могу постичь разницу между спеками сложного поведения и  описанием алгоритма.

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

Граница, естественно, размыта. Поэтому дракон работает и для того и для другого.

DIzer

  • Гость
Re: Наглядность схем для алгоритмов.
« Ответ #23 : Июнь 26, 2012, 06:16:50 am »
Слушай, по моему я окончательно отупел от embedded-разработки, обработки сигналов и йфонов - я не могу постичь разницу между спеками сложного поведения и  описанием алгоритма.

Я не претендую на правильное определение...
- алгоритм - последовательность действий (над входом), чтобы получить нужный результат (выход).

  ;D добавьте сюда две абсолютно важные вещи КОНЕЧНОСТЬ числа шагов  и  ДЕТЕРМИНИРОВАННОСТЬ каждого шага
(текущий шаг работает с тем  что известно из предыдущих шагов). -последнее редко заботит создателей спецификаций - их можно
рассматривать по большей части как конечную совокупность  обьявлений  описывающее нечто (разумеется в эту совокупность может входить и  описание алгоритмов).
« Последнее редактирование: Июнь 26, 2012, 06:20:10 am от DIzer »

DIzer

  • Гость
Re: Наглядность схем для алгоритмов.
« Ответ #24 : Июнь 26, 2012, 06:26:10 am »
... то есть  спецификация (отдельные ее части могут содержать корректные алгоритмы)... но не вполне корректная спецификация может иметь ценность... ,тогда как алгоритм  - НЕТ (он просто не работает).

Влад Жаринов

  • Full Member
  • ***
  • Сообщений: 189
    • Просмотр профиля
Соглашусь, в данном случае проще сразу в код смотреть. НО. Схема была бы сильно лучше, если убрать оттуда весь мусор, специфичный для целевого ЯП (объявление переменных и т.д.). Собственно, мне поэтому никогда не импонировала идея программить непосредственно на Драконе. Возможно, что это еще работает для какого-то сильно низкоуровневого языка (типа асма). Но в случае нормального ЯВУ - оно как собаке пятая нога. Тем не менее, даже в случае ЯВУ дракон хорошо работает (по моему небольшому опыту) как спека к реализуемому функционалу.
Если этот "мусор" убрать, то от алгоритма в общем то ничего и не останется :-) Алсо если из реализации на том же паскакале убрать этот мусор и оставить лишь высокоуровневую часть алгоритма, то такой код будет так же нагляден как и высокоуровневая схема. Только вот на паскале алгоритм все еще будет реализован (вся мелочь мусорная будет просто в отдельных процедурах сидеть) а вот у дракона уже нет (как я понимаю, средств декомпозиции вменяемых у Дракона нет).
как я понимаю, средств декомпозиции вменяемых у Дракона нет
Аналог процедур есть.
Можно пример?
Вставлю-ка и я свои 5 копеек... :)
Да, "аналог процедур" (графическая основа для записи их вызова) есть - Вставка (активная). Т.е. как Валерий Соловьёв и говорил...
Ежели немного подумать - можно развить синтаксис настолько, чтобы записать и вызов/возврат в Обероне-2 - как здесь показано... :)

Но народ прав в том отношении, что "всё, кроме маршрутных ключевых слов" в одну дракон-схему впихивать - неэргономично. Надо бы выдумать схемы и для других ключевых слов... :) И соответственно из дракон-схемы их убрать... и связанную с ними часть текста перенести туда.
Так я и делаю. Например, здесь - кстати, можно и рекурсию там показывать. Но её можно и описать через список следующих вызовов (после возврата из текущего).

Но, как и в материальной технике, только схем, прямо представляющих программы (дракон-схема - часть такого представления), нам, думаю, недостаточно. Это всё равно, как при наладке сложной установки или целого цеха пользоваться только конструкторской документацией... ;) Недаром в эксплуатационной, кроме части "Устройство", есть и часть "Принцип действия". А вот этого текст программы (равно как и дракон-схема по этому тексту) напрямую не описывают...
И спеку я понимаю именно в этом смысле - описание принципа действия. И она необязательно чисто декларативна...

Для примера на это самое:
...

А под схемой конечного автомата я конечно же понимаю STD (state transition diagram).
Ну и херня этот твой STD :) Запиши на нем обсуждаемый алгоритм. Дракон будет лучше.
А в этой задаче разве много состояний с переходами из состояния в состояние? По моему, тут у нас просто довольно линейный алгоритм с ветвлением.
- вот здесь по диаграмме состояний задачи получен алгоритм. Закодированный "графитно". Кстати, аж в двух формах - силуэтно и по Дейкстре. И даже ассерт есть... :)
Только в общем случае переход от структуры состояний к алгоритму нетривиален - обсуждалось в этом посте. Ну, это все и без меня знают... :)
А мысль в том - что и программа, и спеки на неё независимо м.б. хоть чисто текстовыми, хоть на табличной основе, хоть на графовой. Важно, чтобы задача отражалась со всех тех сторон, которые нужны для её понимания.

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

А вот ещё "один чувак" ((С) Geniepro) :) начал рассказывать о чём-то подобном, но уже реализованном в среде поддержки разработки и программ, и аппаратуры: http://forum.oberoncore.ru/viewtopic.php?f=62&t=4060.

Влад Жаринов

  • Full Member
  • ***
  • Сообщений: 189
    • Просмотр профиля
Re: Наглядность схем для алгоритмов.
« Ответ #26 : Август 25, 2012, 11:58:50 am »
Да, кстати, с даты, на которой остановилось обсуждение здесь, в той ветке много кое-чего было. В частности, был пример, как можно оставить объявления в дракон-спеке (для асм-программы как раз) и как - разделить на алгоритмическую и декларативную части (вместе со связующей в виде схемы исполнителя) - в этом посте.

Влад Жаринов

  • Full Member
  • ***
  • Сообщений: 189
    • Просмотр профиля
Наглядность схем программ
« Ответ #27 : Август 25, 2012, 12:15:48 pm »
Схема должна вся умещаться в поле зрения. Поэтому, схему нужно распечатать на подходящем формате.
Эмм. А как её собственно редактировать потом? Вот я работаю на ноуте c экраном 13". Код пишу в том числе. Я слабо представляю как вот в подобном "коде" мне разбираться и править его.

Предлагается возродить кульман на рабочем месте? :-)
Ещё как... с учётом новых средств отображения: http://forum.oberoncore.ru/viewtopic.php?p=72891#p72891 ;)...

Правда, справедливо указывается, что лучше бы научиться масштабировать на экране... например, так:
...
Блин, ну как мне объяснить людям элементарные вещи: что для отображения РАЗНОМАСШТАБНЫХ объектов на одной схеме надо применять АДЕКВАТНЫЕ ВИЗУАЛЬНЫЕ СПОСОБЫ?

Вот сделали Вы стройный ряд из одинаковых прямоугольничков - что, это сильно способствует их логическому объединению?!

Ставьте нормальные задачи и решайте их нормально, а то обсуждаете всё сферических коней в вакууме.

В данном случае можно в первом приближении обойтись формулировкой двух задач: восприятие крупномасштабной структуры и восприятие (чтение) мелких деталей. Задачи противоречивые, но решать их надо совместно - на одной схеме. Следовательно, одно решение не должно МЕШАТЬ другому.
Но должно ли ПОМОГАТЬ? Подумайте, насколько троллейбус, на котором едете к вокзалу, должен помогать движению поезда? А ведь у Вас так и получается: выстроим троллейбусы в стройный ряд, и поезд поедет быстрее  :lol:

Паронджанов правильно говорит о разнице симультанного и сукцессивного восприятия. Решению наших двух задач это как раз непосредственно помогает. (Макро)структурная информация образует контекст и воспринимается периферийным зрением как фон. Детали сукцессивно читаются в фокусе зрения, при этом никакой фон не должен мешать этому процессу.
Выводы очевидны:
- необходима разная контрастность структурной информации и внутреннего содержания;
- необходимо использование разных приёмов визуального представления структурной информации и внутреннего содержания (например, цветовые пятна с нерезким контуром для крупномасштабных объектов и чёткие контуры мелких деталей);
- желательна поддержка динамического масштабирования интерфейса (об этом писал Раскин). Очень замечательно можно сделать это автоматически (одна ступень разницы масштаба в плюс - размытие с уменьшением контрастности; одна ступень масштаба в минус - исчезновение деталей, оставляем только контур).
- что можно развить.

Кроме того, это вообще менее актуально, если и программу разбить на составляющие (с декомпозицией по каждой), и строить производные схемы. И то, и другое для КО-прогязыка иллюстрировалось здесь: http://forum.oberoncore.ru/viewtopic.php?p=62870#p62870.

Влад Жаринов

  • Full Member
  • ***
  • Сообщений: 189
    • Просмотр профиля
Наглядность алгоритмических схем для деятельности
« Ответ #28 : Сентябрь 02, 2012, 08:44:54 am »
Вот появился пример представления работы группы исполнителей через ммодифицированные дракон-схемы. Возможно, у кого-то будет чего сказать и по наглядности, и по логичности?..