Advertisement
Guest User

Untitled

a guest
Jun 26th, 2017
42
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.55 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <windows.h>
  4. //#include <ctime>
  5. #include <omp.h>
  6. using namespace std;
  7.  
  8. //funkce pro nacteni matice z souboru filename
  9. void nacti(double** pole, int& radku, int& sloupcu, char* filename) {
  10.     ifstream ifs(filename);
  11.     for (int i = 0; i < radku; i++) {
  12.         for (int j = 0; j < sloupcu; j++) {
  13.             ifs >> pole[i][j];
  14.         }
  15.     }
  16.    
  17. }
  18. // vypis matice
  19. void vypis(double** pole,int rad,int slo) {
  20.     for (int i = 0; i < rad; i++) {
  21.         for (int j = 0; j < slo; j++) {
  22.             cout << pole[i][j] << " ";
  23.         }
  24.         cout << endl;
  25.     }
  26.     cout << endl;
  27. }
  28.  
  29. // funkce pro prohozeni radku
  30. void prohodRadky(double** pole,int rad, int slo, int a, int b) {
  31.     //cout << "menim radky " << a << " a " << b << endl;
  32.     double pom = 0.0;
  33.     for (int i = 0; i < slo; i++) {
  34.         pom = pole[a][i];
  35.         pole[a][i] = pole[b][i];
  36.         pole[b][i] = pom;
  37.     }
  38.  
  39. }
  40.  
  41. //funkce pro odecteni raku ktery od radku od od pozice poz
  42. void odecti(double** pole,int rad, int slo, int od, int ktery, int poz) {
  43.     //cout << "odecitam od radku " << od << " radek " << ktery << endl;
  44.     double pomoc = (pole[od][poz] / pole[ktery][poz]);
  45.     for (int i = poz; i < slo; i++) {
  46.         pole[od][i] -= pole[ktery][i]*pomoc;
  47.  
  48.     }
  49. }
  50.  
  51. //funkce pro ziskani kopie matice
  52. double** copyMat(double** zdroj, int radku, int sloupcu) {
  53.     double** pole = new double*[radku];
  54.     for (int i = 0; i < radku; i++) {
  55.         pole[i] = new double[sloupcu];
  56.     }
  57.  
  58.     for (int i = 0; i < radku; i++) {
  59.         for (int j = 0; j < sloupcu; j++) {
  60.             pole[i][j] = zdroj[i][j];
  61.         }
  62.     }
  63.     return pole;
  64.  
  65. }
  66.  
  67. //neparalelni verze
  68. long gaussSer(double** k, int radku, int sloupcu) {
  69.    
  70.     //vypis(k,radku,sloupcu);
  71.     SYSTEMTIME st, lt;
  72.     GetSystemTime(&st);
  73.     int pozice = 0;
  74.     for (int i = 0; i < radku; i++) {
  75.         if (pozice > sloupcu) break;
  76.  
  77.         if (k[i][pozice] == 0) {
  78.             for (int j = i+1; j < radku; j++) {
  79.                 if (k[j][pozice] != 0) {
  80.                     prohodRadky(k,radku, sloupcu,i,j); 
  81.                     //vypis(k, radku, sloupcu);
  82.                     break;
  83.                 }
  84.                
  85.             }
  86.             if (k[i][pozice] == 0) {
  87.                 pozice++;
  88.                 i--;
  89.                 continue;
  90.             }
  91.         }
  92.  
  93.         double pom = k[i][pozice];
  94.         for (int j = pozice; j < sloupcu; j++) {
  95.             k[i][j] /= pom;
  96.         }
  97.         //vypis(k,radku,sloupcu);
  98.         for (int j = 0; j < radku; j++) {
  99.             if (j!=i) {
  100.                 odecti(k,radku,sloupcu,j,i,pozice);
  101.                 //vypis(k, radku, sloupcu);
  102.             }
  103.  
  104.         }
  105.         pozice++;
  106.  
  107.     }
  108.     GetSystemTime(&lt);
  109.     int a = st.wMinute*60000 + st.wSecond * 1000 + st.wMilliseconds;
  110.     int b = lt.wMinute*60000 + lt.wSecond * 1000 + lt.wMilliseconds;
  111.     //cout << d << endl;
  112.     //vypis(k,radku,sloupcu);
  113.     return b-a;
  114.  
  115.    
  116. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement