Vai alla Home Page About me Courseware Federica Living Library Federica Federica Podstudio Virtual Campus 3D Le Miniguide all'orientamento Gli eBook di Federica La Corte in Rete
 
I corsi di Scienze Matematiche Fisiche e Naturali
 
Il Corso Le lezioni del Corso La Cattedra
 
Materiali di approfondimento Risorse Web Il Podcast di questa lezione

Silvia Rossi » 2.C++ elementi di un programma


Programma: Una sequenza di istruzioni che il calcolatore esegue per produrre i risultati richiesti per la soluzione di un dato problema.

E’ un algoritmo scritto in un linguaggio di programmazione.

Linguaggio di Programmazione

Un insieme di simboli, parole, regole usate per istruire il calcolatore.

Linguaggio macchina: il reale linguaggio attraverso il quale il calcolatore esegue le istruzioni di un programma.

Linguaggio Assembler: un linguaggio che usa specifiche istruzioni per indicare al calcolatore le operazioni da eseguire le azioni da intraprendere, è dipendente dal calcolatore usato.

Linguaggio di alto livello: un linguaggio che possiede istruzioni e regole vicine ai linguaggi naturali ed è indipendente dal calcolatore usato.

Programma

Programma sorgente

  • Programma scritto in un linguaggio di alto livello

Programma oggetto

  • Risultato della compilazione di un programma sorgente

Compilatore

Il programma subisce diverse trasformazioni intermedie prima di diventare un programma oggetto (rilocabile).


Compilatore: caricamento

Il programma oggetto generato dal compilatore se eseguito viene caricato dal loader in memoria per l’esecuzione effettiva.

  • Ogni sezione del programma (codice, dati, memoria) viene allocata e assegnata ad intervalli di indirizzi di memoria assoluti.

Ciclo di vita di un programma


C++ un pò di storia

Il C++ è l’evoluzione naturale del C, il quale a sua volta discende da due linguaggi, il BCPL e il B.

  • Il BCPL fu sviluppato nel 1967 da Martin Richards per scrivere sistemi operativi e compilatori.

II linguaggio C si sviluppò dal B grazie a Dennis Ritchie, presso i Bell Laboratories.

Il C fu noto inizialmente come linguaggio di sviluppo per sistemi operativi.

  • Oggi la maggior parte dei sistemi operativi sono scritti in C e/o in C++

Il C è oggi disponibile sulla maggior parte dei computer ed è indipendente dall’hardware.

Nel 1990 si è giunti ad una definizione di standard per il C nota come ANSI/ISO 9899:1990.

C++ ambiente di sviluppo

GNU C++ è un dialetto del linguaggio C++ funzionante sotto i sistemi operativi Windows e Linux (Unix)

  • GNU C++ è un dialetto C++ ANSI
    • supporto ad un set standard di funzionalità (ANSI)

Tra i tanti ambienti di sviluppo C++ utilizzeremo Dev-Cpp

  • disponibile gratuitamente su bloodshedsoftware
    • scaricare l’ultima versione in formato exe, lanciarlo scegliendo la lingua desiderata e lasciando il resto inalterato.

Altri ambienti di sviluppo:

  • Microsoft Visual Studio
  • Borland C++

DEV C++


C++ elementi di un programma

Il classico primo programma C++

Mostra codice

C++ elementi di un programma

Il classico primo programma C++

Mostra codice

Algoritmo per il calcolo della circonferenza

  1. Leggi il valore del raggio
  2. Poni il valore della circonferenza uguale a 2 per 3,1415 per il raggio
  3. Stampa il valore della circonferenza

___________________________________

leggi(raggio)

circonferenza <- 2* 3,1415 * raggio

stampa (circonferenza)

Algoritmo per il calcolo della circonferenza


Algoritmo per il calcolo della circonferenza

esercizio2.3.cpp


Direttive al preprocessore e al compilatore

#include <nome_file header> avverte il preprocessore di includere un file header

#include <iostream> associa la libreria che gestisce l’input e l’output dei tipi standard verso file o verso opportuni dispositivi di ingresso e uscita come stampante, schermo, tastiera.

#include <cstdlib> associa un file che permette l’uso di alcuni comandi del sistema operativo (in questo caso MSDOS) di cui è un esempio l’istruzione finale :

system (pause)

che lascia il sistema in attesa che si prema un tasto per continuare

Direttive al preprocessore e al compilatore

using namespace std;

utilizza gli identificatori della libreria standard

(es. cin e cout) senza ulteriori specifiche.

Il namespace è una direttiva d’uso ed è un meccanismo fornito dal C++ per raggruppare dati e funzioni nello spazio dei nomi.

Senza using namespace std il compilatore non riconosce i nomi cin e cout; per farli riconoscere si può anche utilizzare il nome completo che utilizza il namespace std ed il risolutore del campo d’azione :: (due punti doppi)

std::cin std::cout. (dichiarazioni di uso)

In sostanza la direttiva d’uso sta per

“quando s’intende usare la libreria standard, si deve poter riferirsi ad un qualsiasi processo o oggetto di tale libreria digitandone il nome (cout) e non il nome completo (std::cout)”.

C++ namespace

Un meccanismo fornito dal C++ per raggruppare dati e funzioni nello spazio globale dei nomi.


C++ elementi del linguaggio

Da un punto di vista lessicale, un programma è una sequenza di termini (detti tokens)

Il compilatore deve riconoscere i termini del linguaggio per le successive fasi di analisi

Tipi di termini

  • Identificatori
  • Parole chiave
  • Costanti
  • Espressioni
  • Operatori
  • Simboli o segni speciali

Sono ignorati

Spazi bianchi, tabulatori, newlines, e commenti


C++ identificatore

Un identificatore è un termine usato dal programmatore per indicare funzioni, variabili, oggetti, costanti, etc.

Ogni identificatore è formato da una sequenza di caratteri di tipo lettere o cifre o “_” (underscore)

  • Il primo carattere deve essere una lettera o _
  • Caratteri maiuscoli e minuscoli sono diversi
  • Identificatori non validi:
    • un amico (contiene uno spazio)
    • un’amica (contiene un apostrofo)
    • 7bello (il primo carattere non è una lettera)
    • for (è una parola-chiave del C++)

Gli identificatori devono ricordare mnemonicamente gli oggetti cui si riferiscono

C++ identificatore

Alcuni identificatori sono predefiniti nel linguaggio e il loro uso è vincolato dalle sue regole

  • Riservati
    • Parole-chiave (prossima slide)
    • Nomi di oggetti di librerie standard linkati esternamente (cin, cout)
  • Non riservati
    • Costanti
    • Variabili
    • Tipi

C++ identificatori → parole-chiave

La parole chiave è un termine che ha un significato particolare per il compilatore C++

  • possono essere adoperati dal programmatore solo come previsto dal linguaggio

Esempi di parole chiave sono:

  • main : indica che il testo che segue tra parentesi graffe rappresenta il codice sorgente del programma.
  • const : definisce il nome che segue come dato costante.
  • float : definisce il nome seguente come variabile a virgola mobile (singola precisione).
  • if, then, else : definisce costrutti di controllo del linguaggio

Le parole chiave sono indicate in grassetto

C++ identificatori → variabili

Variabile: una locazione di memoria che può contenere diversi valori durante la computazione accessibile mediante un identificatore unico

L’interpretazione di una variabile dipende da:

  • locazione: definisce dove viene immagazzinata la variabile e il tempo di vità (stack, heap, dati)
  • tipo: l’insieme dei valori che può assumere e l’insieme delle operazioni che possono applicarsi a tali valori
  • visibiltà: lo scope, cioè le regioni del programma nelle quali la variabile può essere usata

<var> ≡ ( <identificatore>, <tipo>, <loc>, <scope> )

C++ identificatori _ variabili _ tipo

Tipi standard

  • char caratteri(es. ‘b’, ‘F’, ‘!’, ‘6′, …) (1 B)
    • usato anche per rappresentare valori numerici in [-128 ; 127]
  • int numeri interi(es. 1, 2, 43, -89, 4324, …) (4 B o almeno quanto short)
    • ha valori in [-2.147.483.648 ; 2.147.483.647]
  • float numeri decimali in virgola mobile a singola precisione(4 B)
    • Una parte intera ed una parte frazionale
    • intervallo di valori assoluti [1,17 x 10-38 e 3,40 x 1038] (7 cifre significative)
  • double numeri decimali in virgola mobile a doppia precisione(8 B)
    • intervallo di valori assoluti [1,17 x 10-308 e 1,79 x 10308 ] (15 cifre significative)
  • bool tipo valorebooleano (1 B)
    • con valori ‘vero’ e ‘falso’ ([0 ; 1])

