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