/*
Programa para calcular as raizes da equacao do segundo grau e os pontos maximo e minimo
Autor: Joao Paulo Lessa
Data:20/04/2021
*/
#include <iostream>
#include <math.h>
using namespace std;
int tipoFunc(float a, float b,float c){
if (a==0 && b!=0 && c!=0){
return 1;
}
else if (a==0 && b==0 && c!=0) {
return 2;
} else if (a==0 && b==0 && c==0){
return 3;
} else if (a!= 0 && b==0 && c!=0){
return 4;
} else if (a!=0 && b== 0 && c==0){
return 5;
} else if (a!=0 && b!=0 && c==0){
return 6;
} else if (a==0 && b!=0 && c==0){
return 7;
} else {
return 8;
}
float funcAfim (float b, float c) {
float resultado;
resultado = ((-1)*c/b);
return resultado;
}
float funcRaiz (float a, float c){
float teste, resultado;
teste = -c/a;
if (teste < 0){
cout << " A fracao -c/a e menor que zero, logo: " << endl;
cout << " A raiz não é Real!!! " << endl;
cout << " O ponto de maximo ou minimo não pode ser calculado! " << endl;
// goto fim;
} else {
resultado = sqrt(teste);
}
return resultado;
}
float delta (float a, float b, float c) {
float resultado;
resultado = b*b-4*a*c;
return resultado;
}
float baskara (float a, float b, float c, int j){
float teste, resultado;
teste = delta(a,b,c);
if (delta<0){
cout << " não existe raizes reais!!!";
} else {
resultado = (-b+j*sqrt(delta(a,b,c)))/(2*a);
return resultado;
}
}
int main (){
float a,b,c,x1,x2,pm;
int n;
cin >> a;
cin >> b;
cin >> c;
n = tipoFunc(a,b,c);
if ( n==1){
x1 = funcAfim(b,c);
cout << " A funcao passar a ser do primeiro grau, com raiz: " << x1 << endl;
cout << " O ponto de maximo ou minimo não pode ser calculado. " << endl;
} else if (n==2){
x1 = c
cout << "A funcao é constante de valor: " << x1 << endl;
} else if (n==3) {
cout << " Todos os coeficientes são zero, portanto a funcao é igual a 0. " << endl;
cout << " O ponto de maximo ou minino não existe!!! " << endl;
} else if (n==4) {
x1 = funcRaiz (a,c);
x2 = -x1;
cout << " A raizes são: " << endl;
cout << " X1: " << x1 << endl;
cout << " X2: " << x2 << endl;
cout << " O ponto de maximo é: " << endl;
cout << " Xv = " << (-b/(2*a)) << endl;
cout << " Yv = " << (-delta(a,b,c)/4*a) << endl;
} else if (n==5) {
cout << "Ambas as raizes são zero!!! " << endl;
cout << " O ponto de maximo ou minimo é igual a zero! " << endl;
} else if (n==6) {
x1 = 0;
x2 = funcAfim (a,b);
cout << " X1 é: " << x1 << endl;
cout << " X2 é: " << x2 << endl;
cout << " O ponto de maximo é: " << endl;
cout << " Xv = " << (-b/(2*a)) << endl;
cout << " Yv = " << (-delta(a,b,c)/4*a) << endl;
} else if (n==7) {
cout << " A funcao passa a ser do primeiro grau, sendo raiz igual a zero! " << endl;
cout << " O ponto de maximo ou minimo não é calculado! " << endl;
} else {
x1 = baskara (a,b,c,0);
x2 = baskara (a,b,c,1);
cout << "As raizes da funcao são: " << endl;
cout << x1 << endl;
cout << x2 << endl;
cout << " Xv = " << (-b/(2*a)) << endl;
cout << " Yv = " << (-delta(a,b,c)/4*a) << endl;
}
// fim:
return 0;
}