Advertisement
Guest User

Untitled

a guest
Jan 18th, 2020
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.30 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstring>
  3. #include <cmath>
  4. #include <stdlib.h>
  5.  
  6. using namespace std;
  7.  
  8. float macierz[3][3];
  9. float druga_macierz[3][3];
  10. float macierz_wynikowa[3][3];
  11. int i, j, k, menu, det;
  12.  
  13.  
  14. void WyswietlMenu()
  15. {
  16.     cout  << endl << "1) Wypisz pierwsza macierz" << endl
  17.             << "2) Wypisz druga macierz" << endl << "3) Dodaj macierze" << endl << "4) Pomnoz macierze" << endl
  18.             << "5) Wyznacznik pierwszej macierzy" << endl << "6) Wyznacznik drugiej macierzy" << endl
  19.             << "7) Macierz odwrotna pierwszej macierzy" << endl << "8) Macierz odwrotna drugiej macierzy" <<
  20.             endl << "9) Rownanie liniowe" << endl
  21.             << "Aby zakonczyc dzialanie programu, wcisnij dowolony inny klawisz" << endl;
  22. }
  23.  
  24. void WczytajMacierz(float tab[3][3], float tab1[3][3])
  25. {
  26.     float element_macierzy;
  27.     cout << "Podaj dane do pierwszej macierzy: " << endl; // dane uzupełniane są wierszami
  28.     for (i = 0; i < 3; i++){
  29.         for(j = 0; j < 3; j++) {
  30.             cin >> element_macierzy;
  31.             tab[i][j] = element_macierzy;
  32.         }
  33.     }
  34.     cout << "Podaj dane do drugiej macierzy: " << endl; // dane uzupełniane są wierszami
  35.     for (i = 0; i < 3; i++){
  36.         for(j = 0; j < 3; j++) {
  37.             cin >> element_macierzy;
  38.             tab1[i][j] = element_macierzy;
  39.         }
  40.     }
  41. }
  42.  
  43.  
  44. void Wypisz(float tab[3][3])
  45. {
  46.     cout << "Macierz: " << endl;
  47.     for (i = 0; i < 3; i++){
  48.         for(j = 0; j < 3; j++) {
  49.           cout << tab[i][j] << " ";
  50.         }
  51.         cout << endl;
  52.     }
  53. }
  54.  
  55. void Dodawanie_Macierzy(float tabA[3][3], float tabB[3][3], float tabC[3][3])
  56. {
  57.      for (i = 0; i < 3; i++){
  58.         for(j = 0; j < 3; j++) {
  59.           tabC[i][j] = tabA[i][j] + tabB[i][j];
  60.         }
  61.     }
  62.     Wypisz(tabC);
  63. }
  64. void Mnozenie_Macierzy(float tabA[3][3], float tabB[3][3], float tabC[3][3])
  65. {
  66.     int suma = 0;
  67.     for (i = 0; i < 3; i++) {
  68.         for(j = 0; j < 3; j++) {
  69.         suma = 0;
  70.             for(k = 0; k < 3; k++) {
  71.                 suma += tabA [i][k] * tabB [k][j];
  72.                 tabC [i][j] = suma;
  73.             }
  74.         }
  75.     }
  76.     Wypisz(tabC);
  77. }
  78.  
  79.  
  80. int Wyznacznik (float tab[3][3])
  81. {
  82.     float d1, d2, det;
  83.     d1 = (tab[0][0] * tab[1][1] * tab[2][2]) + (tab[0][1] * tab[1][2] * tab[2][0]) + (tab[0][2] * tab[1][0] * tab[2][1]);
  84.     d2 = (tab[0][2] * tab[1][1] * tab[2][0]) + (tab[0][0] * tab[1][2] * tab[2][1]) + (tab[0][1] * tab[1][0] * tab[2][2]);
  85.     det = d1 - d2;
  86.  
  87.    return det;
  88. }
  89.  
  90. void MacierzOdwrotna (float tab[3][3])
  91. {
  92.     const float det1 = Wyznacznik(tab);
  93.     if (det1 == 0) {
  94.  
  95.         cout << "Macierz odwrotna nie istnieje! " << endl;
  96.  
  97.     } else {
  98.  
  99.         float invdet = 1 / det1;
  100.         float minv[3][3];
  101.         minv[0][0] = (tab[1][1] * tab[2][2] - tab[2][1] * tab[1][2]) * invdet;
  102.         minv[0][1] = (tab[0][2] * tab[2][1] - tab[0][1] * tab[2][2]) * invdet;
  103.         minv[0][2] = (tab[0][1] * tab[1][2] - tab[0][2] * tab[1][1]) * invdet;
  104.         minv[1][0] = (tab[1][2] * tab[2][0] - tab[1][0] * tab[2][2]) * invdet;
  105.         minv[1][1] = (tab[0][0] * tab[2][2] - tab[0][2] * tab[2][0]) * invdet;
  106.         minv[1][2] = (tab[1][0] * tab[0][2] - tab[0][0] * tab[1][2]) * invdet;
  107.         minv[2][0] = (tab[1][0] * tab[2][1] - tab[2][0] * tab[1][1]) * invdet;
  108.         minv[2][1] = (tab[2][0] * tab[0][1] - tab[0][0] * tab[2][1]) * invdet;
  109.         minv[2][2] = (tab[0][0] * tab[1][1] - tab[1][0] * tab[0][1]) * invdet;
  110.  
  111.         Wypisz(minv);
  112.     }
  113. }
  114.  
  115. void RownanieLiniowe (float tabA[3][3], float tabB[3][3], float tabC[3][3])
  116. {
  117.     int x;
  118.     cout << "Wprowadz liczbe x: " << endl;
  119.     cin >> x;
  120.  
  121.     for (i = 0; i < 3; i++) {
  122.         for (j = 0; j < 3; j ++) {
  123.             tabA[i][j] = tabA[i][j] * x;
  124.         }
  125.  
  126.     }
  127.     cout << endl;
  128.  
  129.      for (i = 0; i < 3; i++) {
  130.         for (j = 0; j < 3; j ++) {
  131.             tabC[i][j] = tabA[i][j] + tabB[i][j];
  132.         }
  133.  
  134.     }
  135.     Wypisz(tabC);
  136.  
  137. }
  138.  
  139.  
  140. int main()
  141. {
  142.     cout << "Program obliczajacy dzialania na macierzach. Najpierw wprowadź dwie macierze. " << endl;
  143.     WczytajMacierz(macierz, druga_macierz);
  144.     cout << "Jakie dzialania chcesz podjac? Wybierz z listy: " << endl;
  145.     menu = 100;
  146.     WyswietlMenu();
  147.     while(menu){
  148.     cin >> menu;
  149.  
  150.         switch (menu)
  151.         {
  152.             case 1:
  153.                 cout << "Macierz pierwsza: " << endl;
  154.                 Wypisz(macierz);
  155.                 WyswietlMenu();
  156.             break;
  157.             case 2:
  158.                 cout << "Macierz druga: " << endl;
  159.                 Wypisz(druga_macierz);
  160.                 WyswietlMenu();
  161.             break;
  162.             case 3:
  163.                 cout << "Wynik dodawania: " << endl;
  164.                 Dodawanie_Macierzy(macierz, druga_macierz, macierz_wynikowa);
  165.                 cout << endl;
  166.                 WyswietlMenu();
  167.             break;
  168.             case 4:
  169.                 cout << "Wynik mnozenia: " << endl;
  170.                  Mnozenie_Macierzy(macierz, druga_macierz, macierz_wynikowa);
  171.                  cout << endl;
  172.                 WyswietlMenu();
  173.             break;
  174.             case 5:
  175.                 cout << "Wyznacznik pierwszej macierzy: " << endl;
  176.                 cout << Wyznacznik(macierz);
  177.                 cout << endl;
  178.                 WyswietlMenu();
  179.             break;
  180.             case 6:
  181.                 cout << "Wyznacznik drugiej macierzy: " << endl;
  182.                 cout << Wyznacznik(druga_macierz);
  183.                 cout << endl;
  184.                 WyswietlMenu();
  185.             break;
  186.             case 7:
  187.                 cout << "Macierz odwrotna dla pierwszej macierzy: " << endl;
  188.                 MacierzOdwrotna(macierz);
  189.                 cout << endl;
  190.                 WyswietlMenu();
  191.             break;
  192.             case 8:
  193.                 cout << "Macierz odwrotna dla drugiej macierzy: " << endl;
  194.                 MacierzOdwrotna(druga_macierz);
  195.                 cout << endl;
  196.                 WyswietlMenu();
  197.             case 9:
  198.                 cout << "Równanie liniowe: " << endl;
  199.                 RownanieLiniowe(macierz, druga_macierz, macierz_wynikowa);
  200.                 cout << endl;
  201.                 WyswietlMenu();
  202.             break;
  203.             default:
  204.                 cout << "Dziekujemy za korzystanie z programu!" << endl;
  205.                 exit(0);
  206.         }
  207.     }
  208.     return 0;
  209. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement