Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Подпрограммы ЯП 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. Пусть в разделе описаний описана функция:
function F(x: integer): real;

А также описаны некоторые переменные:

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; Просмотров: 1575; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.044 с.)
Главная | Случайная страница | Обратная связь