Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Postać iloczynowa, delta, funkcja kwadratowa

Ostatnio zmodyfikowano 2014-01-19 16:15
Autor Wiadomość
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
P-102211
alixir
» 2014-01-15 13:08:40
Usuń to:

C/C++
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:
C/C++
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;
P-102213
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?
P-102229
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:

C/C++
warunek ? wyrazenie_jesli_pawda: wyrazenie_jesli_falsz

Zapis ten równoważny jest z:

C/C++
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)
P-102230
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 :)
P-102232
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:

C/C++
cout << "Postac iloczynowa: y=(x" <<( - x1 >= 0 ? "+": "" ) << - x1 << ")(x" <<( - x2 >= 0 ? "+"
    : "" ) << - x2 << ")" << endl;

lub kożystają z jednej z metod cout:

C/C++
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:

C/C++
cout << "Postac iloczynowa: y=(x" <<( - x1 >= 0 ?( x1 == 0 ? "-": "+" )
    : "" ) << - x1 << ")(x" <<( - x2 >= 0 ?( x2 == 0 ? "-"
    : "+" )
    : "" ) << - x2 << ")" << endl;
P-102233
pekfos
» 2014-01-19 15:12:44
Ogólny zapis:
C/C++
warunek ? wyrazenie_jesli_pawda: wyrazenie_jesli_falsz
Zapis ten równoważny jest z:
C/C++
if( warunek ) wyrazenie_jesli_pawda; else wyrazenie_jesli_falsz;
Nieprawda.
P-102542
alixir
» 2014-01-19 16:09:07
pekfos skoro podważasz to należało by napisać poprawną postać
P-102545
« 1 » 2
  Strona 1 z 2 Następna strona