Esercizio sulle strutture condizionali n.1

Questo esercizio affronta la scrittura di un algoritmo con l’uso di condizioni, e la relativa codifica in C++.
Testo del problema:
Un utente vuole acquistare un abbonamento per il trasporto della sua città, lo schema tariffario è funzione della durata (annuale, mensile, settimanale), e della zona (1,2,3) secondo lo schema riprotato nella tabella:


Libro sulla programmazione in C++

Schema Tariffario

ZonaSettimanaleMensileAnnuale
1€ 10,00€ 18,00€ 150,00
2€ 5,00€ 32,00€ 185,00
3€ 13,00€ 40,00€ 230,00

Inoltre l’utente avrà un ulteriore sconto se sceglie una tariffa a bassa priorità che produrrà uno sconto del 20% sul totale dovuto.
Calcolare la tariffa dovuta.

Risoluzione
Per risolvere il problema sono definite delle variabili di tipo carattere che codificano il tipo di abbonamento (s per settimanale, m per mensile, a per annuale) e se si ha diritto alla riduzione (s/n), e la relativa zona che è codificata con un numero intero (1,2,3).
La tabella dati è:

Tabella Dati:

NomeUsoTipoDescrizione
InputTipoInteroZona di abbonamento 1,2,3
InputDurataCarattereDurata abbonamento s→ Settimanale m → Mensile a → Annuale
InputRiduzioneCaratteres → Riduzione per bassa priorità n → Nessuna Riduzione
OutputTariffaRealeTariffa dovuta

Il diagramma di flusso è:

La codifica in C++ e:

#include <iostream>
using namespace std;
int main()
{
	char durata;
	char riduzione;
	int tipo;
	float tariffa;
	cout << "\n Schema tariffario\n";
	cout << "Durata: Settimanale\n";
	cout << "Tipo 1:10\tTipo 2:5\tTipo 3:13\n";
	cout << "Durata: Mensile:\n";
	cout << "Tipo 1:18\tTipo 2:32\tTipo 3:40\n";
	cout << "Durata: Annuale:\n";
	cout << "Tipo 2:150\tTipo 2:185\tTipo 3:230\n";
	cout << "Durata s/m/a ?";
	cin >> durata;
	cout << "Tipo 1,2,3 ?\n";
	cin >> tipo;
	cout << "Riduzione: s/n ?";
	cin >> riduzione;
	if (durata=='s'){
		if (tipo==1)
			tariffa=10;
		if (tipo==2)
			tariffa=5;
		if (tipo==3)
			tariffa=13;}
	if (durata=='m'){
		if (tipo==1)
			tariffa=18;
		if (tipo==2)
			tariffa==32;
		if (tipo==3)
			tariffa=32;}
	if (durata=='a'){
		if (tipo==1)
			tariffa=150;
		if (tipo==2)
			tariffa=185;
		if (tipo==3)
			tariffa=230;}
	if (riduzione=='s')
			tariffa=tariffa-0.2*tariffa;
	cout << "\n Il Costo dell'abbonamento è:\t"<< tariffa<<endl;
	return 0;
}