Esercizio su oggetti, tipi e valori. Scrivere una lettera semplice in C++

computer codeLa scorsa settimana avevo accennato che avrei presentato e spiegato uno degli esercizi di ricapitolazione presenti alla fine del terzo capitolo, dedicato a oggetti, tipi e valori, del libro di Stroustrup intitolato Programming Principles and Practice Using C++. In specifico, mostrerò come scrivere in modo ordinato un programma un tantino più lungo di quelli visti fino ad ora e ripasserò le parti salienti già incontrate in precedenza.

Qui riporto i vari punti richiesti dall’esercizio per la scrittura di una lettera:

  1. Far inserire all’utente il nome della persona a cui vuole scrivere.
  2. Aggiungere una linea di introduzione del tipo “Ciao, come stai? Non ci sentiamo da un po’” ricordando di evitare l’uso diparole accentate per ora.
  3. Far inserire all’utente il nome di un altro amico/a.
  4. Chiedere all’utente se la seconda persona è maschio o femmina utilizzando il char friend_sex ed inizializzandolo con il valore 0. Dopodiché utilizzare due if statments per scrivere qualcosa del tipo:
    “Se vedi Pincopalla per piacere digli di chiamarmi” oppure “Se vedi Vattelapesca chiedile di chiamarmi, per favore”.
  5. Chiedere all’utente di scrivere la propria età e far scrivere al programma “Ho sentito che hai compiuto X anni di recente”.
  6. Se l’età risulta essere 0 o meno oppure dai 110 in su dare il comando al programma di rispondere error (“stai scherzando!)”.
  7. Aggiungere anche i seguenti comandi alla lettera:
    Se il tuo amico ha meno di 12 anni, scrivi “Il prossimo anno avrai age+1”.
    Se il tuo amico ha 17 anni, scrivi “Il prossimo anno potrai finalmente votare”. Se il tuo amico ha più di 17 anni, scrivi “Spero di vederti presto per festeggiare”.
  8. Aggiungi in fine “Un abbraccio, ” seguito dal tuo nome o nickname.

Come avrete notato l’esercizio ha parecchie richieste e, semmai avreste tentato per la prima volta in vita vostra a scrivere il programma, sicuramente avrete trovato qualche difficoltà o, cosa ancor più comune, il linguaggio risulterà corretto, funzionante ma un tantino pasticciato a livello di organizzazione degli spazi.

Quindi, prima cosa da tenere in conto, è suddividere il nostro lavoro in capitoli. Mi spiego meglio: avete presente quando, cercando di risolvere un problema di trigonometria, per esempio, prima di svilupparlo ci scriviamo a parte i dati? Ecco, l’idea è esattamente la stessa: suddividere i dati che ci servono e, poi, sviluppare la lettera. Il motivo per fare questo e tentare di essere ordinati mentre scriviamo un programma è molto semplice: nel caso vi fossero degli errori o, in futuro, volessimo aggiornarlo oppure, ancora, qualcun altro avesse bisogno di modificarlo risulterà per tutti più semplice rimetterci mano (è vero questo programma è semplice e non ne avrebbe particolarmente bisogno ma imparare fin dall’inizio ad essere ordinati è sempre meglio).

Troveremo, quindi, otto titoli (o commenti) introdotti dal simbolo //: il primo che definisce cosa stiamo effettivamente facendo, ovvero l’esercizio del cap. 3; il secondo dove verrà definito il nome della persona a cui l’utente si vuole rivolgere scrivendo la lettera; il terzo che richiederà il nome di un secondo amico; il quarto dedicato al compleanno; il quinto si dedicherà alla prima parte della lettera; il sesto richiederà se il secondo amico è un maschio o una femmina; il settimo selezionerà le frasi da inserire a seconda dell’età inserita dall’utente; ed, infine, il ottavo sarà dedicato ai saluti ed alla firma.

Una piccola particolarità che salterà agli occhi è che in C++ non si possono utilizzare parole accentate se non utilizzando delle librerie particolari così, per ovviare al problema, si opta normalmente per l’uso dell’apostrofo.

