Piero Scotto - C141 C14 #4 Equazione di secondo grado. If annidati.

15
Piero Scotto - C14 1 C14 #4 Equazione di secondo grado. If “annidati”.

Transcript of Piero Scotto - C141 C14 #4 Equazione di secondo grado. If annidati.

Page 1: Piero Scotto - C141 C14 #4 Equazione di secondo grado. If annidati.

Piero Scotto - C14 1

C14 #4 Equazione di

secondo grado.If “annidati”.

Page 2: Piero Scotto - C141 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

Page 3: Piero Scotto - C141 C14 #4 Equazione di secondo grado. If annidati.

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.

Page 4: Piero Scotto - C141 C14 #4 Equazione di secondo grado. If annidati.

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

Page 5: Piero Scotto - C141 C14 #4 Equazione di secondo grado. If annidati.

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

Page 6: Piero Scotto - C141 C14 #4 Equazione di secondo grado. If annidati.

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; }

Page 7: Piero Scotto - C141 C14 #4 Equazione di secondo grado. If annidati.

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; }

Page 8: Piero Scotto - C141 C14 #4 Equazione di secondo grado. If annidati.

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; }

Page 9: Piero Scotto - C141 C14 #4 Equazione di secondo grado. If annidati.

Piero Scotto - C14 9

Page 10: Piero Scotto - C141 C14 #4 Equazione di secondo grado. If annidati.

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:

Page 11: Piero Scotto - C141 C14 #4 Equazione di secondo grado. If annidati.

Piero Scotto - C14 11

Sono 12 casi. Possiamo usare una serie di if uno dentro l’altro o, come si dice, annidati.

Page 12: Piero Scotto - C141 C14 #4 Equazione di secondo grado. If 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; }

Page 13: Piero Scotto - C141 C14 #4 Equazione di secondo grado. If annidati.

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; }

Page 14: Piero Scotto - C141 C14 #4 Equazione di secondo grado. If annidati.

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; }

Page 15: Piero Scotto - C141 C14 #4 Equazione di secondo grado. If annidati.

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; }