Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Лабораторная работа №6. Студента группы ПС-19-1 Дьяченко Максима Артёмовича.
- #include <iostream>
- #include <math.h>
- #include <stdio.h>
- #include <iomanip>
- using namespace std;
- //[ 1 ; 2.5 ]
- double f1(double x) {
- return cos(x / 2) - 2 * sin(1 / x) + 1 / x;
- }
- //[ 0.25 ; 0.45 ]
- double f2(double x) {
- return 1.8 * x * x * x * x - sin(10 * x);
- }
- double signature(double x) {
- if (x == 0) return 0;
- else if (x > 0) return 1;
- else return -1;
- }
- double halfDiv(double (*function)(double), double (*sign)(double), double eps, double leftEdge, double rightEdge, int &iter, int maxIter) {
- double dx = 0, middle = 0;
- if (function(leftEdge) == 0)
- return leftEdge;
- else if (function(rightEdge) == 0)
- return rightEdge;
- else {
- while ((rightEdge - leftEdge) > eps && iter < maxIter) {
- dx = (rightEdge - leftEdge) / 2;
- middle = leftEdge + dx;
- if (sign(function(leftEdge)) != sign(function(middle)))
- rightEdge = middle;
- else
- leftEdge = middle;
- iter++;
- }
- }
- return middle;
- }
- int main()
- {
- setlocale(LC_CTYPE, "rus");
- double x, eps, firstLeftEdge, firstRightEdge, secondLeftEdge, secondRightEdge;
- int iterOne = 0, iterTwo = 0, maxIterOne, maxIterTwo;
- cout << "Введите точность приближенного значения eps: "; cin >> eps;
- cout << "Введите левую границу отрезка: "; cin >> firstLeftEdge;
- cout << "Введите правую границу отрезка: "; cin >> firstRightEdge;
- cout << "Введите максимальное количество итераций: "; cin >> maxIterOne;
- x = halfDiv(&f1, &signature, eps, firstLeftEdge, firstRightEdge, iterOne, maxIterOne);
- cout << "x = " << x << "; Количество итераций = " << iterOne << ";\n\n\n";
- cout << "Введите точность приближенного значения eps: "; cin >> eps;
- cout << "Введите левую границу отрезка: "; cin >> secondLeftEdge;
- cout << "Введите правую границу отрезка: "; cin >> secondRightEdge;
- cout << "Введите максимальное количество итераций: "; cin >> maxIterTwo;
- x = halfDiv(&f2, &signature, eps, secondLeftEdge, secondRightEdge, iterTwo, maxIterTwo);
- cout << "x = " << x << "; Количество итераций = " << iterTwo << ";\n\n\n";
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement