Ecco alcuni esercizi sui cicli e sullo switch case in C++!
1. Scrivi un programma, in C++, che calcoli il fattoriale di un numero naturale inserito dall’utente. Ti ricordo che il fattoriale di un numero è il prodotto di tutti i numeri compresi tra 1 e il numero. Per definizione, il fattoriale di zero è uguale a 1. Utilizza un ciclo while. Esegui un controllo dell’input sul numero inserito: deve essere positivo.
2. Scrivi un programma, in C++, che calcoli la potenza di un numero. L’esponente deve essere positivo o nullo. Utilizza inizialmente un ciclo while, poi riscrivi l’esercizio utilizzando un ciclo for.
3. Scrivi un programma, in C++, che indichi se un numero, inserito dall’utente, è perfetto o no. Un numero si dice perfetto quando è uguale alla somma dei suoi divisori, tranne il numero stesso (Esempio: 6 è perfetto, perché 1+2+3=6). Utilizza un ciclo for.
4. Scrivi un programma in C++ che funzioni come una calcolatrice. L’utente dovrà inserire un numero n da 1 a 4, e poi due numeri, a e b. Se n=1, il programma svolgerà l’addizione tra i numeri a e b, se n=2 svolgerà la sottrazione tra i due numeri, se n=3 la moltiplicazione e se n=4 la divisione. Nel caso della divisione, controlla se è possibile, altrimenti scrivi se è indeterminata o impossibile. Utilizza la funzione default nel caso in cui n non sia compreso tra 1 e 4. Utilizza uno switch case.
5. Scrivi un programma, in C++, che conti la quantità totale dei prodotti venduti e che calcoli l’incasso totale giornaliero di una bancarella che vende arance, banane e mele. Immagina che in quella giornata ci siano stati 7 acquirenti (caso di test). L’utente deve inserire per ogni acquirente il codice del prodotto (Arance: cod.prod. = 1, Banane = 2, Mele = 3) e la quantità di quel prodotto acquistata. Ogni acquirente compra solo lo stesso tipo di prodotto. Un’arancia costa 0,40€ al pezzo, una banana 0,60€ al pezzo e una mela 0,25€ al pezzo. Utilizza uno switch case e un ciclo for.
Soluzioni
ESERCIZIO 1
Scrivi un programma, in C++, che calcoli il fattoriale di un numero naturale inserito dall’utente. Ti ricordo che il fattoriale di un numero è il prodotto di tutti i numeri compresi tra 1 e il numero. Per definizione, il fattoriale di zero è uguale a 1. Utilizza un ciclo while. Esegui un controllo dell’input sul numero inserito: deve essere positivo.
Partiamo dall’inizio: il numero digitato deve essere positivo. Attenzione! Un numero positivo è diverso da zero! Quindi, il numero deve essere maggiore di zero.
Si dovrà creare un contatore inizializzato a 1, dato che il fattoriale di 0 è 1. Questo contatore sarà il numero che verrà moltiplicato per n volte (dove n è il numero inserito dall’utente). Per arrivare al risultato bisognerà salvare, ogni volta che si esegue il ciclo, il risultato del fattoriale temporaneo.
Anche il fattoriale deve essere inizializzato a 1, perché se è inizializzato a 0, e ogni volta viene moltiplicato per un altro numero, il risultato sarà sempre uguale a 0, dato che ogni numero moltiplicato per zero è uguale a zero!
Soluzione:
#include <iostream>
using namespace std;
int main() {
int num; //numero da inserire
int count=1; //numero da moltiplicare
int fattoriale=1; //risultato
do {
cout<<"Inserisci un numero: ";
cin>>num;
} while (num<=0);
while (count<=num) {
fattoriale*=count; //fattoriale=fattoriale*count;
count++;
}
cout<<"Il fattoriale di "<<num<<" e' "<<fattoriale;
return 0;
}
ESERCIZIO 2
Scrivi un programma, in C++, che calcoli la potenza di un numero. L’esponente deve essere positivo o nullo. Utilizza inizialmente un ciclo while, poi riscrivi l’esercizio utilizzando un ciclo for.
La potenza di un numero equivale al prodotto della base con se stessa, per il numero di volte indicate dall’esponente. Quindi, il ciclo dovrà eseguire il calcolo per il numero di volte indicato dall’esponente, salvando ogni volta il risultato.
Soluzione 1 (ciclo while):
#include <iostream>
using namespace std;
int main() {
int base;
int esponente;
int count=1;
double potenza=1;
cout<<"Inserisci la base della potenza: ";
cin>>base;
do {
cout<<"Inserisci l'esponente della potenza: ";
cin>>esponente;
} while (esponente<0);
while (count<=esponente) {
potenza*=base;
count++;
}
cout<<"Il risultato della potenza e': "<<potenza;
return 0;
}
Trasformando il ciclo while, in ciclo for, il risultato dovrebbe essere sempre lo stesso. Riporto qui sotto solo il ciclo, senza tutto il resto del programma.
Soluzione 2 (ciclo for):
for (int i=1;i<=esponente;i++) {
potenza*=base;
}
La variabile count, nel ciclo for l’ho cambiata con la variabile i, inizializzandola al suo interno.
ESERCIZIO 3
Scrivi un programma, in C++, che indichi se un numero, inserito dall’utente, è perfetto o no. Un numero si dice perfetto quando è uguale alla somma dei suoi divisori, tranne il numero stesso (Esempio: 6 è perfetto, perché 1+2+3=6). Utilizza un ciclo for.
Per svolgere questo esercizio bisogna trovare tutti i divisori del numero tranne il numero stesso, sommarli, e infine verificare se la somma di questi è uguale al numero.
Come faccio a trovare i divisori di un numero? Per trovare i divisori di un numero, bisogna usare l’operatore “mod” (%).
Se il resto della divisione tra il numero inserito e un altro numero è uguale a zero, quel numero è un divisore del numero inserito.
Ecco la soluzione:
#include <iostream>
using namespace std;
int main() {
int n;
int sommaDivisori=0;
cout<<"Inserisci un numero: ";
cin>>n;
for (int i=1;i<n;i++) {
if (n%i==0) {
sommaDivisori+=i;
}
}
if (sommaDivisori == n) {
cout<<"Il numero e' perfetto";
} else {
cout<<"Il numero NON e' perfetto";
}
return 0;
}
ESERCIZIO 4
Scrivi un programma in C++ che funzioni come una calcolatrice. L’utente dovrà inserire un numero n da 1 a 4, e poi due numeri, a e b. Se n=1, il programma svolgerà l’addizione tra i numeri a e b, se n=2 svolgerà la sottrazione tra i due numeri, se n=3 la moltiplicazione e se n=4 la divisione. Nel caso della divisione, controlla se è possibile, altrimenti scrivi se è indeterminata o impossibile. Utilizza la funzione default nel caso in cui n non sia compreso tra 1 e 4. Utilizza uno switch case.
Questo è uno semplice switch case. L’utente inserisce un numero da 1 a 4, che corrisponde al codice di un’operazione (1=somma, 2=sottrazione, 3=moltiplicazione, 4=divisione). Se questo numero non è compreso tra 1 e 4, il programma termina con una scritta che indica l’errore nel codice.
Per quanto riguarda l’ultimo caso, ovvero quello della divisione, ricordati che dentro un caso (case) puoi inserire qualsiasi struttura, come if e cicli, ma non solo.
Ricorda inoltre, che al termine di ogni case va inserito il break.
Ecco quindi la soluzione:
#include <iostream>
using namespace std;
int main() {
int n;
double a, b;
double risultato=0;
cout<<"Inserisci il codice dell'operazione da eseguire (n): ";
cin>>n;
cout<<"Inserisci il primo numero: ";
cin>>a;
cout<<"Inserisci il secondo numero: ";
cin>>b;
switch (n) {
case 1:
risultato=a+b;
cout<<"Risultato: "<<risultato;
break;
case 2:
risultato=a-b;
cout<<"Risultato: "<<risultato;
break;
case 3:
risultato=a*b;
cout<<"Risultato: "<<risultato;
break;
case 4:
if (a!=0 && b==0) { //non si può dividere per zero
cout<<"Divisione impossibile";
} else if (a==0 && b==0) { // 0/0 non ha significato
cout<<"Divisione indeterminata"; o
} else {
risultato=a/b;
cout<<"Risultato: "<<risultato;
}
break;
default:
cout<<"Codice operazione non valido!"<<endl;
break;
}
return 0;
}
ESERCIZIO 5
Scrivi un programma, in C++, che conti la quantità totale dei prodotti venduti e che calcoli l’incasso totale giornaliero di una bancarella che vende arance, banane e mele. Immagina che in quella giornata ci siano stati 7 acquirenti (caso di test). L’utente deve inserire per ogni acquirente il codice del prodotto (Arance: cod.prod. = 1, Banane = 2, Mele = 3) e la quantità di quel prodotto acquistata. Ogni acquirente compra solo lo stesso tipo di prodotto. Un’arancia costa 0,40€ al pezzo, una banana 0,60€ al pezzo e una mela 0,25€ al pezzo. Utilizza uno switch case e un ciclo for.
Per risolvere il problema, bisogna “chiedere” ad ogni acquirente il codice del prodotto che desidera e la quantità. Quindi è necessario un ciclo che ripeta per ogni acquirente le richieste (secondo il caso di test, il ciclo di ripeterà 7 volte, dato che ci sono 7 acquirenti).
Inoltre, serve uno switch case per fare capire al programma quale tipo di prodotto è stato richiesto e che calcolo deve eseguire, dato che ogni prodotto ha un prezzo diverso.
Soluzione:
#include <iostream>
using namespace std;
#define PREZZOARANCIA 0.40F
#define PREZZOBANANA 0.60F
#define PREZZOMELA 0.25F
int main() {
int totProdottiVenduti=0; //counter dei prodotti totali acquistati
float incassoTotale=0; //variabile per somma totale
int numAcquirenti=7; //inizializzata secondo il caso di test
int codiceProdotto; //1, 2 o 3
int quantitaProdotto; //quantità del prodotto acquistata dall'acquirente
for (int i=1;i<=numAcquirenti;i++) {
cout<<"Inserisci il codice del prodotto acquistato dall'acquirente "<<i<<": ";
cin>>codiceProdotto;
cout<<"Inserisci la quantita' del prodotto acquistata: ";
cin>>quantitaProdotto;
//calcolo dei prodotti totali venduti momentaneamente:
totProdottiVenduti+=quantitaProdotto;
//calcolo dell'incasso totale momentaneo:
switch (codiceProdotto) {
case 1:
incassoTotale+=PREZZOARANCIA*quantitaProdotto;
break;
case 2:
incassoTotale+=PREZZOBANANA*quantitaProdotto;
break;
case 3:
incassoTotale+=PREZZOMELA*quantitaProdotto;
break;
}
}
cout<<"Totale dei prodotti venduti: "<<totProdottiVenduti<<endl;
cout<<"Incasso totale del giorno: "<<incassoTotale;
return 0;
}
Ottimo! Il prossimo argomento è uno dei più importanti, quello che ti servirà fino alla fine del capitolo!
Quindi preparati. Se non sei sicuro sugli argomenti trattati in precedenza, ti conviene fare altri esercizi per consolidare le incertezze e proseguire nel programma!