Guest User

Untitled

a guest
Jan 21st, 2018
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.63 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using std::cout;
  4. using std::endl;
  5. using std::cin;
  6.  
  7. //sizeof(matice)/sizeof(matice[0]) -> velikost matice / velikost (1.) radku = pocet radku
  8. //sizeof(matice[0])/sizeof(double) -> velikost (1.) radku / velikost double = pocet prvku radku = pocet sloupcu matice
  9. int main(void){
  10.     //matice
  11.     double matice[3][4] = {
  12.         {1,1,1,0} ,
  13.         {0,1,2,0} ,
  14.         {2,-2,1,5}
  15.     };
  16.     double prvek;//prvek slouzi k zamene (prvku) radku
  17.     double cinitel;//slouzi k radkovym upravam
  18.     //vypis matice
  19.     cout << endl;
  20.     for(int i = 0;i < sizeof(matice)/sizeof(matice[0]);i++){
  21.         for(int j = 0;j < sizeof(matice[0])/sizeof(double);j++){
  22.             cout << matice[i][j] << "\t";
  23.         }
  24.         cout << endl;
  25.     }
  26.     //konec vypisu matice
  27.  
  28.     //pozice prvku pod kterym se bude nulovat(matice[pozice][pozice] (na diagonale))
  29.     //dokud pozice je mensi nez pocet radku - 1 (pro posledni radek neni co nulovat
  30.     for(int pozice = 0;pozice < (sizeof(matice) / sizeof(matice[0]) - 1);pozice++){
  31.         //pokud je prvek na aktualni pozice 0 tak hleda radek kde neni nula a vymeni ho
  32.         if(matice[pozice][pozice] == 0){
  33.             //prochazi vsechny radky pod pozici
  34.             for(int i = pozice + 1;pozice < sizeof(matice)/sizeof(matice[0]);i++){
  35.                 //kdyz natrefi na nenulovy prvek pod pozici
  36.                 if(matice[i][pozice] != 0){
  37.                     //vymeni aktualni radek (vsechny prvky radku) s radkem kde ve sloupci s indexem pozice neni 0
  38.                     for(int j = 0;j < sizeof(matice[0])/sizeof(double);j++){
  39.                         prvek = matice[pozice][j];
  40.                         matice[pozice][j] = matice[i][j];
  41.                         matice[i][j] = prvek;
  42.                     }
  43.                     //po vymene vyski z cyklu a pokracuje v nulovani aktualniho sloupce
  44.                     break;
  45.                 }
  46.             }
  47.             //pokud jsou vsechny prvky pod aktualni pozici nulove tak pokracuje v uprave dalsiho sloupce
  48.             //a aktualni sloupce necha beze zmeny
  49.             if(matice[pozice][pozice] == 0){
  50.                 continue;
  51.             }
  52.         }
  53.         //v tomto cyklu se nuluje sloupec
  54.         //zacina se na radku pod aktualnim
  55.         for(int i = pozice + 1;i < sizeof(matice)/sizeof(matice[0]);i++){
  56.             //konstanta pro vynasobeni aktualniho prvku aby prvek pod aktualni pozici byl nula
  57.             cinitel = matice[i][pozice] / matice[pozice][pozice];
  58.             //v tomto cyklu se provede radkove upravu
  59.             for(int j = 0;j < sizeof(matice[0])/sizeof(double);j++){
  60.                 matice[i][j] -= matice[pozice][j]*cinitel;
  61.             }
  62.         }
  63.         //kontrolni vypis matice po provedeni iterace cyklu
  64.         cout << endl;
  65.         for(int i = 0;i < sizeof(matice)/sizeof(matice[0]);i++){
  66.             for(int j = 0;j < sizeof(matice[0])/sizeof(double);j++){
  67.                 cout << matice[i][j] << "\t";
  68.             }
  69.             cout << endl;
  70.         }
  71.     }
  72.     //konec cyklu for
  73.  
  74.     cout << endl << endl << "KONEC" << endl;
  75.     while(cin.get() != '\n');
  76.     return 0;
  77. }
Add Comment
Please, Sign In to add comment