Piero Scotto - C141 C14 #4 Equazione di secondo grado. If annidati.
-
Upload
biagino-coppola -
Category
Documents
-
view
215 -
download
1
Transcript of Piero Scotto - C141 C14 #4 Equazione di secondo grado. If annidati.
Piero Scotto - C14 1
C14 #4 Equazione di
secondo grado.If “annidati”.
Piero Scotto - C14 2
Finalità del corso
Finalità del corso
Finalità del corso
Finalità del corso
Finalità del corso
Piero Scotto - C14 3
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 4
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 5
Equazioni secondo grado
Inserire a, b, c
a = 0 ?
SI NO
b = 0 ?
Delta >= 0 ?
Equazione impossibile
x1= [-b+sqrt(delta)]/2ax2= [-b-sqrt(delta)]/2a
Stampa risposta
SI NO
SI
NO
Identitàx=-b/c
Piero Scotto - C14 6
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 7
{ 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
#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 9
Piero Scotto - C14 10
If annidatiScriviamo 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 11
Sono 12 casi. Possiamo usare una serie di if uno dentro l’altro o, come si dice, annidati.
Piero Scotto - C14 12
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 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> 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 15
#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; }