Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <iomanip>
- #include <cmath>
- #include <cstdlib>
- using namespace std;
- const double EPS0 = 0.000000001;
- const double EPSX = 0.000000001;
- int poprawnosc(int &a)
- {
- cin >> a;
- while (cin.fail())
- {
- cin.clear();
- cin.ignore(1000, '\n');
- cout << "Podaj liczbe: ";
- cin >> a;
- }
- return a;
- }
- double poprawnosc(double &a)
- {
- cin >> a;
- while (cin.fail())
- {
- cin.clear();
- cin.ignore(1000, '\n');
- cout << "Podaj liczbe: ";
- cin >> a;
- }
- return a;
- }
- double f(double x,double *tab, int rozmiar, double wyraz)
- {
- double wolny=wyraz;
- double wynik=0;
- double potega;
- double *podstawianie = new double[rozmiar];
- double *po_podst=new double[rozmiar];
- for (int i = 0; i < rozmiar; i++)
- {
- podstawianie[i] = x;
- }
- for (int i = 0; i < rozmiar; i++)
- {
- potega = tab[i];
- po_podst[i]=pow(podstawianie[i], potega);
- cout<<"Podstawienie "<<i<<".\t"<<podstawianie[i]<<endl;
- cout<<"Potega "<<i<<".\t"<<pow(podstawianie[i], potega)<<endl;
- }
- for (int i = 0; i< rozmiar; i++)
- {
- wynik += po_podst[i];
- cout<<"\n\t\t"<<wynik+po_podst[i];
- }
- delete[]podstawianie;
- delete[] po_podst;
- return wynik + wolny;
- }
- int main()
- {
- double a, b, x0, fa, fb, f0;
- int potega, ilosc_niewiadomych, wyraz_wolny;
- cout << "\n\t\tMetoda bisekcji:\n";
- cout << "Podaj jak ma wygladac twoja funkcja: \nPodaj ilosc niewiadomych x:";
- poprawnosc(ilosc_niewiadomych);
- double *tablica_pot = new double[ilosc_niewiadomych];
- for (int i = 0; i < ilosc_niewiadomych; i++)
- {
- cout << "Podaj potege " << i + 1 << ". wyrazu: ";
- poprawnosc(potega);
- tablica_pot[i] = potega;
- }
- cout << "\n\n\tPodaj wyraz wolny: ";
- poprawnosc(wyraz_wolny);
- cout << "\n\t\tTwoja funkcja wyglada tak: ";
- for (int i = 0; i < ilosc_niewiadomych; i++)
- {
- if (i == ilosc_niewiadomych - 1)
- {
- cout << "(x)^" << tablica_pot[i];
- break;
- }
- cout << "(x)^" << tablica_pot[i]<<"+";
- }
- if (wyraz_wolny >= 0)
- {
- cout <<"+"<< wyraz_wolny;
- }
- else
- {
- cout << wyraz_wolny;
- }
- cout << "\n\t\tPodaj zakres poszukiwan pierwiastka:\n\n";
- cout << "a = ";
- poprawnosc(a);
- cout << "b = ";
- poprawnosc(b);
- cout << "\n------------------------------------------------\n\n"
- "WYNIK:\n\n";
- fa = f(a,tablica_pot,ilosc_niewiadomych, wyraz_wolny);
- fb = f(b, tablica_pot, ilosc_niewiadomych, wyraz_wolny);
- cout << endl<<endl<<fa<<" " <<fb<<" "<<fa * fb;
- if (fa * fb > 0)
- cout << "\n\t\tFunkcja nie spelnia zalozen\n";
- else
- {
- cout << "\n\n\tObliczenia w tej metodzie: ";
- while (fabs(a - b) > EPSX)
- {
- x0 = (a + b) / 2;
- f0 = f(x0,tablica_pot, ilosc_niewiadomych, wyraz_wolny);
- cout << "\n\t\t" << x0;
- if (fabs(f0) < EPS0)
- break;
- if (fa * f0 < 0)
- {
- b = x0;
- }
- else
- {
- a = x0;
- fa = f0;
- }
- }
- cout << "\n\t\tKoncowy przedzial: ";
- cout << "[" << a << ";" << b << "]";
- cout << "\n\n\n\t\tx0 = " << x0 << endl;
- }
- delete[] tablica_pot;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement