Quantcast
Channel: Форум программистов и сисадминов Киберфорум
Viewing all articles
Browse latest Browse all 514743

Метод бисекции - С++ для начинающих

$
0
0
Знаю что были такие темы, но мне они пока что не помогли
накатал код через бесконечный цикл с проверкой корректности условия, в теории должен работать, по факту - нет (не выводит конечный результат вычислений), т.е. после отжатия системной паузы не выводит ничего.
подскажите пожалуйста, где ошибка
:

#include <math.h>
#include <iostream>
using namespace std;
int main()
{
        setlocale(0, "");
        int e;
        float a, b, c, funcA, funcB, funcC;
        e = 0, 001;
        cout << "Введите А:";
        cin >> a;
        cout << "Введите В:";
        cin >> b;
        if (a*b < 0)
        {
                c = ((a + b) / 2);
                cout << "С=" << c << endl;
        }
        else if (a*b >= 0)
        {
                cout << "Неверно заданы параметры" << endl;
        }
        system("pause");
        funcA = 2*c - b;
        funcB = 2 * c - a;
        funcC = c;
        int i = 0;
        for (; ; ) {
                if (fabs(b - a) >= e) {
                        if (funcA*funcC < 0) {
                                b = c;
                                c = (a + b) / 2;
                        }
                        else if (funcB*funcC < 0) {
                                a = c;
                                c = (a + b) / 2;
                        }
                }
                else if (fabs(b - a) < e) {
                        break;
                        cout << "Итог:" << (b - a) << endl;
                        system("pause");
                }
        }
        return 0;
}

Условия:
c=(a+b)/2
f(a)*f(c)<0, если да, то b=c, и заново c=(a+b)/2
f(b)*f(c)<0, если да, то a=c, и заново c=(a+b)/2
делаю до того момента, пока \l b-a \l >=e, где e=10^(-3)
как только l b-a l >e, делаю прерывание и вывод итогового результата вычисления

Аналогично попробовал реализовать через do while, итог такой же
:

#include <math.h>
#include <iostream>
using namespace std;
int main()
{
        setlocale(0, "");
        int e;
        float a, b, c, funcA, funcB, funcC;
        e = 0, 001;
        cout << "Введите А:";
        cin >> a;
        cout << "Введите В:";
        cin >> b;
        if (a*b < 0)
        {
                c = ((a + b) / 2);
                cout << "С=" << c << endl;
        }
        else if (a*b >= 0)
        {
                cout << "Неверно заданы параметры" << endl;
        }
        system("pause");
        funcA = 2*c - b;
        funcB = 2 * c - a;
        funcC = c;
        int i = 0;
        //for (; ; )
       
                do if (funcA*funcC < 0) {
                        b = c;
                        c = (a + b) / 2;
                }
                else if (funcB*funcC < 0) {
                        a = c;
                        c = (a + b) / 2;
                }while (fabs(b - a) >= e);

                /*while (fabs(b - a) < e)
                        //break;*/
                        cout << "Итог:" << (b - a) << endl;
                        system("pause");
               
       
        return 0;
}


Изображения
Тип файла: jpg Screenshot_1.jpg (9.0 Кб)
Тип файла: jpg Screenshot_2.jpg (9.4 Кб)

Viewing all articles
Browse latest Browse all 514743

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>