Variabili

  • Nome
  • Tipo
    • Operazioni
    • Dimensione
  • Valore
  • Indirizzo in memoria

int n = 0

&n

Left-value è il riferimento al suo indirizzo

Right-value è il riferimento al suo valore

C++ dichiarazione di identificatori

Dichiarazione di tipo: informa il compilatore sul tipo assegnato ad un identificatore.

Definizione di tipo: è una dichiarazione che comporta l’allocazione di un’area di memoria per l’identificatore ma non l’inizializzazione del suo contenuto (indefinito).

Qualificatori: short, long, signed, unsigned

Specificatori: const, extern, static, volatile,…


C++ dichiarazione di identificatori

Inizializzazione: assegna un valore iniziale ad un identificatore già definito

La dichiarazione di un identificatore deve precedere il suo primo utilizzo, e può essere in ogni parte del programma

E’ sempre consigliabile dichiarare tutte le costanti e le variabili nella parte iniziale del programma (o della funzione che le utilizza)

  • È più facile identificare nel programma la sezione delle dichiarazioni

Dichiarazione e inizializzazione possono essere combinate


C++ identificatori → variabili

Dichiarazione di variabile:

int numero;

Dichiarazione di variabile e successiva inizializzazione

int numero;

numero = 54;

Dichiarazione di più variabili dello stesso tipo

int numero, secondo_numero, terzo;

Dichiarazione di variabile con contestuale inizializzazione

int numero = 54 ;

Dichiarazione di più variabili e inizializzazione

int numero = 54, secondo_numero, terzo = 15;

C++ identificatori → costanti

Costante: una locazione di memoria l che contiene sempre lo stesso valore durante la computazione

Alcune costanti possono essere riferite (nominate) da identificatori:

Altre constanti non sono associate ad alcun nome (anonime)

Dichiarazione di costante:

const float pi=3.1415;

L’uso dello specificatore const è fortemente consigliato piuttosto che scrivere più volte la stessa costante nelle istruzioni del programma;

  • se il programmatore decide di cambiarne il valore, e ha usato const, è sufficiente che modifichi la sola istruzione di definizione.

Simboli speciali

Uno o anche due caratteri consecutivi che sono usati per scopi particolari come ad esempio

il punto e virgola (;) che serve ad indicare la fine di una istruzione,

le parentesi graffe ({ })che indicano inizio e fine di una istruzione composta,

la virgola (,) che è usata come separatore.

  • es: float n, raggio; invece di
    • float n;
    • float raggio;

C++ espressioni

Espressioni: rappresentano il valore che si ottiene applicando opportune operazioni ben definite ad uno o più operandi che possono essere costanti o variabili.

In una espressione le operazioni vengono indicate con particolari simboli detti operatori

Gli operatori possono essere

  • unari : agiscono su un solo operando !a ++i
  • binari : agiscono su due operandi (destro e sinistro) a+b a<=b

C++ espressioni

Gli operatori possono essere

  • di assegnazione
  • aritmetici
  • binari
  • relazionali
  • logici
  • incremento e decremento
  • condizionali

C++ espressioni di assegnazione

L’operatore di assegnazione = copia il contenuto dell’operando destro (detto r-value) nell’operando sinistro (detto l-value)

  • r-value è una qualsiasi espressione con valore un tipo standard
  • l-value è una variabile
  • Il tipo di r-value deve essere lo stesso o implicitamente convertibile nel tipo di l-value
  • Il valore dell’espressione assegnazione è r-value
  • Esempio: a = b + 3

C++ espressioni aritmetiche

Gli operatori matematici eseguono le principali operazioni matematiche

+ – * /

Se la divisione è fra due numeri interi, il risultato dell’operazione è ancora un numero intero (troncamento).

  • Esempio: 27 / 4 dà come risultato 6 (anziché 6.75).

Il resto di una divisione fra numeri interi si calcola con l’operatore binario %

  • Esempio: 27 % 4 dà come risultato 3

C++ espressioni aritmetiche


Regole di precedenza

5 + 3 * 2

Risultato = 16 o 11?

  1. Svolgere le parentesi
  2. Moltiplicazione, divisione e modulo
  3. Addizione e sottrazione

Più operazioni dello stesso tipo vanno risolte da sinistra a destra.

Regole di precedenza

Se le costanti e le variabili sono tutte dello stesso tipo allora anche il valore dell’espressione sarà dello stesso tipo.

