Advertisement
AdrianMadajewski

Algorytmy C++

Nov 28th, 2018
227
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.91 KB | None | 0 0
  1. // Schemat Hornera v1
  2. int f(int *ws, unsigned int stopien, int x)
  3. {
  4.     int wynik = ws[0];
  5.     for(int i = 1; i <= stopien; i++)
  6.         wynik = wynik * x + ws[i];
  7.     return wynik;
  8. }
  9.  
  10. // Schemat Hornera v2
  11. int f2(string &ws, unsigned int stopien, int x)
  12. {
  13.     int wynik = ws[0] - '0';
  14.     for(int i = 1; i <= stopien; i++)
  15.         wynik = wynik * x + ws[i] - '0';
  16.     return wynik;
  17. }
  18.  
  19. // Zamiana przy uzyciu schematu Hornera
  20. int na10(string liczba, int x)
  21. {
  22.     int len = liczba.length();
  23.     int wynik;
  24.     bool blad = false;
  25.  
  26.     if(liczba[0] >= 'A' && liczba[0] <= 'Z')
  27.         wynik = liczba[0] - 55;
  28.     else if(liczba[0] >= 'a' && liczba[0] <= 'z')
  29.         wynik = liczba[0] - 87;
  30.     else if(liczba[0] >= '0' && liczba[0] <= '9')
  31.         wynik = liczba[0] - '0';
  32.     else blad = true;
  33.  
  34.     for(int i = 1; i < len; i++)
  35.     {
  36.         if(liczba[i] >= 'A' && liczba[i] <= 'Z')
  37.             wynik = wynik * x + liczba[i] - 55;
  38.         else if(liczba[i] >= 'a' && liczba[i] <= 'z')
  39.             wynik = wynik * x + liczba[i] - 87;
  40.         else if(liczba[i] >= '0' && liczba[i] <= '9')
  41.             wynik = wynik * x + liczba[i] - '0';
  42.         else blad = true;
  43.     }
  44.     if(blad == false) return wynik;
  45.     else
  46.     {
  47.         cout << "Blad w zapisie";
  48.         return -1;
  49.     }
  50. }
  51.  
  52. int na10normalnie(string liczba, int podstawa)
  53. {
  54.     int len = liczba.length();
  55.     int wynik = 0;
  56.     int p = 1; // do ktorej potegi
  57.     int x = 0;
  58.     bool blad = false;
  59.  
  60.     for(int i = len - 1; i >= 0; i--)
  61.     {
  62.         if(liczba[i] >= 'A' && liczba[i] <= 'Z')
  63.             x = liczba[i] - 55;
  64.         else if(liczba[i] >= 'a' && liczba[i] <= 'z')
  65.             x = liczba[i] - 87;
  66.         else if(liczba[i] >= '0' && liczba[i] <= '9')
  67.             x = liczba[i] - '0';
  68.         else blad = true;
  69.  
  70.         wynik = wynik + (x * p);
  71.         p = p * podstawa;
  72.     }
  73.     if(!blad) return wynik;
  74.     else { cout << "blad"; return -1; }
  75. }
  76.  
  77. string naSystem(int liczba, int podstawa)
  78. {
  79.     string wynik = "";
  80.     string wzorzec = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  81.  
  82.     while(liczba > 0)
  83.     {
  84.         wynik = wzorzec[liczba % podstawa] + wynik;
  85.         liczba = liczba / podstawa;
  86.     }
  87.     return wynik;
  88. }
  89.  
  90. // P - pole czyli ten pierwiastek do kwadratu
  91. // P - liczba ktora pierwiastkujemy
  92. // eps - przyblizenie
  93. double sq(double P, double eps)
  94. {
  95.     double a = 1.0f;
  96.     double b = P;
  97.  
  98.     // Precyzja
  99.     while(fabs(a - b) > eps)
  100.     {
  101.         a = (a + b) / 2;
  102.         b = P / a;
  103.     }
  104.     return a;
  105. }
  106.  
  107. // a - podstawa potegi
  108. // n - wykladnik potegi
  109. long long potega(long long a, unsigned int n)
  110. {
  111.     long long wynik = 1;
  112.     while(n > 0)
  113.     {
  114.         if(n % 2 == 1) // jezeli bit jest = 1
  115.             wynik = wynik * a;
  116.         a = a * a;
  117.         n = n / 2; // skrocenie o jeden bit
  118.     }
  119.     return wynik;
  120. }
  121.  
  122. // POROWNANIA ILOSC
  123. void m1(double *ws, double n, double a, double b, int porownan)
  124. {
  125.     double x0;
  126.     double f0;
  127.  
  128.     double fa = f(ws, n, a);
  129.     double fb = f(ws, n, b);
  130.  
  131.     if(fa * fb > 0)
  132.     {
  133.         cout << "Funkcja nie spelnia zalozen";
  134.         return;
  135.     }
  136.     else
  137.     {
  138.         int i = 0;
  139.         while(i < porownan)
  140.         {
  141.             x0 = (a + b) / 2;
  142.             f0 - f(ws, n, x0);
  143.  
  144.             if(fa * fb < 0)
  145.             {
  146.                 b = x0;
  147.                 fb = f0;
  148.             }
  149.             else
  150.             {
  151.                 a = x0;
  152.                 fa = f0;
  153.             }
  154.  
  155.             i++;
  156.         }
  157.  
  158.         cout << "x0 = " << x0 << endl;
  159.     }
  160. }
  161.  
  162. // PRZYBLIZENIE DO WARTOSCI PIERWIASTKA
  163. void m2(double *ws, double n, double a, double b, double eps)
  164. {
  165.     double x0;
  166.     double f0;
  167.  
  168.     double fa = f(ws, n, a);
  169.     double fb = f(ws, n, b);
  170.  
  171.     if(fa * fb > 0)
  172.     {
  173.         cout << "blad";
  174.         return;
  175.     }
  176.     else
  177.     {
  178.         while(true)
  179.         {
  180.             x0 = (a + b) / 2;
  181.             f0 = f(ws, n, x0);
  182.  
  183.             if(fabs(f0) < eps)
  184.             {
  185.                 cout << "x0 = " << x0;
  186.                 break;
  187.             }
  188.             if(fa * fb < 0)
  189.             {
  190.                 b = x0;
  191.                 fb = f0;
  192.             }
  193.             else
  194.             {
  195.                 a = x0;
  196.                 fa = f0;
  197.             }
  198.  
  199.         }
  200.     }
  201. }
  202.  
  203. // PRZYBLIZENIE - CZY WARTO POROWNYWAC
  204. void m3(double *ws, double n, double a, double b, double eps)
  205. {
  206.     double x0;
  207.     double f0;
  208.  
  209.     double fa = f(ws, n, a);
  210.     double fb = f(ws, n, b);
  211.  
  212.     if(fa * fb > 0)
  213.     {
  214.         cout << "blad";
  215.         return;
  216.     }
  217.     else
  218.     {
  219.         while(true)
  220.         {
  221.             x0 = (a + b) / 2;
  222.             f0 = f(ws, n, x0);
  223.  
  224.             if(fabs(a - b) < eps)
  225.             {
  226.                 cout << "x0 = " << x0;
  227.                 break;
  228.             }
  229.             if(fa * fb < 0)
  230.             {
  231.                 b = x0;
  232.                 fb = f0;
  233.             }
  234.             else
  235.             {
  236.                 a = x0;
  237.                 fa = f0;
  238.             }
  239.         }
  240.     }
  241. }
  242.  
  243. // Obliczanie pola pod wykresem funkcji metoda z nadmiarem / niedomiarem
  244. double calka0(double *ws, int size, double a, double b, double eps)
  245. {
  246.     double P = 0.0f;
  247.     for (double i = a; i <= b; i += eps)
  248.     {
  249.         double fa = f(ws, size, i);
  250.         P = P + (fa * eps);
  251.     }
  252.     return P;
  253. }
  254.  
  255. // Obliczanie pola pod wykresem funkcji - prostokatow / 2
  256. double calka1(double *ws, int size, double a, double b, double eps)
  257. {
  258.     double P = 0.0f;
  259.     for (double i = a; i <= b; i += eps)
  260.     {
  261.         double fa = f(ws, size, i);
  262.         double fc = f(ws, size, i + eps);
  263.         double sr = (fa + fc) / 2;
  264.  
  265.         P = P + (sr * eps);
  266.     }
  267.     return P;
  268. }
  269.  
  270. // Obliczanie pola metoda trapezow
  271. double calka2(double *ws, int size, double a, double b, double eps)
  272. {
  273.     double P = 0.0f;
  274.     for (double i = a; i <= b; i += eps)
  275.     {
  276.         double fa = f(ws, size, i);
  277.         double fb = f(ws, size, i + eps);
  278.  
  279.         P = P + (fa + fb) * eps / 2;
  280.     }
  281.     return P;
  282. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement