Если требуется запретить изменение параметра внутри функции, используется модификатор const. Рекомендуется указывать const перед всеми параметрами, изменение которых в функции не предусмотрено:
int f(const char*);
char *t (char *a, const int *b);
Данный способ передачи параметров, практически, полностью соответствует передаче по указателю с тем лишь отличием, что соответствующий фактический параметр защищается от возможных его изменений в функции. Тип фактического значения параметра-константы должен совпадать с типом формального параметра.
//демонстрация параметров функции, для которых запрещено изменение
void aFunc(int& a, const int& b); //прототип функции; параметр b, передаваемый
// по ссылке с модификатором const, разрешено только «считывать»
int main()
{
int alpha = 7;
int beta = 11;
aFunc(alpha, beta);
return 0;
}
//-------------------------------------------------------------void aFunc(int& a, const int& b) //определение функции
{
a = 107; //OK
b = 111; //ошибка, невозможно изменять аргумент с модификатором const
}
Пример 1. Вычислить минимальное из расстояний между точками плоскости А(х1; у1), В(х2; у2) и С(1;2). Алгоритм решения этой задачи: вычислить расстояния dl=AB, d2=AC, d3=BC; вычислить m=min{dl, d2, d3}.
Расстояние между точками с произвольными координатами (х; у), (х'; у') выражается формулой d=sqrt((x-x')2 +(у-y')2). Для вычисления расстояний необходимо трижды написать вариант этой формулы с различными наборами координат: xl, у1, х2, у2, затем xl, у1, 1, 2, затем х2, у2, 1, 2. Такую запись можно упростить.
В случае вычисления расстояния между двумя точками параметрами будут четыре их координаты. Назовем их а1, b1, а2, b2. Опишем повторяемые вычисления в виде функции, которой мы дадим имя dd:
double dd(double al, double b1, double а2, double b2) { return (sqrt ((al-a2)*(a1-a2) + (b1-b2)*(b1-b2))); }
Это есть определение функции, включающее заголовок и тело функции. Обозначения выполнения этой функции, т.е. вызовы ее с конкретными аргументами, записываются в теле программы:
#include <iostream.h>
#include <math.h>
double dd (double, double, double, double); //прототип функции
main()
{double x1, y1, x2, y2, d1, d2, d3, m;
cout << "Input koordinaty:\n";
cin >> x1 >> y1 >> x2 >> y2;
d1=dd (x1, y1, x2, y2) ; //вызовы функции
d2=dd (x1, y1, 1, 2);
d3=dd (x2, y2, 1, 2);
m = (d1<d2) ? d1 : d2;
if (d3<m) m=d3;
cout << "min: " << m <<endl;
return 0;}
double dd (double a1, double b1, double a2, double b2) //определение функции
{
return (sqrt ((a1-a2)*(a1-a2) + (b1-b2)*(b1-b2)));
}
Выполнение программы начинается с оператора cout <<“Input koordinaty:\n”; программы main. После чтения значений переменных выполняется первый вызов функции dd: значения переменных xl, yl, x2, y2 присваиваются соответствующим формальным параметрам al, b1, а2, b2 и вычисляетcя расстояние. Оно и становится возвращаемым значением функции, т.е. значением выражения dd(х1,у1,х2,у2), которое присваивается переменной dl.
Точно так же, только с другими аргументами, выполняются второй и третий вызовы функции с присваиванием возвращаемых ими значений переменным d2 и d3.
Пример 2. Опишем в виде функции вычисление факториала N! итеративным методом в соответствии с формулами N=1*2*3…*N (при N>0); 0!=1.
#include <iostream.h>
#include <conio.h>
long Iter_Fact (int); //прототип функции
main()
{ int i;
long Fact1, Fact2, Fact3;
Fact1= Iter_Fact (10); //вызов функции
i= 10;
Fact2 =Iter_Fact (i); // вызов функции
Fact3= Iter_Fact (5+ 5); // вызов функции
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.