milman Temat założony przez niniejszego użytkownika |
Postać iloczynowa, delta, funkcja kwadratowa » 2014-01-15 11:56:04 Witam, mam problem z postacią iloczynową. #include <iostream> #include <time.h> #include <windows.h> #include <math.h> using namespace std;
int main() { //locale myloc ("Polish"); int a,b,c,delta,pdelta,x0,x1,x2; string m; cout<<"Podaj kolejno zmienne a, b, c oddzielając je spacja."<<endl; cin>>a; cin>>b; cin>>c; Beep(500,10); Sleep(500); delta=-4*a*c+pow(b,2); pdelta=sqrt(delta); if (delta<0) { cout<<"Delta jest ujemna. Brak rozwiazan"<<endl; }else{ if (delta==0) { x0=((-b)/(2*a)) ; }else{ x1=(((-b)-pdelta)/(2*a)); x2=(((-b)+pdelta)/(2*a)); cout <<"Delta= "<<delta<<endl <<"Pierwiastek z delty= "<<pdelta<<endl <<"x1 ="<<x1<<endl <<"x2 ="<<x2<<endl; if (x1 == 0 && x2 == 0) { m="-"; }else{ if (x1<0 && x2<0){ m=""; }else{ m="+"; x1=x1*(-1); x2=x2*(-1); } } cout<<"Postac iloczynowa: y=(x"<<m<<x1<<")(x"<<m<<x2<<")"<<endl; } } cin.get(); return 0; }
Chodzi mi konkretnie o fakt, że postać iloczynowa wygląda tak: f(x)=(x-x1)(x-x2). Udało mi się wykonać zmianę znaków w wypadku, gdy x1 i x2 < 0, ale mam problem z "0". Gdy x1 lub x2 wychodzi 0 znak w postaci iloczynowej pozostaje + zamiast -. Co robię źle? Pozdrawiam |
|
alixir |
» 2014-01-15 13:08:40 Usuń to: if( x1 == 0 && x2 == 0 ) { m = "-"; } else { if( x1 < 0 && x2 < 0 ) { m = ""; } else { m = "+"; x1 = x1 *( - 1 ); x2 = x2 *( - 1 ); } } Wyświetlaj to tak: cout << "Postac iloczynowa: y=(x" <<( - x1 > 0 ? "+": "" ) << - x1 << ")(x" <<( - x2 > 0 ? "+" : "" ) << - x2 << ")" << endl; A ogólnie to brak ci poprawnej obsługi programu dla delta=0; |
|
milman Temat założony przez niniejszego użytkownika |
» 2014-01-15 14:30:26 Widzę, że jesteś zaawansowany i muszę ogarnąć coś Ty mi tu podał do wklejenia :) Mimo to udało mi się wyłapać brak jednego znaku :) w cout << "Postac iloczynowa: y=(x" <<( - x1 > 0 ? "+": "" ) << - x1 << ")(x" <<( - x2 > 0 ? "+" : "" ) << - x2 << ")" << endl; brakowało Ci "-" za "+" w przykładzie przy x2 :) Dzięki Ci bardzo za pomoc. Powiedz mi jeszcze co masz na myśli mówiąc, że brak mi poprawnej obługi x0? Zapisałem źle wzór? |
|
alixir |
» 2014-01-15 14:45:54 Nadal nie widzę gdzie popełniłem błąd :P (ale mniejsza o to). To co podałem nie jest szczególnie skomplikowane. Ogólny zapis: warunek ? wyrazenie_jesli_pawda: wyrazenie_jesli_falsz
Zapis ten równoważny jest z: if( warunek ) wyrazenie_jesli_pawda; else wyrazenie_jesli_falsz;
Natomiast odnośnie obsługi delta=0, to wzór jest ok, lecz w tym wypadku program nie wyświetla żadnych wyników (no chyba że to cel zamierzony) |
|
milman Temat założony przez niniejszego użytkownika |
» 2014-01-15 14:50:50 Przed:
cout << "Postac iloczynowa: y=(x" <<( - x1 > 0 ? "+": "" ) << - x1 << ")(x" <<( - x2 > 0 ? "+" : "" ) << - x2 << ")" << endl;
Po:
cout << "Postac iloczynowa: y=(x" <<( - x1 > 0 ? "+": "" ) << - x1 << ")(x" <<( - x2 > 0 ? "+" : "-" ) << - x2 << ")" << endl;
Bez tego minusa nie mam znaku przy x2, w przypadku a=3, b=6, c=0 :)
II opcja warunku, którą mi pokazałeś jest bardzo fajna i bardzo Ci dziękuję za wyjaśnienei :)
x0 jeszcze nie zdążyłem ogarnąć :) Zatrzymałem się na tym problemie, a nie chciałem psuć więcej :) |
|
alixir |
» 2014-01-15 14:59:14 W tamtym miejscu nie może stać minus. Sprawdź sobie np. dla 1 4 -5 Pominełem liczbe zero w warunku. Prawidłowy zapis wygląda tak: cout << "Postac iloczynowa: y=(x" <<( - x1 >= 0 ? "+": "" ) << - x1 << ")(x" <<( - x2 >= 0 ? "+" : "" ) << - x2 << ")" << endl; lub kożystają z jednej z metod cout: cout.setf( ios::showpos ); cout << "Postac iloczynowa: y=(x" << - x1 << ")(x" << - x2 << ")" << endl; lub jeśli upierasz się aby był minus przy zerze to tak: cout << "Postac iloczynowa: y=(x" <<( - x1 >= 0 ?( x1 == 0 ? "-": "+" ) : "" ) << - x1 << ")(x" <<( - x2 >= 0 ?( x2 == 0 ? "-" : "+" ) : "" ) << - x2 << ")" << endl;
|
|
pekfos |
» 2014-01-19 15:12:44 Ogólny zapis:
warunek ? wyrazenie_jesli_pawda: wyrazenie_jesli_falsz
Zapis ten równoważny jest z:
if( warunek ) wyrazenie_jesli_pawda; else wyrazenie_jesli_falsz;
|
Nieprawda. |
|
alixir |
» 2014-01-19 16:09:07 pekfos skoro podważasz to należało by napisać poprawną postać |
|
« 1 » 2 |