- •СОДЕРЖАНИЕ
- •Раздел 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
- •ЛИТЕРАТУРА
2)подпрограммы с несколькими входами и несколькими выходами
(например, один выход нормальный, второй – по ошибке);
3)применение оператора GoTo с жёсткими ограничениями (например,
передача управления не далее, чем на десять операторов, или только вперёд по программе);
4)использование оператора Case как расширения конструкции If-Then- Else; в структурном проектировании программ конструкция Case представляется так, как показывает рисунок 3.6.
Рисунок 3.6 – Графическое представление оператора Case |
3.3.Преобразование неструктурированных программ в структурированные
В общем случае произвольная программа не может быть преобразована в структурированную программу, которая реализует тот же алгоритм, построена с применением тех же конструкций и не использует дополнительных
51
переменных. Такое преобразование возможно при использовании трех |
||||||
известных методов: |
|
|
|
|
|
|
• |
дублирование кодов программы; |
|
|
|
||
• |
введение переменной состояния; |
|
|
|
||
• |
метод булевых признаков. |
|
|
|
|
|
3.3.1. Метод дублирования кодов |
|
|
||||
|
программы |
|
|
|
|
|
Рассмотрим |
применение |
данного |
метода |
на |
примере |
|
неструктурированной программы типа «решетка». |
|
|
|
|||
Алгоритм такой программы схематично представляет рисунок 3.7. |
||||||
|
|
|
1 |
|
|
|
|
|
2 |
|
3 |
|
|
|
4 |
|
5 |
|
6 |
|
|
|
7 |
|
8 |
|
|
|
|
|
9 |
|
|
|
|
Рисунок 3.7 – Алгоритм неструктурированной программы |
|
||||
|
|
типа «решетка» |
|
|
|
52
Стрелки, соединяющие блоки на данной схеме алгоритма, представляют собой операторы перехода.
Программа, реализующая данный алгоритм, не является структурированной, так как не удовлетворяет условию «один вход – один выход».
Сущность метода дублирования кодов: дублируются те модули исходного алгоритма или программы, в которые можно войти из нескольких мест (кроме последнего блока).
В соответствии с этим в исходной схеме необходимо дублировать модули 5 (в него можно войти из модулей 2 и 3), 7 (в него можно войти из модулей 4 и 5) и 8 (в него можно войти из модулей 5 и 6). Это приводит исходную схему к виду, который иллюстрирует рисунок 3.8.
Полученная схема алгоритма является структурированной.
Чтобы доказать это, необходимо воспользоваться преобразованиями Бома-Джакопини, т.е. последовательно преобразовать схему к одному функциональному блоку с одним входом и одним выходом. Для этого необходимо выполнить несколько шагов.
Шаг 1 преобразования.
На вышеприведенной схеме модули 4 и 7 представляют собой конструкцию следования. В соответствии с преобразованиями БомаДжакопини они могут быть сведены к одному функциональному блоку Х1. Модули 5, 7, 8 представляют собой конструкцию If-Then-Else с одним входом и одним выходом. Они также могут быть преобразованы к одному функциональному блоку (Х2 и Y1). Аналогичные рассуждения справедливы для конструкции следования, состоящей из модулей 6, 8 – она сводится к функциональному блоку Y2. В результате предыдущая схема принимает вид, который представляет рисунок 3.9.
Шаг 2 преобразования.
В полученной в результате выполнения шага 1 схеме группа модулей 2, X1, X2 и группа модулей 3, Y1, Y2 представляют собой конструкции If-Then- Else c одним входом и одним выходом. В соответствии с преобразованиями Бома-Джакопини их можно представить в виде функциональных блоков (блоков Х и Y соответственно). В результате схема принимает вид, который иллюстрирует рисунок 3.10.
53
|
|
|
1 |
|
|
|
2 |
|
|
3 |
|
Х1 |
Х2 |
|
Y1 |
|
Y2 |
4 |
5 |
|
5 |
|
6 |
7 |
7 |
8 |
7 |
8 |
8 |
|
|
|
9 |
|
|
|
Рисунок 3.8 – Преобразованная по методу дублирования кодов |
||||
|
|
схема алгоритма |
|
|
54
|
|
1 |
|
Х |
2 |
3 |
Y |
|
|
||
X1 |
X2 |
Y1 |
Y2 |
|
|
9 |
|
Рисунок 3.9 – Схема алгоритма после первого шага |
|||
|
преобразования Бома-Джакопини |
|
55
Z |
|
|
1 |
X |
Y |
|
9 |
Рисунок 3.10 – Схема алгоритма после второго шага |
|
преобразования Бома-Джакопини |
Шаг 3 преобразования.
В полученной в результате выполнения шага 2 схеме группа модулей 1, X, Y представляет собой конструкцию If-Then-Else c одним входом и одним выходом. В соответствии с преобразованиями Бома-Джакопини ее можно представить в виде функционального блока Z. В результате схема принимает вид конструкции следования (рисунок 3.11).
Шаг 4 преобразования.
В соответствии с преобразованиями Бома-Джакопини конструкцию следования можно представить в виде функционального блока R (см. рисунок
3.11).
56