Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Блок схема программы, содержащей подпрограмму

Поиск

Проследим соотношение между формальными и фактическими параметрами. Правило соответствия между формальными и фактическими параметрами хорошо демонстрируется на схеме (рис. 6.1) для вычисления S1.

процедура основная программа

Формальные параметры фактические параметры

 
 

 

 


Рис. 6.1

Программа, содержащая процедуру, имеет вид.

Program DemoProc;

Var AB,BC,CD,DA,DB,S,S1,S2:real;{глобальные парам.}

Procedure Surface(a,b,c:real;Var s:real); {локальные параметры}

Var p:real;

Begin

p:=(a+b+c)/2;

s:=sqrt(p*(p-a)*(p-b)*(p-c));

End;

{Основная программа}

Begin

Writeln('Введи длины сторон и диагональ четырехугольника-');

Readln(AB,BC,CD,DA,DB);

Surface(BC,CD,DB,S2); {вызов процедуры}

Surface(AB,DB,DA,S1); {вызов процедуры}

S:=S1+S2;

Writeln('S=',S:6:2);

End.

Функция пользователя

Другой вид подпрограммы пользователя – это функция (Function ). Функция оформляется аналогично процедуре, за исключением заголовка.

Формат заголовка подпрограммы Function:

Function<имя>(<список описаний формальных параметров>):<тип>;

Отличительные особенностиподпрограммы Function:

– имея несколько входных параметров, функция имеет один выходной параметр;

– этот параметр обозначается именем функции и передается в основную программу в качестве операнда в выражении.

Вызывается функция по ее имени с указанием фактических параметров (как стандартная функция).

Пример 6.3. Используя подпрограмму Function, вычислить значение функции y=y(x) для любого вводимого значения х.

Program D_Funct;

Var x,y,z: real {глобальные параметры}

Function F(t: real): real;

Var w: real; {локальный параметр}

Begin

If Abs(t)<=1 then w:=Sqrt(1-Sqr(t))

else w:=Sqr(Cos(t));

F:=w;

End;

{основная программа}

Begin

Write('введи x='); Readln(x);

y:=F(x); Writeln(x:6:2,y:8:3);

z:=x+1.5;

y:=F(z); Writeln(z:6:2,y:8:3);

End.

Обратите внимание на следующие два пункта.

В разделе операторов подпрограммы должен находиться оператор, присваивающий имени функции какое-либо значение (F:=w;).

В основной программе вызов подпрограммы Function происходит дважды. Первый раз для значения параметра х, вводимого с пульта, второй - для параметра z:=x+1.5.

Проверьте себя, что будет напечатано на экране, если добавить строку y :=F(-1); Writeln(y).

 

Рекурсивные программы

В математике рекурсивным называется определение любого понятия через самого себя. Классическим примером является определение факториала целого числа, большего или равного нулю.

Здесь функция факториал определена через факториал, т.е.:

Пример 6.4. Определить факториала целого числа n. Для вычисления приведенной выше рекурсивной формулы используем подпрограмму-функцию Fakt.

 

Program D_Recurc;

Var n,f: nteger;

Function Fakt(m:integer):integer;

Var w:real;

Begin

If m=1 then Fakt:=1 {проверка условия завершения рекурсии}

else Fakt:=m*Fakt(m-1); {рекурсивное вычисление n!}

End;

{основная прграмма}

Begin

Write('введи n='); Readln(n);

f:=Fakt(n); Writeln('n!=',f:3);

End.

Пусть в основной программе вычисляется 3!, для этого используется оператор f:=Fakt(3).

При вычислении функции с параметром 3 произойдет повторное обращение к функции Fakt(2). Это обращение потребует вычисления Fakt(1). При вычислении Fakt(0) получим числовой результат – 1. Затем цепочка вычислений раскрутится в обратном порядке:

Fakt(1)=1* Fakt(0)=1

Fakt(2)=2* Fakt(1)=2

Fakt(3)=3* Fakt(2)=6

С точки зрения программистской эстетики использование рекурсивных функций – красивый прием, однако не всегда рациональный с точки зрения затрачиваемого времени.

Рассмотренную задачу вычисления n! можно решить и так:

F:=1;

For I:=1 to n do

F:=F *I;

Такой вариант программы будет работать быстрее, чем рекурсивный.

Контрольные вопросы и задания

1. Что понимается под структурным программированием? Зачем оно применяется?

2. Что называется подпрограммой?

3. Стандартные подпрограммы, примеры их использования.

4. Подпрограммы пользователя. Формальные и фактические параметры, их взаимосвязь.

5. Что такое локальные и глобальные параметры.

6. Подпрограммы Function, Procedure, в чем отличие и сходство между ними.

7. Что такое входные и выходные параметры?

8. Что такое рекурсия?

9. Составьте подпрограмму для вычисления площади круга радиусом R. Используя эту подпрограмму, запишите программу для вычисления площади кольца, ограниченного окружностями с радиусами R 1 и R 2.

10. Вычислить сумму 1!+2!+3!+…+n!, используя подпрограмму Function для вычисления факториала числа k!.

 


Лекция 7.



Поделиться:


Последнее изменение этой страницы: 2016-09-20; просмотров: 900; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.222.184.207 (0.009 с.)