Qui trovi un insieme di esercizi che richiedono l'utilizzo del costrutto di selezione.
Il costrutto della selezione permette di ramificare in più parti il flusso di esecuzione del programma. Se una condizione è vera si esegue un determinato blocco di istruzioni, altrimenti si esegue un altro blocco di istruzioni. Per far ciò in C++ usiamo il costrutto if -else if - else.
if (condizione1 == vera) {
//se la condizione1 è vera eseguo queste righe di codice
} else if (condizione2 == vera) {
//se condizione 1 è falsa e condizione 2 è vera eseguo queste righe di codice
} else {
//se sia la condizione1 che la condizione2 sono false eseguo queste righe di codice
}
Viene riportato un primo esempio che possiamo fare per mostrare la corretta sintassi del blocco if - else if - else. Il programma di esempio permette all'utente di inserire un numero dalla tastiera e poi viene mostrato a schermo un messaggio che indica:
Se il numero inserito è positivo;
Se il numero inserito è negativo;
Se il numero inserito è uguale a 0.
Esercizi sulla selezione if - else if -else
Esercizio 1: Maggiorenne o minorenne?
Realizzare un programma che permetta all'utente di inserire la propria età e indichi in output se si tratta di una persona minorenne o maggiorenne.
NB: Si diventa maggiorenni a 18 anni.
Esercizio 2: Numero negativo
Realizzare un programma che permetta all'utente di inserire un numero e indichi in output se si tratta di un numero negativo.
Esercizio 3: Numeri pari
Realizzare un programma che permetta all'utente di inserire un numero e indichi in output se si tratta di un numero pari.
Realizzare un programma che chieda all'utente di inserire due numeri interi diversi e mostra tali numeri in ordine crescente.
Svolgere in C++ un programma che chieda l'età all'utente e che mostri un messaggio in base all'età:
"Sei un esponente della generazione silenziosa" --> (da 75 anni in poi)
"Sei un Baby Boomer" --> (da 57 a 74)
"Sei un Gen X" --> (da 41 a 56)
"Sei un Millennial" --> (fino a 40 anni)
Il programma legge due numeri e controlla se il primo è multiplo del secondo.
Realizzare un programma che letti 3 numeri in input mostri a schermo il valore più piccolo.
Realizzare un programma che letti 3 numeri in input mostri a schermo il valore più grande.
Realizzare un programma che letto in input un voto (numero double), mostri a schermo il voto arrotondato ad intero con questo criterio:
Se la parte decimale del voto è compresa tra [0, 0.5] si arrotonda per difetto
Se la parte decimale del voto è compresa tra (0.5 e 1) si arrotonda per eccesso.
Esempio:
7.2 → 7 7.5 → 7 7.6 → 8 7.9 → 8
L’utente inserisce una temperatura in Celsius e il calcolatore la converte in Fahrenheit ed in Kelvin. Se la temperatura inserita è minore dello zero assoluto (-273,15), il calcolatore segnala un errore.
Si ricordi che:
Fahrenheit = (9/5) · Celsius + 32
Kelvin = Celsius + 273,15
Giovanni deve acquistare un computer ed è indeciso tra due negozi. Questi negozi hanno i prezzi di partenza uguali, ma attuano una politica di sconto diversa:
Negozio 1: Effettua uno sconto del 10% se il totale speso è inferiore a 500€. Effettua uno sconto del 20% se il totale è maggiore o uguale a 500€.
Negozio 2: Effettua uno sconto del 10% sui primi 300€ di spesa ed il 20% sul resto della spesa.
Scrivi un programma che, inserendo il totale della spesa, ne calcola lo sconto di entrambi i negozi ed indichi a Giovanni quale è il negozio in cui conviene acquistare il bene.
Scrivere un programma che legge 2 orari in ore minuti e secondi e dice quale viene prima dei due. (Si provi a risolvere l’esercizio senza trasformare tutto in secondi).
Realizzare un programma che legga in input un anno e che restituisca in output se l’anno letto è bisestile.
(Un anno è bisestile se è divisibile per 4. Fanno eccezione gli anni secolari (es 1700, 1800, 1900…). Infatti, un anno secolare è bisestile solo se è divisibile per 400.
Realizzare un programma che prende in input la prima lettera di una stagione ('i' per inverno, 'e' per estate e cos' via...). Tale programma deve mostrare a schermo il nome completo della stagione, il giorno in cui inizia ed il giorno in cui termina.
Realizzare un programma che sia in grado di leggere da tastiera 5 numeri. Il programma deve riconoscere se tali numeri sono stati inseriti come una sotto-sequenza dei numeri interi, cioè sono numeri che hanno una distanza unitaria.
Esempi:
Input: -6 -5 -4 -3 -2 --> "Sotto-sequenza dei numeri interi"
Input: -2 -1 0 1 2 --> "Sotto-sequenza dei numeri interi"
Input: 4 5 6 7 8 --> "Sotto-sequenza dei numeri interi"
Input: 4 6 8 10 12 --> "Non è una sotto-sequenza dei numeri interi"
Dato l’articolo 142 del Codice della strada:
Chiunque non osserva i limiti minimi di velocità ovvero supera i limiti massimi di velocità di non oltre 10 km/h, è soggetto alla sanzione amministrativa del pagamento di una somma da euro 36.
Chiunque supera di oltre 10 km/h e di non oltre 40 km/h i limiti massimi di velocità è soggetto alla sanzione amministrativa del pagamento di una somma di euro 148.
Chiunque supera di oltre 40 km/h ma non di oltre 60 km/h i limiti massimi di velocità è soggetto alla sanzione amministrativa del pagamento di una somma di euro 370.
Chiunque supera di oltre 60 km/h i limiti massimi di velocità è soggetto alla sanzione amministrativa del pagamento di una somma da euro 500.
Si scriva un programma C++ che legge in input la velocità massima consentita e la velocità rilevata e stampa un messaggio del tipo:
"Limite rispettato" oppure "Limite violato e la multa da pagare è ...".
Realizzare un programma che simuli gli sconti di Natale di un negozio.
Se il prezzo degli acquisti è minore di 50€:
il negozio effettua lo sconto del 10%.
Se il prezzo degli acquisti e' maggiore di 50€ e minore di 100€:
il negozio effettua lo sconto del 20%.
Se il prezzo degli acquisti e' maggiore di 100€:
il negozio effettua lo sconto del 30%.
Il programma deve chiedere all'utente di inserire il prezzo relativo ai propri acquisti e mostri a schermo lo sconto ed il prezzo finale da pagare.
Gli operatori logici sono:
! not. Si tratta di un operatore unario, cioè che agisce su di una sola condizione. Restituisce vero se la condizione a cui si riferisce è falsa.
Esempi:
! (5 > 3) --> false perché la condizione accanto il not è vera.
!(5 > 6) --> true perché la condizione accanto il not è falsa.
&& and. Si tratta di un operatore logico binario, cioè agisce su due condizioni. Restituisce vero se le due condizioni a cui si riferisce sono vere.
Esempi:
5 > 3 && 5 < 10 --> true perché entrambe le condizioni sono vere
5 > 3 && 5 < 2 --> false, perché anche se la prima condizione è vera, tuttavia la seconda è falsa.
|| or. Si tratta anch'esso di un operatore logico binario. Restituisce vero se almeno una delle due condizioni a cui si riferisce è vera.
Esempi:
5 > 3 || 5 < 2 --> true perché la prima condizione è vera.
5 < 3 || 2 > 3 --> false perché entrambe le condizioni sono false.
In una sequenza di condizioni unite da diversi operatori logici quale operatore viene considerato prima? Per primo si considera l'operatore not !. Successivamente viene preso in considerazione l'operatore and && e alla fine l'operatore or ||.
Si riassume adesso la gerarchia degli operatori logici:
! not
&& and
|| or
Esercizio 18: numero nell'intervallo.
Realizzare un programma che chieda all’utente di inserire un numero intero. Il programma deve riconoscere se tale numero è interno ad uno dei seguenti intervalli:
[15,18] --> da 15 a 18 con 15 e 18 inclusi.
[39,45) --> da 39 a 45 con 39 incluso e 45 escluso.
(91,103) --> da 91 a 103 con 91 e 103 esclusi.
Esempi:
Utente inserisce 42 --> “Il numero 42 è valido”.
Utente inserisce 32 --> “Il numero 32 inserito non è valido”.
Realizzare un programma che dopo aver chiesto l'età all'utente indica se tale persona può usufruire della promozione del cinema. La promozione è riservata a coloro che NON hanno meno di 64 anni OPPURE a chi ha tra 5 E 18 anni.
Per svolgere l'esercizio usare tutti e tre gli operatori !, && e ||.
Realizzare un programma che legga il valore dei tre lati di un triangolo. Il programma deve indicare in output se il triangolo inserito è:
equilatero (tutti i lati uguali);
isoscele (due lati uguali e uno diverso);
scaleno (tutti i lati diversi).
Il costrutto switch case permette di diversificare il flusso del programma in base ai valori assunti da una variabile numerica o di tipo char.
Si ricorda che con il costrutto switch-case non è possibile indicare dei confronti o condizioni con operatori logici. Bensì, si può indicare solo il singolo valore che la variabile può assumere.
Esempio:
switch(variabile) {
case 1: //se variabile == 1
cout << "variabile = 1" << endl;
break;
case 4: //se variabile == 4
cout << "variabile = 4" << endl;
break;
default:
cout << "variabile diversa da 1 e 4" << endl;
}
L'istruzione break è fondamentale per evitare che si esegua il codice presente anche nei successivi casi e nel default.
Esercizio 21: Riconoscere le vocali
Realizzare un programma che sia in grado di riconoscere se l'utente ha inserito una vocale.
NB: usare il costrutto switch-case. Può esserti utile la funzione tolower(char c); che trasforma in minuscolo il carattere inserito come parametro.
Realizzare un programma che chieda all’utente di inserire il nome, l’età e se studia informatica. Per capire se studia informatica usa una variabile char che l’utente inizializzerà in questo modo:
‘s’ se studia informatica.
‘n’ se non studia informatica.
In base al carattere inserito dall'utente il programma deve mostrare un messaggio simile ai seguenti:
"Ciao Luca, hai 16 anni e non studi informatica."
"Ciao Lucia, hai 17 anni e studi informatica."
Esercizio 23: La lotteria.
Realizzare un programma che legge in input la posizione del biglietto vincente ed indica in output il valore della vincita.
premio posizione numero 1 = 5000000€
premio posizione numero 2 = 2000000€
premio posizione numero 3 = 1000000€
premio posizione numero 4 = 500000€
premio posizione numero 5 = 200000€
per tutte le altre posizioni non si vince nulla
Realizzare un programma che chieda all’utente di inserire due numeri reali e permetta all’utente di scegliere quale operazione fare con i due numeri.
Se l’utente inserisce il carattere ‘+’ si eseguirà l'addizione tra i due numeri.
Se l’utente inserisce il carattere ‘-’ si eseguirà la sottrazione tra i due numeri.
Se l’utente inserisce il carattere ‘*’ si eseguirà la moltiplicazione tra i due numeri.
Se l’utente inserisce il carattere ‘/’ si eseguirà la divisione tra i due numeri.
Fare attenzione che la divisione per zero non è ammessa!!
Realizzare un programma che consenta di capire il costo complessivo di una vacanza nello chalet "Neve d'oro".
Il costo giornaliero delle camere variano in base alla stagione e in base alla tipologia di camera:
Calcolare il costo complessivo della vacanza sapendo:
numero di giorni;
tipologia di stagione;
tipologia di camera.
Si supponga che per la vacanza la tipologia rimanga sempre la stessa ed anche la tipologia di camera.
Realizzare un programma che consenta di inserire le informazioni di due carte estratte dal mazzo di 40 carte italiane. Le carte sono caratterizzate dalle seguenti informazioni:
un valore (10, 9, 8, 7, 6, 5, 4, 3, 2, 1). Il più alto vale 10 e il più basso vale 1.
un seme. In ordine di importanza: denari, spade, coppe e bastoni.
Indicare quale delle due carte inserite dall'utente è quella di maggiore valore.
Esempio:
valore1 = 9 seme1 = spade valore2 = 9 seme2 = denari --> "La carta 9 di denari ha un valore più alto".
valore1 = 3 seme1 = coppe valore2 = 4 seme2 = bastoni --> "La carta 4 di bastoni ha un valore più alto".
Realizzare un programma che consenta di inserire le informazioni di una "primiera" nel gioco di carte scopa. Nella primiera i valori delle carte è diverso ed è il seguente:
il 7 vale 21 punti;
il 6 vale 18 punti;
l’asso vale 16 punti;
il 5 vale 15 punti;
il 4 vale 14 punti;
il 3 vale 13 punti;
il 2 vale 12 punti;
tutte le figure (8, 9, 10) valgono 10 punti;
Il programma acquisiti in input la migliore carta per ognuno dei quattro semi (denari, spade, coppe, bastoni) deve calcolare il valore totale di tale primieria.
Esempio:
denari = 7 spade = 6 coppe = 7 bastoni = 1 --> "La primiera inserita ha un valore totale di 76".
denari = 9 spade = 7 coppe = 7 bastoni = 4 --> "La primiera inserita ha un valore totale di 66".
Due giocatori stanno giocando a rubamazzo (gioco che si fa con il mazzo di 40 carte italiane). L'obiettivo del gioco è aver preso il numero maggiore di carte al termine della partita.
Il programma deve:
chiedere il nome del primo giocatore;
chiedere il numero di carte ottenute dal primo giocatore;
chiedere il nome del secondo giocatore;
chiedere il numero di carte ottenute dal secondo giocatore.
mostrare a schermo il nome del vincitore.
Nota bene: gestisci i casi in cui l'input dell'utente è errato. Ad esempio se il primo giocatore dichiara di avere 41 carte, mostrare a schermo un messaggio di errore tipo "Impossibile avere 41 carte al termine della partita" e terminare il programma . Gestire tutti gli altri casi di possibile input errato.
Realizzare un programma che chiede all'utente i valori dei tre lati di un triangolo. Il programma deve verificare che le misure inserite dall'utente siano accettabili. Infatti, affinché i tre valori rappresentino i lati di un triangolo deve essere vero che:
la somma di ogni coppia di lati deve essere maggiore dell’altro.
Esempio:
lato1 = 3 lato2 = 7 lato3 = 5 --> valori ammissibili perché: 3+7 > 5 7 + 5 > 3 5 + 3 > 7
lato1 = 3 lato2 = 7 lato3 = 2 --> valori non ammissibili perché: 3 + 2 < 7
Realizzare un programma che chiede all'utente di inserire due valori numerici. Il programma deve verificarese i due numeri inseriti sono :
concordi (stesso segno);
discordi (segno opposto).
Esempio:
num1= 3 num2 = 7 --> i numeri inseriti sono concordi
num1 = -3 num2 = -5 --> i numeri inseriti sono concordi
num1 = -5 num2 = +4 .--> i numeri inseriti sono discordi
Realizzare un programma che chiede all'utente di inserire un punto del piano cartesiano:
coordinata x;
coordinata y.
Esempio:
x= 3 y = 1 --> I quadrante
x= -2 y = 3 --> II quadrante
x = -3 y= -2 --> III quadrante
x = 2 y = -3 --> iV quadrante
.Un bancomat soddisfa una richiesta di prelievo di una somma di denaro adottando la seguente strategia:
Emette fin che può banconote da 50 (ossia, emette banconote da 50 fin tanto che il totale non supera la somma richiesta).
Quando ha terminato con le banconote da 50, emette fin che può banconote da 20.
Ad esempio, se la somma richiesta è 190, verranno emesse 3 banconote da 50 e 2 da 20. Si noti che non tutte le richieste possono essere soddisfatte. Ad esempio, se la somma richiesta è 180, vengono emesse 3 banconote da 50 e una da 20, per un totale di 170 euro.
Scrivere un programma che chiede all'utente di inserire la somma richiesta (un intero), calcola quante banconote da 50 e 20 verranno emesse e il totale corrispondente ai soldi emessi.