Brak wyniku podczas rozwiązywania równania liniowego

0

Cześć, to znowu ja, z kolejnym problemem. Otóż próbowałem napisać program liczący równanie liniowe ax+b=0, lecz, gdy a=0, a b!=0 to nie wyświetla się żaden komunikat, czy zrobiłem coś źle? Kod podsyłam niżej.

float a,b,x;
cout<<"Podaj liczbe a"<<endl;
cin>>a;
cout<<"Podaj liczbe b"<<endl;
cin>>b;
x=-b/a;
if(a=0)
{
    if(b=0)
    {
        cout<<"Rownanie ma nieskonczona ilosc rozwiazan"<<endl;
    }
     else if(b!=0)
    {
        cout<<"Rownanie jest sprzeczne"<<endl;
    }
}
else if(a!=0)
{
    cout<<"Wynikiem rownania jest "<<x<<endl;
}
5

Dzielisz przez zero przed ifem w którym obsługujesz ten warunek (a==0)

Dodatkowo używasz operatora przypisania zamiast porównania.
Czyli w ifach przypisujesz do a i b wartości 0 zamiast je porównać (poczytaj o operatorze ==)

0
opiszon napisał(a):

Dzielisz przez zero przed ifem w którym obsługujesz ten warunek (a==0)

Dodatkowo używasz operatora przypisania zamiast porównania.
Czyli w ifach przypisujesz do a i b wartości 0 zamiast je porównać (poczytaj o operatorze ==)

Ah, no tak, niby takie banalne, a człowiek szuka błędu. Wielkie dzięki za pomoc! :-)

2
vinteris1 napisał(a):

Cześć, to znowu ja, z kolejnym problemem. Otóż próbowałem napisać program liczący równanie liniowe ax+b=0, lecz, gdy a=0, a b!=0 to nie wyświetla się żaden komunikat, czy zrobiłem coś źle? Kod podsyłam niżej.

  	x=-b/a;
  	if(a=0)
  	{

Zabezpieczenie (o ile by było dobrze napisane) jest za późno. Wcześniej poleci wyjątek

1
  if(a)
  {
    double d=b*-4*a*c;
    if(d<0) cout<<"Rozwiązania tylko w płaszczyźnie zespolonej"<<endl;
    else if(!d) cout<<"Jedno rozwiązanie "<<(-b/(2*a))<<endl;
    else
    {
      d=sqrt(d);
      cout<<"Dwa rozwiązania "<<((-b-d)/(2*a))<<" i "<<((-b+d)/(2*a))<<endl;
    }
  }
  else if(b) cout<<"Jedno rozwiązanie "<<(c/b)<<endl;
  else if(c) cout<<"Równanie jest sprzeczne"<<endl;
  else cout<<"Rownanie ma nieskonczona ilosc rozwiazan"<<endl;
1
vinteris1 napisał(a):
opiszon napisał(a):

Dzielisz przez zero przed ifem w którym obsługujesz ten warunek (a==0)

Dodatkowo używasz operatora przypisania zamiast porównania.
Czyli w ifach przypisujesz do a i b wartości 0 zamiast je porównać (poczytaj o operatorze ==)

Ah, no tak, niby takie banalne, a człowiek szuka błędu. Wielkie dzięki za pomoc! :-)

Tak na przyszłość — Twój problem polega głównie na tym, że to człowiek szuka błędu. Zobacz, czym jest i jak się używa debuggera, to tego typu błędy staną się trywialne do znalezienia.

1

@ZrobieDobrze: +1

@vinteris1:
Jeśli kompilujesz to w gcc, to dodaj sobie takie opcje - nie wyłapią wszystkiego, ale mają szansę pokazać wiele błędów robionych na początku (i nie tylko ;) ) nauki programowania

-Wall -Wextra -pedantic -Werror=return-type -Werror=parentheses 
-Werror=vla -Werror=array-bounds -Wcast-qual -Wmaybe-uninitialized

1 użytkowników online, w tym zalogowanych: 0, gości: 1