programmazioneNei primi due articoli che ho scritto su C++ si è vista la differenza che intercorre tra questo linguaggio di programmazione e Python e come scrivere il programma base da cui tutti partono, ovvero “Hello World!” (http://wp.me/p6l3wz-1B). Infine, si è data un’occhiata a cosa sono gli objects (oggetti), i types (tipi) e le values (valori) implementando il programmino sopra indicato e facendogli chiedere anche la nostra età (http://wp.me/p6l3wz-3k) così da notare la differenza sostanziale che intercorre tra strings (stringhe) e integers (numeri interi).

Qui mi soffermerò su come programmare delle operazioni di base quali addizioni, sottrazioni, moltiplicazioni e divisioni. Per, poi, concludere con un piccolo passo in più relativo al nostro programma “Hello World” il quale conterà la nostra età in mesi anziché in anni moltiplicandola per 365.

Il compiler, inoltre, è perfettamente in grado di conoscere quali operazioni possono essere applicate alle diverse variabili e prevenire eventuali errori ma non sa quali operazioni hanno o meno un senso cosicché potrà accettare delle operazioni che risultano assurde come int age = – 100 dove un numero intero non può risultare essere negativo.

Il tipo di variabile utilizzanto dal nostro programma determina le operazioni che possono essere applicate ed il loro significato. Abbiamo fin’ora visto le seguenti:

int cout;
cin >> cout;         //legge un numero intero con cout
string name;
cin >> name;         //legge una stringa

Bisogna sempre ricordare, però, che le stringhe possono leggere i numeri poiché nel linguaggio di programmazione utilizzano la porzione di memoria che attinge ai caratteri mentre, invece, gli int sono variabili esclusivamente numeriche e, quindi, scrivendo un nome anziché un numero questi non verrà riconosciuto.

Vediamo, ora un piccolo programma-calcolatore, simile a quello proposto da Stroustrup nel suo manuale Programming – Principles and Practice Using C++,  tanto per dare un’occhiata alle possibili operazioni.

//Programma semplice per esercitare gli operatori di calcolo
#include "iostream"
#include "math.h"
using namespace std;
int main ()
{
   cout <<"Scrivi un numero per poter eseguire i conti programmati: ";
   double n;
   cin >> n;
   cout <<"n == " << n                        //identità
        <<"\nn+1 == " << n+1                  //somma
        <<"\ntwice n == " << n+n   
        <<"\nthree n == " << n*3              //moltiplicazione
        <<"\nn squared == " << n*n            //n. elevato al quadrato
        <<"\nhalf of n == " << n/2            //divisione
        <<"\nsquare of n == " << sqrt (n)     //radice quadra di n.
    <<endl;
}

Come sempre scegliamo la libreria da utilizzare, in questo caso, con il comando #include “iostream”. In questo caso non ci sono stringhe e, quindi, non serve includerle. Logicamente, aggiungiamo anche using namespace std; oppure davanti ad ogni operazione che lo richiede std::, per esempio, std::cout.

Va notato che per far funzionare l’ultimo calcolo, ovvero quello della radice quadra, si deve obbligatoriamente aggiungere la libreria math.h con il comando #include “math.h”.

Passiamo, ora, all’analisi del corpo della funzione contenuto all’interno delle parentesi graffe.

Primo comando che troviamo, qui, è la richiesta che il programma farà il momento in cui lo azioneremo, ovvero di inserire un numero da poter calcolare.

Il double viene usato come “double precision floating-point”, ovvero virgola mobile in doppia precisione. L’uso della parola double non si riferisce alla “precisione raddoppiata” del numero ma piuttosto al numero di bits utilizzato: un single precision-number (numero in singola precisione), infatti richiede 32 bits mentre il double-precision utilizza 64bits, quindi il doppio di bits del primo. Questi bits aumentano non solo la precisione del numero ma anche la sua estensione: più precisione equivale ad una maggiore esattezza, da parte del sistema, nella rappresentazione di quantità frazionarie. La variabile n è semplicemente quel numero che verrà inserito da noi per essere calcolato dal programma.

Come già detto nel precedente articolo (Lezione 2) il comando cin >>  si riferisce allo standard input stream definito dalla libreria e l’operatore >> significa “prendi da” (get from) e specifica dove l’input dato deve andare a leggere. Così, quindi, diciamo al nostro programma di andare a prendere n ed eseguire i seguenti comandi.

Non mi dilungherò a spiegare le varie operazioni presenti ma mi limiterò a notare che i due uguali messi uno dietro l’altro == stanno a significare “uguale a” (se avessimo utilizzato un solo operatore = sarebbe stato un assignment di cui si parlerà nel prossimo articolo dedicato a C++, quindi, nella Lezione 4). Il conclusivo comando endl; è simile all’uso di \n, il quale dà l’ordine di porre il cursore alla fine della frase, si possono normalmente usare entrambi ma nel caso di questo calcolatore non è possibile poiché esso viene utilizzato in chiusura dell’intera funzione e ne ferma la sequenza di output.

Qui sotto potete dare un’occhiata ad una tabella estrapolata dal sopraindicato libro di Stroustrup (cliccateci sopra per ingrandirla) con le varie operazioni e simboli disponibili:Operators

Le stringhe hanno meno operatori degli integers ma hanno molte operazioni disponibili. Ora, vedremo come implementare il programma “Hello World!” che avevamo già scritto e, come precedentemente accennato, fargli leggere la nostra età in mesi anziché anni:

//Leggi e scrivi nome ed età in mesi
#include "iostream"
#include "string"
using namespace std;     //oppure usare std:: negli specifici spazi 

int main()
{
      cout << "Quanti anni hai? Per favore, scrivilo in numeri: ";
      double i; //sostituendolo con int riconoscerà solo n. interi 
      cin >> i;
      
      string mystr;         //variabile della stringa
      cout << "Come ti chiami? :\n";
      cin >> mystr;
      cout << "Ciao, " << mystr << "! I tuoi anni corrispondono a " << i * 12 << " mesi!\n";
      return 0;
}

Come sempre scegliamo le nostre librerie, in questo caso avendo anche delle stringe, aggiungiamo #include “string” ad “iostream”. Scriviamo, ovviamente, il solito using namespace std oppure ricordiamoci di aggiungere std:: all’inizio delle linea di comando che lo richiedono.

Nel primo comando del corpo della funzione facciamo domandare al nostro programma l’età ma specificando di scriverla solo in numeri e non in lettere poiché questi è semplicemente programmato per fare un calcolo di moltiplicazione usando integer i o double i, dove i altro non è che il nome della variabile, (nel primo caso potranno essere utilizzati solo numeri interi mentre nel secondo se qualcuno scrivesse 23.5 sarà comunque possibile calcolare l’età in mesi).

La variabile che chiamiamo mystring (mia stringa) andrà ad indicare il nome che verrà inserito dall’utente. Infine inseriremo nella linea di comando del cout, ovvero dell’output standard stream, il calcolo di i*12 ovvero del numero della variabile dell’età moltiplicata per 12 così da ottenerne il corrispondente in mesi.

Vi ricordo che per provare i vari programmi potete usare il sito cpp.shh dove cliccando in basso a destra su Run potrete anche vedere come funzionano.

E, per concludere, aggiungo un piccolo programmino semplice semplice che legge e compara nomi utilizzando l’operatore IF (che significa “se”) guardandolo potrete provare da soli a capire perché è stato scritto in questo modo e come funziona: è anche in questo modo che si impara la programmazione, ovvero osservando i codici altrui, destrutturandoli e cercando di comprenderne le varie parti.

//Leggi e compara nomi
#include "iostream"
#include "string"
using namespace std;

int main()
{
    cout << "Per favore scrivi due parole \n";
    string first;
    string second;
    cin >> first >> second;
    if (first == second)
        cout << "Hai ripetuto due volte la stessa parola \n";
    if (first < second)
        cout << first <<" alfabeticamente si trova prima di " <<second << '\n';
    if (first > second)
        cout << first << " alfabeticamente si trova dopo di " <<second << '\n';
}
Un pensiero su “Lezione 3. Basi di C++, le operazioni”

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *