#include <cstdlib>
#include <iostream>
#include <cmath>//ke ni treba zaradi kvadraten koren i na kvadrat pow(x,2) ke kositam nameso x*x zaradi popreglednost vo kodot
/*
Name: Kvadratni i sistem linearni ravenki ili Project1
Copyright: Tan
Author: Tan
Date: 16.12.12 10:21
*/
/*
Funkcionalnosta na kodot e podelena vo funkcii za da mozi da bidat povtorno iskoristeni
Koristam inline funkcii za popreglednost na kodot i za se da bidi na edno mesto
inace podobro bi bilo da se razdelat prototipite na funkciite vo eden fajl,
a telata vo drug i main-ot vo tret...
*/
using namespace std;
void vnesiLinRavenka(int &q,int &w,int &e)//se koristi predavanje po referenca za da se pristapi do vnesenite vrednosti
{
cout<<"ravenkata koja ja vnesi e:"<<endl;
cout<<q<<(w>=0?"x+":"x")<<w<<"="<<e<<endl;
};
void presmetajSisLinRav( int a, int b, int c, int d, int l, int m, double &xRef, double &yRef ) //za povekjekratno presmetuvanje na sistem
//linearni ravenki
/* Na primer:
da gi vnesime vrednositte vo case 2
i od tamu da ja povikame funkcijata
*/
//Preporacuvam da koristis pokazuvaz namesto
//predavanje preku referenca biejki pokazuvacot
//ovozmozuva dinamicnost, jas bidejki pocnav so
//referenca i taka prodolziv...
{
int det,detX,detY; //Ovaa funkcija resava sis od 2 lin ravenki so 2 nepozanti
//za poinaku treba da se promeni
det=(a*d)-(b*c);
if(det==0)
{
cout<<"Sistemot nema resenie."<<endl; //Tuka ke pecatam nema resenie a podolu ako e isot resenieto
}
else{
detX=(l*d)-(m*b);
detY=(a*m)-(c*l);
//najlesno da se resi spored mene e so determinanti
xRef=detX/det;
yRef=detY/det;
if(xRef==yRef)
{
cout<<"Resenieto za x i y e isto"<<endl;
}
}
}
void presmetajResSisLinRav() // ovaa funkcija sluzi za vnesuvanje na vrednosite za linearnite ravenki
{ //bidejki sluzi samo za vnesuvanje na vrednostite i povikuvanje na funkcii
//moze da se izostavi i potrebniot vlez na vred. i povik na funk. da se napravi vo switch
//
int a1,b1,c1,a2,b2,c2;
double x,y;
cout<<"Vnesi ja prvata ravenka vo forma na ax+bx=c "<<endl; //funk vnesiLinRavenka se povikuva dva pati bidejki
//treba da se resi sistem od dve linearni ravenki
//za 3 ili povekje e potrebna dopolnitelna modifikacija
//vo presmetajSisLinRav i nacinot na pecatenje na ravenkite
cout<<"Vnesi za a:";cin>>a1; //Se vnesuvaat na sekoj nov red
cout<<"Vnesi za b:";cin>>b1;
cout<<"Vnesi za c:";cin>>c1;
vnesiLinRavenka(a1,b1,c1);
cout<<"Vnesi ja vtorata ravenka vo forma na ax+bx=c "<<endl;
cout<<"Vnesi za a:";cin>>a2;
cout<<"Vnesi za b:";cin>>b2;
cout<<"Vnesi za c:";cin>>c2;
vnesiLinRavenka(a2,b2,c2); //doloku bea tri ili pocekje lin ravenki ovoj cekor ke go povtorevme
presmetajSisLinRav(a1,b1,c1,a2,b2,c2,x,y); //ja povikuvame funk presmetajSisLinRav
cout << "\nx = " << x << " y = " << y << endl;
};
void presmetajKvadRav(int &a,int &b,int &c) //od tuka pocnav so referencite, namesto so pokazuvaci i taka prodolziv
//i ovaa funkcija dava moznost za povtorno da se iskoristi
{
double x; //Kvadratnite ravenki imaat dve resenija za
double y;
double diskr; //ke resavame so diskriminanta
if(a==0)
{
cout<<"Kvadratnata ravenka nema resenie."<<endl; //znaci so 0 nisto ne se deli
}
else{
diskr=pow((double)b,2)-4*a*c;//ona so e b*b-4ac mozi da si menis i b*b-4ac
if(diskr>0) //so proverka na diskrimin. mozi da vidis kakvo resenie ke dobies
{
x=((0-b)+sqrt(diskr))/2*a;
y=((0-b)-sqrt(diskr))/2*a;
cout<<"Kvadratnata ravenka ima dve resenija i toa: "<<endl;
cout<<"Res1:"<<x<<endl;
cout<<"Res2:"<<y<<endl;
}
if(diskr==0){
cout<<"Kvadratnata ravenka ima edno resenie i toa: "<<endl;
cout<<"Res:"<<x<<endl;
}
if(diskr<0){
cout<<"Kvadratnata ravenka ima kompleksni resenija "<<endl;
}
}
};
int main(int argc, char *argv[])
{
int izbor; //mozda i trebase so dva if-a i eden else ali aj taka pocnav
cout<<"Pritisni 1 ili 2 za izbor na sistem ravenki ili kvadratna ravenka"<<endl;//bla bla bla
cout<<"legenda:"<<endl<<"1-Kvadratna ravenka"<<endl<<"2-Sistem linearni ravenki"<<endl<<"3-za da izlezis od programa"<<endl;//uste bla bla bla
label: cin>>izbor;//zabelezi tuka labela iako ne e preporacano da se koristi izgleda dobar moment da se iskoristi
switch(izbor)
{
case 1: //ovde primeniv nacin na vnesvanje na vrednostite i povikuvanje na funkcijata ili ako bea povekje funkcii kako so sistemot
//lin ravenki ke naprajs vnesi kod--pov funkcija--napraj nesto so dobienite vred--povikaj funk--proveri dob vrednosti itn...
int a,b,c;
cout<<"Vnesi za a:";cin>>a;
cout<<"Vnesi za b:";cin>>b;
cout<<"Vnesi za c:";cin>>c;
presmetajKvadRav(a,b,c);
break;
case 2: //ovde samo povikvas edna funkcija i posle odis niz povekje funkcii koi ovaa funkciaj gi
//povikuva za da stignis do nekakov da recam odgovor
presmetajResSisLinRav();
break;
case 3:
exit(0); //3 znaci kraj na programata
break;
default:
cout<<"Probajte pak!"<<endl;
goto label; //cim nesto drugo napisis ke te odnesi gore
}
system("PAUSE"); //to e se
return EXIT_SUCCESS;
}