Диаграмма Насси — Шнейдермана () — это графический способ представления структурированных алгоритмов и программ, разработанный в 1972 году американскими аспирантами Беном Шнейдерманом и Айзеком Насси.
История Поскольку в структурном программировании не используется безусловный переход, то Бен Шнейдерман решил, что для записи структурированных алгоритмов не нужны используемые в блок-схемах стрелки. Придумав разные способы изображения основных структур управления (последовательностей, ветвлений и циклов), он затем вместе с Айзеком Насси подробно проработал свою идею. Вместе они написали статью «Техника блок-схем для структурного программирования», которая была опубликована в научном журнале «SIGPLAN Notices» в августе 1973 года.
Диаграммы Насси — Шнейдермана получили широкое распространение в некоторых странах, особенно в Германии, где для них даже был разработан официальный стандарт Немецким институтом по стандартизации: DIN 66261.
Диаграммы Насси — Шнейдермана имеют ряд преимуществ перед блок-схемами при разработке структурированных алгоритмов и программ: Запись является более компактной (в первую очередь за счёт отсутствия стрелок между элементами). Изобразив алгоритм или программу в виде диаграммы Насси — Шнейдермана, можно быть гарантировано уверенным в том, что принципы структурного программирования соблюдены (при использовании блок-схем можно случайно получить неструктурированный алгоритм, если быть невнимательным). Диаграммы Насси — Шнейдермана удобнее использовать для пошаговой детализации задачи, так как они тоже строятся по принципу пошаговой детализации — изначально диаграмма представляет собой один прямоугольник (исходная задача), затем в нём рисуется некоторая структура управления, в которой имеется несколько прямоугольников (подзадач исходной задачи), и далее с каждым прямоугольником (подзадачей) может быть проделана та же операция.
Условные обозначения элементов в диаграммах Все элементы диаграммы Насси — Шнейдермана имеют прямоугольную форму и различаются только внутренним содержимым.
Простое действие Выполняемое действие (в том числе команда языка в программе или подзадача в алгоритме) изображается в диаграммах Насси — Шнейдермана как прямоугольник, в котором записывается обозначение действия (команда) либо формулировка подзадачи.
Пример записи подзадачи: Найти наименьший элемент в массиве
Пример записи выполняемой команды (при записи программы на языке Pascal):
writeln('Hello world!')
Последовательность При записи структуры последовательного выполнения элементы изображаются вертикально один за другим. При этом все элементы последовательности должны иметь одинаковую ширину — за счёт этого вся последовательность тоже имеет прямоугольную форму. Например: Открыть файл на чтение Прочитать первую строку файла Вывести прочитанное значение на экран Закрыть файл
Запись этого же алгоритма в виде диаграммы Насси — Шнейдермана с использованием языка Pascal: reset(f) readln(f, str) writeln(str) close(f)
Простое ветвление Структура простого ветвления изображается в виде прямоугольника, разделённого горизонтальной чертой на две части. В верхней части располагается заголовок ветвления, а в нижней — две ветки ветвления, разделённые вертикальной чертой. В заголовке рисуются две линии, ведущие от верхних углов к началу линии, разделяющей ветви. В получившемся вверху треугольнике записывается условие ветвления, в двух нижних треугольниках над ветвями подписываются значения условия, соответствующие этим ветвям, например «истина» и «ложь», или «да» и «нет».
Многовариантный выбор Структура многовариантного выбора изображается похоже на структуру простого ветвления, только основная ветвь и треугольник над ней делятся на много частей вертикальными линиями. В верхнем треугольнике записывается выражение-переключатель, над ветвями записываются соответствующие значения переключателя.
Повтор с предусловием Структура повтора с условием в начале изображается как прямоугольник, внутри которого в правой нижней части нарисован ещё один прямоугольник. Над внутренним прямоугольником записывается заголовок цикла, а внутри него — тело цикла.
Пример записи цикла с предусловием (в данном примере тело цикла является последовательностью из двух действий):
Повтор с постусловием Отличается от цикла с предусловием только тем, что внутренний прямоугольник рисуется в правой верхней части внешнего, а заголовок записывается снизу.
Пример записи цикла с постусловием (в данном примере тело цикла является последовательностью из двух действий):
Повтор со счётчиком Внутренний прямоугольник рисуется в правой части и не касается верха и низа внешнего прямоугольника. Условие цикла записывается сверху.
См. также UML ДРАКОН
Ссылки Краткая история диаграмм Насси — Шнейдермана и список программ для их создания на официальной странице Бена Шнейдермана . Программное обеспечение EasyCODE – среда разработки диаграмм Насси-Шнейдермана для нескольких языков программирования (C#, C++, C, Java, Cobol) Atego's BlueRiverX32 – среда разработки диаграмм Насси-Шнейдермана для C и C++ Structorizer – кроссплатформенный редактор диаграмм Насси-Шнейдермана (операционные системы Linux, Mac OS X, Microsoft Windows) Struktograaf – редактор диаграмм Насси-Шнейдермана для операционной системы Microsoft Windows
Категория:Теория алгоритмов Категория:Визуализация данных