Realizziamo un programma che risolva un'equazione di secondo grado in C.
Innanzitutto partiamo dalla definizione. Un'equazione di secondo grado è un'equazione di grado 2 con, eventualmente, esponenti di grado inferiore.
Fondamenti solidi di programmazione
Impara le basi della programmazione in C in modo semplice, pratico ed efficace. Variabili, cicli, funzioni, logica e algoritmi.
- ⏱️ 9 ore di corso registrato
- 🧩 Più di 50 algoritmi risolti passo passo
- 🎯 Livello base
- 💻 100% online, fruibile quando vuoi
a è il coefficiente del termine di grado 2
b è il coefficiente del termine di grado 1
c è il coefficiente del termine di grado 0, detto anche termine noto
Per risolvere l'equazione occorre conoscere i tre coefficienti. Una volta acquisiti i tre valori occorre calcolare il determinante o delta utilizzando la formula:
b*b-4*a*c;
In base al determinante si verificano queste situazioni:
se il determinante è minore di zero, non esistono soluzioni reali;
se il determinante è uguale a zero, l'equazione ammette due soluzioni reali coincidenti;
se il determinante è maggiore di zero, l'equazione ammette due soluzioni reali distinte;
Inoltre, se il coefficiente a è uguale a zero, chiaramente non ci troveremo più di fronte ad un'equazione di secondo grado ma di primo grado. Dunque ovviamente non si potrà applicare la formula.
Nei casi in cui le soluzioni esistono si ottengono con questa formula:
x1=(-b+sqrt(determinante))/2*a
x2=(-b-sqrt(determinante))/2*a
dove sqrt è la funzione per il calcolo della radice quadrata.
Procedimento dell'algoritmo per la risoluzione delle equazioni di secondo grado
Per risolvere le equazioni di secondo grado in C, si possono creare tante soluzioni.
Ve ne propongo due, una con l'uso delle funzioni o procedure e l'altra senza.
Esempio 1: equazione di secondo grado senza funzioni create in C
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main() {
float a,b,c;
double x1,x2,d;
printf("coefficiente a:\t");
scanf("%f", &a);
printf("\ncoefficiente b:\t");
scanf("%f", &b);
printf("\ncoefficiente c:\t");
scanf("%f", &c);
if (a==0) {
if((b==0)&&(c==0))
printf("\nequazione indeterminata");
else if(b==0)
printf("\nequazione impossibile");
else {
printf("l'equazione e' di primo grado\n");
x1=-c/b;
printf("\n x= %lf", x1);
}
}
else {
d=b*b-4*a*c;
printf("\nil determinante e' %5.3lf ",d);
if(d>0) {
x1=(-b-sqrt(d))/(2*a);
x2=(-b+sqrt(d))/(2*a);
printf("\nDue soluzioni reali distinte x1= %5.3lf e x2= %5.3lf ",x1,x2);
}
else if(d==0) {
x1=(-b)/(2*a);
printf("\nDue soluzioni reali coincidenti x1 e x2 uguali a %5.3lf ",x1);
}
else printf("\nNon esistono soluzioni reali\n");
}
system("pause");
return 0;
}
Chiaramente si potrebbero aggiungere degli accorgimenti al programma ad esempio considerando le equazioni di secondo grado monomie, ecc..
Esempio 1: equazione di secondo grado con l'uso di funzioni o procedure in C
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
float a, b, c;
double x1,x2,d;
void coefficienti()
{
printf("coefficiente a:\t");
scanf("%f", &a);
printf("\ncoefficiente b:\t");
scanf("%f", &b);
printf("\ncoefficiente c:\t");
scanf("%f", &c);
}
void determinante()
{
d=b*b-4*a*c;
}
void soluzioni()
{
if(d<0)
printf("\nnon possono esserci soluzioni reali");
else if(d==0) {
x1=(-b)/(2*a);
printf("Due soluzioni reali coincidenti x1 e x2 uguali a %5.3lf ",x1);
}
else
{
x1=(-b-sqrt(d))/(2*a);
x2=(-b+sqrt(d))/(2*a);
printf("Due soluzioni reali distinte x1= %5.3lf e x2= %5.3lf ",x1,x2);
}
}
void equazione_primo()
{
if((b==0)&&(c==0))
printf("\nequazione indeterminata");
else if(b==0)
printf("\nequazione impossibile");
else {
x1=-c/b;
printf("\n x= %5.3f", x1);
}
}
main()
{
coefficienti();
if(a==0)
equazione_primo();
else {
determinante();
soluzioni();
}
system("pause");
}
Alcuni link utili:
Funzioni in C
Funzione strlen() in C
Funzione gets() e puts() in C
Funzioni getchar() e putchar in C
Uso della libreria string.h
Concatenare due stringhe in C
Array di caratteri in C
Ricerca di un elemento in una matrice
Prodotto tra matrici in C
Somma tra due matrici in C
Array multidimensionali
Tavola pitagorica in C
Array o vettori in linguaggio C
Media dei numeri in un array in linguaggio C