Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- using namespace std;
- vector<double> mnozenie(vector<double> matylda, double liczba)
- {
- for(int i=0; i<matylda.size(); i++)
- {
- matylda[i] = matylda[i]*liczba;
- }
- return matylda;
- }
- //matylda - wladyslaw
- vector<double> odejmowanie(vector<double> matylda, vector<double> wladyslaw)
- {
- for(int i=0; i<matylda.size(); i++)
- {
- matylda[i] = matylda[i]-wladyslaw[i];
- }
- return matylda;
- }
- int main()
- {
- int t;
- cin >> t;
- for(int iterator=0; iterator<t; iterator++)
- {
- //tu wstaw operacje na macierzach
- int liczba_rownan;
- cin >> liczba_rownan;
- vector<vector<double> > macierz;
- for(int i=0; i<liczba_rownan; i++)
- {
- vector<double> usagi;
- for(int j=0; j<liczba_rownan+1; j++)
- {
- double sailor_moon;
- cin >> sailor_moon;
- usagi.push_back(sailor_moon);
- }
- macierz.push_back(usagi);
- }
- //jebac wyznacznik glowny
- //eliminacja gaussa bez cudow
- vector<vector<double> > eg = macierz;
- vector<double> x_eg;
- for(int i=0; i<eg.size(); i++)
- {
- x_eg.push_back(0);
- }
- for(int i=0; i<eg.size(); i++)
- {
- //szukamy najwiekszego w kolumnie i
- //tylko ostatniej kolumny nie ruszamy
- int najnaj=i;
- for(int j=i; j<eg.size(); j++)
- {
- if(eg[j][i] > eg[najnaj][i])
- najnaj=j;
- }
- eg[i].swap(eg[najnaj]);
- //jej, swapniete
- //teraz jak juz wybralismy najwiekszy element
- //i jest on w eg[i][i] to ten wiersz dzielimy przez ten element
- //robiac w miejscu eg[i][i] jedynke
- eg[i] = mnozenie(eg[i], 1/eg[i][i]);
- //for(int j=i; j<eg.size(); j++)
- //{
- // //if(j==najnaj)
- // // eg[j][i]=1;
- // //else
- // eg[j][i] = eg[j][i]/eg[i][i];
- // //eg[j][i] -= eg[j][i]/eg[najnaj][i];
- //}
- //pieknie, mam jedynki. co teraz z nimi?
- // a no trzeba wiersze odejmowac. a to juz nie jest takie proste.
- for(int j=i+1; j<eg.size(); j++)
- {
- //matylda-wladyslaw;
- eg[j]=odejmowanie(eg[j], mnozenie(eg[i], eg[j][i]));
- }
- //super, mamy macierz trojkatna
- }
- cout << "\n";
- for(int i=0; i<eg.size(); i++)
- {
- for(int j=0; j<eg.size() + 1; j++)
- {
- cout << eg[i][j] << " ";
- }
- cout << "\n";
- }
- x_eg.back() = eg.back().back();
- //ostatniego x-a znamy juz bez kombinowania
- for(int i=eg.size()-2; i>=0; i--)
- {
- //;
- x_eg[i] = eg[i][eg.size()];
- //dajemy mu wartosc b, bedziemy od niej odejmowac
- for(int j=eg.size()-1; j>i; j--)
- {
- x_eg[i] -= x_eg[j] * eg[i][j];
- }
- }
- cout << "\n";
- for(int i=0; i<eg.size(); i++)
- {
- for(int j=0; j<eg.size() + 1; j++)
- {
- cout << eg[i][j] << " ";
- }
- cout << "\n";
- }
- cout << "\n";
- for(int i=0; i<x_eg.size(); i++)
- cout << x_eg[i] << " ";
- cout << "\n";
- //macierz.clear();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement