Объявление и определение функций

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

Функция, во-первых, является одним из производных типов СИ++, а,во-вторых, минимальным исполняемым модулем программы.

 
 


Любая функция должна быть объявлена и определена.

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

Определение функции содержит, кроме объявления, тело функции, которое представляет собой последовательность описаний и операторов.

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

{ тело_функции}

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

В теле функции должен быть оператор, который возвращает полученное значение функции в точку вызова. Он может иметь 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));

}


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: