#include <iostream>
#include <iomanip> // setw
#include <cmath>   // abs
 
using namespace std;
 
const int N = 3;
 
double a [N][N] = { {1, 2, 3},
                    {1, 2, 1},
                    {3, 1, 2} };
 
double b [N] = {6, 3, 6};
 
string name [N] = { "x", "y", "z"};
 
void tisk ()
{
    int i,k;
    for (i=0; i<N; i++)
    {
     for (k=0; k<N; k++)
     {
         if (a[i][k] >= 0 )
         {
             cout << "+";
         }
         cout << a[i][k] << "*" << name[k] << " ";
     }
     cout << " = " << b[i] << endl;
    }
}
 
void deleni (int r, double q)
// r-tou radku delime cislem q
{
    for (int k = 0; k < N; k++)
    {
        a[r][k] = a[r][k]/q;
 
    }
    b [r] =  b [r]/q;
}
 
void odcitani (int c, int r, double f)
// od c-te radky odecitame f nasobek r-te radky
{
    for (int k = 0; k < N; k++)
    {
        a[c][k] = a[c][k] - a[r][k]*f;
 
    }
    b[c] =  b [c] - b[r]*f;
}
 
void swap (double & u, double & v)
{
    double t = u;
    u = v;
    v = t;
}
 
void prehod (int z, int r)
// prehodit z-tou a r-tou radku
{
    for (int k = 0; k < N; k++)
    {
        swap (a[z][k], a[r][k]);
    }
    swap (b[z], b[r]);
}
 
 
const double eps = 1e-9; // cisla v absolutni hodnote mensi nez 10^9 povazujeme za nulu
 
int main()
{
    tisk ();
    int r = 0;
    int s = 0;
    while (r < N && s < N)
    {
 
       if (abs (a[r][s]) < eps)
       {
           int t = r+1;
           while (t < N && abs (a[t][s]) < eps)
           {
               t ++;
           }
           if (t < N)
               prehod (r, t);
       }
 
       if (abs (a[r][s]) >= eps) // pokud muzeme delit
       {
          deleni (r, a[r][s]); // a[r][s] upravime na jednicku
          for (int i=0; i<N;i++)
          {
             if (i!=r) // pro ostatni radky odecteme vhodny nasobek
             {
                 odcitani (i, r, a[i][s]); // a[i][s] upravime na nulu
             }
          }
          cout << endl;
          tisk ();
       }
       r++; // jdeme na dalsi radku
       s++; // dalsi sloupec
    }
 
    return 0;
}
 
soustava2018.txt · Last modified: 2018/10/25 17:08 by 147.32.8.115
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki