/*
 * =====================================================================================
 *
 *       Filename:  uklad.c
 *    Description:  Uklad 2 rownan liniowych - wersja ze strukturami
 *        Created:  10.12.2013 13:11:53
 *         Author:  Marek Grochowski 
 *
 * =====================================================================================
 */

#include <stdio.h>
#include <math.h>
#define EPS 0.000001

struct wynik
{
   int k;
   float x,y;
};


struct rownanie
{
   float a,b,c;
};

struct wynik uklad(struct rownanie l1, struct rownanie l2)
{
   float w, wx, wy;
   struct wynik _wynik;

   
   w = l1.a*l2.b-l1.b*l2.a;
   wx = l1.c * l2.b - l1.b* l2.c;
   wy = l1.a * l2.c - l1.c* l2.a;

   if( fabs(w) < EPS )
   {
      if(fabs(wx) < EPS && fabs(wy) < EPS) _wynik.k=0;
      else _wynik.k=-1;
   }
   else
   {
      _wynik.x=wx/w;
      _wynik.y=wy/w;
      _wynik.k=1;
   }
   return _wynik;
}

int main()
{
   struct rownanie l1,l2;
   struct wynik w;

   printf("Podaj wspolczynniki ukladu rownan\nax + by = c\ndx + ey = f\n");
   printf("a= "); scanf("%f",&l1.a);
   printf("b= "); scanf("%f",&l1.b);
   printf("c= "); scanf("%f",&l1.c);
   printf("d= "); scanf("%f",&l2.a);
   printf("e= "); scanf("%f",&l2.b);
   printf("f= "); scanf("%f",&l2.c);

   /*  tu wywolanie funkcji 'uklad'  */  
   w=uklad(l1,l2);

   if(w.k == 1) printf("Uklad posiada rozwiazanie\nx=%f y=%f\n",w.x,w.y);
   else if(w.k == 0) printf("Uklad nie posiada jednego rozwiazania\n");
   else printf("Uklad jest sprzeczny\n");

   return 0;
}
