Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <windows.h>
- //#include <ctime>
- #include <omp.h>
- using namespace std;
- //funkce pro nacteni matice z souboru filename
- void nacti(double** pole, int& radku, int& sloupcu, char* filename) {
- ifstream ifs(filename);
- for (int i = 0; i < radku; i++) {
- for (int j = 0; j < sloupcu; j++) {
- ifs >> pole[i][j];
- }
- }
- }
- // vypis matice
- void vypis(double** pole,int rad,int slo) {
- for (int i = 0; i < rad; i++) {
- for (int j = 0; j < slo; j++) {
- cout << pole[i][j] << " ";
- }
- cout << endl;
- }
- cout << endl;
- }
- // funkce pro prohozeni radku
- void prohodRadky(double** pole,int rad, int slo, int a, int b) {
- //cout << "menim radky " << a << " a " << b << endl;
- double pom = 0.0;
- for (int i = 0; i < slo; i++) {
- pom = pole[a][i];
- pole[a][i] = pole[b][i];
- pole[b][i] = pom;
- }
- }
- //funkce pro odecteni raku ktery od radku od od pozice poz
- void odecti(double** pole,int rad, int slo, int od, int ktery, int poz) {
- //cout << "odecitam od radku " << od << " radek " << ktery << endl;
- double pomoc = (pole[od][poz] / pole[ktery][poz]);
- for (int i = poz; i < slo; i++) {
- pole[od][i] -= pole[ktery][i]*pomoc;
- }
- }
- //funkce pro ziskani kopie matice
- double** copyMat(double** zdroj, int radku, int sloupcu) {
- double** pole = new double*[radku];
- for (int i = 0; i < radku; i++) {
- pole[i] = new double[sloupcu];
- }
- for (int i = 0; i < radku; i++) {
- for (int j = 0; j < sloupcu; j++) {
- pole[i][j] = zdroj[i][j];
- }
- }
- return pole;
- }
- //neparalelni verze
- long gaussSer(double** k, int radku, int sloupcu) {
- //vypis(k,radku,sloupcu);
- SYSTEMTIME st, lt;
- GetSystemTime(&st);
- int pozice = 0;
- for (int i = 0; i < radku; i++) {
- if (pozice > sloupcu) break;
- if (k[i][pozice] == 0) {
- for (int j = i+1; j < radku; j++) {
- if (k[j][pozice] != 0) {
- prohodRadky(k,radku, sloupcu,i,j);
- //vypis(k, radku, sloupcu);
- break;
- }
- }
- if (k[i][pozice] == 0) {
- pozice++;
- i--;
- continue;
- }
- }
- double pom = k[i][pozice];
- for (int j = pozice; j < sloupcu; j++) {
- k[i][j] /= pom;
- }
- //vypis(k,radku,sloupcu);
- for (int j = 0; j < radku; j++) {
- if (j!=i) {
- odecti(k,radku,sloupcu,j,i,pozice);
- //vypis(k, radku, sloupcu);
- }
- }
- pozice++;
- }
- GetSystemTime(<);
- int a = st.wMinute*60000 + st.wSecond * 1000 + st.wMilliseconds;
- int b = lt.wMinute*60000 + lt.wSecond * 1000 + lt.wMilliseconds;
- //cout << d << endl;
- //vypis(k,radku,sloupcu);
- return b-a;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement