Facebook
From RafaƂ Senior DeveloperRC8, 6 Years ago, written in C++.
Embed
Download Paste or View Raw
Hits: 227
  1. #include "Calkowanie.h"
  2.  
  3. double f(double x)
  4. {
  5.         return x;
  6. }
  7.  
  8. void Calka_Kwadrat()
  9. {
  10.         int a, b, ile;
  11.         cout << "Podaj a: ";
  12.         cin >> a;
  13.         cout << "Podaj b: ";
  14.         cin >> b;
  15.         cout << "Podaj ilosc przedzialow: ";
  16.         cin >> ile;
  17.  
  18.         double pole = 0;
  19.         double krok = (b - a) / ile;
  20.  
  21.         while (a < b)
  22.         {
  23.                 pole += krok * f(a);
  24.                 a += krok;
  25.         }
  26.  
  27.         cout << "\n\nKWADRAT: Pole po wykresem funkcji od " << a << " do " << b << " = " << pole << endl;
  28. }
  29.  
  30.  
  31. void Calka_Trapez()
  32. {
  33.         int a, b, ile;
  34.         cout << "Podaj a: ";
  35.         cin >> a;
  36.         cout << "Podaj b: ";
  37.         cin >> b;
  38.         cout << "Podaj ilosc przedzialow: ";
  39.         cin >> ile;
  40.         double pole = 0;
  41.         double krok = (b - a) / ile;
  42.  
  43.         while (a < b)
  44.         {
  45.                 pole += ((krok * f(a)) + (krok * f(a + krok))) / 2.0;
  46.                 a += krok;
  47.         }
  48.  
  49.         cout << "\n\nTRAPEZ: Pole po wykresem funkcji od " << a << " do " << b << " = " << pole << "\n";
  50. }
  51.  
  52. void Calka_Simpson()
  53. {
  54.         int a, b, ile;
  55.         cout << "Podaj a: ";
  56.         cin >> a;
  57.         cout << "Podaj b: ";
  58.         cin >> b;
  59.         cout << "Podaj ilosc przedzialow: ";
  60.         cin >> ile;
  61.  
  62.         double pole = 0;
  63.         double krok = (b - a) / ile;
  64.  
  65.         while (a < b)
  66.         {
  67.                 pole += ((krok * f(a)) + (krok * f(a + krok)) + 4 * (((krok * f(a)) + (krok * f(a + krok))) / 2.0)) / 6.0;
  68.                 a += krok;
  69.         }
  70.  
  71.         cout << "\n\nSIMPSON: Pole po wykresem funkcji od " << a << " do " << b << " = " << pole << "\n\n";
  72. }
  73.  
  74.  
  75.  
  76. void Calka_Dwuwezlowa()
  77. {
  78.         double a, b;
  79.         cout << "Podaj przedzial a: "; cin >> a;
  80.         cout << "Podaj przedzial b: "; cin >> b;
  81.  
  82.         int n1 = 2;
  83.  
  84.         double* tabDwuWezlowe = new double[n1];
  85.         tabDwuWezlowe[0] = 0.577350;
  86.         tabDwuWezlowe[1] = -0.577350;
  87.  
  88.         double* tabAk2 = new double[n1];
  89.         tabAk2[0] = 1;
  90.         tabAk2[1] = 1;
  91.  
  92.         double* tabT;
  93.         tabT = przejscie(tabDwuWezlowe, a, b, n1);
  94.         cout << "\nCalka dwuwezlowa: " << licz(tabT, tabAk2, a, b, n1) << endl;
  95. }
  96.  
  97. void Calka_Czterowezlowa()
  98. {
  99.         double a, b;
  100.         cout << "Podaj przedzial a: "; cin >> a;
  101.         cout << "Podaj przedzial b: "; cin >> b;
  102.  
  103.         int n2 = 4;
  104.  
  105.         double* tabCzteroWezlowe = new double[n2];
  106.         tabCzteroWezlowe[0] = -0.861136;
  107.         tabCzteroWezlowe[1] = -0.339981;
  108.         tabCzteroWezlowe[2] = 0.339981;
  109.         tabCzteroWezlowe[3] = 0.861136;
  110.  
  111.         double* tabAk4 = new double[n2];
  112.         tabAk4[0] = 0.347855;
  113.         tabAk4[1] = 0.652145;
  114.         tabAk4[2] = 0.652145;
  115.         tabAk4[3] = 0.347855;
  116.  
  117.         double* tabT;
  118.         tabT = przejscie(tabCzteroWezlowe, a, b, n2);
  119.         cout << "\nCalka czterowezlowa: " << licz(tabT, tabAk4, a, b, n2) << endl;
  120. }
  121.  
  122. double* przejscie(double* tab, double a, double b, int n)
  123. {
  124.         double tmp;
  125.         for (int i = 0; i<n; i++)
  126.         {
  127.                 tmp = (a + b) / 2 + (b - a) / 2 * tab[i];
  128.                 tab[i] = tmp;
  129.         }
  130.  
  131.         return tab;
  132. }
  133.  
  134. double licz(double* tab, double* Ak, double a, double b, int n)
  135. {
  136.         double calka = 0;
  137.         for (int i = 0; i<n; i++)
  138.                 calka += Ak[i] * f(tab[i]);
  139.  
  140.         calka *= (b - a) / 2;
  141.  
  142.         return calka;
  143. }