# Soluzioni: Strutture di Controllo 1
## Esercizio 1: Conversione da Fahrenheit a Celsius
Si scriva un programma che prenda in input un numero che rappresenti una temperatura in gradi Fahrenheit e si stampi a schermo la temperatura corrispondente in gradi Celsius. Si usi la seguente formula di conversione: $C = \frac{5}{9} (F - 32)$.
```c
#include <stdio.h>
int main(int argc, char* argv[]){
// Variabili
float F, C;
// Acquisizione temperatura F
printf("Si inserisca una temperatura in gradi Fahrenheit: ");
scanf("%f", &F);
printf("\n");
// Conversione
C = 5.0/9 * (F - 32);
// Stampa la temperatura in C
printf("La temperatura corrispondente in gradi Celsius è: %.2f.\n", F);
return 0;
}
```
## Esercizio 2: Modulo
Si scriva un programma che prenda in input un numero e se ne stampi il
modulo.
```c
#include <stdio.h>
int main(int argc, const char * argv[]){
// Variabili
float num, abs;
// Acquisizione numero
printf("Inserisci un numero: ");
scanf("%f", &num);
printf("\n");
// Calcolo valore assoluto
if(num >= 0) abs = num;
else abs = -num;
// Stampa valore assoluto
printf("Il valore assoluto di %f è %f.\n", num, abs);
return 0;
}
```
---
## Esercizio 3: Equazione di Secondo Grado
Si scriva un programma che prenda tre numeri in input che
rappresentano i coefficienti dell’equazione di secondo grado. Si
stampino a schermo le radici dell’equazione in questione (se esistono).
```c
#include <stdio.h>
#include <math.h>
int main(int argc, const char * argv[]){
// Dichiarazione delle variabili
float a, b, c, delta, x_1, x_2;
// Acquisizione delle variabili
printf("Inserisci il coefficiente di x^2: ");
scanf("%f", &a);
printf("\n");
printf("Inserisci il coefficiente di x: ");
scanf("%f", &b);
printf("\n");
printf("Inserisci il coefficiente libero: ");
scanf("%f", &c);
printf("\n");
// Calcolo radici
delta = b * b - 4 * a * c;
if(delta >= 0){
if(delta > 0){
x_1 = (-b + sqrt(delta)) / (2 * a);
x_2 = (-b - sqrt(delta)) / (2 * a);
printf("Radici: x_1 = %.2f e x_2 = %.2f\n", x_1, x_2);
}
else{
x_1 = (-b) / (2 * a);
printf("Le radici sono uguali e coincidenti: x_1 = x_2 = %.2f\n.", x_1);
}
}
else{
printf("Non esistono radici per l'equazione richiesta.\n");
}
return 0;
}
```
**Bonus**: stampare a schermo l'equazione.
---
## Esercizio 4: Massimo tra Tre Numeri
Si scriva un programma che prenda in input tre numeri e che stampi a
schermo il massimo dei tre.
```c
#include <stdio.h>
int main(int argc, const char * argv[]){
// Variabili
int a, b, c, max;
// Acquisizione dei valori delle variabili
printf("Inserisci il PRIMO numero: ");
scanf("%d", &a);
printf("\n");
printf("Inserisci il SECONDO numero: ");
scanf("%d", &b);
printf("\n");
printf("Inserisci il TERZO numero: ");
scanf("%d", &c);
printf("\n");
// Calcolo del massimo
if(a>b){
if(a>c) max = a;
else max = c;
}
else{
if(b>c) max = b;
else max = c;
}
// Stampa massimo
printf("Il valore massimo tra %d, %d e %d è: %d.\n", a, b, c, max);
return 0;
}
```
**Bonus**: si può fare di meglio?
---
## Esercizio 5: Ordinamento di Tre Numeri
Si scriva un programma che prenda in input tre numeri. Il programma deve stampare i tre numeri acquisiti a schermo in ordine ascendente.
```c
#include <stdio.h>
int main(int argc, const char * argv[]){
// Definizione delle variabili
int a, b, c, min, max, mid;
// Acquisizione dei valori delle variabili
printf("Inserisci il PRIMO numero: ");
scanf("%d", &a);
printf("\n");
printf("Inserisci il SECONDO numero: ");
scanf("%d", &b);
printf("\n");
printf("Inserisci il TERZO numero: ");
scanf("%d", &c);
printf("\n");
// Identificazione del massimo
if(a > b){
// (b,a) ma non sappiamo nulla di c
if(a > c){
// (b, a) e (c, a) ma non sappiamo come sono relazionati b e c
max = a;
if(c > b){
// (b, c, a)
min = b;
mid = c;
}
else{
// (c, b, a)
min = c;
mid = b;
}
}
else{
// (b, a, c)
max = c;
mid = a;
min = b;
}
}
else{
// (a, b) ma non sappiamo nulla di c
if(b > c){
// (a, b) e (c, b) ma come sono relazionati a e c?
max = b;
if(a > c){
// (c, a, b)
mid = a;
min = c;
}
else{
// (a, c, b)
mid = c;
min = a;
}
}
else{
// (a, b, c)
max = c;
mid = b;
min = a;
}
}
// Stampa valori in ordine
printf("Valori in ordine ascendente: %d -> %d -> %d.\n", min, mid, max);
return 0;
}
```
**Bonus**: si può fare di meglio? (suggerimento: usare una variabile d'appoggio).
---
## Esercizio 6: Inversione di un Numero a Due Cifre
Si scriva un programma che prenda in input un numero intero positivo e che sia composto esattamente da due cifre. Si stampi a schermo il numero con le cifre invertite.
```c
#include <stdio.h>
int main(int argc, const char * argv[]){
// Variabili
int num, out_num;
// Acquisiszione numero
printf("Inserisci un numero a due cifre: ");
scanf("%d", &num);
printf("\n");
// Controllo che sia a due cifre positivo
if(num >= 100 || num <= 9){
printf("Il numero non ha due cifre o è negativo!\n");
return;
}
// Inversione cifre
out_num = (num % 10) * 10;
num /= 10; // è come fare num = num / 10
out_num += num % 10;
// Stampo
printf("Il numero con le cifre invertite è: %d.\n", out_num);
return 0;
}
```
---
## Esercizio 7: Lettera Successiva
Si scriva un programma che prenda in input una lettera (minuscola o
maiuscola) e si stampi (se possibile) la lettera successiva in ordine alfabetico.
```c
#include <stdio.h>
int main(int argc, const char * argv[]){
// Variabili
char lettera, prossima_lettera;
// Acquisizione
printf("Inserisci una lettera: ");
scanf("%c", &lettera);
printf("\n");
// Controllo che sia una lettera maiuscola o minuiscola
if(!(lettera >= 'A' && lettera <= 'Z') && !(lettera >= 'a' && lettera <= 'z')){
printf("Non hai inserito una lettera!\n");
return;
}
// Controllo se la lettera è z o Z
if(lettera == 'z' || lettera == 'Z') prossima_lettera = lettera;
else prossima_lettera = lettera + 1;
// Stampa
printf("La lettera successiva a %c è %c.\n", lettera, prossima_lettera);
return 0;
}
```
---
## Esercizio 8: Minuscola o Maiuscola Corrispondente
Si scriva un programma che prenda in input una lettera minuscola/maiuscola
e si stampi la lettera corrispondente maiuscola/minuscola.
```c
#include <stdio.h>
int main(int argc, const char * argv[]){
// Variabili
char lettera, lettera_corrispondente;
int offset = 'a' - 'A';
// Acquisizione
printf("Inserisci una lettera: ");
scanf("%c", &lettera);
printf("\n");
// Controllo che sia una lettera maiuscola o minuiscola
if(!(lettera >= 'A' && lettera <= 'Z') && !(lettera >= 'a' && lettera <= 'z')){
printf("Non hai inserito una lettera!\n");
return;
}
// Calcolo corrispondente
if(lettera >= 'A' && lettera <= 'Z') lettera_corrispondente = lettera + offset;
else lettera_corrispondente = lettera - offset;
// Stampa
printf("La lettera corrispondente a %c è %c.\n", lettera, lettera_corrispondente);
return 0;
}
```