23
Piero Scotto - C14 1 C14 #3 Soluzioni e commenti esercizi 1 e 2

Piero Scotto - C141 C14 #3 Soluzioni e commenti esercizi 1 e 2

Embed Size (px)

Citation preview

Page 1: Piero Scotto - C141 C14 #3 Soluzioni e commenti esercizi 1 e 2

Piero Scotto - C14 1

C14 #3 Soluzioni e commenti

esercizi 1 e 2

Page 2: Piero Scotto - C141 C14 #3 Soluzioni e commenti esercizi 1 e 2

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 #3 Soluzioni e commenti esercizi 1 e 2

Piero Scotto - C14 3

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.

Page 4: Piero Scotto - C141 C14 #3 Soluzioni e commenti esercizi 1 e 2

Piero Scotto - C14 4

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

Page 5: Piero Scotto - C141 C14 #3 Soluzioni e commenti esercizi 1 e 2

Piero Scotto - C14 5

Possiamo migliorare il programma e far sì che onlinecompiler produca un eseguibile che interagisca con l’utente.

Page 6: Piero Scotto - C141 C14 #3 Soluzioni e commenti esercizi 1 e 2

Piero Scotto - C14 6

/* 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 */

Page 7: Piero Scotto - C141 C14 #3 Soluzioni e commenti esercizi 1 e 2

Piero Scotto - C14 7

Page 8: Piero Scotto - C141 C14 #3 Soluzioni e commenti esercizi 1 e 2

Piero Scotto - C14 8

Esercizio2. Scrivere un programma che calcoli l’area del trapezio. L’utente inserirà base maggiore, base minore, altezza

Page 9: Piero Scotto - C141 C14 #3 Soluzioni e commenti esercizi 1 e 2

Piero Scotto - C14 9

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

Page 10: Piero Scotto - C141 C14 #3 Soluzioni e commenti esercizi 1 e 2

Piero Scotto - C14 10

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).

Page 11: Piero Scotto - C141 C14 #3 Soluzioni e commenti esercizi 1 e 2

Piero Scotto - C14 11

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

Page 12: Piero Scotto - C141 C14 #3 Soluzioni e commenti esercizi 1 e 2

Piero Scotto - C14 12

Prima di stampare occorre confrontare B e bUserò il costrutto ifIf (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.

Page 13: Piero Scotto - C141 C14 #3 Soluzioni e commenti esercizi 1 e 2

Piero Scotto - C14 13

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

Page 14: Piero Scotto - C141 C14 #3 Soluzioni e commenti esercizi 1 e 2

Piero Scotto - C14 14

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

Page 15: Piero Scotto - C141 C14 #3 Soluzioni e commenti esercizi 1 e 2

Piero Scotto - C14 15

L’istruzione if else

Page 16: Piero Scotto - C141 C14 #3 Soluzioni e commenti esercizi 1 e 2

Piero Scotto - C14 16

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

Page 17: Piero Scotto - C141 C14 #3 Soluzioni e commenti esercizi 1 e 2

Piero Scotto - C14 17

Page 18: Piero Scotto - C141 C14 #3 Soluzioni e commenti esercizi 1 e 2

Piero Scotto - C14 18

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

Page 19: Piero Scotto - C141 C14 #3 Soluzioni e commenti esercizi 1 e 2

Piero Scotto - C14 19

Page 20: Piero Scotto - C141 C14 #3 Soluzioni e commenti esercizi 1 e 2

Piero Scotto - C14 20

Page 21: Piero Scotto - C141 C14 #3 Soluzioni e commenti esercizi 1 e 2

Piero Scotto - C14 21

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.

Page 22: Piero Scotto - C141 C14 #3 Soluzioni e commenti esercizi 1 e 2

Piero Scotto - C14 22

#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?

Page 23: Piero Scotto - C141 C14 #3 Soluzioni e commenti esercizi 1 e 2

Piero Scotto - C14 23

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