Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Подпрограммы типа FUNCTION, их описание




 

Подпрограммы - функции (Function) имеют следующие отличительные особенности (по сравнению с процедурами):

1. Функция имеет только один результат выполнения. Этот результат обозначается именем функции и передается в вызвавщую эту функцию программную единицу.

2. Для функции обязательно указывается ее тип. Тип может быть простым (скалярным) или строковым.

Описание функции в Паскале имеет вид:

 

Function Имя функции (формальные параметры):Тип результата;

 

Раздел описаний

Begin

 
 
Раздел операторов


 

End;

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

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

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

Рассмотрим пример создания программ с использованием функций. Пусть необходимо произвести следующие вычисления:

,

где a, b, n, m - целые переменные;

{xi}, {yj} - массивы, содержащие n и m вещественных чисел, соответственно.

В Паскале нет стандартных функций сумммирования элементов массива и возведения чисел в степень больше 2. Разработаем свои функции для решения этих задач и будем использовать их для решения поставленной задачи.

 

Текст программы

Uses crt;

Type

Tmas=array[1..100] of real;

Var a,b,n,m,i,j:byte;

X,Y:Tmas;

S:Real;

Function Summa(Dlmas:byte; Mas:Tmas):Real;

Var Sum:real; i:byte;

Begin

Sum:=0.0;

For i:=1 to Dlmas do

Sum:=Sum+Mas[i];

Summa:=Sum;

End;

Function step(Pok:byte;Osn:byte):real;

Var i:byte; St:real;

Begin

St:=Osn;

For i:=2 to Pok do

St:=St*Osn;

step:=St;

End;

{ Главная программа}

BEGIN

Write(' Введите длину первого массива - N ');

Readln(N);

Write(' Введите длину второго массива - M ');

Readln(M);

Writeln(' Введите элементы массива X');

For i:=1 to N do Read(X[i]); readln;

Writeln(' Введите элементы массива Y');

For j:=1 to M do Read(Y[j]); readln;

Write(' Введите a и b '); Readln(a,b);

S:=(Summa(N,X)+Summs(M,Y))/(step(N,a)+step(M,b));

Writeln(' Полученный результат S = ',S);readkey;

END.

 

Рекурсии

 

Рекурсия - это такой способ организации вычислительного процесса, при котором подпрограмма обращается сама к себе. Такая рекурсия называется прямой. Рекурсии позволяют писать более короткие программы, но при выполнении они работают медленнее и могут вызвать переполнение стека, так как при каждом входе в подпрограмму ее локальные переменные размещаются в программном стеке, размер которого ограничен.

Типичным примером прямой рекурсии является вычисление n!.

Текст программы с использованием прямой рекурсии для вычисления n!.

Var n:integer;

{Рекурсивная функция}

Function Fact(n:integer):real;

Begin

If n=0 then Fact:=1

Else Fact:=n*Fact(n-1);

End;

{ Главная программа}

Begin

Repeat

Writeln(' Введите положительное n<=33');

Readln(n);

Writeln(Fact(n));

Until Eof;

End.

Примечание: для выхода из этой программы можно задать значение n>33 или нажать Ctrl/z и Enter. При n>33 возникает переполнение при умножение чисел с плавающей запятой.

Рекурсивный вызов может быть также косвенным. В этом случае подпрограмма обращается к себе опосредованно, путем вызова другой подпрограммы, в которой, в свою очередь, содержится обращение к первой. Такой вызов иногда называют закольцованным.

Для реализации такой возможности в ТР используется опережающее описание процедур и функций и директива Forward.

Для этого в самом начале программы вставляют только заголовки процедуры или функции в виде:





Поделиться с друзьями:


Дата добавления: 2016-11-18; Мы поможем в написании ваших работ!; просмотров: 381 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Сложнее всего начать действовать, все остальное зависит только от упорства. © Амелия Эрхарт
==> читать все изречения...

2221 - | 2091 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.01 с.