Advertisement
Guest User

Untitled

a guest
Dec 5th, 2011
202
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.37 KB | None | 0 0
  1. /*Решить систему линейных уравнений параллельным вариантом метода Гаусса.
  2. Количество потоков задается с помощью клавиатуры. Данные системы считываются из
  3. файла. Результат записывается снова в файл. */
  4. #include <iostream>
  5. #include <fstream>
  6. #include "windows.h"
  7. #include "process.h"
  8. #include "conio.h"
  9. using namespace std;
  10.  
  11. double mas_koef[10][10]; //массив элементов системы
  12. double mas_vect[10]; //массив вектора
  13. int n ; //размерность
  14. double elem[10]; //нужные множители
  15. double dop_mas[10][10]; //все множители
  16.  
  17. void gauss_koef (void* param);
  18. void cin_file();
  19. void cout_file();
  20. void vect ();
  21.  
  22. int main()
  23. {  
  24.     SetConsoleOutputCP(1251);
  25.     cin_file();
  26.     _beginthread(gauss_koef,0,0);
  27.     //gauss_koef(NULL);
  28.     vect ();
  29.     cout<<endl;
  30.     system("pause");
  31.     return 0;
  32. }
  33.  
  34. void gauss_koef (void* param)
  35. {
  36.     int k=0;
  37.     int m=0;
  38.     for (int s=0;s<n-1;s++) //делаем под главной диагональю 0
  39.     for (int i=s+1;i<n;i++)
  40.         for (int j=n-1;j>=0;j--)
  41.           {
  42.             dop_mas[k][j]=((-1)*(mas_koef[i][s]/mas_koef[s][s]));
  43.             mas_koef[i][j]=mas_koef[i][j]+dop_mas[k][j]*mas_koef[s][j];
  44.             k++;
  45.           }
  46.  
  47.         k=0; //переписываем в одномерный массив наши множители
  48.         for (int i=0;i<n;i++)
  49.         {
  50.             elem[k]=dop_mas[m][n-1];
  51.             m+=n;
  52.             k++;
  53.         }
  54.  
  55.         //cout_file();
  56.     _endthread();
  57. }
  58.  
  59. void vect ()
  60. {
  61.     mas_vect[1]=mas_vect[0]*elem[0]+mas_vect[1];
  62.     mas_vect[2]=mas_vect[0]*elem[1]+mas_vect[2];
  63.  
  64. }
  65.  
  66. void cin_file()
  67. {
  68.     ifstream file ("gauss.txt");
  69.     file>>n; //считываем размерность системы
  70.     for (int i=0;i<n;i++) //считываем элементы системы
  71.         for (int j=0;j<n;j++)
  72.             file>>mas_koef[i][j];
  73.     for (int i=0;i<n;i++)
  74.         file>>mas_vect[i];
  75. }
  76. void cout_file()
  77. {
  78. ofstream file( "outgauss.txt", ofstream::app );
  79.     file<<"Размерность системы = "<<n<<"x"<<n<<endl;
  80.     file<<"Матрица: "<<endl;
  81.     for (int i=0;i<n;i++)
  82.     {
  83.         for (int j=0;j<n;j++)
  84.         {
  85.             file<<mas_koef[i][j];
  86.             file<<" ";
  87.         }
  88.         file<<endl;
  89.     }
  90.     file<<"Вектор: "<<endl;
  91.     for (int i=0;i<n;i++)
  92.         file<<mas_vect[i]<<" ";
  93.     file<<endl<<endl;
  94. }
  95.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement