Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Подпрограммы ЯП Pascal (процедуры и функции)
При составлении программ для решения задач часто приходится в различных местах программы выполнять одну и ту же последовательность операторов, причем обычно с разными значениями переменных. В общем случае иногда говорят о четвертом типе алгоритма — вспомогательном. Однако, мне такое выделение еще одного типа алгоритма кажется неверным, т.к. вспомогательный алгоритм
не обладает какой-либо особенной структурой, а может представлять собой либо «чистый» алгоритм любой из уже знакомых вам структур — линейный, разветвляющийся или циклический, — либо смесь из этих типов. Отличие же состоит в том, что какая-то часть общего большого алгоритма встречается достаточно часто, и имеет смысл выделить эту часть в отдельный блок, дав ему собственное имя, а затем вызывая его по этому имени в тех местах общего алгоритма, где это необходимо. В этом случае указанную последовательность операторов следует оформить в виде подпрограммы. Под подпрограммой принято понимать выделенный в самостоятельную единицу участок программы (внутри этого же исходного файла), имеющий собственное имя, которое позволяет вызывать подпрограмму из основной программы. Подпрограммы аналогичны программам в миниатюре. Применение подпрограмм дает возможность уменьшить число повторений одной и той же последовательности операторов, а также конструировать программу как набор отдельных подпрограмм. В языке программирования Pascal определены два вида подпрограмм — процедуры и функции. В программе описание процедур и функций должно располагаться между разделами описания переменных и основной программой. Каждая процедура или функция определяется только один раз, но может использоваться (вызываться) многократно. Структура процедур и функций аналогична структуре полной программы на языке Паскаль. 1. Заголовок подпрограммы (задает имя подпрограммы и список формальных параметров с указанием их типов). 2. Раздел описаний. 3. Тело подпрограммы. В процедурах и функциях могут быть описаны собственные метки, константы, типы, собственные переменные и даже собственные процедуры и функции. Внутреннее описание должно следовать в том же порядке, что и разделы основной программы. Рассмотрим оба вида подпрограмм. + Процедурой в Турбо Паскале называется особым образом оформленный фрагмент программы, имеющий собственное имя. + Упоминание этого имени в тексте программы приводит к активизации процедуры с таким же именем и называется вызовом процедуры. Для обмена информацией между процедурой и основ Procedure < имя> (< список формальных параметров> ); < описательная часть> Begin < тело процедуры> End; Результат выполнения процедуры — одно или несколько значений. Он передается в основную Программу как значение ее параметров. ! При вызове процедуры ее формальные параметры заменяются фактическими в порядке их следования. + Фактические параметры — это параметры, которые передаются процедуре при обращении к ней. + Формальные параметры — это переменные, фиктивно присутствующие в процедуре и определяющие тип и место подстановки фактических параметров, над которыми производятся действия.! Число и тип формальных и фактических параметров должны совпадать с точностью до их следования. Формальные параметры процедуры делятся на параметры-переменные и параметры-значения. + Параметры-переменные — это те формальные параметры, перед которыми в описании формальных параметров ставится слово Var. И если в процессе работы процедуры их значение изменяется, то и изменяется значение этих переменных в основной программе. Если формальный параметр описан как параметр-переменная, то при вызове процедуры ему должен соответствовать фактический параметр в виде переменной нужного типа.
+ Параметры-значения — перед ними в описании формальных параметров не ставится служебное слово Var. И в процедуре работают только значения этих параметров. В основной программе после выхода из процедуры их значения не изменяются, т.е. остаются теми же, которые были до начала работы процедуры. Если формальный параметр описан как параметр-значение, то при вызове процедуры ему может соответствовать произвольное выражение того же типа. В программе различают глобальные и локальные переменные. + Глобальные переменные — это те переменные, которые объявлены в описании основной части. Глобальные переменные доступны как в основной программе, так и во всех ее подпрограммах. + Локальные переменные — это те переменные, которые объявлены в процедурах и функциях. Они существуют только тогда, когда работает подпрограмма. Локальные переменные доступны (определены и сохраняют свои значения) только внутри той подпрограммы, в которой они описаны. Пример. Написать программу, которая упорядочивает значение трех чисел следующим образом: а£ Ыс. Решение. 1. Составим процедуру maxmin(x, y), которая в переменную х помещает большее из значений х и у, а в переменную у меньшее. 2. В основной программе вызовем эту процедуру сначала от переменных с и Ъ, затем от переменных а и Ъ. Program vip; var a, b, c: real; procedure maxmin(var x, y: real); var z: real; Begin if y> x then begin z: =y; y: =x; x: =z end; End; Begin Writeln(' Введите три произвольных вещественных числа'); Readln(a, b, c); maxmin(b, c); maxmin(a, b); write('a=, , a: 8: 2> , b=, , b: 8: 2, 'c=, > c: 8: 2); readln End. Попробуйте самостоятельно ответить на вопросы. • Какие из параметров процедуры minmax являются локальными? • Назовите, какие параметры являются формальными и фактическими? • Почему параметры х и у объявлены параметрами-переменными? • Допустимы ли следующие обращения: maxmin(5.2, sin(z)) maxmin(z, k), где к — integer, z — real? • Что необходимо изменить в программе для того, чтобы + Функцией в Турбо Паскале называется особым образом оформленный фрагмент программы, имеющий собственное имя. Результат работы функции возвращается в виде значения этой функции. Структура функции: Function < имя> [(< список формальных параметров> )]: < тип результата^ < описательная часть> begin < тело функции> end; Функцию можно использовать в качестве фактического параметра при обращении к другой функции или процедуре. ! В теле любой функции нужно осуществить присваивание ей вычисленного значения. В левой части оператора присваивания в этом случае указывается имя функции.
Пример. Составить программу расчета значения выражения: у = 2х6+ Зх4+ 5х2+ 1, написав функцию возведения вещественного числа х в степень п (n: integer) Решение: Program Ex1; Var x, y: real; function step(x: real; n: integer): real; var i, k: integer; Begin {начало функции} k: =0; у: =1; if n=0 then step: =1 else begin if n< 0 then begin n: =abs(n); k: =1 end; for i: =1 to n do y: =y*x; if k=1 then step: =1/y else step: =y; л end; end; {KOHei4 функции} Begin \л/гКе('Введите х'); Readln(x); {BBOfl x} y: =2*step(x, 6)+3*step(x, -4)+5*sqr(x)+1; write('y='.y: 8: 2); read In end. Так же как и в случае с процедурами, различают формальные и фактические параметры функции. Число и тип формальных и фактических параметров должны совпадать с точностью до их следования. Тип формального параметра может быть только стандартным или ранее объявленным в разделе описания типов. Схема 3 Контрольные вопросы 1. Под подпрограммой принято понимать... а) выделенный в самостоятельную единицу участок про б) выделенный участок программы, имеющий собствен в) выделенный в самостоятельную единицу участок про Укажите правильный вариант ответа 2. В ЯП Паскаль используется два вида подпрограмм: Верно ли данное высказывание? 3. В заголовке подпрограммы при ее описании указы а) практические; б) фактические; в) физические; г) логические; д) формальные. Укажите правильный вариант ответа. 4. Даны заголовки подпрограмм: а) procedure ff; б) procedure fg(a, b, c: real): real; в) function f(x: real): boolean; г) procedure gg(a, b: real); д) function g(b: integer); Укажите варианты неверных (ошибочных) заголовков подпрограмм, если таковые имеются. 5. При обращении к подпрограмме количество формаль Верно ли данное высказывание? 6. При обращении к подпрограмме порядок следова Верно ли данное высказывание? 7. При обращении к подпрограмме имена формальных Верно ли данное высказывание? 8. При обращении к подпрограмме типы формальных Верно ли данное высказывание? 9. Пусть в разделе описаний описана функция: А также описаны некоторые переменные: var y, v, n: real; s, z: integer; Ниже приведены примеры вызова этой функции в основной программе: а) c: =F(z); б) z: =F(s); в) v: =F(z); г) z: =F(y); Укажите вариант верного примера, если таковой имеется. 10. Переменные, описанные в основной программе, яв а) локальными; б) формальными; в) глобальными. 11. Переменные, описанные внутри процедур и функ а) локальными; б) формальными; в) глобальными. Ответы_____________________________ _^ 1. Правильный ответ — в. 2. Правильный ответ — ДА. 3. Правильный ответ — б. 4. Правильный ответ — б, д. 5. Правильный ответ — ДА 6. Правильный ответ — ДА 7. Правильный ответ — НЕТ 8. Правильный ответ — ДА 9. Правильный ответ — в.
10. Правильный ответ — в. 11. Правильный ответ — а. Задания и упражнения Выдать таблицу квадратов чисел X из заданного диапазона [А? В] с некоторым шагом h. Входные данные: X — переменная, принимающая значения из диапазона [А? В]. А — начало диапазона [А? В]. В — конец диапазона [А? В]. h — шаг, с которым происходит изменение значения переменной X. Выходные данные: Таблица квадратов чисел X. 1 Процедуру line можно усовершенствовать, сделав ее более гибкой, чтобы можно было выводить произвольное число некоторого (любого) символа. Для этого нужно в описание процедуры внести список параметров. Procedure line (hinteger; c: char); Var i: integer; Begin for i: =1 to I do write (c); writeln; End; • Кроме того, в программу можно также внести и функцию расчета квадратов (в виде подпрограммы), описание которой будет иметь вид: function Y(x: real): real; begin Y: =x*x; end. Популярное: |
Последнее изменение этой страницы: 2016-06-04; Просмотров: 1631; Нарушение авторского права страницы