30 Settembre 2024
Programmazione B
Ingegneria e Scienze Informatiche - Cesena
A.A. 2024-2025
Elaborato 2
Data di sottomissione: entro le 23:59 del 6 Ottobre 2024.
Formato di sottomissione: un file compresso con nome elaborato2.zip
contenente un unico file sorgente con nome quadratic_eq.h.
Codeboard: https://codeboard.io/projects/130695
Specifiche:
• Implementare le seguenti macro per calcolare alcune proprietà di una
funzione di secondo grado nel campo reale:
f (x) = ax2 + bx + c
1. NUM_OF_ROOTS(a,b,c). Implementa un’espressione che può valere
0, 1 o 2, a seconda che l’equazione ax2 + bx + c = 0 ammetta
0, 1 o 2 radici nel campo reale (i.e. gli zeri della funzione).
2. ROOT1(a,b,c). Implementa un’espressione che calcola la radice
più grande dell’equazione ax2 + bx + c = 0. Non è necessario che
la macro verifichi che l’equazione abbia effettivamente almeno una
soluzione. Nel caso in cui non ci siano soluzioni, l’espressione può
essere non definita.
3. ROOT2(a,b,c). Espressione che calcola la radice più piccola del-
l’equazione ax2 + bx + c = 0. Se l’equazione ha una sola soluzione,
il valore dell’espressione coinciderà con quello di ROOT1(a,b,c).
Come sopra, non è necessario che la macro verifichi che l’equazione
abbia effettivamente soluzioni.
4. EXTREME_POINT(a,b,c). Implementa un’espressione che calcola
il punto estremo (massimo o minimo) della funzione di secondo
grado f (x) = ax2 + bx + c.
5. MAXIMUM_POINT(a,b,c). Implementa un’espressione (booleana)
che vale 1 oppure 0 a seconda che il punto estremo della funzione
f (x) = ax2 + bx + c sia un punto di massimo oppure di minimo,
rispettivamente.
• Si assume che il coefficiente a sia sempre diverso da 0. Le macro non
sono tenute a gestire il caso in cui vengano richiamate con parametro
a uguale a 0.
• Le macro devono essere definite in un file con nome quadratic_eq.h.
• Deve essere sottomesso unicamente il file quadratic_eq.h.
• E’ possibile sviluppare altre macro oltre a quelle richieste.
Esempi:
1. Numero di soluzioni dell’equazione f (x) = 0.
• NUM_OF_ROOTS(0.5,-2.0,1.5) = 2
• NUM_OF_ROOTS(0.5,-2.0,2.0) = 1
• NUM_OF_ROOTS(-0.5,-2.0,-3.0) = 0
2. Radici dell’equazione f (x) = 0.
• ROOT1(0.5,-2.0,1.5) = 3.0
ROOT2(0.5,-2.0,1.5) = 1.0
• ROOT1(0.5,-2.0,2.0) = 2.0
ROOT2(0.5,-2.0,2.0) = 2.0
• ROOT1(-0.5,-2.0,-3.0) = N.D.
ROOT2(-0.5,-2.0,-3.0) = N.D.,
3. Punto di massimo o minimo della funzione.
• EXTREME_POINT(0.5,-2.0,1.5) = 2.0
MAXIMUM_POINT(0.5,-2.0,1.5) = 0
• EXTREME_POINT(0.5,-2.0,2) = 2.0
MAXIMUM_POINT(0.5,-2.0,2) = 0
• EXTREME_POINT(-0.5,-2.0,-3) = -2.0
MAXIMUM_POINT(-0.5,-2.0,-3) = 1
APPENDICE
Sia data una funzione di secondo grado
f (x) = ax2 + bx + c.
Assumiamo che a ̸= 0.
• Zeri della funzione. Per calcolare i punti di intersezione di f (x) con
l’asse delle ascisse, risolviamo l’equazione di secondo grado:
ax2 + bx + c = 0. (1)
Consideriamo il discriminante dell’equazione.
∆ = b2 − 4ac
L’equazione (1) ha:
1. nessuna soluzione nel campo dei reali se ∆ < 0, i.e la funzione
f (x) non interseca l’asse delle ascisse;
2. una soluzione se ∆ = 0, i.e. la funzione f (x) interseca l’asse
delle ascisse in un unico punto;
3. due soluzioni se ∆ > 0, i.e. la funzione f (x) interseca l’asse delle
ascisse in due punti distinti.
Se ∆ ≥ 0 i punti di intersezione x1 , x2 , sono calcolati nel seguente
modo:
√ √
1. se ∆ > 0, x1 = −b+ ∆
2a
, x2 = −b− ∆
2a
;
2. Se ∆ = 0, x1 = x2 = 2a .
−b
• Punto di massimo/minimo della funzione. Una funzione di se-
condo grado ha un unico punto estremante, che può essere un punto di
massimo o di minimo. Per individuare l’unico punto estremante è suffi-
ciente individuare dove si annulla la derivata prima di f (x). Dobbiamo
quindi risolvere l’equazione:
f ′ (x) = 0
Stiamo assumendo a ̸= 0, quindi
−b
f ′ (x) = 2ax + b = 0 =⇒ x = 2a
Per determinare se il punto x = −b
2a
è un punto di massimo o di minimo,
valutiamo il segno della derivata seconda:
f ′′ (x) = 2a
– Se f ′′ (x) > 0 allora, x = −b
2a
è un punto di minimo (la concavità
della parabola f (x) è rivolta verso l’alto).
– Se f ′′ (x) < 0 allora, x = −b
2a
è un punto di massimo (la concavità
della parabola f (x) è rivolta verso il basso).