Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using std::cout;
- using std::endl;
- using std::cin;
- //sizeof(matice)/sizeof(matice[0]) -> velikost matice / velikost (1.) radku = pocet radku
- //sizeof(matice[0])/sizeof(double) -> velikost (1.) radku / velikost double = pocet prvku radku = pocet sloupcu matice
- int main(void){
- //matice
- double matice[3][4] = {
- {1,1,1,0} ,
- {0,1,2,0} ,
- {2,-2,1,5}
- };
- double prvek;//prvek slouzi k zamene (prvku) radku
- double cinitel;//slouzi k radkovym upravam
- //vypis matice
- cout << endl;
- for(int i = 0;i < sizeof(matice)/sizeof(matice[0]);i++){
- for(int j = 0;j < sizeof(matice[0])/sizeof(double);j++){
- cout << matice[i][j] << "\t";
- }
- cout << endl;
- }
- //konec vypisu matice
- //pozice prvku pod kterym se bude nulovat(matice[pozice][pozice] (na diagonale))
- //dokud pozice je mensi nez pocet radku - 1 (pro posledni radek neni co nulovat
- for(int pozice = 0;pozice < (sizeof(matice) / sizeof(matice[0]) - 1);pozice++){
- //pokud je prvek na aktualni pozice 0 tak hleda radek kde neni nula a vymeni ho
- if(matice[pozice][pozice] == 0){
- //prochazi vsechny radky pod pozici
- for(int i = pozice + 1;pozice < sizeof(matice)/sizeof(matice[0]);i++){
- //kdyz natrefi na nenulovy prvek pod pozici
- if(matice[i][pozice] != 0){
- //vymeni aktualni radek (vsechny prvky radku) s radkem kde ve sloupci s indexem pozice neni 0
- for(int j = 0;j < sizeof(matice[0])/sizeof(double);j++){
- prvek = matice[pozice][j];
- matice[pozice][j] = matice[i][j];
- matice[i][j] = prvek;
- }
- //po vymene vyski z cyklu a pokracuje v nulovani aktualniho sloupce
- break;
- }
- }
- //pokud jsou vsechny prvky pod aktualni pozici nulove tak pokracuje v uprave dalsiho sloupce
- //a aktualni sloupce necha beze zmeny
- if(matice[pozice][pozice] == 0){
- continue;
- }
- }
- //v tomto cyklu se nuluje sloupec
- //zacina se na radku pod aktualnim
- for(int i = pozice + 1;i < sizeof(matice)/sizeof(matice[0]);i++){
- //konstanta pro vynasobeni aktualniho prvku aby prvek pod aktualni pozici byl nula
- cinitel = matice[i][pozice] / matice[pozice][pozice];
- //v tomto cyklu se provede radkove upravu
- for(int j = 0;j < sizeof(matice[0])/sizeof(double);j++){
- matice[i][j] -= matice[pozice][j]*cinitel;
- }
- }
- //kontrolni vypis matice po provedeni iterace cyklu
- cout << endl;
- for(int i = 0;i < sizeof(matice)/sizeof(matice[0]);i++){
- for(int j = 0;j < sizeof(matice[0])/sizeof(double);j++){
- cout << matice[i][j] << "\t";
- }
- cout << endl;
- }
- }
- //konec cyklu for
- cout << endl << endl << "KONEC" << endl;
- while(cin.get() != '\n');
- return 0;
- }
Add Comment
Please, Sign In to add comment