Dunque riportiamo il testo dell’esercizio per comodità.
Su una linea ferroviaria, rispetto alla tariffa piena, i pensionati usufruiscono di uno sconto del 10%, gli studenti del 15% e infine i disoccupati del 25%. Allora, codificando i pensionati con una P, gli studenti con una S e i disoccupati con una D, scrivere un programma che, richiesto il costo di un biglietto e l’eventuale condizione dell’utente, visualizzi l’importo da pagare.
Innanzitutto dichiaro due variabili, una di tipo char per la categoria e una di tipo float che contiene il prezzo del biglietto.
Dopo valuto categoria, se è uguale a P, eseguo quello che c’è dopo i due punti, altrimenti valuto se categoria è uguale ad S, e così via.
N.B. Ho scritto la notazione abbreviata costo*=0.9.
Potevamo anche utilizzare costo-=costo*0.1;
O in forma più ‘rudimentale’ costo=costo-costo*0.1.
Allego quindi il listato completo dell’esercizio sviluppato con switch case in C++.
#include<iostream>
using namespace std;
int main(){
char categoria;
float costo;
cout<<"Inserisci la categoria:\ncategoria P = pensionati, S = studenti, D = disoccupati):\t ";
cin>>categoria ;
cout<<"prezzo biglietto:\t ";
cin>>costo;
switch (categoria) {
case 'P': costo*=0.9;
break;
case 'S': costo*=0.85;
break;
case 'D': costo*=0.75;
break;
default: cout <<"paghi il prezzo intero"<<endl;
}
cout<< "Pagherai : \t"<<costo<<endl;
return 0;
}
Esercizio 2
Il secondo degli esercizi con switch case in C++ che voglio proporvi è molto semplice.
Realizzare un programma, utilizzando lo switch case, che legga in input un voto rappresentato da un carattere tra A ed E e ne stampi il significato.
Ad esempio:
A significa ottimo;
B significa distinto;
C significa discreto;
D significa sufficiente;
E significa insufficiente.
Ecco quindi il listato completo dell’esercizio proposto.
#include <iostream>
using namespace std;
int main () {
char voto;
string significato;
cout <<"Qual e' il voto (A, B, C, D o E)?"<<endl;
cin >> voto;
int errore=0;
switch (voto) {
case 'A': significato="ottimo";
break;
case 'B': significato="distinto";
break;
case 'C': significato="discreto";
break;
case 'D': significato="sufficiente";
break;
case 'E': significato="insufficiente";
break;
default: cout<<"Errore! Voto sbagliato! Rifare!"<<endl;
errore=1;
}
if (errore==0)
cout<<"Il voto '"<<voto<<"' significa \t"<<significato<<"."<<endl;
return 0;
}
Chiaramente questi sono solo dei semplicissimi esercizi con switch case in C++.
In quest’articolo parleremo dello switch case in C++.
Il costrutto switch consente di realizzare una selezione a più vie, cioè una selezione multipla.
La struttura sintattica è questa:
switch(espressione) {
case<valore1>:
istruzioni1;
break;
case<valore2>:
istruzioni2;
break;
….
default:
istruzioni;
}
In fase di esecuzione si valuta espressione e viene confrontata con valore1. Se i due valori sono uguali allora si esegue il codice specificato dopo i due punti corrispondenti. La parola chiave break causa l’uscita immediata dallo switch, quindi il controllo viene trasferito alla fine del blocco, cioè alla prima istruzione che segue lo switch.
Se espressione non è uguale a valore1 allora si confronta espressione con valore2. Di conseguenza, se sono uguali si esegue il codice specificato dopo i due punti e dopo si uscirà dallo switch con l’istruzione break.
E così via.
Nel caso in cui nessuna delle condizioni è verificata si esegue ciò che è indicato nella parola riservata default.
Esempio di switch case in C++
Facciamo un semplice esempio: realizziamo una calcolatrice usando lo switch case in C++.
Quindi verrà utilizzata una variabile di tipo char operatore, la quale verrà confrontata di volta in volta con il simbolo immesso (+, -, * o /). Se nessuno dei valori è uguale alla variabile operatore allora si avrà in output il messaggio “undefined”.
Controlliamo inoltre se il secondo operando è uguale a zero, perchè ricordiamo non è possibile dividere un numero per zero.
#include <iostream>
using namespace std;
int main (){
float a, b, ris;
char operatore;
cout<<"Qual e' il primo operando?"<<endl;
cin>>a;
cout<<"Qual e' l'operatore(+, -, * o /)?"<<endl;
cin>>operatore;
cout<<"Qual e' il secondo operando?"<<endl;
cin>>b;
switch (operatore) {
case '+': ris=a+b;
break;
case '-': ris=a-b;
break;
case '*': ris=a*b;
break;
case '/': if (b!=0)
ris=a/b;
else
cout <<"Non si puo' dividere per zero!";
break;
default: cout <<"Il carattere non e' riconosciuto";
}
cout<<a<<operatore<<b<<"="<<ris;
return 0;
}
Potevamo anche creare una variabile che quando si verifica una condizione undefined esca. Ad esempio inizializziamo errore=0 e poi aggiungiamo:
case '/': if (b!=0)
ris=a/b;
else { cout<<"Non si puo' dividere per zero!"<<endl;
errore=1;}
Realizziamo un semplicissimo programma che preso in input un numero intero compreso tra 1 e 12, restituisca il mese per esteso.
Ad esempio se inserisco 1, il programma mi restituirà Gennaio.
Allego il listato completo che potete provare.
#include <iostream>
using namespace std;
int main()
{
int numero;
cout<<"Inserisci un numero che va da 1 a 12. Ti diro' il mese corrispondente." <<endl;
cin>>numero;
switch(numero) {
case 1:
cout<<"Gennaio";
break;
case 2:
cout<<"Febbraio";
break;
case 3:
cout<<"Marzo";
break;
case 4:
cout<<"Aprile";
break;
case 5:
cout<<"Maggio";
break;
case 6:
cout<<"Giugno";
break;
case 7:
cout<<"Luglio";
break;
case 8:
cout<<"Agosto";
break;
case 9:
cout<<"Settembre";
break;
case 10:
cout<<"Ottobre";
break;
case 11:
cout<<"Novembre";
break;
case 12:
cout<<"Dicembre";
break;
default:
cout<<"Il numero inserito non corrisponde a nessun mese";
}
return 0;
}
Chiaramente questi sono solo alcuni semplici esempi di switch case in C++.