Libro 1 – Capitolo 6 – Primi passi con la programmazione in C++

Linguaggio C++

Le basi del linguaggio

Indice degli argomenti

Introduzione

Se vuoi approfondire iscrivi al mio corso Udemy online con i laboratori Virtuali clicca sul titolo e accedi alla promozione “Corso Dall’Algoritmo al C++ Base

Il linguaggio C++ nasce come evoluzione del C ed è un linguaggio molto utilizzato in ambito scientifico e professional. Esso è caratterizzato come tutti i linguaggi di programmazione ad alto livello di una sintassi e semantica molto rigida e da un lessico finito di termini.
La caratteristica principale è quella di essere modulare ovvero organizzato in funzioni che svolgono compiti specifici. In C++ vi sono funzioni per la gestione dell’input/ouput, manipolazione di numeri, gestione stampa. Ciascun gruppo di funzione viene incluso in librerie che sono dei file che contengono le istruzioni elementari per l’uso delle funzioni. In ogni programma C++ ogni volta che occorre una funzione devo assicurarmi che essa sia inclusa nelle librerie che io dispongo all’interno del programma. Ogni libreria sarà disponibile con un nome che identifica la classe di funzione e un estensione. Ad esempio string.h è la libreria per la gestione delle stringhe.

Struttura di un programma C++

Un programma C++ può essere pensato e suddiviso in tre parti

intestazione o header

dichiarazione delle variabili e costanti

programma

Intestazione o header

Rappresenta l’elenco delle funzioni che devono essere disponibili all’interno del programma che stiamo creando.
Nel C++ definisco le intestazioni mediante la parola chiave include secondo la sintassi seguente:

#include <nome libreria>

posso ripetere più volte l’istruzione include per ogni libreria che mi occorre.

Dichiarazione di variabili e costanti.

Nel C++ come in tutti i linguaggi di programmazione sono ammesse variabili di tipo numerico, alfanumerico, logico. La dichiarazione di una variabile avviene secondo la sintassi generale:

tipo_dato nome variabile;

ad esempio

int p; dichiara un numero p intero

string cognome; dichiara una variabile stringa cognome

float x; dichiara una variabile reale x in singola precisione

Notare che al termine di ogni dichiarazione è previsto un punto e virgola, il linguaggio C++ prevede la terminazione di ogni riga con il punto e rigola, salvo per alcune eccezioni. Ad esempio nella sezione #include non è necessario.

Per dichiarare una costane si usa

la sintassi: #define nome costane valore

ad esempio #define pigreco 3.14 definisce una costante reale.

programma

Ogni programma in C++ deve essere racchiuso in una funzione nel caso più semplice

int main (){

istruzione 1

istruzione 2

return 0;

}

fare molto attenzione a scrivere le variabili sempre in minuscolo o in maiuscolo fa differenza !

Inoltre terminare ogni istruzione con un punto e virgola.
Le dichiarazioni delle variabili sono opportune nella sezione main in quanto sono riferite alla funzione principale. E’ possibile dichiarare le variabili all’esterno del main, ma in questo caso tale dichiarazione ha uno scopo differente che sarà esaminato più avanti.
Ogni programma C++, deve inoltre terminare con l’istruzione return 0; questa istruzione indica al sistema opertivo che il programma termina, con valore di uscita 0.
Cosa sta ad indicare il valore “0” ? Nel linguaggio di programmazione C++ è stata definito int main() come la funzione principale, la quale restituisce zero o altro valore al termine della sua esecuzione.
Un valore zero indica un’esecuzione del programma regolare. Un valore diverso da zero indica una condizione di errore nell’esecuzione del programma.

Gestione dell’Input/Output

In C++ ci sono diverse librerie per la gestione dell’Input/Output le più utilizzate sono le funzioni della libreria iostream che permettono di formattare automaticamente i dati numerici.
Il supporto della gestione dell’Input e Output è fornito per attraverso la libreria <iostream> che gestisce l’I/O su Console, ovvero in una finestra a caratteri che in Windows è il prompt dcel DOS, ma in MAC/Linux è il terminale.

L’istruzione di scrittura e cout la quale prevede diverse sintassi:

cout << variabile per la stampa di un valore;

cout << “messaggi” per la stampa di messaggi;

Nella prima è possibile gesitre la visualizzazione del valore di una variabile, nella seconda la stampa del messaggio a video.
E’ inoltre possibile combinare le diue cose ad esempio: cout << “La somma di due numeri è: “<< somma;

Per la gestione dell’Input si usa l’istruzione cin << variabile

In C++ per poter utilizzare le funzioni cin e cout si deve dichiarare sotto la sezione #include e comunque prima della dichiarazione delle variabili e costanti la frase:

using namespeca std; per evitare di incorrere nell’utilizzo di funzioni senza qualificare la classe di cui fanno parte. Nel nostro caso la classe è std. Se non vi fosse tale dichiarazione ogni volta che utilizziamo cin o cout si deve premettere il prefisso “std::”.

Gestione avanzata dell’Input Output da console

Sono stati esaminati, solo degli esempi semplici di gestiore dell’Input Output, ma esistono alcune sintassi e istruzioni che gestiscono casi più complessi.
Ad esempio un listato del tipo:

#include <iostream>
#include <string>
using namespace std;
int main ()
{ string nome,cognome;
 cout << "inserisci il nome ";
 cin >> nome;
 cout << "Inserisci il cognome ";
 cin >> cognome;
return 0;
}

