PROGRAM Eq_Quadratica_2
!-------------------------------------------------------------------------
! Soluzione dell'equazione algebrica quadratica mediante la formula
!   risolutiva.
! Algoritmo modificato per tener conto della precisione finita dei numeri
!   reali, che rende spesso privo di significato il predicato di
!   uguaglianza.
!-------------------------------------------------------------------------
  IMPLICIT NONE
  REAL, PARAMETER :: eps = 1E-6   ! Definisci una costante molto piccola
!   Dichiarazione di una costante reale con nome.
!   La parola PARAMETER serve dichiarare le costanti e compare come
!   attributo del tipo di dato.
!   Le convenzioni per scrivere le constanti reali sono quelle comuni.
!   Quelle reali si distinguono da quelle intere per la presenza del punto
!   decimale o per la "E" che introduce l'esponente.
  REAL :: a, b, c, delta, x, x1, x2

  WRITE(*,*) "Soluzione dell'eq. quadratica  a*x^2 + b*x + c = 0"
  WRITE(*,*) "Dammi i coefficienti a, b, c: "
  READ(*,*) a, b, c
  delta = b**2 - 4*a*c            ! calcola il discriminante
  IF (delta < -eps) THEN          ! nessuna soluzione
    WRITE(*,*) "Nessuna soluzione reale"
  ELSE IF (delta < eps) THEN      ! una soluzione
!     Si esamina questa condizione se delta >= -eps
    x = -b/2/a
    WRITE(*,*) "La soluzione e'", x
  ELSE                            ! due soluzioni
    x1 = (-b + SQRT(delta)) / 2 / a 
    x2 = (-b - SQRT(delta)) / 2 / a 
    WRITE(*,*) "Le due soluzioni sono", x1, x2
  END IF
  STOP
END PROGRAM Eq_Quadratica_2

