Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекция 7 ятп.docx
Скачиваний:
6
Добавлен:
22.02.2015
Размер:
99.92 Кб
Скачать

Лекция 7.1

9.Функции.

Функция –именованная последовательность описаний и операторов, выполняющая некоторое законченное действие и позволяющая вызывать её в случае необходимости.

Необходимость таких вспомогательных алгоритмов оправдана:

=многократно вызываемый алгоритм м.б.описан один раз и включаться в работу несколько раз, когда нужно(!это не самое главное);

=на функцию можно посмотреть как на некоторый опыт, который оформлен , например, в библиотеку и им пользуются другие люди;

=если в основном алгоритме записан вызов функции: например, sqrt(x), то на такие фрагменты можно посмотреть как на программирование на более высоком уровне, на уровне использования функций.

Язык, который разрешает пользоваться вспомогательным алгоритмом должен уметь решать такие задачи:

(1)Описание функции,оно должно:

= указать имя функции;

= определить вход, выход функции;

=содержать последовательность инструкций – описание алгоритма её;

(2)Вызов функции, который обеспечивает:

=передачу управления функции;

=передачу ей входных данных;

= получение результатов;

= возврат в основной алгоритм

Простейший вариант описания функции :

Тип_результата имя_функции (список формальных параметров)

{ // тело функции, оно включает описание переменных и //инструкции, описывающие алгоритм

}

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

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

Возврат результата из функции реализуется в языке оператором

return [выражение];

Этих операторов м.б. несколько по ходу алгоритма (определяется потребностью алгоритма). Если у функции тип void, выражение в операторе return не указывается, да и сам return в конце тела функции м.б.опущен.

Например, описание функции, вычисляющей НОД двух чисел: {1}вариант- функция получает на входе два числа и возвращает наибольший общий делитель - результат целого типа.

int nod (int a, int b)

{int r0,r1,r2;

r1=abs(a); r2=abs(b);

while (r2>0)

{r0=r1; r1=r2; r2=r0 % r1;

}

return r1;

}

nod(20,12)=nod(12,8)=nod(8,4)=nod(4,0)=4

20 12 8 4 0

Здесь строится последовательность a,b, и остатков , пока не получится остаток =0, т.е. нужны 3 рабочие переменные.

Вызов функции - выполняет конструкция

имя_функции (список фактических параметров ( или аргументов)) В языке эта конструкция является выражением типа возвращаемого функцией значения. Например, nod (20, 12);

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

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

Конструкция вызова выполняет ещё одну функцию, она запоминает адрес возврата – это адрес оператора, стоящего за вызовом функции, и по окончании выполнения алгоритма функции по этому адресу передаётся управление.

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

блок в теле функции.

Пример использования функции nod (int a, int b):

int main()

{int x,y,z;

cout<<” x,y\n”;

cin>>x>>y;

cout<< nod(x,y)<<endl;

//либо z= nod(x,y);cout<<z<<endl;

//либо if (nod(x,y)==1) cout <<x<<”и”<<y<<”-взаимно просты”<<endl;

Return 0;

}

Как сформировать программу?

#include<iostream>

using namespace std;