E’ un banale pezzod di codice, che richiede all’utente di inserire un nome e cognome che sono poi memorizzati in una stringa.

Quando proviamo ad inserire nomi con spazi ad esempio “francesco paolo” la seconda parte dell’input dopo lo spazio non viene catturata, anzi viene saltata anche la richiesta di input del cognome e il programma

termina.
Osserva la schermata per comprendere meglio:

Screenshopt dell'esecuzione del programma.

Modifichiamo il listato precedente con il seguente:

#include <iostream>
#include <string>
using namespace std;
int main ()
{
string nome,cognome;
cout << "inserisci il nome ";
getline(cin,nome);
cout << "Inserisci il cognome ";
getline(cin,cognome);
cout << "\ndati inseriti: " << nome << endl;
cout << cognome <<endl;
return 0;
}

In questo codice C++ è stata introdotta l’istruzione geline che consente di catturare l’input di tuta la riga digitata dall’utente, inclusi gli spazi.
Sono stati poi utilizzati i simboli “\n” e endl per indicare quando occorre andare a capo riga.
Provate il listato per esercizio.

La Manipolazione dei dati in C++

Nella lezione precedente abbiamo visto che la gestione dell’Input Output è delegata alla libreria <iostream> la quale mette a disposizione del programmatore le istruzioni cin e cout. Ora tali istruzioni sebbene utili non consentono la formattazione dell’Input e dell’Output.

Ad esempio se il risultato di una divisione fra due numeri ha un numero elevato di cifre decimali come fare per troncare ad un numero di cifre voluto il numero ?

Dobbiamo innanzitutto ricordare che i numeri reali in singola e doppia precisione in C++ sono dichiarati con float e double che la rappresentazione nel calcolatore dei numeri reali avviene in virgola mobile ovvero scrivendo il numero in notazione scientifica normalizzata.

Ad esempio il numero x=-432,334441 in notazione normalizzata si esprime come x=-0,432334441 x10E3.

Quindi il numero si compone di una mantissa parte frazionaria compressa fra 0 e 1 e da una caratteristica esponente della base 10.

Il C++ calcola e visualizza i risultati in forma scientifica. E’ opportuno richiamare prima delle funzioni per il passaggio di un numero in rappresentazione in virgola mobile a virgola fissa.

Per far questo negli header del programma si deve richiamare la libreria <iomanip> che aggiunge nuove caratteristiche alle istruzioni cin e cout e non solo per la manipolazione dei numeri ma anche delle stringhe.

Ora per passare alla rappresentazione in virgola fissa si utilizza la parola riservata fixed e per impostare il numero di cifre decimale.

Il tutto deve precedere la stampa del numero nell’istruzione cout in quanto deve preparare il formato opportuno.

In altri termini tornando al numero x si ha che per stamparlo con tre cifre decimali avrò:

cout << fixed << setprecision(3) << x;

Quindi l’istruzione fixed passa alla rappresentazione in virgola fissa, mentre l’istruzione setprecision imposta il numero di cifre decimali.

Un modo alternativo ma del tutto equivalente è scrivere:

cout << setioflags(ios::fixed) << setprecision(3) << x;

La manipolazione dei dati in C++ Nella lezione precedente abbiamo visto che la gestione dell’Input Output è delegata alla libreria iostream la quale mette a disposizione del programmatore le istruzioni cin e cout. Ora tali istruzioni sebbene utili non consentono la formattazione dell’Input e dell’Output.

Ad esempio se il risultato di una divisione fra due numeri ha un numero elevato di cifre decimali come fare per troncare ad un numero di cifre voluto il numero ?

Dobbiamo innanzitutto ricordare che i numeri reali in singola e doppia precisione in C++ sono dichiarati con float e double che la rappresentazione nel calcolatore dei numeri reali avviene in virgola mobile ovvero scrivendo il numero in notazione scientifica normalizzata.

Ad esempio il numero x=-432,334441 in notazione normalizzata si esprime come x=-0,432334441 x10E3.

Quindi il numero si compone di una mantissa parte frazionaria compressa fra 0 e 1 e da una caratteristica esponente della base 10.

Il C++ calcola e visualizza i risultati in forma scientifica. E’ opportuno richiamare prima delle funzioni per il passaggio di un numero in rappresentazione in virgola mobile a virgola fissa.

Per far questo negli header del programma si deve richiamare la libreria iomanip che aggiunge nuove caratteristiche alle istruzioni cin e cout e non solo per la manipolazione dei numeri ma anche delle stringhe.

Ora per passare alla rappresentazione in virgola fissa si utilizza la parola riservata fixed e per impostare il numero di cifre decimale.

Il tutto deve precedere la stampa del numero nell’istruzione cout in quanto deve preparare il formato opportuno.

In altri termini tornando al numero x si ha che per stamparlo con tre cifre decimali avrò:

cout << fixed << setprecision(3) << x;

Quindi l’istruzione fixed passa alla rappresentazione in virgola fissa, mentre l’istruzione setprecision imposta il numero di cifre decimali.

Un modo alternativo ma del tutto equivalente è scrivere:

cout << setioflags(ios::fixed) << setprecision(3) << x;

Una scrittura invece del tipo:

cout << setioflags(ios::floatfield) << setprecision(3) << x

arrotonda il numero su tre cifre complessive.

Per continuare a leggere questo articolo devi sottoscrivere un abbonamento
Puoi abbonarti al link al menù principale o cliccando sul link Abbonati Ora!