C14 #3 Soluzioni e commenti esercizi 1 e 2 Piero Scotto - C14 1 Finalità del corso Finalità del corso Finalità del corso Finalità del corso Finalità del corso Piero Scotto - C14 2 Esercizio 1. Usando i programmi descritti a lezione scrivere un programma in C che calcoli la media aritmetica dei voti di uno studente, supponendo che i voti siano 9. Piero Scotto - C14 3 /* Viene calcolata la media di 9 voti */ #include <stdio.h> int main(void) { float a, b, c, d, e, f, g, h, i, media; scanf("%f %f %f %f %f %f %f %f %f",&a,&b,&c,&d,&e,&f,&g,&h,&i); media = (a + b + c + d + e + f + g + h + i)/9; printf("La media dei valori %.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f e' %.2f ",a,b,c,d,e,f,g,h,i, media) ; return 0; } Piero Scotto - C14 4 Possiamo migliorare il programma e far sì che onlinecompiler produca un eseguibile che interagisca con l’utente. Piero Scotto - C14 5 /* Viene calcolata la media di 9 voti */ #include <stdio.h> int main(void) { float a, b, c, d, e, f, g, h, i, media, pausa; printf(" Inserire separati da spazio i nove voti: "); scanf("%f %f %f %f %f %f %f %f %f",&a,&b,&c,&d,&e,&f,&g,&h,&i); media = (a + b + c + d + e + f + g + h + i)/9; printf("La media dei valori %.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f %.2f e' %.2f ",a,b,c,d,e,f,g,h,i, media) ; scanf("%f",&pausa); return 0; } /* i commenti non ci sono per motivi di spazio */ Piero Scotto - C14 6 Piero Scotto - C14 7 Esercizio2. Scrivere un programma che calcoli l’area del trapezio. L’utente inserirà base maggiore, base minore, altezza Piero Scotto - C14 8 /* Calcolo area del trapezio. Fornire basi e altezza */ #include <stdio.h> int main(void) { float B, b, h ,area, pausa ; /* variabili */ printf("Calcolo dell'area del trapezio. Inserire le basi e l'altezza: "); scanf("%f %f %f", &B, &b, &h); /* chiedo i numeri da input e li assegno alle variabili */ area = ( B + b ) / 2 *( h ) ; /* calcolo il valore dell'area */ printf("L'area del trapezio con base maggiore %.2f cm base minore %.2f cm altezza %.2f cm e': Area= %.2f cm^2 ", B,b,h,area ); printf(" Digitare 0 e invio per finire "); scanf("%f", &pausa); /* il solito trucco per vedere il risultato */ return 0; } Piero Scotto - C14 9 Come si vede il programma non è in grado di distinguere la base maggiore da quella minore. Possiamo istruirlo perché lo faccia. Basterà confrontare i due valori e poi mettere il più grande in B (base maggiore) e il più piccolo in b (base minore). Piero Scotto - C14 10 Variabile di scambio “swap” Scriviamo un programma che dati due numeri passati da input, metta il maggiore in B e il minore in b. Poi stampi il risultato. Partiamo con un semplice programma che legge e stampa i numeri. #include <stdio.h> int main(void) { float B, b; /* variabili */ printf("Inserire i due numeri: "); scanf("%f %f",&B,&b); printf("B=%f b=%f",B,b); return 0; } Piero Scotto - C14 11 Prima di stampare occorre confrontare B e b Userò il costrutto if If (b>B) { swap=b; b=B; B=swap; } Tra parentesi graffe il blocco che viene eseguito se la condizione (b>B) è vera. Ad es. se b=6, B=2, b>B quindi la condizione dell’if è vera e avremo l’esecuzione del blocco {swap = 6; b = 2; B = 6; } swap è la variabile temporanea (a volte è indicata come tmp) che mi serve per lo scambio. Piero Scotto - C14 12 #include <stdio.h> int main(void) { float B, b, swap; /* variabili */ printf("Inserire i due numeri: "); scanf("%f %f",&B,&b); if (b>B) { swap=b; b=B; B=swap; } printf("B=%f b=%f",B,b); return 0; } Piero Scotto - C14 13 /* Calcolo dell’area del trapezio. Fornire basi e altezza */ #include <stdio.h> int main(void) { float B, b, h ,area, pausa, swap ; /* variabili */ printf("Calcolo dell'area del trapezio. Inserire le basi e l'altezza: "); scanf("%f %f %f", &B, &b, &h); if (b>B) { swap=b; b=B; B=swap; } area = ( B + b ) / 2 *( h ) ; /* calcolo il valore dell'area */ printf("L'area del trapezio con base maggiore %.2f cm base minore %.2f cm altezza %.2f cm e': Area= %.2f cm^2 ", B,b,h,area ); printf(" Digitare 0 e invio per finire "); scanf("%f", &pausa); return 0; } Piero Scotto - C14 14 L’istruzione if else Piero Scotto - C14 15 #include <stdio.h> int main(void) { float B, b, swap; /* variabili */ printf("Inserire i due numeri: "); scanf("%f %f",&B,&b); if (b>B) { swap=b; b=B; B=swap; } printf("B=%f b=%f",B,b); return 0; } Piero Scotto - C14 16 Piero Scotto - C14 17 Se si verifica la divisione per 0 il risultato è indefinito! Occorre prevenire questo rischio. If (a==0) {printf(“Equazione non possibile”);} else #include <stdio.h> int main(void) { float a, b, x; /* variabili */ printf("Programma per risolvere equazioni del tipo ax + b = 0 Inserire a e b : "); scanf("%f %f",&a,&b); if (a==0) {printf("Equazione non possibile");} else {x = -(b/a); printf("Soluzione x= %f",x);} return 0; } Piero Scotto - C14 18 Piero Scotto - C14 19 Piero Scotto - C14 20 Esercizio 3. Scrivere un programma per risolvere equazioni del tipo ax + b = 0, cioè di primo grado. Pensiamo di ottenere a, b da input e risolvere ricavando x. Piero Scotto - C14 21 #include <stdio.h> int main(void) { float a, b, x; /* variabili */ printf("Programma per risolvere equazioni del tipo ax + b = 0 Inserire a e b : "); scanf("%f %f",&a,&b); x = -(b/a); /* soluzione dell’equazione di primo grado */ printf("Soluzione x= %f",x); return 0; } Questo programma presenta un potenziale rischio. Quale? Piero Scotto - C14 22 Se a=0, si verifica la divisione per 0 e il risultato è indefinito! Occorre prevenire questo rischio. If (a==0) {printf(“Equazione non possibile”);} else … #include <stdio.h> int main(void) { float a, b, x; /* variabili */ printf("Programma per risolvere equazioni del tipo ax + b = 0 Inserire a e b : "); scanf("%f %f",&a,&b); if (a==0) {printf("Equazione non possibile");} else {x = -(b/a); printf("Soluzione x= %f",x);} return 0; } Piero Scotto - C14 23