Подпрограммы. Функции.
Очень часто в программировании нужно выполнить одно и то же действие несколько раз в разных частях программы, например, выводить сообщение об ошибке, если пользователь вводит неправильные данные. Для того, чтобы упростить программу, в языках высокого уровня предусмотрено деление программы на подпрограммы. Основным видом подпрограммы в 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.