Facebook
From Synaj, 5 Years ago, written in C++.
Embed
Download Paste or View Raw
Hits: 218
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. struct wezel
  6. {
  7.     int x, y;
  8. };
  9.  
  10. wezel* wprowadzanie_danych(int n, int &arg)
  11. {
  12.     wezel* tab = new wezel[n];
  13.     int i, j, k, x=0;
  14.  
  15.         cout << "Wprowadz x0: ";
  16.         cin >> tab[0].x;
  17.         cout << "\nWprowadz y0: ";
  18.         cin >> tab[0].y;
  19.  
  20.     for(i=1; i<n; i++)
  21.     {
  22.         do
  23.         {   x=0;
  24.             cout << "\nWprowadz x" << i << ": " <<endl;
  25.             cin >> k;
  26.             if(tab[i-1].x > k)
  27.             {
  28.              x=1;
  29.             }
  30.             else
  31.             {
  32.                for(j=i-1; j>=0; j--)
  33.             {
  34.                 if(tab[j].x==k)
  35.                 {
  36.                     x=1;
  37.                 }
  38.             }
  39.             }
  40.         }while(x==1);
  41.  
  42.         if(i!=0)
  43.         {
  44.         tab[i].x=k;
  45.         cout << "\nWprowadz y" << i << ": " << endl;
  46.         cin >>tab[i].y;
  47.         }
  48.     }
  49.  
  50.     cout << "\nPodaj wartosc argumentu x: ";
  51.     cin >> arg;
  52.  
  53.     while((arg<tab[0].x) || (arg>tab[n-1].x))
  54.     {
  55.         cout << "\nPodany argument nie zawiera sie w przedziale interpolacji. Sprobuj ponownie:" << endl;
  56.         cin >> arg;
  57.     }
  58.     return tab;
  59. }
  60.  
  61. double Lagrange(wezel* tab, int arg, int n)
  62. {
  63. double S=0, I=1, k, r;
  64. int i, j;
  65. for(i=0; i<n; i++)
  66. {
  67.     for(j=0; j<n; j++)
  68.     {
  69.         if(i!=j)
  70.         {
  71.             k=1.0*(arg-tab[j].x)/(tab[i].x-tab[j].x);
  72.             I*=k;
  73.         }
  74.         else{}
  75.     }
  76.     r=1.0*tab[i].y;
  77.     S+=r*I;
  78.     I=1;
  79. }
  80. return S;
  81. }
  82. int main()
  83. {
  84. int arg;
  85. cout << "Podaj rozmiar tablicy wezlow: ";
  86. int n, x;
  87. cin >> n;
  88. wezel* tab = new wezel[n];
  89. tab=wprowadzanie_danych(n, x);
  90. cout << "Wartosc wielomianu Lagrange'a w podanym punkcie x wynosi: " << Lagrange(tab, arg, n) << endl;
  91. delete[] tab;
  92. return 0;
  93. }
  94.