
- •Оглавление
- •Области видимости и классы памяти переменных
- •Синтаксис описания функций
- •Прототипы функций
- •Способы передачи данных
- •Передача аргументов в функцию по значению
- •Передача аргументов в функцию по ссылке
- •Передача указателей
- •Передача массивов
- •Передача указателей на функции
- •Инициализация параметров
- •Возвращаемые значения
- •Возврат ссылок: функция в левой части оператора присваивания
- •Перегрузка функций
- •Шаблон функций
- •Рекурсия
- •Void f1()
- •Void f2(int a)
- •Void f1()
- •Void f2(int b)
- •Void f1()
- •Void f2(int a)
- •Void change (double X, double y)
- •Void changeRef (double &X, double &y)
- •Void changePtr (double* X, double* y)
- •Intfrac(number, intpart, fracpart);
- •Void intfrac(float n, float& intp, float& fracp)
- •Int adder (int iarray[n]);
- •Int adder (int iarray[n])
- •Int adder (int [], int);
- •Int adder (int [], int);
- •Int adder (int *piarray, int k)
- •Void convertToUppercase (char *Ptr)
- •Void print (char *m[ ])
- •Int adder (int iarray[n][m])
- •Int adder (int [][m]);
- •Int adder (int iarray[][3])
- •Void adder (int [ ][m], int *);
- •Void adder (int (*piarray)[m], int *pipartial)
- •Void adder (int (*)[m], int *, int);
- •Void adder (int (*piarray)[m], int *pipartial, int k)
- •Int adder (int **, int, int);
- •Int adder (int **mas, int n, int m)
- •Int adder (int **, int, int);
- •Int adder (int **mas, int n, int m)
- •Int adder (int* [ ], int, int);
- •Int adder (int *mas[ ], int n, int m)
- •Int adder (int* [ ], int, int);
- •Int adder (int *mas[ ], int n, int m)
- •Invert();
- •Invert(a);
- •Int& setx()
- •Int& rmax(int n, int d[])
- •Void fun()
- •Int func (int a, int b);
- •Int func(int a, int b)
- •Void example (int,...);
- •Void example(int arg1, ...)
- •Void example (int,...);
- •Void example(int arg1, ...)
- •Void printd (int n)
- •Void Vych_Int(double a,double b,double eps,
- •Void Sum(double a,double b,double h,
- •Vych_Int(a, b, eps, &f1, Int, k_iter);
- •Vych_Int(a, b, eps, &f2, Int, k_iter);
- •Void Vych_Int (double a,double b,double eps,
- •Void Sum(double a, double b, double h,
- •Решение нелинейных уравнений
- •Вычисление интегралов
- •Метод двойного пересчета для вычисления интегралов методом левых прямоугольников
- •Словарь понятий, используемых в заданиях
Void Vych_Int(double a,double b,double eps,
double(*pf)(double),double &I,int &k);
//прототип функции вычисления интеграла
// по методу левых прямоугольников
Void Sum(double a,double b,double h,
double (*pf)(double),double &S);
//прототипы подынтегральных функций
double f1 (double);
double f2 (double);
void main ()
{ double a, b, eps; // отрезок интегрирования, точность
double Int; // значение интеграла
int K_iter; // количество итераций
cout << "Input a, b, eps"<<endl;
cin >> a >> b >> eps;
//вычисление интеграла для f1
Vych_Int(a, b, eps, &f1, Int, k_iter);
cout << "Integral for f1 =" << Int <<
" K_iter= "<< K_iter << endl;
//вычисление интеграла для f2
Vych_Int(a, b, eps, &f2, Int, k_iter);
cout << "Integral for f2 =" << Int <<
" K_iter = " << K_iter << endl;
}
// подынтегральные функции
double f1 (double x)
{
return cos (x) / exp(0.3 * log(x));
}
double f2 (double x)
{
return cos (x * x * x) / sqrt(sqrt(x));
}
// функция вычисления интеграла
// по критерию двойного пересчета
Void Vych_Int (double a,double b,double eps,
double (*pf)(double),double &I,int &k)
{
int n = 4;//инициализация количества разбиений
//определение шага интегрирования
double h = (b - a) / n;
// переменные для значений сумм с шагом h и с шагом h/2
double S1 = 0, S2 = 0;
/вызов функции Sum c шагом h: в S1 возвращается сумма
Sum (a, b, h, pf, S1);
k=0;
// запуск процесса двойного пересчета
do
{ // сохраняем значение интеграла предыдущего шага
S2 = S1;
n *= 2; //увеличение количества отрезков разбиения и
//уменьшение шага интегрирования в 2 раза
h = (b - a) / n;
//вызов функции Sum с шагом h=h/2
Sum (a, b, h, pf, S1);
k++;
}
while (fabs(S1 - S2) > eps) ;
I = S1;
}
// функция выч/ интеграла по методу левых прямоугольников
Void Sum(double a, double b, double h,
double (*pf) (double), double &S)
{
double x, sum;
x = a;
sum = 0;
while (x < b)
{
sum = sum + (*pf)(x); //накопление суммы высот
x = x + h;
}
//вычисление площади
S = h * sum;
}
Решение нелинейных уравнений
М
етод
деления отрезка пополам
Определяем середину отрезка [A, B].
= (A+B)/2 и вычисляем функцию
.
Выбираем какую из двух частей отрезка взять для дальнейшего уточнения корня. Если левая часть уравнения F(X) есть непрерывная функция аргумента Х, то корень будет находится в той половине отрезка, на концах которой F(X) имеет разные знаки (на рисунке это [A, ]).
Для очередного шага уточнения точку В перемещаем в середину отрезка и продолжаем процесс деления как с первоначальным отрезком [A, B].
Итерационный процесс продолжаем до тех пор, пока интервал [A, B] не станет меньше заданной погрешности либо пока значение заданной функции в точке Х не станет меньше заданной погрешности .
a-b<eps либо f(x) <eps
М
етод
хорд
Интeрвал определяется графическим методом, очередное приближение берется в точке Х1, где пресекает ось абсцисс прямая линия проведенная через точки F(A) и F(В).
В качестве нового интервала для продолжения итерационного процесса выбираем тот из отрезков [A, X1] или [X1, В], на концах которого функция принимает значения с разными знаками.
Итерационный процесс заканчивается по условию:
a-b<eps либо f(x) <eps
Уравнение прямой линии, проходящей через точки F1= F(A) и F2= F(В): Y(X)=K*X+C.
Коэффициенты К и С находятся из следующих уравнений:
F1=K*A+C,
F2=K*B+C;
;
C=F1-K*A;
Точку пресечения прямой Y(X) c OX находят из уравнения Y(X)=0;
или
Метод Ньютона (касательных)
Пусть графическим методом определено начальное приближение X0 к корню
В точке X0 вычислим левую часть уравнения F0=F(X0), а также F`(X0)=tg()
Следующее приближение к корню найдем в точке X1, где касательная к функции F(X), проведенная из точки (X0, F0), пресекает ось абсцисс.
С читаем точку X1 в качестве начальной и продолжаем итерационный процесс. Таким образом можно приближаться к корню. С каждой итерацией расстояние между очередным Xk+1 и предыдущим Xk приближениями к корню будут уменьшаться. Процесс уточнения заканчивается, когда когда выполняется условие:
либо F(xk) <eps
Итерационные формулы: