- •СОДЕРЖАНИЕ
- •Раздел 1. ОБЩИЕ СВЕДЕНИЯ О ПРОГРАММНОМ ОБЕСПЕЧЕНИИ
- •1.1. Принцип программного управления
- •1.2. Автоматическое выполнение команд программы
- •1.3. Этапы постановки и решения задачи на компьютере
- •1.4. Назначение и классификация языков программирования
- •1.4.1. Машинно-ориентированные языки
- •1.4.2. Машинно-независимые языки
- •1.5. Структура программного обеспечения
- •1.5.1. Системы программирования
- •1.5.2. Операционные системы
- •Раздел 2. ОСНОВЫ АЛГОРИТМИЗАЦИИ
- •2.1. Алгоритм и его свойства
- •2.2. Способы описания алгоритмов
- •2.2.1. Словесное описание
- •2.2.2. Графическое описание
- •2.2.3. Запись на алгоритмическом языке
- •2.3. Разновидности структур алгоритмов
- •2.3.1. Линейный вычислительный процесс
- •2.3.2. Разветвляющийся вычислительный процесс
- •2.3.3. Циклический вычислительный процесс
- •Раздел 3. СТРУКТУРНОЕ ПРОГРАММИРОВАНИЕ
- •3.1. Теория структурного программирования
- •3.2. Реализация структурного проектирования в современных языках программирования
- •3.3. Преобразование неструктурированных программ в структурированные
- •3.3.2. Метод введения переменной состояния
- •3.3.3. Метод булевого признака
- •3.4. Способы графического представления структурированных схем алгоритмов
- •3.4.1. Метод Дамке
- •3.4.2. Схемы Насси-Шнейдермана
- •Раздел 4. АЛГОРИТМИЧЕСКИЙ ЯЗЫК ПРОГРАММИРОВАНИЯ ПАСКАЛЬ
- •4.1. Общая характеристика языка Паскаль
- •4.2. Алфавит языка Паскаль
- •4.3. Основные понятия языка
- •4.3.1. Идентификаторы
- •4.3.2. Комментарии
- •4.4. Структура простейшей программы
- •4.5. Способы описания синтаксиса
- •4.5.2. Синтаксические диаграммы
- •Раздел 5. ОСНОВНЫЕ ТИПЫ ДАННЫХ
- •5.1. Классификация данных
- •5.2. Стандартные скалярные типы данных
- •5.2.1. Целочисленные типы
- •Формат
- •5.2.2. Вещественные типы
- •Функция
- •5.2.3. Символьный тип (тип Char)
- •5.2.4. Логический тип (тип Boolean)
- •Функция
- •5.3. Выражения
- •5.4. Оператор присваивания
- •Раздел 6. СТРУКТУРА ПРОГРАММЫ
- •6.1. Программный модуль
- •6.2. Раздел меток
- •6.3. Раздел констант
- •6.4. Раздел типов
- •6.5. Раздел переменных
- •6.6. Раздел операторов
- •Раздел 7. ОПЕРАТОРЫ
- •7.1. Составной оператор
- •7.2. Программирование линейных и разветвляющихся структур алгоритмов
- •7.2.1. Оператор перехода Goto
- •7.2.2. Условный оператор If
- •7.2.3. Оператор варианта (выбора) Case
- •7.2.4. Пустой оператор
- •7.3. Программирование циклических структур алгоритмов
- •7.3.1. Оператор цикла с параметром (оператор For)
- •7.3.2. Оператор цикла с постусловием
- •7.3.3. Оператор цикла с предусловием
- •7.3.4. Операторы Continue и Leave
- •Раздел 8. СТРУКТУРИРОВАНИЕ И ОФОРМЛЕНИЕ ПРОГРАММ
- •Раздел 9. ОПИСАННЫЕ СКАЛЯРНЫЕ ТИПЫ
- •9.1. Перечислимый скалярный тип
- •9.2. Тип диапазон
- •10.1. Массивы
- •10.1.1. Задание массивов
- •10.1.2. Действия над элементами массивов
- •10.1.3. Действия над массивами
- •10.1.4. Типизованные константы типа массив
- •10.2. Строковые данные
- •10.2.1. Строковые константы
- •10.2.2. Строковые переменные
- •10.2.3. Встроенные функции, определенные над данными типа String
- •ЛИТЕРАТУРА
Пример 3.1.
Дан массив А, состоящий из N элементов. Найти наибольший из элементов массива (Amax) и его номер (Imax).
Рисунок 3.25 представляет схему алгоритма решения данной задачи, представленную по методу Дамке.
Достоинства метода Дамке:
•схема алгоритма, представленная с помощью данного метода, нагляднее, чем классическая, особенно для больших программ;
•метод Дамке удобно использовать при разработке алгоритма по методу нисходящего проектирования;
•метод Дамке удобен при коллективной разработке программ, так как позволяет независимо разрабатывать отдельные подзадачи.
3.4.2. Схемы Насси-Шнейдермана
Схемы Насси-Шнейдермана – это схемы, иллюстрирующие структуру передач управления внутри модуля с помощью вложенных друг в друга блоков.
Схемы используются для изображения структурированных схем и позволяют уменьшить громоздкость схем за счёт отсутствия явного указания линий перехода по управлению.
Схемы Насси-Шнейдермана называют ещё структурограммами. Изображение основных элементов структурного программирования в
схемах Насси-Шнейдермана организовано следующим образом. Каждый блок имеет форму прямоугольника и может быть вписан в любой внутренний прямоугольник любого другого блока. Информация в блоках записывается по тем же правилам, что и в структурированных схемах алгоритмов (на естественном языке или языке математических формул).
Изображение конструкций структурированных алгоритмов в схемах Насси-Шнейдермана описано ниже.
1)Функциональный блок (блок обработки) изображается так, как иллюстрирует рисунок 3.26.
Каждый символ схем Насси-Шнейдермана является блоком обработки. Каждый прямоугольник внутри любого символа также является блоком обработки.
2)Блок следования изображается так, как представляет рисунок 3.27. Данный блок объединяет ряд следующих друг за другом процессов
обработки.
3) Блок решения изображается так, как показывает рисунок 3.28.
72
Начало |
|
|
Ввод N и |
|
|
массива А |
|
|
Инициа- |
|
|
лизация |
|
|
|
Amax = |
|
|
A(1) |
|
|
Imax = 1 |
|
|
I = 1 |
|
Определение |
|
|
Amax, Imax |
|
|
|
While |
|
|
I ≤ N |
|
|
да |
|
|
A(I) |
Amax = |
|
A(I) |
|
|
>Amax |
|
|
|
|
Вывод Amax, |
I = I + 1 |
Imax = I |
|
|
|
Imax |
|
|
Конец |
|
|
Рисунок 3.25 – Схема алгоритма поиска максимального элемента массива |
||
|
и его номера, представленная по методу Дамке |
|
73
Рисунок 3.26 – Представление функционального блока в схемах Насси-Шнейдермана
Рисунок 3.27 – Представление блока следования в схемах Насси-Шнейдермана
|
Условие |
1 |
0 |
Рисунок 3.28 – Представление блока решения в схемах Насси-Шнейдермана
Блок решения используется для представления конструкции If-Then-Else. Условие записывается в центральном треугольнике, варианты исполнения условия – в боковых треугольниках (варианты исполнения могут быть записаны в виде: 1, 0; да, нет; +, −). Процессы обработки обозначаются прямоугольниками.
74
4) Блок Case изображается так, как представляет рисунок 3.29.
Рисунок 3.29 − Представление блока Case в схемах Насси-Шнейдермана
Данный блок является расширением блока решения. Те варианты выхода из этого блока, которые можно точно сформулировать, размещаются слева от нижней вершины центрального треугольника. Остальные выходы объединяются в один, называемый выходом по несоблюдению условий и расположенный справа от нижней вершины.
Если можно перечислить все возможные случаи, правую часть можно оставить незаполненной или совсем опустить, а выходы разместить по обе стороны центрального треугольника.
По аналогии с конструкцией If-Then-Else условие записывается в центральном треугольнике, варианты исполнения условия – в боковых треугольниках. Процессы обработки обозначаются прямоугольниками.
5) Цикл “Пока” изображается так, как иллюстрирует рисунок 3.30.
Рисунок 3.30 − Представление цикла “Пока” в схемах Насси-Шнейдермана
Обозначает циклическую конструкцию с предусловием, т.е. с проверкой условия в начале цикла (цикл While). Условие выполнения цикла размещается в верхней полосе.
75
6) Цикл “До” изображается так, как представляет рисунок 3.31.
Рисунок 3.31 − Представление цикла “До” в схемах Насси-Шнейдермана
Обозначает циклическую конструкцию с постусловием, т.е. с проверкой условия после выполнения тела цикла (цикл Repeat-Until). Условие выполнения цикла размещается в нижней полосе.
Рисунок 3.32 – рисунок 3.34 представляют примеры простейших структурированных схем алгоритмов (слева) и соответствующие им схемы Насси-Шнейдермана (справа).
На данных рисунках Bi обозначает i-ое условие, Di – i-ое действие.
Из данных рисунков видно, что схемы Насси-Шнейдермана являются существенно более компактными по сравнению с аналогичными схемами алгоритмов, представленными в соответствии с требованиями ГОСТ 19.701-90 (см. п. 2.2.2). Очевидно, что связано это с отсутствием линий, отображающих потоки управления (линии перехода по управлению) между блоками.
Пример 3.2.
Дан массив А, состоящий из N элементов. Найти наибольший из элементов массива (Amax) и его номер (Imax). Нарисовать укрупненную и детализированную схемы Насси-Шнейдермана.
Схема алгоритма решения данной задачи, представленная по методу Дамке, приведена в п. 3.4.1.
Схемы Насси-Шнейдермана для решения данной задачи содержит рисунок 3.35.
76
|
Начало |
да |
B1 |
|
нет |
|
|
|
|
||
да |
нет |
|
|
D1 |
|
|
B1 |
|
|
B2 |
|
|
|
|
да |
нет |
|
|
|
|
|
||
D2 |
D1 |
|
|
|
D3 |
|
|
|
|
да |
B3 |
|
да |
нет |
|
нет |
|
|
|
|
|
||
|
B2 |
D2 |
D4 |
D6 |
D5 |
|
D4 |
D3 |
|
|
|
|
да |
нет |
|
|
|
|
|
B3 |
|
|
|
|
D6 |
D5 |
|
|
|
Конец |
|
|
|
|
|
|
Рисунок 3.32 – Пример схемы Насси-Шнейдермана |
|
|||
|
для алгоритма с вложенными разветвлениями |
|
|
77
|
Начало |
|
да |
B1 |
нет |
|
|
|
|||
|
да |
нет |
B2 |
D1 |
|
|
|
D4 |
|
||
|
B1 |
|
|
D2 |
|
|
|
|
|
D5 |
B4 |
да |
нет |
D1 |
|
D3 |
D6 |
|
B2 |
|
B3 |
||
|
|
|
|
||
D4 |
|
D2 |
|
|
|
D5 |
D3 |
нет |
|
|
|
B4 |
|
|
|
||
|
|
да |
|
|
|
|
нет |
D6 |
|
|
|
|
B3 |
|
|
|
|
|
да |
|
|
|
|
|
Конец |
|
|
|
|
Рисунок 3.33 – Пример схемы Насси-Шнейдермана для алгоритма, |
|||||
|
содержащего последовательность циклов |
|
|
|
78
|
Начало |
D1 |
|
|
|
|
D1 |
D2 |
|
D3 |
|
|
|
|
|
|
B1 |
|
D2 |
B2 |
|
|
D4 |
|
D3 |
B3 |
|
|
|
нет |
да |
|
|
B1 |
|
|
нет |
да |
|
B2 |
|
|
|
D4 |
|
нет |
да |
|
|
B3 |
|
|
Конец |
Рисунок 3.34 – Пример схемы Насси-Шнейдермана для алгоритма, |
||
|
содержащего вложенные циклы |
79
Укрупненная схема Насси-Шнейдермана
Ввод N и массива А
Инициализация
Определение
Amax, Imax
Вывод
Amax, Imax
Подробная схема |
|
Насси-Шнейдермана |
|
Ввод N и массива А |
|
Amax = A(1) |
|
Imax = 1 |
|
I = 2 |
|
I ≤ N |
|
A(I)>Amax |
|
да |
нет |
Amax = A(I) |
|
Imax = I |
|
I = I + 1 |
|
Вывод |
|
Amax, Imax |
Рисунок 3.35 – Пример диаграммы Насси-Шнейдермана для алгоритма поиска максимального элемента массива и его номера
80