E’ un algoritmo scritto in un 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 sorgente
Programma oggetto
Il programma subisce diverse trasformazioni intermedie prima di diventare un programma oggetto (rilocabile).
Il programma oggetto generato dal compilatore se eseguito viene caricato dal loader in memoria per l’esecuzione effettiva.
Il C++ è l’evoluzione naturale del C, il quale a sua volta discende da due linguaggi, il BCPL e il B.
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.
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.
GNU C++ è un dialetto del linguaggio C++ funzionante sotto i sistemi operativi Windows e Linux (Unix)
Tra i tanti ambienti di sviluppo C++ utilizzeremo Dev-Cpp
Altri ambienti di sviluppo:
___________________________________
leggi(raggio)
circonferenza <- 2* 3,1415 * raggio
stampa (circonferenza)
#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
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)”.
Un meccanismo fornito dal C++ per raggruppare dati e funzioni nello spazio globale dei nomi.
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
Sono ignorati
Spazi bianchi, tabulatori, newlines, e commenti
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)
Gli identificatori devono ricordare mnemonicamente gli oggetti cui si riferiscono
Alcuni identificatori sono predefiniti nel linguaggio e il loro uso è vincolato dalle sue regole
La parole chiave è un termine che ha un significato particolare per il compilatore C++
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 linguaggioLe parole chiave sono indicate in grassetto
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:
scope
, cioè le regioni del programma nelle quali la variabile può essere usata<var>
≡ ( <identificatore>, <tipo>, <loc>, <scope> )
Tipi standard
char
caratteri(es. ‘b’, ‘F’, ‘!’, ‘6′, …) (1 B)
int
numeri interi(es. 1, 2, 43, -89, 4324, …) (4 B o almeno quanto short)
float
numeri decimali in virgola mobile a singola precisione(4 B)
double
numeri decimali in virgola mobile a doppia precisione(8 B)
bool
tipo valorebooleano (1 B)
int n = 0
&n
Left-value è il riferimento al suo indirizzo
Right-value è il riferimento al suo valore
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
,…
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)
Dichiarazione e inizializzazione possono essere combinate
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;
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;
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.
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
Gli operatori possono essere
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 standardl-value
è una variabiler-value
Gli operatori matematici eseguono le principali operazioni matematiche
+ – * /
Se la divisione è fra due numeri interi, il risultato dell’operazione è ancora un numero intero (troncamento).
Il resto di una divisione fra numeri interi si calcola con l’operatore binario %
5 + 3 * 2
Risultato = 16 o 11?
Più operazioni dello stesso tipo vanno risolte da sinistra a destra.
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 double
allora nell’espressione (n+f)*d, n è convertito a float
, successivamente la somma n+f è convertita a double
per poter effettuare la moltiplicazione con d (conversione implicita).
Nel C++ sono permesse anche espressioni del tipo n+car +b dove
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.
REGOLA
Non adoperare espressioni in cui sono presenti variabili di tipo diverso.
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.
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)
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 .
Se si pone uno spazio tra gli operatori (es = =), si commette un errore di sintassi
Non confondere = con ==
Scrivere in pseudo codice un algoritmo per il calcolo del MCD usando l’algoritmo di Euclide.
Si trovi il MCD tra i numeri 10881 e 1488
1. Leggi A
2. Leggi B
Altrimenti
4. Resto=Dividendo%Divisore
5. Mentre Resto>0 esegui le seguenti istruzioni
6. Stampa Divisore (una volta che il quoziente è 0 il divisore prende il valore del MCD)
Tenendo presente il programma per il calcolo della circonferenza scrivere dei programmi che calcolano:
1. Prime nozioni di Programmazione
2. C++ elementi di un programma
3. Le istruzioni di I/O standard
5. C++ funzioni matematiche ed espressioni booleane
6. Le strutture di controllo - parte seconda
8. Array di caratteri e tipi astratti
9. Astrazione procedurale: Procedure e Funzioni
10. Astrazione procedurale: Procedure e Funzioni -parte seconda
11. Astrazione procedurale: Procedure e Funzioni - parte terza
12. Librerie
13. Le strutture di controllo - parte terza
14. Algoritmi
16. I File di testo
17. La classe string