Ecco l’esercizio svolto:

//Esercizio cap. 3
#include "iostream"
#include "string"
using namespace std;
int main()
{
 //Nome della persona a cui si vuole scrivere
 string mystr;
 cout << "Scrivi il nome della persona a cui vuoi inviare la lettera: \n";
 cin >> mystr;
 //Nome di un secondo amico
 string mystr_2;
 char friend_sex = 0;
 const char m = 'm';
 const char f = 'f';
 cout << "Scrivi il nome di un altro dei tuoi amici: \n";
 cin >> mystr_2;
 cout << "Se quest'ultimo e' un maschio scrivi m mentre se e' una ragazza f: \n";
 cin >> friend_sex;
 //Compleanno
 int age;
 cout << "Ho saputo che hai fatto il compleanno da poco, quanti anni hai ora? \n";
 cin >> age;
 //Prologo della lettera
 cout << "Ciao " << mystr << ", e' da un bel po' che non ci sentiamo, mi mancano i bei tempi insieme quando ci salutavamo con una scoreggia! \n";
 cout << "Hai mica visto " << mystr_2 << " ultimamente? \n";
 //Maschio o femmina?
 if (friend_sex == m) //Assumendo che l'utente utilizzi la scrittura minuscola altrimenti non funziona
 cout << "Se lo vedi per piacere digli di mandarmi un barattolo di vermi vivi: voglio fare uno scherzo ad un nuovo amico e piazzarglieli sotto il cuscino! \n";
 if (friend_sex == f)
 cout << "Se la vedi dille che mi dispiace: e' stato piu' forte di me. Ho dovuto metterle il dentifricio sul cuscino quel giorno, era troppo divertente! \n";
 //Età destinatario
 cout << "Ho saputo che hai " << age << " anni: \n";
 if (age <= 0)
 cout << "stai scherzando! \n";
 if (age >= 110)
 cout << "stai scherzando! \n";
 if (age <= 12)
 cout << "il prossimo anno ne avrai " << age+1 <<" e probabilmente puzzerai come non mai! :p \n";
 if (age == 17)
 cout << "il prossimo anno sarai maggiorenne: finalmente birra e alcool a tutto spiano! \n";
 if (age > 17)
 cout << "ci vediamo a fare hiking in montagna per il tuo compleanno! \n";
 //Saluto e firma
 cout << "Riguardati, un abbraccio Anairesis.";
 return 0;
}

Prima parte: selezione delle librerie

Allora, come sempre si scelgono le librerie da utilizzare, in questo caso “iostream” e “string” dopodiché si dà l’ordine al programma di utilizzare std davanti a tutte le affermazioni con using namespace std oppure preponendo std:: dinnanzi a tutte le affermazioni che lo richiedono.

Con int main () apriamo la nostra funzione assieme a { ricordando, alla fine del programma, di richiuderla }. Ed, ovviamente, facendo attenzione a tutti i punti in cui dovremo inserire i punti e virgola lungo tutto il programma.

Seconda parte: nome della persona a cui si vuole scrivere.

Qui ci limitiamo, semplicemente, ad avvertire il programma che verrà inserita una stringa di caratteri da parte dell’utente chiamata mystr (o come preferiamo noi). Dopodiché con il comando cout << ordineremo al nostro programma di chiedere al fruitore di portare a termine un’azione, ovvero di scrivere il nome della persona a cui si vuole rivolgere. Infine, con cin >> mystr ordineremo al programma di leggere la stringa denominata poco prima mystr.

Terza parte: nome di un secondo amico.

