Corso C++ Parte 6: esempi di riepilogo

In questa sesta parte del nostro corso andremo a vedere alcuni semplici esempi di riepilogo di tutto quello spiegato sinora.

In questo articolo vi andremo a mostrare 3 esercizi per ogni argomento trattato nel nostro corso finora. Ovviamente per qualsiasi dubbio non esitate a chiedere tramite commento o messaggio privato sulla nostra pagina Facebook.

Parte 1: variabili

Esercizio 1: dichiarare le variabili di un programma che dovrà eseguire la somma di due numeri.

Soluzione: in questo primo esercizio abbiamo bisogno di 3 variabili. La prima rappresenta il primo numero, la seconda il secondo numero e la terza la somma dei due. Quindi, molto semplicemente, andremo a scrivere così:

#include <iostream>
#include <string>
using namespace std;

int main(){
 
int PrimoNumero;
int SecondoNumero;
int Somma=PrimoNumero + SecondoNumero;

...

}

Come già spiegato nell’articolo dedicato, le variabili devono essere dichiarate prima di scrivere il codice che esegue le istruzioni utilizzando tali variabili, altrimenti il programma restituirà un errore. In questo caso si tratta di un esercizio molto semplice, dove abbiamo solamente tre variabili a disposizione. Ma nel caso sia necessario dichiararne di più bisogna fare attenzione.

NOTA: al posto dei punti di sospensione ci sarà il nostro programma che effettuerà la somma di due numeri e la stamperà a video.

Esercizio 2: dato un programma che deve restituire tre cifre fornite da tastiera, dichiarare correttamente le variabili.

Soluzione: in questo caso le variabili sono indipendenti tra loro, ovvero non c’è un’operazione che le lega direttamente. Quindi:

#include <iostream>
#include <string>
using namespace std;

int main(){
 
int PrimoNumero;
int SecondoNumero;
int TerzoNumero;

...

}

La struttura è leggermente diversa dalla precedente, ma il concetto rimane lo stesso. E’ possibile anche dichiarare un ulteriore variabile che esegua un operazione con i tre numeri, come la somma o la moltiplicazione.

Esercizio 3: dichiarare correttamente le variabili di un programma che dovrà stampare a schermo la scritta “Hello World”.

Soluzione: questa volta agiamo sulle stringhe. In questo caso esiste una classe denominata String che definisce tutti gli oggetti di questo tipo. Dunque il codice sarà:

#include <iostream>
#include <string>
using namespace std;

int main(){
 
std::string a="Hello World"; //oppure si dichiara la variabile String a generica e poi si inserisce il testo come input da tastiera//

...

}

Qui la situazione è già differente. Il testo dell’esercizio ci fornisce un output ben preciso che il programma dovrà mostrare a schermo. Quindi, oltre a dichiarare il tipo di variabile, è possibile anche inizializzarla direttamente al valore richiesto. In questo modo basta aggiungere un’istruzione di stampa e il messaggio verrà mostrato senza problemi. Si può anche dichiarare solamente la variabile e passare il valore da tastiera, ma risulta molto dispendioso in termini di tempi di esecuzione e di risorse.

Parte 2: input e output

Esercizio 1: scrivere un programma che stampi a schermo il prodotto di due numeri.

Soluzione: il programma richiede l’utilizzo di tre variabili. Dunque sarà:

#include <iostream>
#include <string>
using namespace std;

int main(){
 
int PrimoNumero;
int SecondoNumero;

cout<<"Digitare il primo numero";
cin>>PrimoNumero;

cout<<"Digitare il secondo numero";
cin>>SecondoNumero;

int Prodotto=PrimoNumero * SecondoNumero; 

cout<<"Il prodotto dei due numeri è" <<Prodotto;
}

Semplicemente abbiamo creato tre istruzioni. La prima richiede di inserire da tastiera il primo numero, la seconda il secondo numero e la terza stampa il prodotto dei due. Per comodità nella lettura, sarebbe più utile scrivere la dichiarazione delle variabili nell’ordine in cui andranno prese in considerazione dal programma. In questo specifico esercizio, abbiamo infatti dichiarato la variabile Prodotto dopo l’inserimento dei primi due numeri, anche perché farlo prima non ha molto senso. Non è sbagliato dichiarare tutte le variabili ad inizio programma, però se siete alle prime armi conviene seguire il nostro consiglio.

Esercizio 2: scrivere un programma che stampi a schermo la somma di due stringhe.

Soluzione: molto simile al precedente, con la differenza che qui agiremo sulle stringhe. Dunque:

