C14 #4
Equazione di
secondo grado.
If “annidati”.
Piero Scotto - C14
1
Finalità del corso
Finalità del corso
Finalità del corso
Finalità del corso
Finalità del corso
Piero Scotto - C14
2
Esercizio 4. Scrivere un programma per
risolvere equazioni del tipo ax2 + bx + c = 0,
cioè di secondo grado.
Pensiamo di ottenere a, b, c da input e
risolvere fornendo i valori dell’incognita x.
Piero Scotto - C14
3
Sappiamo che la soluzione generale è:
Dobbiamo fare attenzione che:
1. il valore di a sia diverso da zero, se a=0
l’equazione si abbassa di grado
2. il delta (b2-4ac) sia maggiore di zero, se il delta
è zero c’è una soluzione doppia x =-b, se il delta è
minore di zero l’equazione è impossibile
Piero Scotto - C14
4
Equazioni
secondo grado
Inserire
a, b, c
SI
NO
NO
a=0
?
SI
b=0
?
Delta
>= 0 ?
NO
SI
x=-b/c
Identità
x1= [-b+sqrt(delta)]/2a
x2= [-b-sqrt(delta)]/2a
Equazione
impossibile
Stampa risposta
Piero Scotto - C14
5
int main(void)
{ float ; /* variabili saranno float*/
printf("Risoluzione equazione: ax^2 + bx + c = 0. Inserire
nell’ordine a, b, c ");
scanf("%f %f %f", &a, &b, &c);
/* se a=0 allora l’equazione si abbassa di grado */
/* se b=0 allora l’equazione diventa l’identità c=0*/
/* altrimenti (a e b diversi da zero) calcolo il delta */
if (delta < 0.0)
printf("Le soluzioni non sono reali");
else { /* calcolo le soluzioni e le stampo */
printf("Le soluzioni sono: x1=%.2f x2=%.2f ",x1,x2);
return 0;
}
Piero Scotto - C14
6
{ float a, b, c, delta, x1, x2; /* variabili */
printf("Risoluzione equazione: ax^2 + bx + c = 0. Inserire nell’ordine
a, b, c ");
scanf("%f %f %f", &a, &b, &c);
/* se a=0 allora l’equazione si abbassa di grado */
if (a==0)
{ if (b==0) {printf ("L’equazione è una identità");}
else / b diverso da zero */
{ x1=-c/b;
printf("La soluzione e’ x= %.2f",x1); }
}
else
{ delta = b*b-4*a*c; /* calcolo il delta */
if (delta < 0)
printf("Le soluzioni non sono reali");
else { x1=(-b+sqrt(delta))/(2*a); x2=(-b-sqrt(delta))/(2*a);
printf("Le soluzioni sono: x1=%.2f x2=%.2f ",x1,x2); }
} return 0;
}
Piero Scotto - C14
7
#include <stdio.h>
#include <math.h>
int main(void)
{ float a, b, c, delta, x1, x2; /* variabili */
printf("Risoluzione equazione: ax^2 + bx + c = 0. Inserire nell’ordine a, b,
c ");
scanf("%f %f %f", &a, &b, &c);
/* se a=0 allora l’equazione si abbassa di grado */
if (a==0)
{ if (b==0) {printf (“L’equazione è una identità”);}
else / b diverso da zero */
{ x1=-c/b;
printf("La soluzione e’ x= %.2f",x1); }
}
else
{ delta = b*b-4*a*c; /* calcolo il delta */
if (delta < 0)
printf("Le soluzioni non sono reali");
else { x1=(-b+sqrt(delta))/(2*a); x2=(-b-sqrt(delta))/(2*a);
printf("Le soluzioni sono: x1=%.2f x2=%.2f ",x1,x2); }
} return 0;
Piero Scotto - C14
}
8
Piero Scotto - C14
9
If annidati
Scriviamo un programma che inserito il codice fiscale,
restituisce la data di nascita.
Occorre sapere dove è scritta la data di nascita nel codice
fiscale, e poi trattare le informazioni in maniera corretta. Per
ora consideriamo solo il mese di nascita che è indicato da
una lettera GRLGPP48L21D969E. Cerchiamo di convertire
quella lettera nel mese corrispondente. Sappiamo che:
Piero Scotto - C14
10
Sono 12 casi. Possiamo usare una serie di if uno dentro l’altro
o, come si dice, annidati.
Piero Scotto - C14
11
Per non complicare troppo le cose, ipotizziamo che la lettera
corrispondente al mese venga passata da input. La leggiamo
e poi facciamo tutti i casi possibili, dalla A alla T.
La variabile è di tipo char (carattere), chiamiamola M (mese).
#include <stdio.h>
int main(void)
{char M; short mese;
printf("Scrivere la lettera del mese del codice fiscale ");
scanf("%c", M);
if (M=='A') mese=1;
printf(" Il mese è %d",mese);
return 0;
}
Piero Scotto - C14
12
#include <stdio.h>
int main(void)
{char M; short mese=0;
printf("Scrivere la lettera del mese del codice fiscale ");
/* al posto di scanf("%c", M) usiamo getchar */
M= getchar();
if (M=='A') mese=1; if (M=='B') mese=2;
if (M=='C') mese=3; if (M=='D') mese=4;
if (M=='E') mese=5; if (M=='H') mese=6;
if (M=='L') mese=7; if (M=='M') mese=8;
if (M=='P') mese=9; if (M=='R') mese=10;
if (M=='S') mese=11; if (M=='T') mese=12;
printf(" Il mese è %d",mese);
return 0;
}
Piero Scotto - C14
13
#include <stdio.h>
int main(void)
{char M; short mese=0;
printf("Scrivere la lettera del mese del codice fiscale ");
/* al posto di scanf("%c", M) usiamo getchar */
M= getchar();
if (M=='A') mese=1; if (M=='B') mese=2;
if (M=='C') mese=3; if (M=='D') mese=4;
if (M=='E') mese=5; if (M=='H') mese=6;
if (M=='L') mese=7; if (M=='M') mese=8;
if (M=='P') mese=9; if (M=='R') mese=10;
if (M=='S') mese=11; if (M=='T') mese=12;
printf(" Il mese è %d",mese);
return 0;
}
Piero Scotto - C14
14
#include <stdio.h> /* calcolo del mese usando if annidati e controllo errore */
int main(void)
{char M; short mese=0;
printf("Scrivere la lettera del mese del codice fiscale ");
/* scanf("%c", M); */
M= getchar();
if (M=='A') mese=1;
else if (M=='B') mese=2;
else if (M=='C') mese=3;
else if (M=='D') mese=4;
else if (M=='E') mese=5;
else if (M=='H') mese=6;
else if (M=='L') mese=7;
else if (M=='M') mese=8;
else if (M=='P') mese=9;
else if (M=='R') mese=10;
else if (M=='S') mese=11;
else if (M=='T') mese=12;
else printf(" Lettera errata"); /* in caso di errore */
printf(" Il mese è %d",mese);
return 0;
}
Piero Scotto - C14
15
Scarica

Presentazione ppt