Advertisement
Guest User

Untitled

a guest
Oct 15th, 2019
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 7.15 KB | None | 0 0
  1. // MacierzeGeneracja.cpp : Ten plik zawiera funkcję „main”. W nim rozpoczyna się i kończy wykonywanie programu.
  2. //
  3.  
  4. #include <iostream>
  5. #include <cstdlib>
  6. #include <ctime>
  7. #include <fstream>
  8. #include <chrono>
  9.  
  10.  
  11. using namespace std;
  12.  
  13. static int wie1,kol1,wie2,kol2;
  14. float ** macierz1;
  15. float ** macierz2;
  16.  
  17. void wypisanie(float** macierz, int wiersz, int kolumny)
  18. {
  19.     for (int x = 0; x < wiersz; x++)
  20.     {
  21.         for (int y = 0; y < kolumny; y++)
  22.         {
  23.             cout << ("%f ", macierz[x][y]);
  24.         }
  25.     }
  26. }
  27.  
  28. int main()
  29. {
  30.     cout << "Mnozenie macierzy - kolumny macierzy 1 musza rownac sie wierszom macierzy 2" << endl;
  31.     do
  32.     {
  33.         do
  34.         {
  35.             do
  36.             {
  37.                 cout << ("Podaj liczbe wierzy macierzy 1:") << endl;
  38.                 cin >> wie1;
  39.                 if (wie1 < 500)
  40.                 {
  41.                     cout << endl << "Liczba wierszy musi byc wieksza od 500" << endl<<endl;
  42.                 }
  43.                 else cout << endl << "Zaakceptowano" << endl<<endl;
  44.             } while (wie1 < 500);
  45.             do
  46.             {
  47.                 cout << ("Podaj liczbe kolumn macierzy 1:") << endl;
  48.                 cin >> kol1;
  49.                 if (kol1 < 500)
  50.                 {
  51.                     cout << endl << "Liczba kolumn musi byc wieksza od 500" << endl<< endl;
  52.                 }
  53.                 else cout << endl << "Zaakceptowano" << endl<<endl;
  54.             } while (kol1 < 500);
  55.             do
  56.             {
  57.                 cout << ("Podaj liczbe wierszy macierzy 2:") << endl;
  58.                 cin >> wie2;
  59.                 if (wie2 < 500)
  60.                 {
  61.                     cout << endl << "Liczba wierszy musi byc wieksza od 500" << endl << endl;
  62.                 }
  63.                 else cout << endl << "Zaakceptowano" << endl<<endl;
  64.             } while (wie2 < 500);
  65.             do
  66.             {
  67.                 cout << ("Podaj liczbe kolumn macierzy 2:") << endl;
  68.                 cin >> kol2;
  69.                 if (kol2 < 500)
  70.                 {
  71.                     cout << endl << "Liczba kolumn musi byc wieksza od 500" << endl<< endl;
  72.                 }
  73.                 else cout << endl << "Zaakceptowano" << endl << endl;
  74.             }while (kol2 < 500);
  75.         }while (kol2 == NULL);
  76.         if (kol1 != wie2)
  77.         {
  78.             cout << endl << "Liczba kolumn macierzy 1 nie zgadza sie z liczba wierszy macierzy 2" << endl<<endl;
  79.         }
  80.     } while (kol1 != wie2);
  81.            
  82.     macierz1 = new float *[wie1];
  83.     for (int z = 0; z < wie1; z++)
  84.     {
  85.         macierz1[z] = new float[kol1];
  86.     }
  87.     macierz2 = new float* [wie2];
  88.     for (int z = 0; z < wie2; z++)
  89.     {
  90.         macierz2[z] = new float[kol2];
  91.     }
  92.  
  93.  
  94.     auto start = chrono::high_resolution_clock::now();
  95.     srand((unsigned int)time(NULL));
  96.     for (int x = 0; x < wie1; x++)
  97.     {
  98.         for (int y = 0; y < kol1; y++)
  99.         {
  100.             macierz1[x][y] = (((float)rand() / RAND_MAX) * ((rand() % 11) + 1));
  101.         }
  102.     }
  103.     for (int a = 0; a < wie2; a++)
  104.     {
  105.         for (int b = 0; b < kol2; b++)
  106.         {
  107.             macierz2[a][b] = (((float)rand() / RAND_MAX) * ((rand() % 11) + 1));
  108.         }
  109.     }
  110.     auto finish = chrono::high_resolution_clock::now();
  111.     chrono::duration<double> elapsed = finish - start;
  112.     cout << "Czas wykonania wygenerowania dwoch macierzy: " << elapsed.count() << " s" << endl;
  113.     //wypisanie(macierz1, wie1, kol1);
  114.  
  115.     auto start2 = chrono::high_resolution_clock::now();
  116.  
  117.     ofstream plik("macierze.txt");
  118.     cout << "Zapis podstawowych danych do pliku" << endl;
  119.     plik << wie1 << endl;
  120.     plik << kol1 << endl;
  121.     plik << wie2 << endl;
  122.     plik << kol2 << endl;
  123.  
  124.     for (int x = 0; x < wie1; x++)
  125.     {
  126.         for (int y = 0; y < kol1; y++)
  127.         {
  128.             plik << macierz1[x][y] << endl;
  129.         }
  130.     }
  131.     for (int x = 0; x < wie2; x++)
  132.     {
  133.         for (int y = 0; y < kol2; y++)
  134.         {
  135.             plik << macierz2[x][y] << endl;
  136.         }
  137.     }
  138.     auto finish2 = chrono::high_resolution_clock::now();
  139.     chrono::duration<double> elapsed2 = finish2 - start2;
  140.     cout << "Czas wykonania zapisu: " << elapsed2.count() << " s" << endl;
  141.     cout << "Plik gotowy" << endl;
  142.     plik.close();
  143.  
  144.     getchar();
  145. }
  146.  
  147.  
  148. // Uruchomienie programu: Ctrl + F5 lub menu Debugowanie > Uruchom bez debugowania
  149. // Debugowanie programu: F5 lub menu Debugowanie > Rozpocznij debugowanie
  150.  
  151. // Porady dotyczące rozpoczynania pracy:
  152. //   1. Użyj okna Eksploratora rozwiązań, aby dodać pliki i zarządzać nimi
  153. //   2. Użyj okna programu Team Explorer, aby nawiązać połączenie z kontrolą źródła
  154. //   3. Użyj okna Dane wyjściowe, aby sprawdzić dane wyjściowe kompilacji i inne komunikaty
  155. //   4. Użyj okna Lista błędów, aby zobaczyć błędy
  156. //   5. Wybierz pozycję Projekt > Dodaj nowy element, aby utworzyć nowe pliki kodu, lub wybierz pozycję Projekt > Dodaj istniejący element, aby dodać istniejące pliku kodu do projektu
  157. //   6. Aby w przyszłości ponownie otworzyć ten projekt, przejdź do pozycji Plik > Otwórz > Projekt i wybierz plik sln
  158.  
  159.  
  160. #include <iostream>
  161. #include <cstdlib>
  162. #include <ctime>
  163. #include <fstream>
  164. #include <math.h>
  165. #include <string.h>
  166. #include <iomanip>
  167. #include <string>
  168. #include <chrono>
  169. using namespace std;
  170.  
  171. static int wie1, kol1, wie2, kol2;
  172. double temp=0;
  173. double temp1=0;
  174. int pom1 = 0, pom2 = 0;
  175. int wynik1, wynik2;
  176. float ** macierz1;
  177. float ** macierz2;
  178. float ** wynikmacierzy;
  179. string line;
  180. void wypisanie(float** macierz, int wiersz, int kolumny)
  181. {
  182.     for (int x = 0; x < wiersz; x++)
  183.     {
  184.         for (int y = 0; y < kolumny; y++)
  185.         {
  186.             cout << ("%f ", macierz[x][y]);
  187.         }
  188.     }
  189. }
  190. void zapis(float** macierz, int wiersz, int kolumny)
  191. {
  192.     auto start = chrono::high_resolution_clock::now();
  193.     ofstream zapis("wynik.txt");
  194.     cout << "Zapis podstawowych danych do pliku" << endl;
  195.     //temp1 = ((double)100/((double)wiersz*(double)kolumny));
  196.  
  197.     for (int x = 0; x < wiersz; x++)
  198.     {
  199.         for (int y = 0; y < kolumny; y++)
  200.         {
  201.             //temp += temp1;
  202.             //system("CLS");
  203.             //cout << "Zapis podstawowych danych do pliku:" << endl;
  204.             //cout << "Postep: " << setprecision(4) << fixed << temp << " %" << endl;
  205.             zapis << macierz[x][y] << endl;
  206.         }
  207.     }
  208.     auto finish = chrono::high_resolution_clock::now();
  209.     chrono::duration<double> elapsed = finish - start;
  210.     cout << "Czas wykonania zapisu: " << elapsed.count() << " s\n";
  211.     cout << "Zapisano plik" << endl;
  212.     zapis.close();
  213. }
  214. void zaladuj()
  215. {
  216.     ifstream plik("C:/Users/Patryk/source/repos/MacierzeGeneracja/MacierzeGeneracja/macierze.txt");
  217.     if (plik.is_open())
  218.     {
  219.         plik >> wie1 >> kol1 >> wie2 >> kol2;
  220.  
  221.         cout << wie1 << " wie1" << endl;
  222.         cout << kol1 << " Kol1" << endl;
  223.         cout << wie2 << " wie2" << endl;
  224.         cout << kol2 << " Kol2" << endl;
  225.         cout << endl;
  226.         wynik1 = (wie1 * kol1);
  227.         wynik2 = (wie2 * kol2);
  228.  
  229.         macierz1 = new float* [wie1];
  230.         for (int z = 0; z < wie1; z++)
  231.         {
  232.             macierz1[z] = new float[kol1];
  233.         }
  234.         macierz2 = new float* [wie2];
  235.         for (int z = 0; z < wie2; z++)
  236.         {
  237.             macierz2[z] = new float[kol2];
  238.         }
  239.         wynikmacierzy = new float* [kol2];
  240.         for (int zm1 = 0; zm1 < wie1; zm1++)
  241.         {
  242.             wynikmacierzy[zm1] = new float[kol2];
  243.         }
  244.         for (int x = 0; x < wie1; x++)
  245.         {
  246.             for (int y = 0; y < kol2; y++)
  247.             {
  248.                 wynikmacierzy[x][y] = 0;
  249.             }
  250.         }
  251.         for (int x = 0; x < wie1; x++)
  252.         {
  253.             for (int y = 0; y < kol1; y++)
  254.             {
  255.                 plik >> macierz1[x][y];
  256.             }
  257.         }
  258.         //wypisanie(macierz1, wie1, kol1);
  259.         for (int a = 0; a < wie2; a++)
  260.         {
  261.             for (int b = 0; b < kol2; b++)
  262.             {
  263.                 plik >> macierz2[a][b];
  264.             }
  265.         }
  266.        
  267.         plik.close();
  268.     }
  269.  
  270.     else cout << "Nie można otworzyć pliku";
  271. }
  272.  
  273. int main()
  274. {
  275.     zaladuj();
  276.  
  277.     for (int i = 0; i < wie1; ++i)
  278.         for (int j = 0; j < kol2; ++j)
  279.             for (int k = 0; k < kol1; ++k)
  280.             {
  281.                 wynikmacierzy[i][j] += macierz1[i][k] * macierz2[k][j];
  282.             }
  283.     zapis(wynikmacierzy, wie1, kol2);
  284.     getchar();
  285. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement