Advertisement
AdrianMadajewski

Biskecja

Nov 14th, 2018
226
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.13 KB | None | 0 0
  1. #include <iostream>
  2. #include <Windows.h>
  3. #include <cmath>
  4. #include <iomanip>
  5.  
  6. using namespace std;
  7.  
  8. void pokazFunkcje(double *ws, int size)
  9. {
  10.     cout << "f(x) = ";
  11.     for (int i = size - 1; i > 1; i--)
  12.         cout << ws[size - i - 1] << "x^" << i << " + ";
  13.     cout << ws[size - 2] << "x" << " + ";
  14.     cout << ws[size - 1];
  15. }
  16.  
  17. // Obliczanie wartosci schematem hornera
  18. double f(double *ws, int size, double x)
  19. {
  20.     double wynik = ws[0];
  21.     for (int i = 1; i < size; i++)
  22.         wynik = wynik * x + ws[i];
  23.     return wynik;
  24. }
  25.  
  26. void zero1(double *ws, int size, double a, double b, int porownan)
  27. {
  28.     double x0;
  29.     double f0;
  30.  
  31.     double fa = f(ws, size, a);
  32.     double fb = f(ws, size, b);
  33.  
  34.     if (fa * fb > 0)
  35.     {
  36.         cout << "Funkcja nie spelnia zalozen";
  37.         return;
  38.     }
  39.     else
  40.     {
  41.         int i = 0;
  42.         while (i < porownan)
  43.         {
  44.             x0 = (a + b) / 2;
  45.             f0 = f(ws, size, x0);
  46.  
  47.             if (fa * f0 < 0)
  48.                 b = x0;
  49.             else
  50.             {
  51.                 a = x0;
  52.                 fa = f0;
  53.             }
  54.             i++;
  55.         }
  56.  
  57.         cout << "#1 x0 = " << fixed << setprecision(15) << x0 << endl;
  58.     }
  59. }
  60.  
  61. void zero2(double *ws, int size, double a, double b, double przyblizenie)
  62. {
  63.     double x0 = 0.0f;
  64.     double f0 = 0.0f;
  65.     double fa = f(ws, size, a);
  66.     double fb = f(ws, size, b);
  67.  
  68.     if (fa * fb < 0)
  69.     {
  70.         while (true)
  71.         {
  72.             x0 = (a + b) / 2;
  73.             f0 = f(ws, size, x0);
  74.  
  75.             if (fabs(f0) < przyblizenie)
  76.             {
  77.                 cout << "#2 x0 = " << fixed << setprecision(15) << x0 << endl;
  78.                 break;
  79.             }
  80.             if (fa * f0 < 0)
  81.             {
  82.                 b = x0; fb = f0;
  83.             }
  84.             else
  85.             {
  86.                 a = x0; fa = f0;
  87.             }
  88.         }
  89.     }
  90.     else
  91.     {
  92.         cout << "Funkcja nie spelnia zalozen";
  93.         return;
  94.     }
  95. }
  96.  
  97. void zero3(double *ws, int size, double a, double b, double przyblizenie)
  98. {
  99.     double x0 = 0.0f;
  100.     double f0 = 0.0f;
  101.     double fa = f(ws, size, a);
  102.     double fb = f(ws, size, b);
  103.  
  104.     if (fa * fb < 0)
  105.     {
  106.         while (true)
  107.         {
  108.             x0 = (a + b) / 2;
  109.             f0 = f(ws, size, x0);
  110.  
  111.             if (fabs(a - b) < przyblizenie)
  112.             {
  113.                 cout << "#2 x0 = " << fixed << setprecision(15) << x0 << endl;
  114.                 break;
  115.             }
  116.             if (fa * f0 < 0)
  117.             {
  118.                 b = x0; fb = f0;
  119.             }
  120.             else
  121.             {
  122.                 a = x0; fa = f0;
  123.             }
  124.         }
  125.     }
  126.     else
  127.     {
  128.         cout << "Funkcja nie spelnia zalozen";
  129.         return;
  130.     }
  131. }
  132.  
  133. void menu()
  134. {
  135.     cout << endl;
  136.     cout << "#1 - OBLICZENIE MIEJSC ZEROWYCH\n";
  137.     cout << "#2 - RESET\n";
  138.     cout << "#3 - WYJSCIE\n";
  139.     cout << endl;
  140. }
  141.  
  142. int main()
  143. {
  144.     int stopien;
  145.     cout << "Podaj stopien wprowadzanego wielomianu: ";
  146.     cin >> stopien;
  147.  
  148.     int N = stopien + 1;
  149.     double *wspl;
  150.     wspl = new double[N];
  151.  
  152.     cout << "Podaj wspolczynniki wielomianu:\n";
  153.     cout << "(Ostatni wyraz jest wyrazem wolnym)\n";
  154.     for (int i = 0; i < N; i++)
  155.         cin >> wspl[i];
  156.  
  157.     system("cls");
  158.     cout << "Program do obliczania miejsca zerowego funkcji: (3 metodami polowienia)\n\n";
  159.  
  160.     pokazFunkcje(wspl, N);
  161.     cout << endl;
  162.     cout << endl;
  163.  
  164.     double a = 0.0f;
  165.     double b = 0.0f;
  166.     cout << "Podaj punkty graniczne sprawdzanego przedzialu: [a, b]\n";
  167.     cout << "a: ";
  168.     cin >> a;
  169.     cout << "b: ";
  170.     cin >> b;
  171.  
  172.     menu();
  173.  
  174.     int decyzja;
  175.     cout << "DECYZJA: ";
  176.     cin >> decyzja;
  177.  
  178.     int ile_porownan = 0;
  179.     double przyblizenie = 0.0f;
  180.     double przyblizenie2 = 0.0f;
  181.     cout << endl;
  182.  
  183.     switch (decyzja)
  184.     {
  185.     case 1:
  186.         cout << "SPOSOB 1: WPROWADZ ILE POROWNAN WYKONAC: ";
  187.         cin >> ile_porownan;
  188.  
  189.         cout << "SPOSOB 2: PODAJ PRZYBLIZENIE |f(c)| < delta: ";
  190.         cin >> przyblizenie;
  191.        
  192.         cout << "SPOSOB 3: PODAJ PRZYBLIZENIE |a'-b'| < delta: ";
  193.         cin >> przyblizenie2;
  194.  
  195.         cout << endl;
  196.         cout << "WYNIKI:\n";
  197.         cout << endl;
  198.  
  199.         zero1(wspl, N, a, b, ile_porownan);
  200.         zero2(wspl, N, a, b, przyblizenie);
  201.         zero3(wspl, N, a, b, przyblizenie2);
  202.         break;
  203.  
  204.     case 2:
  205.         system("cls");
  206.         main();
  207.         break;
  208.     case 3:
  209.         system("cls");
  210.         cout << "WYLACZANIE...";
  211.         delete[] wspl;
  212.         Sleep(1000);
  213.         exit(0);
  214.     }
  215.  
  216.     int dec;
  217.     cout << endl << "KONIEC - co chcesz zrobic:";
  218.     cout << endl << endl << "#1 RESET" << endl;
  219.     cout << "#2 WYJSCIE" << endl;
  220.  
  221.     cout << endl << "DECYZJA: ";
  222.     cin >> dec;
  223.  
  224.     switch (dec)
  225.     {
  226.     case 1:
  227.         system("cls");
  228.         delete[] wspl;
  229.         main();
  230.         break;
  231.     case 2:
  232.         system("cls");
  233.         cout << "WYLACZANIE...";
  234.         delete[] wspl;
  235.         Sleep(1000);
  236.         exit(0);
  237.     }
  238.  
  239.     delete[] wspl;
  240.     return 0;
  241. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement