Risolvere una equazione di secondo grado in C

Le equazioni di secondo grado sono una delle pietre miliari dell'algebra, con una formula generale espressa come \(ax^2+bx+c=0\), dove a, b, e c sono coefficienti reali con \(a\ne 0\). La soluzione di queste equazioni rivela le radici dell'equazione, che possono essere reali e distinte, reali e coincidenti, o complesse coniugate.

In questa pagina, esploreremo come implementare in C la risoluzione di un'equazione di secondo grado, affrontando passo dopo passo sia la teoria matematica che la pratica di programmazione necessarie per calcolare le radici di tali equazioni.

Concetti matematici

La soluzione di un'equazione di secondo grado si basa sul calcolo del discriminante, definito come \(D=b^2-4ac\). La natura delle radici dell'equazione dipende dal valore di D:

  • Se D>0, l'equazione ha due radici reali e distinte date da  \(x_1=\frac{-b+\sqrt{D}}{2a}\) e \(x_2=\frac{-b-\sqrt{D}}{2a}\).
  • Se D=0, l'equazione ha una radice reale doppia data da \(x=\frac{-b}{2a}\).
  • Se D<0, l'equazione ha due radici complesse coniugate date da \(x_1=\frac{-b}{2a}+i\frac{\sqrt{-D}}{2a}\) e \(x_2=\frac{-b}{2a}-i\frac{\sqrt{-D}}{2a}\) , dove i è l'unità immaginaria.

Struttura del programma in C

Il nostro programma dovrà eseguire i seguenti compiti:

  • Chiedere all'utente di inserire i valori dei coefficienti a, b e c.
  • Calcolare il discriminante D.
  • Determinare la natura delle radici in base al valore di D e calcolarle.
  • Visualizzare le radici all'utente.

Implementazione del codice in C

Qui è presentato un esempio di programma in C che esegue i passaggi sopra descritti:

#include <stdio.h> #include <math.h> int main() { double a, b, c, D, x1, x2, re, im; // 1. Ricezione dell'input printf("Inserisci i coefficienti a, b e c: "); scanf("%lf %lf %lf", &a, &b, &c); // 2. Calcolo del discriminante D = b*b - 4*a*c; // 3. Calcolo delle radici if(D > 0) { x1 = (-b + sqrt(D)) / (2*a); x2 = (-b - sqrt(D)) / (2*a); printf("Radici reali e distinte: x1 = %.2lf e x2 = %.2lf\n", x1, x2); } else if(D == 0) { x1 = x2 = -b / (2*a); printf("Radice reale doppia: x = %.2lf\n", x1); } else { re = -b / (2*a); im = sqrt(-D) / (2*a); printf("Radici complesse e coniugate: x1 = %.2lf + %.2lfi e x2 = %.2lf - %.2lfi\n", re, im, re, im); } return 0; }

Considerazioni Aggiuntive

  • Gestione dei coefficienti: È importante verificare che il coefficiente a non sia zero, altrimenti l'equazione non sarebbe di secondo grado.
  • Uso della libreria math.h: Per calcolare la radice quadrata del discriminante, il programma include la libreria math.h, che fornisce la funzione sqrt(). Ricorda di compilare il programma con l'opzione -lm per linkare la libreria matematica.
  • Precisione dei calcoli: Il programma utilizza il tipo di dato double per una maggiore precisione nel calcolo delle radici, specialmente quando queste sono complesse o molto vicine tra loro.
  • Radici complesse: Per le radici complesse, il programma calcola e visualizza separatamente la parte reale e la parte immaginaria.

Conclusioni

Risolvere un'equazione di secondo grado in C è un ottimo esercizio per applicare concetti matematici fondamentali alla programmazione. Questo processo non solo rinforza la comprensione delle strutture di controllo e della manipolazione dei numeri in C, ma offre anche l'opportunità di riflettere sulla rappresentazione delle soluzioni complesse e sulla precisione dei calcoli.

Indice pagine linguaggio C: