Функция – это именованная последовательность описаний и операторов, выполняющая законченное действие, например, формирование массива, печать массива и т. д.
Функция, во-первых, является одним из производных типов СИ++, а,во-вторых, минимальным исполняемым модулем программы.
Любая функция должна быть объявлена и определена.
Объявление функции (прототип, заголовок) задает имя функции, тип возвращаемого значения и список передаваемых параметров.
Определение функции содержит, кроме объявления, тело функции, которое представляет собой последовательность описаний и операторов.
тип имя_функции([список_формальных_параметров])
{ тело_функции}
Тело_функции – это блок или составной оператор. Внутри функции нельзя определить другую функцию.
В теле функции должен быть оператор, который возвращает полученное значение функции в точку вызова. Он может иметь 2 формы:
1) return выражение;
2) return;
Первая форма используется для возврата результата, поэтому выражение должно иметь тот же тип, что и тип функции в определении. Вторая форма используется, если функция не возвращает значения, т. е. имеет тип void. Программист может не использовать этот оператор в теле функции явно, компилятор добавит его автоматически в конец функции перед }.
Тип возвращаемого значения может быть любым, кроме массива и функции, но может быть указателем на массив или функцию.
Список формальных параметров – это те величины, которые требуется передать в функцию. Элементы списка разделяются запятыми. Для каждого параметра указывается тип и имя. В объявлении имена можно не указывать.
Для того, чтобы выполнялись операторы, записанные в теле функции, функцию необходимо вызвать. При вызове указываются: имя функции и фактические параметры. Фактические параметры заменяют формальные параметры при выполнении операторов тела функции. Фактические и формальные параметры должны совпадать по количеству и типу.
Объявление функции должно находиться в тексте раньше вызова функции, чтобы компилятор мог осуществить проверку правильности вызова. Если функция имеет тип не void, то ее вызов может быть операндом выражения.
Пример:
Заданы координаты сторон треугольника. Если такой треугольник существует, то найти его площадь.
1. Математическая модель:
1) l=sqrt(pow(x1-x2,2)+pow(y1-y2,2));//длина стороны треугольника
2) p=(a+b+c)/2;
s=sqrt(p*(p-a)*(p-b)*(p-c));//формула Герона
3) проверка существования треугольника
(a+b>c&&a+c>b&&c+b>a)
2. Алгоритм:
1) Ввести координаты сторон треугольника (х1,у1),(х2,у2),(х3,у3);
2) Вычислить длины сторон ab, bc, ca;
3) Проверить существует ли треугольник с такими сторонами. Если да, то вычислить площадь и вывести результат.
4) Если нет, то вывести сообщение.
5) Если все координаты равны 0, то конец, иначе возврат на п.1.
#include <iostream.h>
#include <math.h>
double line(double x1,double y1,double x2,double y2)
{
//функция возвращает длину отрезка, заданного координатами x1,y1 и x2,y2
return sqrt(pow(x1-x2,2)+pow(y1-y2,2));
}
double square(double a, double b, double c)
{
//функция возвращает площадь треугольника, заданного длинами сторон а,b,c
double s, p=(a+b+c)/2;
return s=sqrt(p*(p-a)*(p-b)*(p-c));//формула Герона
}
bool triangle(double a, double b, double c)
{
//возвращает true, если треугольник существует
if(a+b>c&&a+c>b&&c+b>a) return true;
else return false;
}
void main()
{
double x1=1,y1,x2,y2,x3,y3;
double point1_2,point1_3,point2_3;
do
{
cout<<"\nEnter koordinats of triangle:";
cin>>x1>>y1>>x2>>y2>>x3>>y3;
point1_2=line(x1,y1,x2,y2);
point1_3=line(x1,y1,x3,y3);
point2_3=line(x2,y2,x3,y3);
if(triangle(point1_2,point1_3,point2_3)==true)
cout<<"S="<<square(point1_2,point2_3,point1_3)<<"\n";
else cout<<"\nTriagle doesnt exist";
}
while(!(x1==0&&y1==0&&x2==0&&y2==0&&x3==0&&y3==0));
}