|   Войти

Подпрограммы. Функции.

Очень часто в программировании нужно выполнить одно и то же действие несколько раз в разных частях программы, например, выводить сообщение об ошибке, если пользователь вводит неправильные данные. Для того, чтобы упростить программу, в языках высокого уровня предусмотрено деление программы на подпрограммы. Основным видом подпрограммы в C++ является функция.

Мы уже использовали некоторые функции, например функцию clrscr(). Мы вызываем эту функцию в различных местах программы тогда, когда нам необходимо очистить экран. Эта функция описана в модуле conio.h. Благодаря использованию этой функции, нам не нужно каждый раз заполнять экран пробелами или пустыми строками, когда необходимо очистить его.

Мы можем описать и свою собственную функцию. И это мы тоже делали. В любой программе содержится главная функция – функция main(). Эта функция выполняется первой в любой программе на C++.

Вот некоторые факты о функциях:

·       Как и переменная, функция имеет тип.

·       Функция может возвращать значение, как правило, того же типа, что и тип функции.

·       Если функция не должна возвращать никакого значения, то она имеет тип void.

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

·       Для указания возвращаемого значения используется ключевое слово return.

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

Логические выражения часто используются в операторах if, while и for. Например, a<5 – это логическое выражение, которое имеет свое значение. Значений у логического выражения может быть только два – TRUE (истина) и FALSE (ложь).

К примеру, переменная a имеет значение 3. Рассмотрим различные логические выражения для этой переменной и других чисел и определим их значения:

Логическое выражение Значение логического выражения
a<5 TRUE
a>4 FALSE
a==3 TRUE
a==10 FALSE
a!=3 FALSE
a!=5 TRUE
2+2==5 FALSE
2+2==4 TRUE

В более новых версиях языка C++ есть специальный логический тип, который называется bool (от слова boolean). Однако в данной версии языка такого типа нет. Но он нам и не нужен. Мы можем использовать любой целочисленный тип, например int. Тогда все переменные, которые имеют значение больше 0, будут восприниматься компилятором, как TRUE, а переменные со значением 0 – как FALSE. Вот пример присвоения значения логических выражений из предыдущей таблицы переменной b типа int:

Логическое выражение Значение переменной b
b = a<5 1
b = a>4 0
b = a==3 1
b = a==10 0
b = a!=3 0
b = a!=5 1
b = 2+2==5 0
b = 2+2==4 1

Целочисленные переменные можно использовать вместо логических выражений в операторах if, while, for, например:

if (b) {операторы}; - операторы выполнятся, если переменная b будет иметь значение больше 0.

Рассмотрим пример программы, в которой кроме функции main() описаны еще две функции: функция isCorrect проверяет корректность введенного числа, а функция Fc вычисляет факториал числа.

ПОЯСНЕНИЕ: факториалом числа n называют произведение всех натуральных чисел меньших или равных n. Факториал обозначается в математике символом «!». Например 5! = 1 ·2 ·3 ·4 ·5 = 120, а 6 != 1 ·2 ·3 ·4 ·5 ·6 = 720.

Скачайте эту программу, поместите скачанный файл FUNC.CPP в папку C:\TCPP\BIN\.

Запустите DOSBox (Как настроить эту программу можно посмотреть ЗДЕСЬ).

Нажмите клавишу F3. Выберите файл FUNC.CPP и нажмите клавишу Enter.

На экране появится текст программы:

Рассмотрим эту программу подробнее:

#include<iostream.h>

#include<conio.h>  - подключаем два необходимых для работы программы модуля.

int isCorrect(int num){ - создаем функцию isCorrect типа int. Аргументом (входным параметром) функции является переменная num типа int. Эта переменная доступна только внутри тела функции, заключенного в фигурные скобки {}.

return num>=0; - функция возвращает значение логического выражения num>=0. Другими словами, если переменная num больше либо равна 0, то функция isCorrect возвратит 1 (т.е. TRUE), а если num меньше нуля, то функция isCorrect возвратит 0 (или FALSE).

} – конец функции isCorrect.

double Fc(int n){ - создаем функцию Fc типа double. Мы используем вещественный тип, т.к. значения факториалов, как правило, являются очень большими числами, и ни один целочисленный тип не «справится» с вычисление таких чисел. Аргументом или входным параметром функции является переменная n типа int, доступная только в теле функции.

  double F=1.0; - создаем переменную F типа double и присваиваем ей значение 1.0.

  if (isCorrect(n)){ - проверяем значение переменной n описанной выше функцией isCorrect. Как было указано выше, если значение n больше 0, то мы можем приступать к вычислению факториала. Другими словами, если для переменной n функция isCorrect вернула значение 1 (TRUE), то число корректно и можно вычислять факториал.

   for(int i=2;i<=n;i++) F*=i; - для переменной i проходим значения от 2 до n, и каждый раз увеличиваем значение переменной F в i раз. F*=i по-другому можно записать, как F=F*i. Т.е. на каждой итерации цикла значение переменной F умножается на i (сначала на 2, затем на 3 и т.д.). Если значение переменной n равно 0 или 1, то этот цикл не выполнится ни разу (т.к. условие i<=n  в цикле for не выполнится), и переменная F будет иметь первоначальное значение 1.0. Напомню, что по определению 0! равен 1, а 1! также равен 1.

   return F; - функция Fc вернет значение переменной F. Обратите внимание, типы функции Fc и переменной F совпадают.

       } – конец первой части оператора if.

       else return -1.0; - иначе (если значение числа n некорректно т.е. меньше 0) функция Fc возвратит значение -1.0, что будет означать, что факториал не удалось вычислить.

} – конец тела функции Fc.

void main(){ - создаем функцию main типа void. Напоминаю, что это главная функция, она должна быть в любой программе на C++.

  clrscr(); - очищаем экран.

  cout<<"Введите целое число: "; - предлагаем ввести число.

  int nn; создаем переменную nn типа int.

  cin>>nn; - вводим с клавиатуры число и записываем его в переменную nn.

  if (isCorrect(nn)) – если число корректно (проверили его описанной выше функцией isCorrect), то…

    cout<<nn<<"! = "<<Fc(nn); - …выводим значение переменной nn, затем символы «! = », затем значение функции Fc для переменной nn.

  еlse – иначе… 

    cout<<"Ошибка! Вы ввели отрицательное число!"; - …выводим сообщение об ошибке.

  getch(); - ждем нажатия любой клавиши, чтобы выйти из программы.

} – конец функции main и всей программы.

Чтобы запустить программу, нажимаем комбинацию клавиш Alt+R, выбираем в появившемся меню пункт Run и нажимаем клавишу Enter. Ни в коем случае не нажимайте для запуска программы комбинацию клавиш Ctrl+F9 – это закроет DOSBox!

Программа предлагает ввести число:

Вводим положительное целое число, например 7 и нажимаем Enter. Программа выводит значение факториала для числа 7:

Как видим, сортировка прошла успешно. При нажатии на любую клавишу программа закроется.

Если ввести отрицательное число, то появится сообщение об ошибке:

 

ЗАДАНИЕ: напишите программу, в которой будет описана функция, которая будет возвращать значение математического выражения 2*x*x-3*x+5. Используя эту функцию, выведите на экран значение этого выражения для различных значений x (например, 1, 2, 3, 4, 5). К примеру, если x = 6, то функция должна вычислить 2*6*6-3*6+5 и возвратить 59.