#include <iostream>
#include <string>
using namespace std;

int main(){

std::string a;
std::string b;

cout<<"Digitare la prima stringa";
cin>>a;

cout<<"Digitare la seconda stringa";
cin>>b;

std::string c=a+b;

cout<<"La somma delle due stringhe è" <<c;
}

Esercizio 3: scrivere un programma che, dati tre numeri a, b e c da tastiera, stampi a schermo la somma di a e b e la sottrazione di b e c.

Soluzione: in questo caso ci sono dei vincoli ben precisi sulle operazioni. Bisogna considerare il fatto che b e c vengono sottratti tra loro, per cui b dovrà essere più grande di c, altrimenti ci sarà un errore. E’ possibile risolvere il problema dei numeri negativi, ma non lo vedremo in questo caso. Il programma sarà:

#include <iostream>
#include <string>
using namespace std;

int main(){
 
int a;
int b;
int c;

cout<<"Digitare il primo numero";
cin>>a;

cout<<"Digitare il secondo numero";
cin>>b;

cout<<"Digitare il terzo numero";
cin>>c;

int Somma=a + b;
int Differenza=b - c;

cout<<"La somma di a e b è" <<Somma;
cout<<"La differenza di b e c è" <<Differenza;

}

Parte 3: cicli di iterazione

Esercizio 1: scrivere un programma che stampa la scritta “Hello World” se si digita la lettera h, altrimenti stampa il messaggio “Input non valido”.

Soluzione: in questo caso la variabile di interesse è una sola. Vediamo però come si scrive il programma:

#include <iostream>
#include <string>
using namespace std;

int main(){
 
std::string Lettera;

cout<<"Digitare la lettera:";
cin>>Lettera;

if (Lettera==h){
cout<<"Hello World!";

}
else {
cout<<"Input non valido";
}

}

Esercizio 2: scrivere un programma che stampa i numeri da 1 a 5 in ordine crescente.

Soluzione: questa volta usiamo il ciclo for. Quindi:

#include <iostream>
#include <string>
using namespace std;

int main(){
 
int a = 5;
int i;

for (i=1; i<=a; i++){
cout<<i;
}

}

In questo esercizio abbiamo inizializzato la variabile a al numero 5, ovvero il valore massimo che deve essere stampato, e dichiarato la variabile i contatore del ciclo for. A questo punto abbiamo impostato il ciclo for in maniera tale che venga stampato il valore associato alla variabile i, che aumenta di 1 fino ad arrivare a 5, finché non risulta uguale a 5. L’output sarà: 12345.

Esercizio 3: scrivere un programma che stampa numeri in ordine crescente a partire da un valore dato da tastiera fino ad un valore fisso iniziale.

Soluzione: questo esercizio è una combinazione di ciclo while e for. Dunque l’esercizio si svolge così:

#include <iostream>
#include <string>
using namespace std;

int main(){
 
int a = 10;
int b;
int i

cout<<"Inserire il valore di b";
cin>>b;

while (b<=a){
for (i=b; i<=a; i++){
cout<<i;
break;
}
break;
}

}

Il primo passo da fare è inizializzare un intero con un valore massimo, nel nostro caso 10. Successivamente bisogna inizializzare sia la variabile i contatore del ciclo for che la variabile b che rappresenta il valore iniziale dal quale inizierà il ciclo for. Infine si imposta un ciclo while in cui si impone la condizione che b sia minore del tetto massimo impostato inizialmente e si aggiunge un ciclo for che stamperà i numeri a partire dal numero iniziale fino al valore massimo inizializzato. Il risultato sarà una serie di numeri crescenti che partirà da b fino al valore massimo a. Il programma può essere generalizzato come segue:

#include <iostream>
#include <string>
using namespace std;

int main(){
 
int a;
int b;
int i;

cout<<"Inserire il valore di a";
cin>>a;

cout<<"Inserire il valore di b";
cin>>b;

while (b<=a){
for (i=b; i<=a; i++){
cout<<i;
break;
}
break;
}

}

In questa seconda versione abbiamo semplicemente dichiarato a, senza inizializzarla. In questo modo è possibile scegliere un qualsiasi valore, senza vincoli.

NOTA: è importante notare l’istruzione break; al termine del ciclo while, appena fuori il ciclo for. Ciò permette di terminare il ciclo for non appena viene conclusa la prima iterazione. In questo modo l’output non verrà stampato infinite volte, generando un loop.

Parte 4: classi e metodi

Esercizio 1: scrivere la classe Persona che contenga le variabili nome, cognome e indirizzo, e i metodi per poter ricavare tali dati, scrivendo opportunamente il main ed implementando i metodi correttamente.

Soluzione: per prima cosa vediamo come dovrebbe essere il file Persona.h della classe Persona:

#include <iostream>
using namespace std;

class Persona{

public:

  char nome;
  char cognome;
  char indirizzo;
  void inserimento_nome();
  void inserimento_cognome();
  void inserimento_indirizzo();
}

Molto semplicemente, abbiamo dichiarato nella classe le variabili e i metodi necessari al programma che dobbiamo scrivere. Ora bisogna implementare il tutto nel programma stesso. Quindi il file Persona.cpp potrebbe essere strutturato come segue:

#include <iostream>
include "Persona.h"
using namespace std;

  void inserimento_nome(){
cout<<"Inserire il nome:";
cin>>nome;
}

  void inserimento_cognome(){
cout<<"Inserire il cognome:";
cin>>cognome;
}

  void inserimento_indirizzo(){
cout<<"Inserire l'indirizzo:";
cin>>indirizzo;
}

int main(){

Persona uomo;

    uomo.inserisci_nome( );
    uomo.inserisci_cognome( );
    uomo.inserisci_indirizzo( );
     
    cout << "Il nome della persona inserita è: " << uomo.nome << endl;
    cout << "Il cognome della persona inserita è: " << uomo.cognome << endl;
    cout << "L' indirizzo della persona inserita è: " << uomo.indirizzo << endl;
}

Nel main abbiamo esplicitato opportunamente i metodi dichiarati nella classe, definendo le operazioni che devono svolgere (nel nostro caso l’inserimento di dati da tastiera). Successivamente abbiamo creato un oggetto Persona chiamato uomo, che possiede le caratteristiche definite nella classe persona, ossia nome, cognome e indirizzo. Infine abbiamo applicato all’oggetto uomo i metodi della classe tramite il “.” e stampato il risultato a schermo.

Ovviamente era possibile dichiarare una classe con variabili e metodi completamente differenti. Unica cosa importante da ricordare è che nel file classe.cpp bisogna sempre inserire la stringa include “classe.h”, per far sì che il programma riconosca immediatamente i metodi che stiamo utilizzando, altrimenti è assente il collegamento tra la classe e il programma che implementa i metodi di tale classe, restituendo un errore di mancata dichiarazione dei metodi o delle variabili.

Parte 5: ereditarietà

Esercizio 1: in base all’esercizio 1 della Parte 4, scrivere una classe Studente, che integri la variabile classe scolastica e il metodo per stamparla nel main.

Soluzione: proviamo ora ad estendere la classe Persona dell’esercizio precedente con una classe Studente che aggiunga ulteriori variabili al programma. Il codice della classe Studente sarà così:

#include <iostream>
using namespace std;

class Studente::Persona{

public:

  char classescolastica;
  void inserimento_classescolastica();
}

Essendo Studente l’estensione della classe Persona, erediterà tutte le variabili e i metodi della classe Persona. Proprio per questo non è necessario dichiarare nuovamente gli stessi metodi già scritti precedentemente. Il nuovo programma è presto fatto:

#include <iostream>
include "Studente.h"
include "Persona.h"

using namespace std;

  void inserimento_nome(){
cout<<"Inserire il nome:";
cin>>nome;
}

  void inserimento_cognome(){
cout<<"Inserire il cognome:";
cin>>cognome;
}

  void inserimento_indirizzo(){
cout<<"Inserire l'indirizzo:";
cin>>indirizzo;
}

void inserimento_classescolastica(){
cout<<"Inserire l'indirizzo:";
cin>>classescolastica;
}

int main(){

Studente uomo;

    uomo.inserisci_nome( );
    uomo.inserisci_cognome( );
    uomo.inserisci_indirizzo( );
    uomo.inserimento_classescolastica();
     
    cout << "Il nome dello studente inserito è: " << uomo.nome << endl;
    cout << "Il cognome dello studente inserito è: " << uomo.cognome << endl;
    cout << "L' indirizzo dello studente inserito è: " << uomo.indirizzo << endl;
    cout << "La classe scolastica del cliente inserito è: " << uomo.classescolastica<< endl;

}

Il programma è essenzialmente identico a prima, con la differenza che questa volta l’oggetto sarà di tipo Studente e non Persona per poter implementare la variabile e il metodo della classe ereditata.

Con questi esempi si conclude qui la parte relativa al linguaggio C++ di base, necessario per risolvere gran parte degli esercizi relativi ai metodi, alle classi e allo svolgimento di operazioni più o meno complesse.