Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<iomanip>
- #include<fstream>
- using namespace std;
- const double eps=0.01;
- int Zapisvfail(double *x,int stroka,char*name)
- {ofstream input2(name);
- for(int i=0;i<stroka;i++)
- {input2<<x[i]<<endl;}
- return 1;}
- void Newiazka(double** mass,double*x,double*b,int stolbec,int stroka)
- {cout<<"Znachenie neviazki"<<endl;
- double sum=0;
- for(int i=0;i<=stolbec-1;i++)
- {for(int j=0;j<=stroka;j++)
- {sum+=mass[i][j]*x[j];}
- cout<<mass[i][stroka]-sum<<endl;}
- }
- bool proverkadiagonali(double**mass,int stroka,int stolbec)
- {for(int i=0;i<stroka;i++)
- {double sum=0;
- for(int j=0;j<stolbec-1;j++)
- {if(j!=i)
- {sum+=mass[i][j];}}
- if(abs(mass[i][i])>abs(sum))
- return 1;
- return 0;}}
- bool proverka(double**mass,double*b,double*x,double*dx,int stroka,int stolbec)
- {for(int i=0;i<stroka;i++)
- {if(fabs(x[i]-dx[i])>eps)
- {return false;}}
- }
- void MZ(double**mass,double*b,double*x,double*dx,int stroka,int stolbec)
- {double kolvoit=0;
- char* name="Metod Zeydelia.txt";
- for(;proverka(mass,b,x,dx,stroka,stolbec)==false;)
- {for(int u=0;u<stroka;u++)
- {dx[u]=x[u];}
- for(int i=0;i<stroka;i++)
- {double sum=0;
- for(int j=0;j<stroka;j++)
- {if(j!=i)
- {sum+=x[j]*mass[i][j];}}
- x[i]=(mass[i][stolbec-1]-sum)/mass[i][i];
- }kolvoit++;}
- cout<<kolvoit<<endl;
- for (int i=0; i<=(stroka-1); i++)
- {cout << "x[" << i+1 <<"] = " <<x[i]<<endl;}
- Newiazka(mass,x,b,stolbec,stroka);
- Zapisvfail(x,stroka,name);
- return;}
- void MPI(double**mass,double*b,double*x,double*dx,int stroka,int stolbec)
- {double kolvoit=0;
- char* name="Metod prostih iteraciy.txt";
- for(;proverka(mass,b,x,dx,stroka,stolbec)==false;)
- {for(int u=0;u<stroka;u++)
- {dx[u]=x[u];}
- for(int i=0;i<stroka;i++)
- {double sum=0;
- for(int j=0;j<stroka;j++)
- {if(j!=i)
- {sum+=dx[j]*mass[i][j];}}
- x[i]=(mass[i][stolbec-1]-sum)/mass[i][i];
- }kolvoit++;}
- cout<<kolvoit<<endl;
- for (int i=0; i<=(stroka-1); i++)
- {cout << "x[" << i+1 <<"] = " <<x[i]<<endl;}
- Newiazka(mass,x,b,stolbec,stroka);
- Zapisvfail(x,stroka,name);
- return;}
- int main()
- {ifstream input;
- input.open("MATRICA.txt");
- int i,j,stroka,stolbec;
- input>>stroka>>stolbec;
- double **mass= new double *[stroka];
- for (i = 0; i < stroka; i++)
- {mass[i] = new double [stolbec];
- for (j = 0; j < stolbec; j++)
- input>>mass[i][j];}
- input.close();
- cout << "Matrix in the file: " << endl;
- for (i = 0; i < stroka; i++)
- {for (j = 0; j < stolbec; j++)
- cout << setw(13) <<mass[i][j];
- cout << endl;}
- if(proverkadiagonali(mass,stroka,stolbec)==false)
- {cout<<"Otsutstvuiet diagonal'noe preobladanie"<<endl;
- system("pause");
- return 0;}
- double *x=new double[stroka];
- double *dx=new double[stroka];
- for(int k=0;k<stroka;k++)
- {x[k]=0;}
- double*b;
- b=new double[stroka];
- for(int n = 0; n <stroka; n++)
- {b[n] = mass[n][stroka];}
- cout<<"Metod Zeydelia"<<endl;
- MZ(mass,b,x,dx,stroka,stolbec);
- cout<<"Metod Prostih uteraciy"<<endl;
- MPI(mass,b,x,dx,stroka,stolbec);
- system("pause");
- return 0;}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement