- •СОДЕРЖАНИЕ
- •Раздел 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
- •ЛИТЕРАТУРА
РАЗДЕЛ 8. СТРУКТУРИРОВАНИЕ И ОФОРМЛЕНИЕ ПРОГРАММ
Выше мы уже говорили, что язык Паскаль является структурированным языком, т.е. позволяет писать хорошо структурированные программы.
Структурирование программ достигается за счет следующих факторов:
1)разбиения программы на отдельные разделы (заголовок, раздел описаний, раздел операторов);
2)наличия операторов языка, реализующих конструкции структурного программирования:
—оператор присваивания реализует функциональный блок;
—условный оператор реализует конструкцию принятия двоичного
решения;
—оператор цикла с предусловием (While) реализует конструкцию обобщенного цикла «Пока»;
3)наличия составного оператора Begin ... End и синтаксиса условного оператора и оператора цикла (возможность использования в них группы операторов за счет объединения их в операторные скобки), что позволяет реализовывать преобразования Бома-Джакопини;
4)наличия дополнительных конструкций организации цикла: цикл «До» (реализуется оператором цикла с постусловием Repeat ... Until); цикл с параметром (реализуется оператором For);
5)наличия подпрограмм (реализованных в виде процедур и функций)
Язык Паскаль удобен для реализации метода нисходящего проектирования программ и, в частности, метода пошаговой детализации (декомпозиции).
Существуют методологии пошагового проектирования программы без предварительной разработки схемы алгоритма.
По одной из них на каждом этапе нисходящего проектирования используют управляющие структуры и зарезервированные слова языка Паскаль, а правила обработки данных не детализируют, описывая их в виде комментариев.
На следующем этапе нисходящего проектирования блоки, представленные комментариями, частично детализируют, но сами комментарии не выбрасывают и т.д. В результате, после окончания проектирования, получается хорошо прокомментированная программа.
Комментарии в программе обычно делятся на следующие виды:
a)«заголовки» – объясняют назначения основных блоков программы на отдельных этапах пошаговой детализации;
161
b)«построчные» комментарии – описывают мелкие фрагменты программы;
c)«вводные» комментарии – помещаются в начале текста программы и задают общую информацию о программе (например, назначение программы, сведения об авторе, дата написания, используемый метод
решения, время выполнения, требуемый объем памяти и т.п.). Комментарии являются одним из наиболее эффективных средств
облегчения понимания, тестирования, отладки и сопровождения программ. Отсутствие комментариев является одним из признаков дилетантского подхода к программированию.
Помимо комментариев для достижения наглядности проектируемой программы, для отражения вложенности управляющих структур друг в друга используется правильное расположение текста отдельных операторов.
Общее правило записи текста проектируемой программы: служебные слова, которыми начинается и заканчивается тот или иной оператор, записываются на одной вертикали; все вложенные в него операторы (или комментарии в рассматриваемом методе проектирования) записываются с отступом вправо.
Это правило полностью соответствует принципу построения структурированных схем алгоритмов.
Пример 8.1.
В данном примере используется упрощенный вариант одного из способов применения метода нисходящего проектирования для задачи, рассмотренной при изучении операторов цикла While и Repeat (см. примеры 7.14, 7.16).
Вычислить значение функции
Y = sin X
через разложение функции в бесконечный ряд
Y = sin X = X − X 3 / 3! + X 5 / 5! − X 7 / 7! + ...
с точностью Eps = 0,0001.
Алгоритм решения данной задачи рассмотрен в п. 2.3.3 (см. Пример 2.5).
1-ый этап проектирования.
На данном этапе записываем вводный комментарий и укрупненную структуру программы (в виде комментариев).
162
{Вычисление значения y = sin(x) с заданной точностью с помощью разложения функции в ряд. Разработчик – Иванов А. А. 20.2.02г.} {Заголовок программы}
{Описания} {Вычисления}
2-ой этап нисходящего проектирования.
На данном этапе оставляем предыдущие комментарии и, возможно, вводим некоторые служебные слова языка Паскаль. Вводим новые комментарии.
{Вычисление значения y = sin(x) с заданной точностью с помощью разложения функции в ряд. Разработчик – Иванов А. А. 20.2.02г.} {Заголовок программы}
Program SN1; {Описания} {Вычисления} Begin
{Чтение исходных данных} {Присвоение начальных значений}
While {Очередное слагаемое больше точности} Do {Вычисление слагаемого и суммы ряда}
{Печать результатов} End.
3-ий этап нисходящего проектирования:
Оставляем предыдущие комментарии. Раздел «Описания» пока не изменяем. Детализируем раздел «Вычисления». Вводим служебные слова языка Паскаль, а для простых программ, возможно, и комментарии. Вводим новые комментарии.
{Вычисление значения y = sin(x) с заданной точностью с помощью разложения функции в ряд. Разработчик – Иванов А. А. 20.2.02г.} {Заголовок программы}
Program SN1; {Описания} {Вычисления} Begin
{Чтение исходных данных} Readln (X, Eps);
{Присвоение начальных значений}
163
Y := X; |
{Y – сумма ряда} |
N := 2; |
{N – вспомогательная переменная для вычисления |
знаменателя}
VS := X; {VS – очередное слагаемое}
While Abs(VS) >= Eps |
{Очередное слагаемое > точности} |
Do |
{Вычисление слагаемого и суммы ряда} |
Begin
VS := –VS*X*X/(2*N–1)/(2*N–2); {Вычисление слагаемого} N := N + 1;
Y := Y + VS {Вычисление суммы} End;
{Печать результатов} Writeln (X, Y, Eps)
End.
Комментарии-заголовки лучше писать перед соответствующим блоком программы. Построчные комментарии лучше писать за соответствующим оператором.
4-ый этап нисходящего проектирования.
Оставляем предыдущие комментарии. Детализируем раздел «Описания». Вводим описания элементов программы, используемых в разделе «Вычисления».
{Вычисление значения y = sin(x) с заданной точностью с помощью разложения функции в ряд. Разработчик – Иванов А. А. 20.2.02г.} {Заголовок программы}
Program SN1; {Описания} Var
X, Y, Eps, VS: Real; N: Integer;
{Вычисления} Begin
{Чтение исходных данных} Readln (X, Eps);
{Присвоение начальных значений}
Y := X; |
{Y – сумма ряда} |
N := 2; |
{N – вспомогательная переменная для вычисления |
знаменателя}
VS := X; {VS – очередное слагаемое}
While Abs(VS) >= Eps |
{Очередное слагаемое > точности} |
Do |
{Вычисление слагаемого и суммы ряда} |
164 |
|
Begin
VS := –VS*X*X/(2*N–1)/(2*N–2); {Вычисление слагаемого} N := N + 1;
Y := Y + VS {Вычисление суммы} End;
{Печать результатов} Writeln (X, Y, Eps)
End.
Данный пример иллюстрирует проектирование программы с использованием метода пошаговой детализации без предварительной разработки схемы алгоритма, правила комментирования программы и правила взаимного расположения исходного текста программы.
Синтаксис языка Паскаль позволяет писать по несколько операторов в строке программы. Однако для удобства понимания и отладки программы желательно писать по одному оператору в строке.
165