Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <ctime>
- #include <cstdlib>
- #include <cstdio>
- #include <math.h>
- using namespace std;
- void wypisz(double**,int);
- int main(){
- cout.precision(16);
- int n;
- cout<<"podaj n"<<endl;
- cin>>n;
- cout << endl;
- double **tab;
- double **tab2;
- double *A;
- time_t now;
- time(&now);
- srand((unsigned int)now);
- tab=new double*[n];
- for (int i=0;i<n;i++){
- tab[i]=new double[n+1];
- }
- A=new double[n];
- for(int i=0; i<n; i++){
- //A[i]=pow(2.0f, rand()%10);
- //A[i]=rand()%2000-1000;
- A[i]=rand()/32.931;
- cout << A[i] << endl;
- }
- for (int i=0;i<n;i++){
- double temp=0;
- for (int j=0;j<n;j++){
- //tab[i][j]=pow(2.0f, rand()%10);
- //tab[i][j]=rand()%20-10;
- tab[i][j]=rand()/49.001;
- temp+=tab[i][j]*A[j];
- }
- tab[i][n]=temp;
- }
- tab2=new double*[n];
- for (int i=0;i<n;i++){
- tab2[i]=new double[n+1];
- }
- for(int y=0; y<n; y++)
- for(int x=0; x<n+1; x++)
- tab2[y][x]=tab[y][x];
- //rozwiązanie bez przestawiania
- for(int y=0; y<n; y++){
- double mnoznik=1/tab[y][y];
- for (int x=y;x<n+1;x++){
- tab[y][x]*=mnoznik;
- }
- for(int w=y+1; w<n; w++){
- double mnoznik=tab[w][y]/tab[y][y];
- for(int x=0; x<n+1; x++){
- tab[w][x]-=tab[y][x]*mnoznik;
- }
- }
- }
- for(int y=n-1; y>=0; y--){
- for(int w=y-1; w>=0; w--){
- tab[w][n]-=tab[y][n]*tab[w][y];
- tab[w][y]=0;
- }
- }
- //cout << endl;
- //for(int i=0; i<n; i++)
- //cout << tab[i][n] << ' ' << abs(tab[i][n]-A[i])+1 << ' ' << abs(tab[i][n]-A[i])/A[i]+1 << endl;
- //rozwiązanie z przestawianiem
- for(int y=0; y<n; y++){
- double record=tab2[y][y];
- int ynum=y;
- for(int i=y; i<n; i++){
- if(tab2[i][y]>record){
- record=tab2[i][y];
- ynum=i;
- }
- }
- swap(tab2[y], tab2[ynum]);
- double mnoznik=1/tab2[y][y];
- for (int x=y;x<n+1;x++){
- tab2[y][x]*=mnoznik;
- }
- for(int w=y+1; w<n; w++){
- double mnoznik=tab2[w][y]/tab2[y][y];
- for(int x=0; x<n+1; x++){
- tab2[w][x]-=tab2[y][x]*mnoznik;
- }
- }
- }
- for(int y=n-1; y>=0; y--){
- for(int w=y-1; w>=0; w--){
- tab2[w][n]-=tab2[y][n]*tab2[w][y];
- tab2[w][y]=0;
- }
- }
- cout << endl;
- double roznica=0;
- for(int i=0; i<n; i++){
- cout << tab[i][n] << ' ' << abs(tab[i][n]-A[i])+1 << ' ' << abs(tab[i][n]-A[i])/A[i]+1 << endl << tab2[i][n] << ' ' << abs(tab2[i][n]-A[i])+1 << ' ' << abs(tab2[i][n]-A[i])/A[i]+1 <<endl<<endl;
- //cout << tab[i][n] << ' ' << abs(tab[i][n]-A[i])+1 << ' ' << abs(tab[i][n]-A[i])/A[i]+1 << endl << tab2[i][n] << ' ' << abs(tab2[i][n]-A[i])+1 << ' ' << abs(tab2[i][n]-A[i])/A[i]+1 <<endl<< abs(tab[i][n]-A[i])/abs(tab2[i][n]-A[i]) <<endl <<endl;
- roznica+=abs(tab[i][n]-A[i])/abs(tab2[i][n]-A[i]);
- //cout << tab2[i][n] << ' ' << abs(tab2[i][n]-A[i])+1 << ' ' << abs(tab2[i][n]-A[i])/A[i]+1 << endl;
- }
- //cout << roznica/n;
- return 0;
- }
- void wypisz(double **tab, int n){
- cout<<endl;
- for (int i=0;i<n;i++){
- for (int j=0;j<n+1;j++){
- cout<<tab[i][j]<<" ";
- }
- cout<<endl;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement