Основы программирования (947332), страница 26
Текст из файла (страница 26)
Схемы алгоритма данной программы с использованием подпрограмм обоих типов приведены на рис. 5.5.Ниже приведены тексты соответствующих программ.Вариант с и с п о л ь з о в а н и е м ф у н к ц и и :Program ex;Var A,B,C,D,E:real;{глобальные переменные}{описание функции}Function Stf(const X, Y,Z:real):real;Varp:real;{локальная переменная}begin{раздел операторов функции}p:=(X^Y+Z)/2;Stf:=sqrt(p^(p^X)^(p-Yr(p^Z)):end;148J. Модульное программирование{раздел операторов основной программы}BeginWriteLn СВведите длины сторон и диагонали');ReadLn(A,B,C,D,E);]¥гИе1п('Пло1цадь четырехугольника', Stf(AjB,E)+Stf(CyD,E):7:3);End.Вариант с и с п о л ь з о в а н и е мпроцедуры:Program ex;Var A,B,C,D,E:real; SJ,S2:real; {глобальные переменные}{описание процедуры}Procedure Stp(const X, Y,Z:real;var S:real);Varp.real;{локальная переменная}begin{раздел операторов процедуры }p:=(X+Y+Z)/2;S: =sqrt(p *(p'X) Y;?- Y) *(p-Z));end;{раздел операторов основной программы}BeginWriteLnCВведите длины сторон и диагонали);ReadLn{A,B,C,D,E);Stp(A,B,E,Sl); {вызов процедуры}Stp(CyD,E,S2); {вызов процедуры}ЖгИеЬпСПлогцадь четырехугольника \S1+S2;7:3);EndИспользование параметров структурных типов, таких, как массивы,строки (кроме типа string), множества, записи, файлы, имеет одну общуюособенность: тип таких параметров должен быть предварительно объявлен винструкции описания типа type.Например:Туре mas^arrayfl.JOJ о/real;str80=stringf80J;procedure А (M:mas; fout:str80);...Пример 5.2.
Разработать подпрограмму суммирования элементов массива размерности п, п < 10.Поскольку результат - скалярное значение, то будем использовать подпрограмму-функцию. Описание типа «массив из 10 целых чисел» должнобыть выполнено отдельно в разделе описаний. Новый тип mas затем исполь149Часть I. Основы алгоритмизации и процедурное программированиезуется при объявлении массива а и при объявлении типа массива, передаваемого через параметр-значение. Полный текст программы представлен ниже.Program ex;Type mas-arrayll.AO] of integer; {тип «массив из 10 целых чисел»}Var aimas;i,n: integer;Function sum(b:mas; n:integer).'integer;Var s: integer;i: integer;Begin s:=0;for i:=I to n do s:=s+b[ij;sum:=s;End;BeginReadLn(n);for i:=l to n do Read(a[i]);ReadLn;WriteLn(VyMMa= \sum(a,n));End5.2. Практикум.
Выделение подпрограмм методомпошаговой детализацииМетод пошаговой детализации позволяет не только разрабатывать алгоритмы, но и выделять подпрограммы, соблюдая все требования, предъявляемые структурным программированием.Пример 5.3. Разработать программу исследования элементарных функций, которая для функций у = sin х, у = cos х, у = tg х, у = In х, у = е^ выполняет следующие действия:• строит таблицу значений функции на заданном отрезке с заданнымшагом;• определяет корни функции на заданном отрезке;• определяет максимум и минимум функции на заданном отрезке.Программы такого рода обычно взаимодействуют с пользователем черезменю. В данной программе будет использовано два меню: меню функций, вкотором пользователь будет выбирать функцию, и меню операций, в которомпользователь будет выбирать вид обработки.Меню функций (рис.
5.6, а) должно выводиться на экран при запускепрограммы. После ввода номера функции на экране должно появиться менюопераций (рис. 5.6, б). Введя номер операции, пользователь должен увидетьна экране запрос на ввод данных, необходимых для выполнения этой операции (рис. 5.6, в'д).
Задав данные, пользователь должен получить на экране1505. Модульное программированиеПрофамма исследования функций:1 - sin X2 - cos X3-Inx4-е'^х5 - выходВведите номер функции: _Список операций:1 - получение таблицы значений;2 - определение корней;3 - определение экстремумов;4 - выход.Определите операцию: _аВведите интервал: _Введите погрешность: _1 Введите интервал: _Введите шаг: _Таблица значений функции.1 х=...Корень х=...значение функции в корне у=у=...х=...у=...х=...у=...Нажмите любую клавишу.к.Нажмите любую клавишу.JВведите интервал: _Введите погрешность: _Минимум у=... при х=...Максимум у=...
при х=...Нажмите любую клавишу.Рис. 5.6. Состояния интерфейса профаммы исследования функций:а - меню функций; б - меню операций; в-д - оформление операцийрезультаты. После анализа результатов пользователь должен нажать любуюклавишу, чтобы вернуться в меню операций.Далее пользователь может выбрать другую операцию, а может вернуться в меню функций, если выберет операцию 4 (выход). Вернувшись в менюфункций, пользователь может выбрать другую функцию или выйти из программы.На рис. 5.7 представлена диаграмма переходов состояний интерфейсапользователя, из которого видно, в какой последовательности и по нажатиюкаких клавиш осуществляется переключение форм (экранов) интерфейса.151Часть 1.
Основы алгоритмизации и процедурное программированиех- нажатиелюбойклавишиРис. 5.7. Диаграмма переходов состояний интерфейсапрограммы исследования функцииПри разработке алгоритма методом пошаговой детализации будем использовать псевдокод. Начинаем разработку алгоритма «сверху», т.е. с реализации меню функций.Меню функций работает следующим образом. При запуске программывыводим меню на экран. Затем вводим номер функции и, если номер функции не равен 5, передаем управление меню операций, сообщая ему номервыбранной функции. Когда меню операций завершит свою работу, то на экран вновь необходимо вывести меню функций и опять ввести номер функции:Программа исследования элементарных функций:ВЫВЕСТИ_МЕНЮ_ФУНКЦИЙ.Ввести Номер_функции.Цикл-пока Номер_функции о 5Вызвать МЕНЮ_,ОПЕРАЦИЙ (Номер_функции)ВЫВЕСТИ_МЕНЮ__ФУНКЦИЙ.Ввести Номер_функции.Все-цикл.Конец.На этом шаге определились две подпрограммы: ВЫВЕСТИ_МЕНЮ_ФУНКЦИЙ и МЕНЮ__ОПЕРАЦИЙ (Номер__функции).
ПодпрограммаВЫВЕСТИ_МЕНЮ_ФУНКЦИЙ будет иметь линейную структуру:152J. Модульное программированиеПодпрограмма ВЫВЕСТИ^МЕНЮ^ФУНКЦИИ:ОЧИСТИТЬ_^ЭКРАН.Вывести «Программа исследования функций.»Вывести «1 - sin х;».Вывести «2 - cos х;».Вывести «3 - In х;».Вывести «4 - е'^х;».Вывести «5 - Выход.».Конец подпрограммы.Подпрограмма МЕНЮ_ОПЕРАЦИЙ (Номер_функции) также должнареализовать меню:Подпрограмма МЕНЮ_ОПЕРАЦИЙ (Номерфункции):ВЫВЕСТИ^МЕНЮ_ОПЕРАЦИЙ.Ввести Номер_операции.Цикл-пока Номер_ операции о 4Выбор Номер__ операции:1: Вызвать ТАБЛИЦА (Номер_функции);2: Вызвать КОРЕНЬ (Номер_функции);3: Вызвать МАКСМИН (Номер_функции);Все-выбор.ВЫВЕСТИ_МЕНЮ_ОПЕРАЦИЙ.
.Ввести Номер_ операции.Все-цикл.Конец подпрограммы.Подпрограмма ВЫВЕСТИ_МЕНЮ__ОПЕРАЦИЙ похожа на ВЫВЕСТИ__МЕНЮ_ФУНКЦИЙ:Подпрограмма ВЫВЕСТИ^МЕНЮ__ОПЕРАЦИЙ:ОЧИСТИТЬ_ЭКРАН.Вывести «Список операций:».Вывести «1 - получение таблицы значений;».Вывести «2 - определение корней;».Вывести «3 - определение экстремумов;».. Вывести «4 - выход.».Вывести «Определите операцию: ».Конец подпрограммы.Подпрограмма ТАБЛИЦА(Номер_функции) должна вводить дополнительные данные о границах интервала и значении шага:153Часть I. Основы алгоритмизации и процедурное программированиеПодпрограмма ТАБЛИЦА(Номер__функции):ОЧИСТИТЬ__ЭКРАН.Вывести «Введите границы интервала»Ввести А, В.Вывести «Введите шаг».Ввести h.х=АЦикл-пока X < ВЕсли ФУНКЦИЯ(Номер_функции, х, у)то Вывести «х=», х, « у=», уиначе «х=», х, «значение функции не определено»Все-еслиx=x+hВсе-цикл.ОЖИДАТЬ_НАЖАНИЯ__КЛАВИШИ.Конец подпрограммы.Подпрограммы КОРЕНЬ(Номер_функции) и МАКСМИН(Номер_функции) определяются аналогично.
Естественно, они также обращаются к подпрограмме ФУНКЦИЯ для получения конкретного значения функции в точке.Подпрограмма ФУНКЦИЯ будет возвращать логическое значение: true если значение функции определено, и false - в противном случае. Значениеисследуемой функции в точке х подпрограмма будет возвращать через параметр-переменную у:Подпрограмма ФУНКЦИЯ(Номер_функции, х, у):ФУНКЦИЯ=1гиеВыбор Номерфункции:1: y=sin(x);2: y=cos(x);3: Если х>0то у=1п(х)иначе ФУНКЦИЯ=Га18еВсе-если4: у=ехр(х)Все-выборКонец подпрограммы.Таким образом, выполняя пошаговую детализацию программы, мы осуществили ее декомпозицию на основную программу и семь подпрограмм(подпрограммы ОЧИСТИТЬ__ЭКРАН и ОЖИДАТЬ^НАЖАНИЯ^КЛАВИШИ являются стандартными процедурами библиотеки управления экраномв т(^кстовом режиме и их можно не учитывать).1545.
Модульное программированиеОсновнаяпрограммаВывести менюфункцийМенюоперацийВывести менюоперацийТаблицаКореньМаксминФункцияРис. 5.8. Иерархия вызовов подпрограмм программы исследованияфункцийРезультат процедурной декомпозиции обычно представляют в виде схемы, которая показывает иерархию вызовов подпрограмм (рис. 5.8).В соответствии с рекомендациями структурного программирования реализация и отладка программы также должны выполняться поэтапно. Сначала реализуют основную программу, используя вместо подпрограмм следующего уровня «заглушки» (подпрограммы, у которых отсутствуют операторымежду begin и end).