Silvia Rossi - unina.it

40
Lezione n. Silvia Rossi 2 Informatica Programmazione I [email protected] C elementi di un programma

Transcript of Silvia Rossi - unina.it

Page 1: Silvia Rossi - unina.it

Lezione n.

Silvia Rossi

2

Informatica

Programmazione I

[email protected]

C elementi di un programma

Page 2: Silvia Rossi - unina.it

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

Page 3: Silvia Rossi - unina.it

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.

Page 4: Silvia Rossi - unina.it

4

PROGRAMMA SORGENTE

Programma scritto in un linguaggio di alto livello

PROGRAMMA OGGETTO

Risultato della compilazione di un programma sorgente

Programma

Page 5: Silvia Rossi - unina.it

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

Page 6: Silvia Rossi - unina.it

…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

Page 7: Silvia Rossi - unina.it

Ciclo di vita di un programma

7

Problema

Programma

Algoritmo di risoluzione

Page 8: Silvia Rossi - unina.it

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

Page 9: Silvia Rossi - unina.it

C ambiente di sviluppo

Tra i tanti ambienti di sviluppo C utilizzeremo NetBeans/Eclipse

Page 10: Silvia Rossi - unina.it

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;

}

Page 11: Silvia Rossi - unina.it

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;

}

Page 12: Silvia Rossi - unina.it

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

Page 13: Silvia Rossi - unina.it

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

Page 14: Silvia Rossi - unina.it

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

Page 15: Silvia Rossi - unina.it

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

Page 16: Silvia Rossi - unina.it

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

Page 17: Silvia Rossi - unina.it

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])

Page 18: Silvia Rossi - unina.it

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

Page 19: Silvia Rossi - unina.it

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

Page 20: Silvia Rossi - unina.it

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

Page 21: Silvia Rossi - unina.it

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;

Page 22: Silvia Rossi - unina.it

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

Page 23: Silvia Rossi - unina.it

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

Page 24: Silvia Rossi - unina.it

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

Page 25: Silvia Rossi - unina.it

25

C espressioni

Gli operatori possono essere– di assegnazione– aritmetici – binari– relazionali – logici– incremento e decremento– condizionali

Page 26: Silvia Rossi - unina.it

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

Page 27: Silvia Rossi - unina.it

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

Page 28: Silvia Rossi - unina.it

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

Page 29: Silvia Rossi - unina.it

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.

Page 30: Silvia Rossi - unina.it

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).

Page 31: Silvia Rossi - unina.it

REGOLA

Non adoperare espressioni in cui sono presentivariabili di tipo diverso.

Page 32: Silvia Rossi - unina.it

Esempio -> Area del cerchio

Page 33: Silvia Rossi - unina.it

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.

Page 34: Silvia Rossi - unina.it

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

Page 35: Silvia Rossi - unina.it

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

Page 36: Silvia Rossi - unina.it

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

Page 37: Silvia Rossi - unina.it

Esercizi

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

Page 38: Silvia Rossi - unina.it

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

Page 39: Silvia Rossi - unina.it

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)

Page 40: Silvia Rossi - unina.it

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.