Ask Question

Name:
Title:
Your Question:

Answer Question

Name:
Your Answer:
User Submitted Source Code!


Description:
  3
Language: C/C++
Code:
#include <iostream>
#include <boost/regex.hpp>
#include <cmath>

using namespace std;

double *Wczytaj_wspolczynniki() {
  
  string rownanie, re;
  cin >> rownanie;
  re = "^(.*)x([+-].*)y([+-].*)z\\=(.*)$";
  boost::regex expression;
  boost::cmatch matches;
  
  double *liczby = new double[4];
  expression = re; 
  if (boost::regex_match(rownanie.c_str(), matches, expression))
  {
    for (int i = 1; i < matches.size(); i++)
    {
      string match(matches[i].first, matches[i].second);
      liczby[i-1] = atof(match.c_str());
    }
    return liczby;
  }
  else
  {
    cout << "Niestety, nie mogę rozpoznać tego równania :(";
  }
}


int main(){

  double *rownanie[3];
  cout << "Wpisz równanie 1: ";
  rownanie[0] = Wczytaj_wspolczynniki();
  cout << "Wpisz równanie 2: ";
  rownanie[1] = Wczytaj_wspolczynniki();
  cout << "Wpisz równanie 3: ";
  rownanie[2] = Wczytaj_wspolczynniki();
  
  cout << rownanie[0][0] << " " << rownanie[0][1] << " " << rownanie[0][2] << endl;
  cout << rownanie[1][0] << " " << rownanie[1][1] << " " << rownanie[1][2] << endl;
  cout << rownanie[2][0] << " " << rownanie[2][1] << " " << rownanie[2][2] << endl;
  double w = (rownanie[2][0]*rownanie[0][1]*rownanie[1][2]+rownanie[0][0]*rownanie[1][1]*rownanie[2][2]+rownanie[1][0]*rownanie[2][1]*rownanie[0][2])-(rownanie[1][0]*rownanie[0][1]*rownanie[2][2]+rownanie[0][2]*rownanie[1][1]*rownanie[2][0]+rownanie[1][2]*rownanie[2][1]*rownanie[0][0]);
  double wx = (rownanie[2][3]*rownanie[0][1]*rownanie[1][2]+rownanie[0][3]*rownanie[1][1]*rownanie[2][2]+rownanie[1][3]*rownanie[2][1]*rownanie[0][2])-(rownanie[1][3]*rownanie[0][1]*rownanie[2][2]+rownanie[0][2]*rownanie[1][1]*rownanie[2][3]+rownanie[1][2]*rownanie[2][1]*rownanie[0][3]);
  double wy = (rownanie[2][0]*rownanie[0][3]*rownanie[1][2]+rownanie[0][0]*rownanie[1][3]*rownanie[2][2]+rownanie[1][0]*rownanie[2][3]*rownanie[0][2])-(rownanie[1][0]*rownanie[0][3]*rownanie[2][2]+rownanie[0][2]*rownanie[1][3]*rownanie[2][0]+rownanie[1][2]*rownanie[2][3]*rownanie[0][0]);
  double wz = (rownanie[2][0]*rownanie[0][1]*rownanie[1][3]+rownanie[0][0]*rownanie[1][1]*rownanie[2][3]+rownanie[1][0]*rownanie[2][1]*rownanie[0][3])-(rownanie[1][0]*rownanie[0][1]*rownanie[2][3]+rownanie[0][3]*rownanie[1][1]*rownanie[2][0]+rownanie[1][3]*rownanie[2][1]*rownanie[0][0]);
  
  double x = wx/w;
  double y = wy/w;
  double z = wz/w;
  if (w != 0) {
    cout << "Układ ma jedno rozwiązanie: [" << x << " (" << wx << "/" << w << "); " << y << " (" << wy << "/" << w << "); "<< z<< " (" << wz << "/" << w << ")]" << endl;
  } else if ( w == 0 and (wy != 0 or wx != 0 or wz != 0))  {
    cout << "Układ nie ma rozwiązań" << endl;
  } else if (w == 0 and wy == 0 and wx == 0 and wz == 0) {
    cout << "Układ ma nieskończenei wiele rozwiązań" << endl;
  }
    
//   cout << endl;
  return(0);
}
Comments: