Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <Windows.h>
- #include <cmath>
- #include <iomanip>
- using namespace std;
- void pokazFunkcje(double *ws, int size)
- {
- cout << "f(x) = ";
- for (int i = size - 1; i > 1; i--)
- cout << ws[size - i - 1] << "x^" << i << " + ";
- cout << ws[size - 2] << "x" << " + ";
- cout << ws[size - 1];
- }
- // Obliczanie wartosci schematem hornera
- double f(double *ws, int size, double x)
- {
- double wynik = ws[0];
- for (int i = 1; i < size; i++)
- wynik = wynik * x + ws[i];
- return wynik;
- }
- void zero1(double *ws, int size, double a, double b, int porownan)
- {
- double x0;
- double f0;
- double fa = f(ws, size, a);
- double fb = f(ws, size, b);
- if (fa * fb > 0)
- {
- cout << "Funkcja nie spelnia zalozen";
- return;
- }
- else
- {
- int i = 0;
- while (i < porownan)
- {
- x0 = (a + b) / 2;
- f0 = f(ws, size, x0);
- if (fa * f0 < 0)
- b = x0;
- else
- {
- a = x0;
- fa = f0;
- }
- i++;
- }
- cout << "#1 x0 = " << fixed << setprecision(15) << x0 << endl;
- }
- }
- void zero2(double *ws, int size, double a, double b, double przyblizenie)
- {
- double x0 = 0.0f;
- double f0 = 0.0f;
- double fa = f(ws, size, a);
- double fb = f(ws, size, b);
- if (fa * fb < 0)
- {
- while (true)
- {
- x0 = (a + b) / 2;
- f0 = f(ws, size, x0);
- if (fabs(f0) < przyblizenie)
- {
- cout << "#2 x0 = " << fixed << setprecision(15) << x0 << endl;
- break;
- }
- if (fa * f0 < 0)
- {
- b = x0; fb = f0;
- }
- else
- {
- a = x0; fa = f0;
- }
- }
- }
- else
- {
- cout << "Funkcja nie spelnia zalozen";
- return;
- }
- }
- void zero3(double *ws, int size, double a, double b, double przyblizenie)
- {
- double x0 = 0.0f;
- double f0 = 0.0f;
- double fa = f(ws, size, a);
- double fb = f(ws, size, b);
- if (fa * fb < 0)
- {
- while (true)
- {
- x0 = (a + b) / 2;
- f0 = f(ws, size, x0);
- if (fabs(a - b) < przyblizenie)
- {
- cout << "#2 x0 = " << fixed << setprecision(15) << x0 << endl;
- break;
- }
- if (fa * f0 < 0)
- {
- b = x0; fb = f0;
- }
- else
- {
- a = x0; fa = f0;
- }
- }
- }
- else
- {
- cout << "Funkcja nie spelnia zalozen";
- return;
- }
- }
- void menu()
- {
- cout << endl;
- cout << "#1 - OBLICZENIE MIEJSC ZEROWYCH\n";
- cout << "#2 - RESET\n";
- cout << "#3 - WYJSCIE\n";
- cout << endl;
- }
- int main()
- {
- int stopien;
- cout << "Podaj stopien wprowadzanego wielomianu: ";
- cin >> stopien;
- int N = stopien + 1;
- double *wspl;
- wspl = new double[N];
- cout << "Podaj wspolczynniki wielomianu:\n";
- cout << "(Ostatni wyraz jest wyrazem wolnym)\n";
- for (int i = 0; i < N; i++)
- cin >> wspl[i];
- system("cls");
- cout << "Program do obliczania miejsca zerowego funkcji: (3 metodami polowienia)\n\n";
- pokazFunkcje(wspl, N);
- cout << endl;
- cout << endl;
- double a = 0.0f;
- double b = 0.0f;
- cout << "Podaj punkty graniczne sprawdzanego przedzialu: [a, b]\n";
- cout << "a: ";
- cin >> a;
- cout << "b: ";
- cin >> b;
- menu();
- int decyzja;
- cout << "DECYZJA: ";
- cin >> decyzja;
- int ile_porownan = 0;
- double przyblizenie = 0.0f;
- double przyblizenie2 = 0.0f;
- cout << endl;
- switch (decyzja)
- {
- case 1:
- cout << "SPOSOB 1: WPROWADZ ILE POROWNAN WYKONAC: ";
- cin >> ile_porownan;
- cout << "SPOSOB 2: PODAJ PRZYBLIZENIE |f(c)| < delta: ";
- cin >> przyblizenie;
- cout << "SPOSOB 3: PODAJ PRZYBLIZENIE |a'-b'| < delta: ";
- cin >> przyblizenie2;
- cout << endl;
- cout << "WYNIKI:\n";
- cout << endl;
- zero1(wspl, N, a, b, ile_porownan);
- zero2(wspl, N, a, b, przyblizenie);
- zero3(wspl, N, a, b, przyblizenie2);
- break;
- case 2:
- system("cls");
- main();
- break;
- case 3:
- system("cls");
- cout << "WYLACZANIE...";
- delete[] wspl;
- Sleep(1000);
- exit(0);
- }
- int dec;
- cout << endl << "KONIEC - co chcesz zrobic:";
- cout << endl << endl << "#1 RESET" << endl;
- cout << "#2 WYJSCIE" << endl;
- cout << endl << "DECYZJA: ";
- cin >> dec;
- switch (dec)
- {
- case 1:
- system("cls");
- delete[] wspl;
- main();
- break;
- case 2:
- system("cls");
- cout << "WYLACZANIE...";
- delete[] wspl;
- Sleep(1000);
- exit(0);
- }
- delete[] wspl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement