Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по Visual.doc
Скачиваний:
126
Добавлен:
02.11.2018
Размер:
901.12 Кб
Скачать

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

104

2

0,1

0,9

105

3

–0,9

0,9

103

Окончание табл. 8.1

1

2

3

4

5

6

4

–3

3

104

5

–1

1

103

6

–0,9

0,9

103

7

–0,5

0,5

105

8

–0,3

0,4

104

9

–2

2

104

10

–0,5

0,5

103

11

–1

1,3

105

12

1

2,5

105

13

–1,5

1,5

104

14

–0,8

0,9

104

15

–2,5

1,3

104