Programma
2
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 calcolatoreusato.
4
PROGRAMMA SORGENTE
Programma scritto in un linguaggio di alto livello
PROGRAMMA OGGETTO
Risultato della compilazione di un programma sorgente
Programma
Il programma subisce diverse trasformazioni intermedie prima di diventare un programma oggetto (rilocabile)
Compilatore
Analisilessicale
stringa di simboli(tokens)
forma (AST)Intermedia
formaottimizzata
Codicerilocabile(obj, exe)
Analisisintattica
Analisisemantica
tabella di simboli
Ottimizza-zione
Generazionecodice
Programmasorgente
Linker
Oggetti e librerie del progetto
Preprocessore
File di inclusione
…0 1 1 1 1 0 1 1
0 1 1 0 1 0 0 1
0 1 1 1 0 0 0 0
0 0 0 0 1 1 1 1
0 0 0 0 1 1 1 0
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
Codicerilocabile
1 1 1 1 1 0 1 1
0 0 1 0 1 0 1 1
0 0 0 1 0 1 1 0
0 0 1 0 1 1 0 1
0 0 1 0 1 1 0 0
RAM
Loader
stack
heap
dati
text
Immagine delprogramma in
memoria
Compilatore: caricamento
Ciclo di vita di un programma
7
Problema
Programma
Algoritmo di risoluzione
C un pò di storia
II linguaggio C si sviluppò dal B grazie a Dennis Ritchie, presso i Bell Laboratories nel 1972.
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 – aggiornato nel 1999 C99
C ambiente di sviluppo
Tra i tanti ambienti di sviluppo C utilizzeremo NetBeans/Eclipse
Il classico primo programma C
C elementi di un programma
// eser1.1.c: primo programma "Hello World"#include <stdio.h>
int main () {
printf("Hello World\n”); // stampa messaggioreturn 0;
}
C elementi di un programma
#include <stdio.h>
int main () {
int integer1; int integer2;int sum;
printf(“inserisci primo intero\n”);scanf(“%d”, &integer1);…
sum = integer1 + integer2;printf(“La somma e’ %d\n”, sum);return 0;
}
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
Terminioperatori
C elementi del linguaggio
Identificatoricostanti
parole chiave
variabilianonime
con nome
Simboli speciali
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 – 31 caratteri– 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
Algoritmo per il calcolo della circonferenza
1) Leggi il valore del raggio2) Poni il valore della circonferenza uguale a 2
per 3,1415 per il raggio3) Stampa il valore della circonferenza___________________________________leggi(raggio)
circonferenza <- 2* 3,1415 * raggio
stampa(circonferenza)
14
15
C identificatori à parole-chiave
La parole chiave è un termine che ha un significato particolareper 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
– nome: definisce un identificativo unico per la variabile– tipo: l’insieme dei valori che può assumere e l’insieme delle
operazioni che possono applicarsi a tali valori– valore: valore corrente della variabile
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 (short o long)
(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 valore booleano (1 B)• con valori ‘vero’ e ‘falso’ ([0 ; 1])
18
Variabili
• Nome• Tipo
– Operazioni– Dimensione
• Valore• Indirizzo in memoria
int n = 0&n
Left-value è il riferimento al suo indirizzoRight-value è il riferimento al suo valore
Dichiarazione di tipo: informa il compilatore sul tipo assegnato ad un identificatore
specificatore ... qualificatore ... tipo ident
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
Dichiarazione di tipo di un identificatore
tipo standard
Indica come deve essere allocato il contenuto
Fornisce altre caratteristichedell’identificatore
Inizializzazione: assegna un valore iniziale ad un identificatore già definito
ident = valore;
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 dichiarazione di identificatori
Operatore di assegnazione
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;
Costante: una locazione di memoria 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.
C identificatori à costanti
23
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;
Simboli speciali
24
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
25
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
r-valuel-value
a = b
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
C espressioni aritmetiche
Operazione Simboloalgebrico
Simbolo in C
Espressionealgebrica
Espressione in C
Addizione + + a+b a+bSottrazione - - a-b a-bMoltiplicazione x * ab a*bDivisione : / a:b a/bModulo mod % a mod b a%b
29
Regole di precedenza
5 + 3 * 2Risultato = 16 o 11?
1. Svolgere le parentesi2. Moltiplicazione, divisione e modulo3. Addizione e sottrazione
Più operazioni dello stesso tipo vanno risolte da sinistra a destra.
30
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 doubleper poter effettuare la moltiplicazione con d (conversione implicita).
REGOLA
Non adoperare espressioni in cui sono presentivariabili di tipo diverso.
Esempio -> Area del cerchio
REGOLA
E’ sempre consigliabile dichiarare tutte le costanti e levariabili nella parte iniziale del programma (o della functionche le utilizza).
In questo modo chi legge il programma sa dove reperire leinformazioni 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 ba >= b restituisce true se a é maggiore o uguale a ba < b restituisce true se a é minore di ba <= b restituisce true se a é minore o uguale a ba == b restituisce true se a é uguale a ba != 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)
C espressioni relazionali
35
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 espressione2dove 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 .
Nell’esempio si suppone che le variabili assumono i seguenti valori:a=3 ; b=5 ; c1=’E’ ; c2=’G’ ;
< Minore di a<b 3<5 Vero
<= Minore o uguale di a+3<=b 6<=5 Falso
== Uguale a c1==c2 ‘E’==’G’ Falso
!= Diverso da c1!=c2 ‘E’!=’G’ Vero
>= Maggiore o uguale di ‘a’>=c1 ‘a’>=’E’ Vero
> Maggiore di a>b+2 3>7 Falso
Operatore relazionale
Espressioni booleane semplici
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.
Si trovi il MCD tra i numeri 10881 e 1488
Algoritmo per il Massimo Comun Divisore (Euclide)
• 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
39
1. Leggi A2. Leggi B
3. Se A>BDividendo=ADivisore=B
AltrimentiDividendo=BDivisore=A
4. Resto=Dividendo%Divisore
5. Mentre Resto>0 esegui le seguenti istruzioniDividendo=DivisoreDivisore=RestoResto=Dividendo%Divisore
6. Stampa Divisore (una volta che il quoziente è 0 il divisore prende il valore del MCD)
40
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.
Top Related