Tożsamosc i sprzecznosc w funkcji Kwadratowej

0

Witam chciałem się spytać czy mój program jest dobrze napisany ponieważ nie jestem pewny co do sprzecznosci i tożsamosci.
Nie jestem tez pewien czy nie powinienem dopisac ze sprzecznoscią tez jest : if ((a==0) and(b!=0) and (c==0))
Proszę o pomoc

 

#include <stdio.h>
#include <iostream>
#include <math.h>

using namespace std;

int main ()
{
      cout << "\n TROJMIAN KWADRATOWY \n\n" ;

               cout << "\n Podaj wspolczynnik a \n\n" ;
	float a;
	cin>> a ;

               cout << "\n Podaj wspolczynnik b \n\n" ;
	float b;
	cin>> b ;
               cout << "\n Podaj wspolczynnik c \n\n" ;
	float c;
	cin>> c ;


float x1;
float x2;
float wynik;

if (((a*a)==0) and (b!=0)) {
wynik = -b/c;
cout << "\n  Równanie liniowe, wynik: " << wynik <<"\n\n";
}
else
{
float delta;
delta = b*b-(4*a*c);
cout << "\n Delta wynosi: " << delta << "\n\n";

 

if (delta == 0) {

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

  if (a!=0){ 

cout << "\n Rownanie oznaczone - Rozwiązaniem jest: " << x1 << "\n\n";
 

 cout << "\n Wierzcholek paraboli wynosi: p="<< x1 << " q=" << 0 << "\n\n";

    if (a > 0) {
	cout << "\n Ramiona paraboli skierowane sa do góry \n";
	}
	else
    if (a < 0) {
	cout << "\n Ramiona paraboli skierowane sa do dołu \n";
	}
  }



 {

     if ((a==0) and(b==0) and (c!=0))
    {
        cout << "\n\tSprzecznosc - Brak rozwiazan\n\n";
    } 

    if ((a==0) and (b==0) and (c==0))
      {   cout << "Tozsamosc - nieskonczenie wiele rozwiazan\n"; 
      }

 }

}
else
{
if (delta<0) {
	cout << "\n Brak rozwiązań, delta ujemna \n";

    }
else
  {
 	x1=(-b-sqrt(delta))/(2*a); 
	x2=(-b+sqrt(delta))/(2*a);
        cout << "\n Rozwiazaniem rownania sa pierwiastki: x1 =  " << x1  << " i x2 =  " << x2 << "\n\n";


     if ((a==0) and(b==0) and (c!=0))
    {
        cout << "\n\t Sprzecznosc - Brak rozwiazan\n\n";
    } 

    if ((a==0) and (b==0) and (c==0))
      {   cout << "Tozsamosc - nieskonczenie wiele rozwiazan\n"; 
      }

	float p;
	float q;

        p = (-(b))/(2*a);		
	q = (-(delta))/(4*a);	

	  cout << "\n Wierzcholek paraboli to:  p=" << p  << " q=" << q << "\n\n";


  if (a > 0) {
	cout << "\n Ramiona paraboli skierowane sa do góry \n";
	}
	else
    if (a < 0) {
	cout << "\n Ramiona paraboli skierowane sa do dołu \n";
	}

  }

}
}

return 0 ;	
	
}



0

Przejrzałem twój kod i problem polega na tym, że za bardzo wszystko zagmatwałeś i to w sensie matematycznym.
Zrób porządek z zagnieżdżeniem warunków if to zacznie to działać - właściwe wcięcia w kodzie powinny ci ułatwić sprawę.

0
#include <stdio.h>
#include <iostream>
#include <math.h>

using namespace std;

