Facebook
From Hot Plover, 5 Years ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 242
  1. #include <iostream>
  2. #include <fstream>
  3.  
  4. using namespace std;
  5.  
  6. void bezwyboru(unsigned rozmiarmacierzy, double**A, double*b, double*x)
  7. {    double* p;
  8.  
  9.                 p = new double[rozmiarmacierzy];
  10.  
  11.             for(int zmienna=0; zmienna < rozmiarmacierzy-1; zmienna++)
  12.             {
  13.                 for(int i=zmienna; i<rozmiarmacierzy; i++)
  14.                     p[i]=A[i][zmienna]/A[zmienna][zmienna];
  15.                    
  16.                 for(int j=zmienna+1; j<rozmiarmacierzy; j++)
  17.                 {
  18.                     for(int k=zmienna; k < rozmiarmacierzy; k++)
  19.                     {
  20.                         A[j][k]=A[j][k]-p[j]*A[zmienna][k];
  21.                     }
  22.  
  23.                     b[j]=b[j]-p[j]*b[zmienna];
  24.                     cout << b[j]<<endl;
  25.                 }
  26.             }
  27.  
  28. }
  29.  
  30. int main()
  31. {
  32.     unsigned rozmiarmacierzy;
  33.     double** A;
  34.     double* b;
  35.     double* x;
  36.  
  37.     while(true)
  38.     {
  39.         int wybor;
  40.         cout << "\nMENU:" <<endl;
  41.         cout <<"1 - wczytanie danych" << endl;
  42.         cout <<"2 - metoda eliminacji Gaussa bez wyboru elementu"<< endl;
  43.         cout <<"3 - metoda eliminacji Gaussa z wyborem elementu w wierszach"<<endl;
  44.         cout <<"4 - metoda eliminacji Gaussa z wyborem elementu w kolumnach"<<endl;
  45.         cout <<"5 - metoda eliminacji Gaussa z pelnym wyborem elementu"<< endl;
  46.         cout <<"6 - wyjscie z programu"<<endl;
  47.  
  48.         cin>>wybor;
  49.  
  50.         switch(wybor)
  51.         {
  52.         case 1:
  53. {
  54.             ifstream plik_zrodlowy("test.csv");
  55.             if (!plik_zrodlowy.is_open())
  56.             {
  57.                 cout <<"Plik nie zosstal otwarty!"<<endl;
  58.                 return -1;
  59.             }
  60.  
  61.             plik_zrodlowy >> rozmiarmacierzy;
  62.  
  63.             A = new double*[rozmiarmacierzy];
  64.  
  65.             A[0] = new double[rozmiarmacierzy*rozmiarmacierzy];
  66.  
  67.             for(unsigned i = 1; i< rozmiarmacierzy; i++)
  68.                 A[i] = A[i-1] + rozmiarmacierzy;
  69.  
  70.             b = new double[rozmiarmacierzy];
  71.  
  72.             char pol_kolumny;
  73.  
  74.             for (unsigned i = 0; i < rozmiarmacierzy+1; i++)
  75.                 plik_zrodlowy >> pol_kolumny;
  76.  
  77.             for (unsigned i = 0; i < rozmiarmacierzy; i++)
  78.             {
  79.                 for (unsigned j = 0; j < rozmiarmacierzy; j++)
  80.                 {
  81.                     plik_zrodlowy >> A[i][j];
  82.                     plik_zrodlowy >> pol_kolumny;
  83.                 }
  84.                 plik_zrodlowy >> pol_kolumny;
  85.                 plik_zrodlowy >> b[i];
  86.             }
  87.             plik_zrodlowy.close();
  88.  
  89.             cout << "\nPobrano dane"<<endl;
  90.             for(int i=0; i<rozmiarmacierzy; i++)
  91.             {
  92.                 for(int j=0; j<rozmiarmacierzy; j++)
  93.                 {
  94.                     cout <<"\t"<< A[i][j];
  95.                 }
  96.                 cout<<endl;
  97.             }
  98.             cout << rozmiarmacierzy<<endl;
  99.  
  100.             break;}
  101.  
  102.         case 2:
  103.  
  104.        bezwyboru(rozmiarmacierzy,A,b,x);
  105.                 break;
  106.         case 3:
  107.             {
  108.             double suma=0.0;
  109.             for(int k=rozmiarmacierzy-1; k>=0;k--)
  110.             {
  111.                 suma=0.0;
  112.                 for(int j=0;j<rozmiarmacierzy;j++)
  113.                 {
  114.                     if(k==j)
  115.                         suma=suma+0;
  116.                     else
  117.                         suma=suma+(A[k][j]*b[j]);
  118.  
  119.                 b[k]=(A[k][rozmiarmacierzy]-suma)/A[k][k];
  120.                 cout <<b[j]<<endl;
  121.                 }
  122.             }
  123.             }
  124.  
  125.             break;
  126.  
  127.         case 4:
  128.             break;
  129.         case 5:
  130.             break;
  131.         case 6:
  132.             return 0;
  133.  
  134.     }
  135. }
  136. }
  137.