Qui inseriremo una seconda stringa che, per comodità, ho denominato mystr_2. Come si è visto precedentemente in un’altra lezione char è un tipo di variabile che permetter di memorizzare una singola unità: in questo caso la utilizzeremo per indicare la sessualità del secondo amico. In questo caso non servirebbe azzerare il valore dei characters ma, dato che l’esercizio lo richiede esplicitamente, eccolo qui: char friend_sex = 0. Ovviamente, poi definiamo come costante del carattere maschile, const char m, la lettera “m” e come costante di quello femminile, const char f, la lettera “f” cosicché quando verrà richiesto l’utente potrà inserire i due valori nel programma. Va ricordato che si sta dando per scontato che l’utente utilizzi le lettere in minuscolo e, quindi, se scritte in maiuscolo il programma non sarà in grado di comprenderle (volendo alla domanda sulla sessualità dell’amico/a basterà aggiungere la richiesta esplicita di utilizzare la lettera minuscola). Infine, ovviamente, utilizzeremo cout e cin come nella parte precedente ovvero: domanda e leggi la stringa.

Quarta parte: compleanno

Dato che nella sezione compleanno sarà richiesto all’utente di inserire l’età in numeri diremo al nostro programma di utilizzare come object, o oggetto, – ovvero regione della memoria del computer in cui il type specifica che tipo di informazione può essere posizionata in quella data porzione – un numero intero con il comando int age. Dopodiché, gli ordineremo di chiedere all’utente l’età e di leggerla (ovvero le strighe di cout e cin).

Quinta parte: prologo della lettera

Questa parte si limita a ordinare al nostro programma di dare l’input di scrittura per iniziare a scrivere la lettera utilizzando il solito cout.

Sesta parte: maschio o femmina?

Per far sì che la lettera continui e venga scritta come un brano omogeneo senza la presenza di domande al suo interno, o in ordine errato, qui posizioniamo le due frasi che verranno inserite dipendentemente dalle risposte dell’utente inserite in precedenza (in specifico nella terza parte). Dando per scontato che l’utente utilizzi le lettere in maiuscolo come richiesto vengono, poi, create due stringhe introdotte dall’operatore if ed intervallate dal comando cout. Queste due stringhe pongono il char friend_sex, introdotto nella terza parte, come uguale a “m”, ovvero maschio, o “f”, cioè femmina utilizzando l’assignment equal (==). Se, quindi, l’utente avrà inserito “m” la frase verrà scritta al maschile, altrimenti al femminile, relativamente a ciò che abbiamo scritto all’interno delle virgolette delle relative stringhe introdotte da cout.

Settima parte: età destinatario

Introducendo questa parte con un input, ovvero “Ho saputo che hai … anni” aggiungeremo, utilizzando sempre l’operatore if, varie possibilità di risposta seguendo ciò che veniva richiesto dall’esercizio. Se, quindi, l’età è minore o uguale a zero ricorreremo al simbolo <= e porremo il valore dell’integer age (introdotto nella quarta parte) in questo modo: if (age <= 0) dando, poi, l’ordine al nostro programma di scrivere nella lettera la frase prescelta in questo caso, ovvero cout << “stai scherzando! \n; Come, già sappiamo, \n; viene posto sempre alla fine di una frase per avvertire che si è conclusa. Ovviamente, andremo avanti a questo modo per tutte le possibilità limitandoci a differenziare le operazioni (se avete dubbi su quali sono e come sceglierne i simboli cliccate qui: troverete a metà articolo una tabella riassuntiva).

Ottava parte: saluto e firma

Semplicemente, come per la prima parte, qui, ci limiteremo a ordinare al nostro programma di scrivere un saluto utilizzando il solito cout con relative virgolette e punto e virgola ed il finale return 0 (normalmente utilizzato per essere certi che il programma sia stato eseguito e terminato con successo) seguito dalla chiusura della parentesi graffa che avevamo aperto all’inizio del corpo della funzione.

Se il programma non funziona ricordiamoci sempre di controllare di non aver messo un punto e virgola di meno o di troppo, di non aver dimenticato virgolette, di non aver scritto parole con l’accento ma solo con l’apostrofo (quelle accentate potete usarle solo ed esclusivamente nelle parti di commento introdotte con il simbolo //) o altre piccole cose per strada: succede a tutti.

Se volete provare a correre il programma potrete facilmente farlo utilizzando il seguente link (in cui aggiungerete il vostro codice e, poi, cliccherete su run): http://cpp.sh/.

Share the love

Comincia la discussione

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.