int main ()
{
    cout << "\n TROJMIAN KWADRATOWY \n\n" ;

    cout << "\n Podaj wspolczynnik a \n\n" ;
    float a;
    cin>> a ;

    cout << "\n Podaj wspolczynnik b \n\n" ;
    float b;
    cin>> b ;
    cout << "\n Podaj wspolczynnik c \n\n" ;
    float c;
    cin>> c ;


    float x1;
    float x2;
    float wynik;

    if (((a*a)==0) and (b!=0))
    {
        wynik = -b/c;
        cout << "\n  Równanie liniowe, wynik: " << wynik <<"\n\n";
    }
    else
    {
        float delta;
        delta = b*b-(4*a*c);
        cout << "\n Delta wynosi: " << delta << "\n\n";



        if (delta == 0)
        {

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

            if (a!=0)
            {

                cout << "\n Rownanie oznaczone - Rozwiązaniem jest: " << x1 << "\n\n";


                cout << "\n Wierzcholek paraboli wynosi: p="<< x1 << " q=" << 0 << "\n\n";

                if (a > 0)
                {
                    cout << "\n Ramiona paraboli skierowane sa do góry \n";
                }
                else if (a < 0)
                {
                    cout << "\n Ramiona paraboli skierowane sa do dołu \n";
                }
            }



            {

                if ((a==0) and(b==0) and (c!=0))
                {
                    cout << "\n\tSprzecznosc - Brak rozwiazan\n\n";
                }

                if ((a==0) and (b==0) and (c==0))
                {
                    cout << "Tozsamosc - nieskonczenie wiele rozwiazan\n";
                }

            }

        }
        else
        {
            if (delta<0)
            {
                cout << "\n Brak rozwiązań, delta ujemna \n";

            }
            else
            {
                x1=(-b-sqrt(delta))/(2*a);
                x2=(-b+sqrt(delta))/(2*a);
                cout << "\n Rozwiazaniem rownania sa pierwiastki: x1 =  " << x1  << " i x2 =  " << x2 << "\n\n";


                if ((a==0) and(b==0) and (c!=0))
                {
                    cout << "\n\t Sprzecznosc - Brak rozwiazan\n\n";
                }

                if ((a==0) and (b==0) and (c==0))
                {
                    cout << "Tozsamosc - nieskonczenie wiele rozwiazan\n";
                }

                float p;
                float q;

                p = (-(b))/(2*a);
                q = (-(delta))/(4*a);

                cout << "\n Wierzcholek paraboli to:  p=" << p  << " q=" << q << "\n\n";


                if (a > 0)
                {
                    cout << "\n Ramiona paraboli skierowane sa do góry \n";
                }
                else if (a < 0)
                {
                    cout << "\n Ramiona paraboli skierowane sa do dołu \n";
                }

            }

        }
    }

    return 0 ;

}


Przejechane autoformatterem CodeBlocksa.

0

Nudziło mi się, więc spojrzałem na kod.
Ogółem to robisz dużo niepotrzebnych porównań i powtórzeń.
Samo jądro Twojego programu mogłoby wyglądać tak:

 
//wczytanie danych
//Trójmian kwadratowy postaci  a*x^2 + b*x + c = 0
//Psaudokod, musisz poprawić wypisywanie i zapis wyrażeń matematycznych

if(a==0)
{ 
	"mamy funkcję liniową"
	if(b==0)//nie ma iksa
	{ 
		if(c==0) "0=0, tożsamość" //czyli same zera
		else "c=0, sprzeczność"
	}
	else //b jest róże od zera, nadal liniowa
	{    // bx+c=0 ->  bx=-c  -> x=-c/b  //masz źle
		wynik=-c/b;
		"Rozwiązaniem jest x=wynik"
	}
}
else //a różne zeru, funkcja kwadratowa
{

	"mamy funkcję kwadratową"
	if(a>0) 
		"Parabola w górę"
	else
		"Parabola w dół"
	
	delta=b*b-4*a*c;
	
        //zauważ, że znak delty nie wpływa na wierzchołki - jak wychodzi zero albo ujemna,to wzory takie same nadal
	p=-b/(2*a);
	q=-delta/4a;
	"Wierzchołek paraboli w funkcie (p,q)"
	
	
	if(delta<0) //brak rozwiązań
	{
		"brak rozwiązań w zbiorze liczb rzeczywistych"
	}
	else if(delta==0)
	{
		wynik=-b/(2*a);
		"Pierwiastek podwójny x=wynik"
	}
	else //delta>0
	{
		wynik1=( -b+sqrt(delta) )/(2*a);
		wynik2=( -b-sqrt(delta) )/(2*a);
		"Dwa pierwiastki x1=wynik1, x2=wynik2"
	}

}

0

@Jadeszek, sprawdziłeś swój kod? Są co najmniej cztery błędy, poprawiam trzy.

                wynik1=( -b+delta )/(2*a);
                wynik2=( -b-delta )/(2*a);
0

a jeszcze pytanie . Bo jest tak ze gdy:
a=0 b=0 c=0 to wtedy tosamosc jest.
gdy:
a=0 b=0 c rozne od 0 to wtedy jest sprzecznosc
a czy gdy mamy sytuacię że:
a=0 b rózne od 0 c=0 to to tez jest sprzecznosc????

0

Nie, równanie bx=0 ma rozwiązanie.

0

@bo "musisz poprawić (...) zapis wyrażeń matematycznych"
Nie skupiałem się na zapisie wzorów pod kompilator (chociaż rzeczywiście, powinienem dorzucić nawias dla mianowników, mój błąd - a podwojony wynik1 to zwykła literówka), tylko na tym, by rozpisać pytającemu cykl if'ów, z którymi miał największy problem - wzory te miał wcześniej dobrze.
Biję się w pierś za pominięcie sqrt(), należą mi się baty za gapowatość.
Poprawione.

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