Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛекцииЯзыки прогрИб.doc
Скачиваний:
27
Добавлен:
12.11.2019
Размер:
922.11 Кб
Скачать

Тема 9. Функции (процедуры)

9.1. Определение, прототип и вызов функции

Функция – это поименованный блок программы, состоящий из последовательности операторов. Функция состоит из заголовка и тела (текста) функции. Составными частями тела функции являются объявления локальных переменных, определения типов, операторы. Перед вызовом функции в соответствующем файле кодов должно быть либо объявление функции (прототип функции), либо определение функции (текст функции). Компилятор осуществляет контроль типов данных оператора вызова функции и параметров функции.

Прототип функции – это заголовок функции без тела функции. Прототип функции обычно помещают в заголовочный файл, который подключают к соответствующему файлу кодов с помощью директивы компилятора #include.

Примеры прототипов:

int poisk_ind(char tabn[10], int nomer); //принимает 2 значения

//типа массив и int, возвращает значение типа int

int poisk_ind(char*, int); //можно без имен переменных

void init(); //не принимает и не возвращает значений

float sr_oc(int n); //принимает значение типа int,возвр. тип float

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

Определение функции – это заголовок и тело функции. Пример из программы п.2.1:

//файл кодов lab1_f2.cpp, см. программу

#include "lab1_f.hpp" //подключение файла заголовков

float sr_oc(int n) //заголовок функции; float - тип y

{

...

return(y); //возврат значения (y) в функцию main

}

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

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

Операторы бывают простыми и составными. К простым операторам относятся оператор присваивания, оператор вызова функции, оператор return, прерывающий выполнение функции и возвращающий значение выражения. Составной оператор – это оператор, состоящий из последовательности простых операторов. Согласно синтаксису можно различить следующие составные операторы: условные операторы и операторы циклов. В теле составных операторов используется простой оператор break, прерывающий их выполнение. В теле операторов цикла используется оператор continue, передающий управление на конец цикла.

9.2. Передача параметров

Оператор вызова функции служит для вызова вызываемой функции в теле вызывающей функции. Он может быть представлен двумя способами:

  • как простой оператор без возврата значений через return;

  • как операнд в выражении при возврате значений через return.

Пример :

//файл кодов lab1_f1.cpp

#include "lab1_f.hpp" //подключение файла заголовков

main()

{//...

sr=sr_oc(kol); //оператор вызова функции sr_oc

cout<<"Ваша средняя оценка:"<<sr;

getch();

}

В операторе вызова функции, в круглых скобках, имеется список фактических параметров вызывающей функции: выражения или имена переменных без типов данных. Значения фактических входных параметров перед вызовом функции должны быть определены. Оператор вызова функции передает управление вызываемой функции, и копии фактических параметров через стек присваиваются формальным параметрам вызываемой функции. Аналогично копии результатов вызываемой функции пересылаются и присваиваются фактическим параметрам вызывающей функции. Управление передается обратно в вызывающую функцию.