- •СОДЕРЖАНИЕ
- •Раздел 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. СТРУКТУРНОЕ ПРОГРАММИРОВАНИЕ
В 1970-х годах с появлением ЭВМ третьего поколения возникает новый подход к разработке алгоритмов и программ, который получает название
структурного проектирования программ.
Одним из первых инициаторов структурного программирования был профессор Э.Дейкстра. В 1965 он высказал предположение, что оператор GoTo (оператор безусловного перехода) вообще может быть исключён из языков программирования. По мнению Дейкстры «квалификация программиста обратно пропорциональна числу операторов GoTo в его программах».
Достоинства структурного программирования по сравнению с интуитивным неструктурным программированием:
1)Уменьшение трудностей тестирования программ.
2)Более высокая производительность программистов.
3)Ясность и читаемость программ, что упрощает их сопровождение.
4)Эффективность программ.
3.1.Теория структурного программирования
К концепциям структурного программирования относится отказ от использования оператора безусловного перехода (GoTo), замена его рядом других структурированных операторов и использование идей нисходящего проектирования программ.
Основное назначение нисходящего проектирования – служить средством разбиения большой задачи на меньшие подзадачи так, чтобы каждую подзадачу можно было рассматривать независимо.
Впредыдущем разделе кратко была описана суть метода нисходящего проектирования. Напомним, что при его использовании вначале проектируется общая структура алгоритма, без детальной проработки его отдельных частей. Затем разрабатываются блоки алгоритма, не детализированные на предыдущем шаге. В результате на каждом шаге разработки детализируется фрагмент алгоритма, то есть решается более простая задача.
Воснову структурного программирования положено требование, чтобы каждый модуль алгоритма (программы) проектировался с единственным входом и единственным выходом. Программа представляется в виде множества вложенных модулей, каждый из которых имеет один вход и один выход.
46
Базой для реализации структурированных программ является принцип Бома и Джакопини, в соответствии с которым всякая реальная программа может быть построена с использованием лишь двух управляющих конструкций.
По Бому и Джакопини логическая структура программы может быть выражена комбинациями трех базовых структур:
1)Функциональный блок;
2)Конструкция принятия двоичного (дихотомического) решения.
3)Конструкции обобщенного цикла.
Функциональный блок – это отдельный вычислительный оператор или любая другая реальная последовательность вычислений с единственным входом и единственным выходом. Изображается с помощью символа «Процесс» (рисунок 3.1).
Вычисления
Рисунок 3.1 – Графическое представление функционального блока
Конструкция принятия двоичного (дихотомического) решения
обычно называется элементом If-Then-Else (если-то-иначе), разветвлением или ветвлением – структура, обеспечивающая выбор между двумя альтернативными путями вычислительного процесса в зависимости от выполнения некоторого условия. Изображается с помощью символов «Решение» и «Процесс» (рисунок 3.2).
Конструкция обобщенного цикла – в качестве базовой конструкции структурного программирования используется цикл с предусловием, называемый циклом «Пока» (Do-While). Изображается с помощью символов «Решение» и «Процесс» (рисунок 3.3).
Рисунок 3.2 – рисунок 3.3 показывают, что логические конструкции (конструкция принятия двоичного решения и конструкция обобщенного цикла) имеют только один вход и один выход. Поэтому они могут рассматриваться как функциональные блоки.
C учётом этого вводится преобразование логических блоков в функциональный блок.
47
да |
Условие |
нет |
|
|
|
Первая |
|
Вторая |
подзадача |
|
подзадача |
Рисунок 3.2 – Графическое представление конструкции принятия |
||
|
двоичного решения |
|
нет
?
да
Тело цикла
Рисунок 3.3 – Графическое представление конструкции обобщенного цикла
Кроме того, всякая последовательность функциональных элементов, называемая конструкцией следования (рисунок 3.4), также может быть приведена к одному функциональному блоку.
Данные преобразования называются преобразованиями БомаДжакопини. Их основу составляет принцип “чёрного ящика” (что-то с одним входом и одним выходом).
48
Рисунок 3.4 – Графическое представление конструкции следования
Таким образом, всякая программа (или алгоритм), состоящая из функциональных блоков, конструкций цикла и элементов If-Then-Else, поддаётся последовательному преобразованию к единственному функциональному блоку.
Эта последовательность преобразований может быть использована как средство понимания программы, доказательство ее правильности и структурированности.
Обратная последовательность преобразований может быть использована в процессе проектирования алгоритма (программы) по методу нисходящего проектирования – алгоритм (программа) разрабатывается, исходя из единственного функционального блока, который постепенно раскрывается в сложную структуру основных элементов.
49