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>"Теория алгоритмов" "Разработка программного обеспечения" "Визуализация данных"}}