Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <math.h>
- #include <iomanip>
- using namespace std;
- void wyswietl2D(double **tablica, int rozmiar)
- {
- cout<<"A="<<endl;
- for(int i=0;i<rozmiar;i++)
- {
- for(int j=0;j<rozmiar;j++)
- {
- cout<<setw(10)<<tablica[i][j]<<" ";
- }
- cout<<endl;
- }
- }
- void wyswietl1D(double *tabrozwiazania,int rozmiar)
- {
- for(int i=0;i<rozmiar;i++){
- cout << setw(10)<<tabrozwiazania[i]<<endl;
- }
- }
- bool sprawdzaniezera(double a)
- {
- bool czy=false;
- if(a==0)czy=true;
- return czy;
- }
- void gaussbezsprawdania(double **tabaktualna,double *tabwyrazy, int rozmiar,int i )
- {
- double p;
- for (int w=i+1; w < rozmiar; w++)
- {
- p = (tabaktualna[w][i] )/ (tabaktualna[i][i]);
- tabwyrazy[w] = tabwyrazy[w] - tabwyrazy[i]*p;
- for(int k = i; k < rozmiar; k++)
- {
- tabaktualna[w][k] = tabaktualna[w][k] - tabaktualna[i][k]*p;
- }
- }
- }
- bool eliminacjanormalna(double **tabaktualna,double *tabwyrazy, int rozmiar)
- {
- for(int i=0;i<rozmiar;i++){
- if(sprawdzaniezera(tabaktualna[i][i])==true) return false;
- gaussbezsprawdania(tabaktualna,tabwyrazy,rozmiar,i);
- }
- return true;
- }
- bool eliminacjakolumny(double **tabaktualna,double *tabwyrazy, int rozmiar)
- {
- double p;
- for(int i=0; i < rozmiar; i++)
- {
- double max = fabs(tabaktualna[i][i]);
- int indeks=i;
- for(int l = i+1; l < rozmiar; l++)
- {
- if(max < fabs(tabaktualna[l][i]))
- {
- max = fabs(tabaktualna[l][i]); //sprawdzanie maxa
- indeks = l;
- }
- }
- if(sprawdzaniezera(max) )return false;
- swap(tabaktualna[indeks],tabaktualna[i]);
- swap(tabwyrazy[indeks],tabwyrazy[i]); //swapowanie wiersza max z aktualnym
- for(int z=0;z<rozmiar;z++)gaussbezsprawdania(tabaktualna,tabwyrazy,rozmiar,z);
- }
- return true;
- }
- void niewiadome(double **tabaktualna,double *tabwyrazy,double *tabrozwiazania,int rozmiar)
- {
- for(int i = rozmiar-1; i >= 0; i--)
- {
- if(i == rozmiar-1) tabrozwiazania[i] = tabwyrazy[i] / tabaktualna[i][i];
- else
- {
- double temp = tabwyrazy[i];
- for(int j = rozmiar-1; j > i; j--) temp = temp - ( tabrozwiazania[j] * tabaktualna[i][j]); // suma
- tabrozwiazania[i] = temp / tabaktualna[i][i];
- }
- }
- }
- bool eliminacjapelna(double **tabaktualna,double *tabwyrazy, int rozmiar,double *pomocnicza)
- {
- for(int i=0; i < rozmiar; i++)
- {
- double max = fabs(tabaktualna[i][i]);
- int indeksW=i;
- int indeksK=i;
- for(int w = i; w < rozmiar; w++)
- {
- for(int k = i; k<rozmiar;k++)
- {
- if(max < fabs(tabaktualna[w][k]))
- {
- max = fabs(tabaktualna[w][k]); //sprawdzanie maxa
- indeksK = k;
- indeksW = w;
- }
- }
- }
- if(sprawdzaniezera(max)==true)return false;
- if(indeksW != i)
- {
- for(int b = 0; b < rozmiar; b++)
- swap(tabaktualna[indeksW][b], tabaktualna[i][b]); //zamiana wierszy
- swap(tabwyrazy[indeksW],tabwyrazy[i]);
- }
- if(indeksK != i)
- {
- for(int b = 0; b < rozmiar ;b++)
- swap(tabaktualna[b][indeksK], tabaktualna[b][i]); //zamiana kolumn
- swap(pomocnicza[indeksK],pomocnicza[i]);
- }
- }
- for(int i=0;i<rozmiar;i++)gaussbezsprawdania(tabaktualna,tabwyrazy,rozmiar,i);
- return true;
- }
- void sortdlapelnego(double *pomocnicza, double *tabrozwiazania,int rozmiar)
- {
- for(int i = 0; i < rozmiar; i++)
- {
- for(int j = 1; j < rozmiar; j++)
- {
- if(pomocnicza[j-1] > pomocnicza[j])
- {
- swap(pomocnicza[j-1], pomocnicza[j]);
- swap(tabrozwiazania[j-1], tabrozwiazania[j]);
- }
- }
- }
- }
- void wynikipelny(double **tabaktualna,double *tabwyrazy, int rozmiar,double *pomocnicza, double *tabrozwiazania)
- {
- cout<<"Numery X:"<<endl;
- wyswietl1D(pomocnicza,rozmiar);
- niewiadome(tabaktualna, tabwyrazy, tabrozwiazania,rozmiar);
- sortdlapelnego(pomocnicza,tabrozwiazania,rozmiar);
- }
- void kreseczki()
- {
- for(int i=0;i<50;i++) cout<<"_";
- cout<<endl;
- }
- void recycling(double **tabaktualna,double *tabwyrazy, double *tabrozwiazania,int rozmiar)
- {
- for(int i = 0; i < rozmiar; i++) delete[] tabaktualna[i];
- delete[] tabaktualna;
- delete[] tabwyrazy;
- delete[] tabrozwiazania;
- }
- void sztywno1(double **tabaktualna,double *tabwyrazy)
- {
- tabaktualna[0][0] = 1.0;
- tabaktualna[0][1] = 1.0;
- tabaktualna[0][2] = -3.0;
- tabaktualna[0][3] = 1.0;
- tabaktualna[1][0] = 0.0;
- tabaktualna[1][1] = 2.0;
- tabaktualna[1][2] = -1.0;
- tabaktualna[1][3] = 2.0;
- tabaktualna[2][0] = 1.5;
- tabaktualna[2][1] = 3.5;
- tabaktualna[2][2] = -3.5;
- tabaktualna[2][3] = 6.5;
- tabaktualna[3][0] = 0.5;
- tabaktualna[3][1] = 1.5;
- tabaktualna[3][2] = 0.0;
- tabaktualna[3][3] = 7.5;
- tabwyrazy[0]= 3.0;
- tabwyrazy[1]= 4.0;
- tabwyrazy[2]= 14.5;
- tabwyrazy[3]= 15.5;
- }
- void sztywno2(double **tabaktualna,double *tabwyrazy)
- {
- tabaktualna[0][0] = 6.5;
- tabaktualna[0][1] = -1.25;
- tabaktualna[0][2] = 1.5;
- tabaktualna[0][3] = 0.75;
- tabaktualna[1][0] = 6.5;
- tabaktualna[1][1] = 6.25;
- tabaktualna[1][2] = -11.5;
- tabaktualna[1][3] = -1.25;
- tabaktualna[2][0] = 19.5;
- tabaktualna[2][1] = 14.25;
- tabaktualna[2][2] = 11.0;
- tabaktualna[2][3] = -2.75;
- tabaktualna[3][0] = 26.0;
- tabaktualna[3][1] = 13.0;
- tabaktualna[3][2] = 6.0;
- tabaktualna[3][3] = -5.0;
- tabwyrazy[0]= 9.25;
- tabwyrazy[1]= -11.25;
- tabwyrazy[2]= 16.25;
- tabwyrazy[3]= 19.0;
- }
- void sztywno3(double **tabaktualna,double *tabwyrazy)
- {
- tabaktualna[0][0] = -6.5;
- tabaktualna[0][1] = 1.75;
- tabaktualna[0][2] = 2.25;
- tabaktualna[0][3] = 0.0;
- tabaktualna[1][0] = 6.5;
- tabaktualna[1][1] = -5.0;
- tabaktualna[1][2] = 0.0;
- tabaktualna[1][3] = -3.0;
- tabaktualna[2][0] = -26.0;
- tabaktualna[2][1] = -6.0;
- tabaktualna[2][2] = -6.0;
- tabaktualna[2][3] = -12.0;
- tabaktualna[3][0] = -13.0;
- tabaktualna[3][1] = 10.0;
- tabaktualna[3][2] = 2.0;
- tabaktualna[3][3] = -6.0;
- tabwyrazy[0]= -9.0;
- tabwyrazy[1]= 5.0;
- tabwyrazy[2]= -76.0;
- tabwyrazy[3]= -20.0;
- }
- void menu()
- {
- int rozmiar=1;
- double **tabaktualna;
- double *tabwyrazy;
- double *tabrozwiazania;
- double *pomocnicza;
- int menu,menu2,menu3;
- cout<<"Co chcesz zrobic?"<<endl;
- cout<<"1.Uzyc macierzy wspianej na sztywno"<<endl;
- cout<<"2.Wpisac wspolczynniki samemu"<<endl;
- cin>>menu;
- switch(menu)
- {
- case 1:
- rozmiar=4;
- pomocnicza=new double[rozmiar];
- for(int i=0;i<rozmiar;i++) pomocnicza[i]=i+1;
- tabaktualna=new double*[rozmiar];
- for(int i = 0; i<4;i++) tabaktualna[i] = new double[rozmiar];
- tabwyrazy=new double[rozmiar];
- tabrozwiazania=new double[rozmiar];
- //---------------------------------------------------
- cout<<"Ktory chcesz wybrac:"<<endl;
- kreseczki();
- cout<<"1.(Podstawowy/kolumny)"<<endl;
- sztywno1(tabaktualna,tabwyrazy);
- wyswietl2D(tabaktualna,rozmiar);
- cout<<"B= "<<endl;
- wyswietl1D(tabwyrazy,rozmiar);
- kreseczki();
- cout<<"2.(Pelny)"<<endl;
- sztywno2(tabaktualna,tabwyrazy);
- wyswietl2D(tabaktualna,rozmiar);
- cout<<"B= "<<endl;
- wyswietl1D(tabwyrazy,rozmiar);
- kreseczki();
- cout<<"3.(Pelny)"<<endl;
- sztywno3(tabaktualna,tabwyrazy);
- wyswietl2D(tabaktualna,rozmiar);
- cout<<"B= "<<endl;
- wyswietl1D(tabwyrazy,rozmiar);
- kreseczki();
- //---------------------------------------------------
- cin>>menu3;
- switch(menu3)
- {
- case 1:
- sztywno1(tabaktualna,tabwyrazy);
- break;
- case 2:
- sztywno2(tabaktualna,tabwyrazy);
- break;
- case 3:
- sztywno3(tabaktualna,tabwyrazy);
- break;
- default:
- cout<<"error"<<endl;
- return;
- }
- break;
- case 2:
- cout<<"Podaj rozmiar macierzy n x n"<<endl;
- cin>>rozmiar;
- pomocnicza=new double[rozmiar];
- for(int i=0;i<rozmiar;i++)
- pomocnicza[i]=i;
- tabaktualna=new double*[rozmiar];
- tabwyrazy=new double[rozmiar];
- tabrozwiazania=new double[rozmiar];
- for(int i = 0; i<rozmiar;i++)
- tabaktualna[i] = new double[rozmiar];
- cout<<"Podaj kolejne wspolczynniki: "<<endl;
- for(int i=0;i<rozmiar;i++)
- {
- for(int j=0;j<rozmiar;j++)
- {
- cout<<"Podaj element nr "<<i<<" x "<< j<<endl;
- cin>>tabaktualna[i][j];
- cout <<endl;
- }
- cout<<endl;
- }
- for(int i=0;i<rozmiar;i++)
- {
- cout<<"Podaj wyrazy wolne"<<endl;
- cin>>tabwyrazy[i];
- cout<<endl;
- }
- break;
- //cout << tabaktualna[0][0];
- default:
- cout<<"error"<<endl;
- return;
- break;
- }
- cout<<"Co chcesz zrobic ?"<<endl;
- cout<<"1.Eliminacja normalna"<<endl;
- cout<<"2.Eliminacja z wyborem kolumny"<<endl;
- cout<<"3.Eliminacja z pelnym wyborem"<<endl;
- cin>>menu2;
- cout<<endl;
- switch(menu2)
- {
- case 1:
- if(eliminacjanormalna(tabaktualna,tabwyrazy,rozmiar)==false)return;
- wyswietl2D(tabaktualna,rozmiar);
- niewiadome(tabaktualna,tabwyrazy,tabrozwiazania,rozmiar);
- cout<<"B="<<endl;
- wyswietl1D(tabwyrazy,rozmiar);
- cout<<endl;
- cout<<"wyniki:"<<endl;
- wyswietl1D(tabrozwiazania,rozmiar);
- cout<<endl;
- break;
- case 2:
- if(eliminacjakolumny(tabaktualna,tabwyrazy,rozmiar)==false) return;
- wyswietl2D(tabaktualna,rozmiar);
- niewiadome(tabaktualna,tabwyrazy,tabrozwiazania,rozmiar);
- cout<<"B="<<endl;
- wyswietl1D(tabwyrazy,rozmiar);
- cout<<endl;
- cout<<"wyniki:"<<endl;
- wyswietl1D(tabrozwiazania,rozmiar);
- cout<<endl;
- break;
- case 3:
- if(eliminacjapelna(tabaktualna,tabwyrazy,rozmiar,pomocnicza)==false) return;
- wyswietl2D(tabaktualna,rozmiar);
- wynikipelny(tabaktualna,tabwyrazy,rozmiar,pomocnicza,tabrozwiazania);
- cout<<"B="<<endl;
- wyswietl1D(tabwyrazy,rozmiar);
- cout<<endl;
- cout<<"wyniki:"<<endl;
- wyswietl1D(tabrozwiazania,rozmiar);
- cout<<endl;
- //wyswietl1D(pomocnicza,rozmiar);
- break;
- //kill-me
- default:
- cout<<"error"<<endl;
- return;
- break;
- }
- recycling(tabaktualna,tabwyrazy,tabrozwiazania,rozmiar);
- }
- int main()
- {
- menu();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement