- •В. Л. Бусько, а. А. Навроцкий основы алгоритмизации и программирования
- •Содержание
- •1.2. Функции библиотеки math.Lib
- •1.4. Индивидуальные задания
- •Лабораторная работа №2 Программирование разветвляющихся алгоритмов
- •2.1. Логические операции и операции сравнения
- •3.5. Пример выполнения работы
- •4.3. Индивидуальные задания
- •5.2. Операции над указателями
- •5.5. Индивидуальные задания
- •Return выражение;
- •8.2. Передача параметров
- •8.3. Перегрузка функций и указатель на функцию
- •Лабораторная работа №9 Программирование с использованием рекурсии
- •9.1. Понятие рекурсии
- •Hanr(n-1,s1,s3,s2);
- •Hanr(n-1,s3,s2,s1);
- •9.3. Индивидуальные задания
- •Лабораторная работа №10 Программирование с использованием файлов
- •10.1. Организация работы с файлами
- •11.3. Индивидуальные задания
- •Лабораторная работа №15 Программирование с использованием двусвязанных списков
- •15.1. Очереди на основе двусвязанных списков
- •Литература
- •220013, Минск, п. Бровки, 6
Return выражение;
8.2. Передача параметров
При работе важно соблюдать следующее правило: при объявлении и вызове функции параметры должны соответствовать по количеству, порядку следования и типам. Функция может не иметь параметров, в этом случае после имени функции обязательно ставятся круглые скобки. Существует три основных способа передачи параметров: передача по значению, ссылке или указателю.
Передача параметров по значению
В момент обращения к функции в памяти создаются временные переменные с именами, указанными в списке параметров. В временные переменные копируются значения фактических параметров.
Передача параметров по ссылке
При передаче параметров по ссылке передается не значение соответствующей переменной, а ее адрес. Для указания на данный способ передачи после имени параметра ставится символ «&».
Передача параметров по указателю
В отличие от передачи по ссылке адрес переменной передается в функцию не с использованием операции разадресации (&), а операцией косвенной адресации (*).
8.3. Перегрузка функций и указатель на функцию
В С++ допустимо использование нескольких функций с одинаковым именем, но различным числом или типами параметров. Такое свойство называется перегрузкой функций. Перегруженные функции различаются компилятором по типам и числу параметров.
Так как имя функции является указателем на начало функции в оперативной памяти, то можно объявлять указатели на функции для последующего их использования в программе.
При объявлении указатель должен возвращать тот же тип и иметь такие же аргументы, как и функция, на которую он будет указывать. Например, указатель на функцию
double y(double x, int n);
будет иметь вид:
double (*fun)(double, int);
8.4. Пример выполнения работы
Условие. Вывести на экран таблицу значений функции Y(x) = и ее разложения в ряд S(x) = с точностью = 0.001. Вывести число итераций, необходимое для достижения заданной точности.
#include <iostream.h>
#include <math.h>
#include <iomanip.h>
typedef double (*uf)(double, double, int &);
void tabl(double, double, double, double, uf);
double y(double, double, int &);
double s(double, double, int &);
int main()
{
cout << setw(8) <<"x"<< setw(15) <<"y(x)"<< setw(10) << "k" << endl;
tabl(0.1,0.8,0.1,0.001,y);
cout << endl;
cout << setw(8) <<"x"<< setw(15) <<"s(x)"<< setw(10) << "k" <<endl ;
tabl(0.1,0.8,0.1,0.001,s);
return 0;
}
void tabl(double a, double b, double h, double eps, uf fun)
{
int k=0;
double sum;
for (double x=a; x<b+h/2; x+=h)
{
sum=fun(x,eps,k);
cout << setw(8) << x << setw(15) << sum << setw(10) << k << endl;
}
}
double y(double x, double eps, int &k)
{
return sin(x);
}
double s(double x, double eps, int &k)
{
double a,c,sum;
sum=a=c=x;
k=1;
while (fabs(c)>eps)
{
c = pow(x,2)/(2*k*(2*k+1));
a *= -c;
sum += a;
k++;
}
return sum;
}
8.5. Индивидуальные задания
Вывести на экран таблицу значений функции Y(x) и ее разложения в ряд S(x) с точностью табл. 8.1. Вывести число итераций, необходимое для достижения заданной точности. Вычисление S(x) и Y(x) оформить в виде функций.
Таблица 8.1
№ |
a |
b |
S(x) |
|
Y(x) |
1 |
2 |
3 |
4 |
5 |
6 |
1 |
–0,9 |
0,9 |
10–4 |
||
2 |
0,1 |
0,9 |
10–5 |
||
3 |
–0,9 |
0,9 |
10–3 |
Окончание табл. 8.1
1 |
2 |
3 |
4 |
5 |
6 |
4 |
–3 |
3 |
10–4 |
||
5 |
–1 |
1 |
10–3 |
||
6 |
–0,9 |
0,9 |
10–3 |
||
7 |
–0,5 |
0,5 |
10–5 |
||
8 |
–0,3 |
0,4 |
10–4 |
||
9 |
–2 |
2 |
10–4 |
||
10 |
–0,5 |
0,5 |
10–3 |
||
11 |
–1 |
1,3 |
10–5 |
||
12 |
1 |
2,5 |
10–5 |
||
13 |
–1,5 |
1,5 |
10–4 |
||
14 |
–0,8 |
0,9 |
10–4 |
||
15 |
–2,5 |
1,3 |
10–4 |