Warning: session_name(): Cannot change session name when session is active in /home/stalko/rodina-ru.com/docs/dokuwiki/inc/init.php on line 231

Warning: session_set_cookie_params(): Cannot change session cookie parameters when session is active in /home/stalko/rodina-ru.com/docs/dokuwiki/inc/init.php on line 232
======Диаграмма Насси — Шнейдермана====== **Диаграмма Насси — Шнейдермана** ([[английский-язык|англ.]] //Nassi — Shneiderman diagram//) — это графический способ представления структурированных алгоритмов и программ, разработанный в [[1972-год|1972 году]] американскими [[аспирант|аспирантами]] Беном Шнейдерманом и Айзеком Насси. =====История===== Поскольку в [[структурное-программирование|структурном программировании]] не используется [[безусловный-переход|безусловный переход]], то Бен Шнейдерман решил, что для записи структурированных алгоритмов не нужны используемые в [[блок-схема|блок-схемах]] стрелки. Придумав разные способы изображения основных структур управления (последовательностей, [[ветвление|ветвлений]] и [[цикл-программирование-|циклов]]), он затем вместе с Айзеком Насси подробно проработал свою идею. Вместе они написали статью «Техника блок-схем для структурного программирования», которая была опубликована в научном журнале «SIGPLAN Notices» в августе 1973 года. Диаграммы Насси — Шнейдермана получили широкое распространение в некоторых странах, особенно в [[германия|Германии]], где для них даже был разработан официальный стандарт [[din|Немецким институтом по стандартизации]]: DIN 66261. Диаграммы Насси — Шнейдермана имеют ряд преимуществ перед блок-схемами при разработке структурированных алгоритмов и программ: * Запись является более компактной (в первую очередь за счёт отсутствия стрелок между элементами). * Изобразив алгоритм или программу в виде диаграммы Насси — Шнейдермана, можно быть гарантировано уверенным в том, что принципы структурного программирования соблюдены (при использовании блок-схем можно случайно получить неструктурированный алгоритм, если быть невнимательным). * Диаграммы Насси — Шнейдермана удобнее использовать для пошаговой детализации задачи, так как они тоже строятся по принципу пошаговой детализации — изначально диаграмма представляет собой один прямоугольник (исходная задача), затем в нём рисуется некоторая структура управления, в которой имеется несколько прямоугольников (подзадач исходной задачи), и далее с каждым прямоугольником (подзадачей) может быть проделана та же операция. =====Условные обозначения элементов в диаграммах===== Все элементы диаграммы Насси — Шнейдермана имеют прямоугольную форму и различаются только внутренним содержимым. ====Простое действие==== Выполняемое действие (в том числе команда языка в программе или подзадача в алгоритме) изображается в диаграммах Насси — Шнейдермана как прямоугольник, в котором записывается обозначение действия (команда) либо формулировка подзадачи. Пример записи подзадачи: {| | Найти наименьший элемент в массиве |} Пример записи выполняемой команды (при записи программы на языке [[pascal|Pascal]]): {| | writeln('Hello world!') |} ====Последовательность==== При записи структуры последовательного выполнения элементы изображаются вертикально один за другим. При этом все элементы последовательности должны иметь одинаковую ширину — за счёт этого вся последовательность тоже имеет прямоугольную форму. Например: {| | Открыть файл на чтение |- | Прочитать первую строку файла |- | Вывести прочитанное значение на экран |- | Закрыть файл |} Запись этого же алгоритма в виде диаграммы Насси — Шнейдермана с использованием языка [[pascal|Pascal]]: {| | reset(f) |- | readln(f, str) |- | writeln(str) |- | close(f) |} ====Простое ветвление==== [[оператор-ветвления|Структура простого ветвления]] изображается в виде прямоугольника, разделённого горизонтальной чертой на две части. В верхней части располагается заголовок ветвления, а в нижней — две ветки ветвления, разделённые вертикальной чертой. В заголовке рисуются две линии, ведущие от верхних углов к началу линии, разделяющей ветви. В получившемся вверху треугольнике записывается условие ветвления, в двух нижних треугольниках над ветвями подписываются значения условия, соответствующие этим ветвям, например «истина» и «ложь», или «да» и «нет». {{wiki:ns-keuze-tweevoudig.png?96x40|Внешний вид простого ветвления}} ====Многовариантный выбор==== Структура многовариантного выбора изображается похоже на структуру простого ветвления, только основная ветвь и треугольник над ней делятся на много частей вертикальными линиями. В верхнем треугольнике записывается выражение-переключатель, над ветвями записываются соответствующие значения переключателя. ====Повтор с предусловием==== Структура повтора с условием в начале изображается как прямоугольник, внутри которого в правой нижней части нарисован ещё один прямоугольник. Над внутренним прямоугольником записывается заголовок цикла, а внутри него — тело цикла. Пример записи цикла с предусловием (в данном примере тело цикла является последовательностью из двух действий): {{wiki:test-first.jpg?312x187|Пример повтора с предусловием}} ====Повтор с постусловием==== Отличается от цикла с предусловием только тем, что внутренний прямоугольник рисуется в правой верхней части внешнего, а заголовок записывается снизу. Пример записи цикла с постусловием (в данном примере тело цикла является последовательностью из двух действий): {{wiki:test-last.jpg?236x172|Пример повтора с постусловием}} ====Повтор со счётчиком==== Внутренний прямоугольник рисуется в правой части и не касается верха и низа внешнего прямоугольника. Условие цикла записывается сверху. =====См. также===== * [[uml|UML]] * [[дракон|ДРАКОН]] =====Ссылки===== * [[http://www.cs.umd.edu/hcil/members/bshneiderman/nsd/|Краткая история диаграмм Насси — Шнейдермана и список программ для их создания на официальной странице Бена Шнейдермана]]. ====Программное обеспечение==== * [[http://www.easycode.de/en/|EasyCODE]] – среда разработки диаграмм Насси-Шнейдермана для нескольких языков программирования (C#, C++, C, Java, Cobol) * [[http://www.atego.com/company/blue-river/|Atego's BlueRiverX32]] – среда разработки диаграмм Насси-Шнейдермана для C и C++ * [[http://structorizer.fisch.lu|Structorizer]] – кроссплатформенный редактор диаграмм Насси-Шнейдермана (операционные системы [[linux|Linux]], [[mac-os-x|Mac OS X]], [[microsoft-windows|Microsoft Windows]]) * [[http://www.sichemsoft.nl/|Struktograaf]] – редактор диаграмм Насси-Шнейдермана для операционной системы [[microsoft-windows|Microsoft Windows]] {{tag>"Теория алгоритмов" "Разработка программного обеспечения" "Визуализация данных"}}