- •Лабораторная работа 3 Функции
- •Примеры вызовов функций
- •Демонстрация функции без аргументов и не возвращающей значения
- •Демонстрация функции, определенной перед ее вызовом
- •Демонстрация функции с аргументами и не возвращающей значения
- •Демонстрация использования глобальных переменных при обмене данными между функциями
- •Демонстрация использования в функции локальных статических переменных
- •Передача в функцию в качестве параметра переменных разных типов Функция вычисления минимального расстояния между точками плоскости
- •Функция вычисления факториала
- •Функция вычисления хn через умножение
- •Функция определения максимального и минимального из двух чисел
- •Функция с параметром перечисляемого типа
- •Функция, выделяющая целую и дробную части вещественного числа
- •Функция, возвращающая ссылку как результат своей работы
- •Демонстрация inline-функций
- •Демонстрация функции с параметрами по умолчанию
- •Перегрузка функций
- •Перегрузка функций с равным числом аргументов
- •Перегрузка функций с разным числом аргументов
- •Шаблоны семейства функций
- •Рекурсивные функции
- •Рекурсивная функция вычисления факториала
- •Рекурсивная функция вывода на печать символов строки в обратном порядке
- •Рекурсивная функция печати числа в виде строки символов
- •Вычисление нод через итерации и через рекурсивную функцию
- •Вычисление интеграла по методу правых прямоугольников
- •Использование одинаковых вызовов функции для вычисления интеграла разными методами и для разных функций
- •Использование при вычислении интеграла многофайловой компиляции
- •Вычисление корня нелинейного уравнения
- •Правила оформления и вызова функций
- •Элементы оптимизации работы с функциями
Функция вычисления хn через умножение
Функция stepen (x, n) используется для вычисления выражения b=2.7 k + (a+1) – k.
double stepen (double, unsigned); //прототип функции
int main ()
{
double a =7.1, b;
unsigned k=5;
b=stepen(2.7, k) +1/stepen(a+1, k); //вызов функции
cout << b << endl;
_getch();
return 0;
}
double stepen (double x, unsigned n) //определение функции
{
double y=1;
for (unsigned i=1; i<=n; i++)
y=y*x;
return y;
}
Функция определения максимального и минимального из двух чисел
Функция maxmin, присваивающая параметру х большее из двух вещественных чисел, а параметру y – меньшее. С помощью данной функции необходимо перераспределить значения вещественных переменных а, b, c так, чтобы стало a >= b >= c.
void maxmin (double *, double *); //прототип функции
int main ()
{ double a, b, c;
cin >> a >> b >> c;
maxmin (&a, &b);
maxmin (&a, &c); //a получает максимальное значение
maxmin (&b, &c); //c получает максимальное значение
cout << a <<" " << b << " " << c << endl;
_getch();
return 0;
}
void maxmin (double *px, double *py) //определение функции
{double r;
if(*px <*py) { r =*px; *px=*py; *py=r;}
}
другой способ:
void maxmin (double &, double &); //прототип функции
int main ()
{ double a, b, c;
cin >> a >> b >> c;
maxmin (a ,b); maxmin (a, c); //a получает максимальное значение
maxmin (b, c); //c получает максимальное значение
cout << a <<" " << b << " " << c << endl;
_getch();
return 0;
}
void maxmin (double & x, double &y) //определение функции
{double r;
if(x < y) { r =x; x= y; y=r;}
}
Функция с параметром перечисляемого типа
Функция cont (s) определяет континент и используется для изменения значения логической переменной t на противоположное, если две страны находятся на разных континентах.
enum strana {Avstria, Egypet, Italia, Peru, Usa, Belarus};
enum continent {Amerika, Aphrika, Europe, Error};
continent cont (strana s); //прототип функции
int main ()
{strana x, y;
bool t=true;
int k1, k2;
cout << "bool=" << t << endl; //начальное значение t
cout << "Input strana (2): 0 – Avstria, 1 – Egypet, ...5 – Belarus\n";
cin >> k1 >> k2;
x= static_cast<strana> (k1);
y= static_cast<strana> (k2);
if ((cont(x)==3 )||( cont(y)==3)) {cout <<"strana : ?"; return 1 ;}
if (cont (x) !=cont (y)) t = ! t;
cout << "bool=" << t << endl ; //конечное значение t
_getch();
return 0 ;
}
continent cont (strana s) //определение функции
{continent con;
switch ( s) { case Avstria:
case Italia:
case Belarus: con = Europe; break;
case Egypet: con = Aphrika; break;
case Peru:
case Usa: con = Amerika; break;
default: con = Error;
}
return (con);
}
Функция, выделяющая целую и дробную части вещественного числа
int main()
{
void intfrac(float, float&, float&);
//прототип функции, передача параметров по ссылке
float number, intpart, fracpart;
//переменные intpart, fracpart можно не инициализировать,
//т.к. они предназначены для возврата значения из функции
do {
cout << "\nEnter a real number: \n ";
cin >> number; //ввод вещественного числа
intfrac (number, intpart, fracpart); //вызов функции, //неинициализированные переменные
// intpart, fracpart передаются для возврата результата
cout << "Integer part is " << intpart << endl;
cout << ", fraction part is " << fracpart << endl;
} while (number != 0.0); //завершение работы, если введено 0.0
_getch();
return 0;
}
//--------------------------------------------------------------
void intfrac(float n, float& intp, float& fracp) // определение функции
{
long temp = static_cast<long>(n); //приведение к типу long int для выделения целой части
intp = static_cast<float>(temp); //конвертирование обратно в тип float
fracp = n - intp; //нахождение дробной части числа
}