Se tutte le grandezze presenti nell’espressione sono di tipo numerico, anche se diversi, sarà il compilatore ad effettuare tutte le opportune conversioni di tipo.

Ad esempio se le variabili n, f, d sono rispettivamente di tipo int, float e doubleallora nell’espressione (n+f)*d, n è convertito a float, successivamente la somma n+f è convertita a doubleper poter effettuare la moltiplicazione con d (conversione implicita).

Regole di precedenza

Nel C++ sono permesse anche espressioni del tipo n+car +b dove

  • - n è un intero,
  • - car un carattere e
  • b una variabile booleana.

Se ad esempio n vale 4, car è la lettera A e b vale true, il valore dell’espressione sarà 4+65+1=70.

L’uso di espressioni contenenti variabili numeriche e non numeriche non è in genere consigliabile e può dare luogo in un programma ad errori che sono difficili da individuare.

Regole di precedenza

REGOLA

Non adoperare espressioni in cui sono presenti variabili di tipo diverso.

Esempio -> Area del cerchio

Mostra codice

Esempio -> Area del cerchio

REGOLA

E’ sempre consigliabile dichiarare tutte le costanti e le variabili nella parte iniziale del programma (o della function che le utilizza).

In questo modo chi legge il programma sa dove reperire le informazioni sul tipo delle variabili e delle costanti.

C++ espressioni relazionali

Gli operatori relazionali sono:

> > = < <= == !=

eseguono il confronto fra i valori dei due operandi (di qualsiasi tipo standard) e restituiscono un valore booleano:

a > b restituisce true se a é maggiore di b

a >= b restituisce true se a é maggiore o uguale a b

a < b restituisce true se a é minore di b

a <= b restituisce true se a é minore o uguale a b

a == b restituisce true se a é uguale a b

a != b restituisce true se a é diverso da b

Esempio:

bool bvar = (7 > 3); (in bvar viene memorizzato true)

bool bvar = (7 == 3); (in bvar viene memorizzato false)

Espressioni booleane semplici

Espressione booleana semplice: è rappresentata da un confronto tra i valori di due espressioni. La forma sintattica di una espressione booleana semplice è la seguente:

espressione1 op espressione2

dove op è un operatore relazionale.

L’espressione booleana assume il valore true (vero) se il valore di espressione1 è nella relazione op con il valore di espressione2 .


Attenzione!

Se si pone uno spazio tra gli operatori (es = =), si commette un errore di sintassi

Non confondere = con ==

  • Assegnazione pi=3.1415
  • Uguaglianza x==y

Esercizi

Scrivere in pseudo codice un algoritmo per il calcolo del MCD usando l’algoritmo di Euclide.

Algoritmo per il Massimo Comun Divisore (Euclide)

Si trovi il MCD tra i numeri 10881 e 1488

  • Dividiamo 10881 per 1488: avremo quoziente 7 e resto 465
  • il nuovo dividendo è 1488 mentre il nuovo divisore è 465
  • dividiamo 1488 per 465: avremo quoziente 3 e resto 93
  • il nuovo dividendo è 465 mentre il nuovo divisore è 93
  • dividiamo 465 per 93: avremo quoziente 5 e resto 0
  • l’algoritmo termina quando il resto è zero; il MCD è l’ultimo divisore: 93

Algoritmo per il Massimo Comun Divisore (Euclide)

1. Leggi A
2. Leggi B

  • Se A>B
    • Dividendo=A
    • Divisore=B

Altrimenti

  • Dividendo=B
  • Divisore=A

4. Resto=Dividendo%Divisore
5. Mentre Resto>0 esegui le seguenti istruzioni

  • Dividendo=Divisore
  • Divisore=Resto
  • Resto=Dividendo%Divisore

6. Stampa Divisore (una volta che il quoziente è 0 il divisore prende il valore del MCD)

Esercizi

Tenendo presente il programma per il calcolo della circonferenza scrivere dei programmi che calcolano:

  1. area e perimetro del quadrato;
  2. area del trapezio.
  • Contenuti protetti da Creative Commons
  • Feed RSS
  • Condividi su FriendFeed
  • Condividi su Facebook
  • Segnala su Twitter
  • Condividi su LinkedIn
Progetto "Campus Virtuale" dell'Università degli Studi di Napoli Federico II, realizzato con il cofinanziamento dell'Unione europea. Asse V - Società dell'informazione - Obiettivo Operativo 5.1 e-Government ed e-Inclusion