[c++] pisanie wzoru iloczynowego funkcji kwadratowerj blad


(Mieszko1481) #1

witam. próbuje napisać program który po wpisanie A, B, C wyliczy nam deltę, x1,x2, q,p oraz również napisze wzór funkcji. Mam mały problem ponieważ gdy wypisuje mi wzór funkcji w postaci iloczynowej, (np gdy x1=-2 o x2=2) wypisuje dwa razy wzór raz (x--2)(x-2) i drugi raz (x+2)(x-2) chodzi mi o to żeby wypisał mi w poprawnej formie wzór, czyli tylko ten (x+2)(x-2) żeby dwa minusy od razu zamienił na plus. Prosiłbym o pomoc i najlepiej wyjaśnienie gdzie zrobiłem błąd. (program jest nieskończony do końca wiec nie czepiać się reszty)

#include 

#include 

using namespace std;


int main()


{

 char znak;

 cout << "co chcesz obliczyc?" << endl << endl;

 {

      cout << "1. funckja kwadratowa" << endl;


      cin >> znak;

 }

system( "cls" );

 if (znak=='1')

 {

float x1,x2,x0,delta,q,p,x3,x4,a,b,c; 

 cout << "podaj a: "; cin >> a;

 cout << "podaj b: "; cin >> b;

 cout << "podaj c: "; cin >> c; 

 system( "cls" );

 cout << endl << "a: " << a << " b: " << b << " c: " << c << endl << endl;

 delta = (b*b)-4*a*c;

 cout << endl << "delta: " << delta << endl << endl;


  if (delta>0)         

   {                    

         x1=((-b-sqrt(delta))/(2*a)); 

         x2=(-b+sqrt(delta))/(2*a);

         x3=x1-x1-x1;

         x4=x2-x2-x2;

         cout << "funkcja ma dwa pierwiastki: " << " x1: " << x1 << " oraz " << "x2: " << x2 << endl << endl;  


         if (x1>0, x2>=0)

         {

         cout << "postac iloczynowa funkcji wynosi: f(x)= " << a << "(x-" << x1 << ")(x" << x4 << ")" << endl << endl;

         }

         if (x1>0, x2<0)

         {

         cout << "postac iloczynowa funkcji wynosi: f(x)= " << a << "(x-" << x1 << ")(x+" << x4 << ")" << endl << endl;

         }

         if (x1<0, x2<0)

         {

         cout << "postac iloczynowa funkcji wynosi: f(x)= " << a << "(x+" << x3 << ")(x+" << x4 << ")" << endl << endl;

         }

         if (x1<0, x2>=0)

         {

         cout << "postac iloczynowa funkcji wynosi: f(x)= " << a << "(x+" << x3 << ")(x-" << x2 << ")" << endl << endl;

         }


   }

   else

   if (delta<0)

   {

               cout << "funkcja nieposiada zadnych pierwiastkow" << endl << endl; 

   }

   else

   if (delta==0)

   {

        x0=(-b/(2*a)); 

        cout << "funkcja ma jeden pierwiastek: " << " x0: " << x0 << endl << endl;          

   }  

 p = (-b/2*a);

 q = (-delta/4*a);

 cout << "wierzcholek: p: " << p << " q: " << q << endl << endl; 

 cout << "postac kanoniczna funkcji wynosi: f(x)= " << a << "(x-" << p << ")^2+" << q << endl << endl;   


}


 system("PAUSE");

 return 0;

}

(Drobok) #2

Napisz co chcesz osiągnąć bez zdań w punktach (bez słowa pierw)

np.

-wyświetlić to

-wyświetlić to

Bowiem twoja obecna wypowiedź jest nie zrozumiała dla większości (w tym dla mnie), zapoznaj się również z znacznikiem code i wklej tam sformatowany kod (tabulatory, entery, etc)


([alex]) #3

if (x1>0, x2>=0)

jest równoznaczne z:

if (x1>0)

pewnie miałeś na myśli:

if (x1>0 && x2>=0)

Używaj: else if, oszczędzi ci to sporo czasu.

czasami warto rozbić instrukcje na kilka:

cout << "postac iloczynowa funkcji wynosi: f(x)= " << a << "(x" ;

if(x1>=0) cout <<"+";

cout << x1 << ")(x";

if(x2>=0) cout <<"+";

cout x2 << ")" << endl << endl;

zamiast x3=x1-x1-x1

można napisać x3=-x1;