School-Coding-Cpp/sfusi/equazioniDiSecondoGrado.cpp

84 lines
2.2 KiB
C++

#include <iostream>
#include <cmath>
using namespace std;
int main(void) {
// Coefficienti della parabola
float a = 1;
float b = 5;
float c = 4;
cout << "Equazione: " << a << "x^2 + " << b << "x + " << c << " = 0" << endl;
// Apertura della parabola
if (a > 0) {
cout << "Parabola rivolta verso l'alto." << endl;
} else if (a < 0) {
cout << "Parabola rivolta verso il basso." << endl;
} else {
cout << "Errore." << endl;
return 0;
}
// Calcolo del discriminante
float delta = (b * b) - (4 * a * c);
cout << "Delta: " << delta << endl;
if (delta > 0) {
float x1 = ((-b) - (sqrt(delta))) / (2 * a);
float x2 = ((-b) + (sqrt(delta))) / (2 * a);
cout << "S = {x1 = " << x1 << " V " << "x2 = " << x2 << "}" << endl;
} else if (delta == 0) {
float x0 = (-b) / (2 * a);
cout << "S = {x = " << x0 << "}" << endl;
} else {
cout << "Soluzioni troppo complesse per ora." << endl;
return 0;
}
// Calcolo del vertice
float xVertice = (-b) / (2 * a);
float yVertice = (a * xVertice * xVertice) + (b * xVertice) + c;
cout << "V(" << xVertice << "; " << yVertice << ")" << endl;
// Calcolo del parametro focale
float parametroFocale = (1) / (4 * a);
// Calcolo del fuoco
float xFuoco = xVertice;
float yFuoco = yVertice + parametroFocale;
cout << "F(" << xFuoco << "; " << yFuoco << ")" << endl;
// Calcolo della direttrice
float direttrice = yVertice - parametroFocale;
cout << "d: y = " << direttrice << endl;
// Asse di simmetria
cout << "s: x = " << xVertice << endl;
// Disegnamo il grafico (solo se le soluzioni sono numeri interi)
const int width = 20;
const int height = 10;
for (int y = height; y >= -height; --y) {
for (int x = -width; x <= width; ++x) {
float fx = (a * x * x) + (b * x) + c;
if (round(fx) == y) {
cout << "*";
} else if (y == 0 && x == 0) {
cout << "+";
} else if (y == 0) {
cout << "-";
} else if (x == 0) {
cout << "|";
} else {
cout << " ";
}
}
cout << endl;
}
return 0;
}