Linguaggio C++
A. Lorenzi – V. Moriggia
C++. TEORIA E AMBIENTE DI
PROGRAMMAZIONE
Atlas
Copyright © Istituto Italiano Edizioni Atlas
Il programma C++
Un programma in C++ per la somma di due numeri
// Somma.cpp: somma di due numeri
#include <iostream>
using namespace std;
int main()
{
int a, b, s;
cin >> a;
cin >> b;
s = a + b;
cout << s;
return 0;
}
Input e output standard
cin >> a;
cin >> b;
s = a + b;
cout << s ;
• cin>> indica la lettura dei dati
(input)
• s = a + b specifica che il risultato
deve essere assegnato alla variabile s
• cout<< ordina la visualizzazione del
risultato (output)
Tipi di dati numerici
• I principali tipi standard delle variabili sono:
Costanti e variabili
• Le variabili devono essere dichiarate indicando il
tipo e il nome:
tipo nome;
int anni;
float statura;
• Le costanti vengono dichiarate attraverso la
parola chiave const:
const tipo nome = valore;
const double PIGRECO = 3.14;
const int SCONTO = 20;
Le frasi di commento
• Le frasi di commento iniziano con i delimitatori //
• I commenti possono essere posti all’inizio di una
nuova riga oppure accanto ad un’istruzione:
int eta; // età di una persona
Istruzione di assegnazione
• L’istruzione di assegnazione ha una sintassi del
tipo:
variabile = valore;
• Il valore viene assegnato alla variabile scritta a
sinistra del simbolo =
area = raggio * raggio * 3.14;
nome = "Rossi";
Operatori di assegnamento
Il casting
Il casting è l’azione che consente di trasformare la
rappresentazione di un dato dal suo tipo originale a un
altro.
• L’operatore cast è rappresentato da una coppia di
parentesi tonde che racchiudono il tipo di dato:
(tipo) espressione;
b = (int) a;
Gli operatori di relazione e logici
Simboli per indicare gli operatori di confronto :
I connettivi logici che possono essere utilizzati:
• && indica l’operazione di congiunzione (And)
• || indica l’operazione di disgiunzione (Or)
• ! indica la negazione (Not).
Istruzioni di input e output
• cin >> indica un’operazione sullo standard input
cin >> raggio;
• cout << indica un’operazione sullo standard
output
cout << area;
Fasi del lavoro di programmazione
codifica
compilazione
linking
exe
• Il risultato della fase di codifica si
chiama programma sorgente; i file
hanno l’estensione .cpp.
• consiste nel tradurre il programma
sorgente in un programma
oggetto, attraverso il compilatore.
• il programma, linker, effettua il
collegamento tra il programma
oggetto e le librerie del linguaggio
necessarie per l’esecuzione del
programma.
• viene creato il file eseguibile con
l’estensione .exe.
Errori di programmazione
errore sintattico
errore lessicale
errore di run-time
errore logico
• non sono state rispettate le regole
per la costruzione corretta delle
frasi del linguaggio.
• è stata utilizzata una parola che
non esiste nel dizionario del
linguaggio C++.
• blocca l’avanzamento del processo
di elaborazione.
• riguarda la correttezza
dell’algoritmo. Per individuarlo si
utilizza il debugger.
Importanza della documentazione
Alcuni accorgimenti per una buona documentazione:
• usare per le variabili nomi significativi;
• esplicitare quali sono i tipi previsti per i dati;
• utilizzare le strutture di controllo;
• organizzare i programmi in modo strutturato;
• inserire frequenti frasi di commento;
• effettuare prove di esecuzione;
• fornire un manuale per l’utente.
La sequenza
La sequenza si rappresenta costruendo un blocco di
istruzioni delimitato da una coppia di parentesi graffe { … }.
#include <iostream>
using namespace std;
int main()
{
int num1, num2, differenza;
cout << "Due numeri: ";
cin >> num1 >> num2;
differenza = num1 - num2;
cout << "Risultato = " << differenza << endl;
return 0;
};
La struttura di alternativa
Per la selezione si usa l’istruzione if che ha la seguente
sintassi:
if (condizione) {
istruzioni-a;
}
else {
istruzioni-b;
}
Strutture annidate di alternativa
• Dopo la condizione o dopo else, può essere
presente un gruppo di istruzioni, contenente a
sua volta altre strutture if interne alla struttura
più esterna.
if (condizione1)
istruzioni-a;
else
if (condizione2)
istruzioni-b;
else
istruzioni-c;
La struttura di ripetizione
La struttura di ripetizione si rappresenta con l’istruzione
do … while
do {
istruzioni;
} while (condizione);
Ripetizione precondizionale
La ripetizione precondizionale si rappresenta con
l’istruzione while.
while (condizione) {
istruzioni;
}
Ripetizione con contatore
La struttura di ripetizione con contatore viene
rappresentata con la struttura for.
for (int i=min; i<=max; i++) {
istruzioni;
}
Struttura di scelta multipla
La struttura di scelta multipla è realizzata dall’istruzione
switch.
switch(variabile) {
case valore1:
istruzioni1;
break;
case valore2:
istruzioni2;
break;
. . . . . .
case valoren:
Istruzionin;
break;
default:
istruzioni;
break;
}
Funzioni
Una funzione è un procedimento che riceve valori come
argomenti in ingresso e restituisce un valore come risultato.
La sintassi generale di una funzione è:
tipo di dato restituito nome funzione (elenco parametri)
{
}
istruzioni;
return valore restituito;
Funzioni
• Se il tipo restituito dalla funzione non è
specificato si assume per default il tipo int.
• Se si vuole invece che la funzione non
restituisca alcun valore, specificare il tipo void.
Funzioni con parametri
L’operazione, con la quale il main (o un’altra funzione chiamante)
invia i valori alla funzione, assegnandoli ai parametri, si chiama
passaggio di parametri.
• le variabili indicate nell’intestazione della funzione
si chiamano parametri formali;
• le variabili che forniscono i valori ai parametri si
chiamano parametri attuali.
Passaggio di parametri
• il passaggio di parametri per valore avviene
indicando nell’intestazione della funzione il tipo e il
nome di ciascun parametro formale.
• per indicare il passaggio di un parametro per
referenza, si deve aggiungere il carattere &
subito dopo la dichiarazione del tipo del
parametro.
Dichiarazione dei prototipi di funzione
Per una migliore organizzazione dei programmi:
• dichiarazione delle funzioni per mezzo dei loro prototipi;
va posta in testa al programma stesso.
Questa dichiarazione si chiama prototipo della funzione.
• definizione (o implementazione) delle funzioni;
viene posta dopo la funzione main.
Risorse globali e locali
In un programma si possono distinguere:
• variabili globali, che vengono dichiarate all’inizio
del programma e che possono essere usate dal
programma principale e da tutte le funzioni;
• variabili locali, che vengono dichiarate all’interno
della funzione che le utilizza e che non sono visibili
alle altre funzioni (main compreso).
Regole di visibilità
Ogni ambiente vede
• le proprie risorse locali
• quelle definite all’esterno e che precedono
l’ambiente stesso.
Funzioni predefinite
Funzioni predefinite (built-in): sono funzioni che possono
essere usate dal programmatore senza dichiarazione. Tali
funzioni sono richiamabili inserendo all’inizio del programma la
direttiva #include.
#include <cmath>
Esempi di funzioni built-in della libreria cmath:
• pow, exp, sqrt, log, log10
• sin, cos, tan
Namespace e librerie di inclusione
namespace (spazio dei nomi) è un raggruppamento di dati e
di funzioni che hanno tra loro un nesso logico
namespace spazioglobale1 {
// esempi di variabili e funzioni globali
int totale;
int Calcolo(int a, int b);
}
Namespace e librerie di inclusione
• Per un impiego permanente di tutte le componenti di
un namespace si deve utilizzare il comando using
namespace.
using namespace spazioglobale1;
.....
cout << totale << endl;
Function overloading
Function overloading consente di definire due funzioni con
lo stesso nome che differiscono tra loro solamente per l’elenco
dei parametri.
float pow (float, float);
long double pow (long double, long double);
Funzioni ricorsive
Con il termine ricorsione (o ricorsività) si indica
la possibilità che una funzione ha di chiamare se
stessa, cioè la chiamata della funzione è
contenuta all’interno della funzione stessa.
Enumerazioni
Le enumerazioni sono una serie di valori interi che vengono
associati a nomi di costanti, dichiarate attraverso la parola
chiave enum.
La sintassi è la seguente:
enum identificatore {lista delle costanti};
enum Lista {C1, C2, C3, C4};
enum SecondoTrimestre {APR=4, MAG=5, GIU=6};
Array
L’array è un insieme di elementi omogenei tra loro. Con una
variabile possiamo indicare solo un dato, con l’array possiamo
indicare tanti dati dello stesso tipo con un solo nome collettivo di
variabile: l’identificatore dell’array. Gli elementi si distinguono uno
dall’altro attraverso l’indice che viene assegnato nell’array, e che
viene posto accanto all’identificatore dell’array.
In matematica con il termine vettore si fa
riferimento agli array a una dimensione.
Array
Un array si definisce con la seguente dichiarazione:
tipo NomeArray[dimensione];
double coeff[10];
Quando un array viene passato come parametro ad una
funzione, in realtà viene passata la locazione (cioè l’indirizzo)
della prima componente dell’array.
Array a due dimensioni
La matrice (o array a due dimensioni) è un insieme di
elementi dello stesso tipo che sono in corrispondenza
biunivoca con un insieme di coppie ordinate di numeri interi,
che rappresentano rispettivamente il numero della riga e il
numero della colonna della matrice.
Viene così definita:
tipo NomeMatrice[N][M];
const int MAX = 20;
int matrice1[MAX][MAX];
Strutture
La struttura serve a contenere dati di tipo diverso. Viene
dichiarata con la parola chiave struct.
struct NomeStruttura {
tipo1 campo1;
tipo2 campo2;
tipo3 campo3;
};
Puntatori
Una variabile di tipo puntatore contiene l’indirizzo di memoria
di un’altra variabile.
è possibile creare un puntatore scrivendo il
carattere * (asterisco o star) accanto al tipo.
int* puntatore;
char* s;
struct data* ricorrenza;
Puntatori
• Per conoscere l’indirizzo di memoria di una variabile
si usa l’operatore &.
int num;
int* pInteri;
pInteri = &num;
• Per accedere alla memoria puntata da un puntatore
si usa l’operatore *.
int a, b;
int* pInteri;
a = 5;
pInteri = &a;
b = *pInteri;
cout << b;
Scarica

Capitolo5_LinguaggioC++