Elementi di Programmazione - ingaero.uniroma1.it · Esempi di algoritmi . 19 ... • Grandezze:...

66
Metodi Numerici con elementi di Programmazione A.A. 2018-2019 Elementi di Programmazione Nozioni Introduttive 1

Transcript of Elementi di Programmazione - ingaero.uniroma1.it · Esempi di algoritmi . 19 ... • Grandezze:...

Metodi Numerici con elementi di Programmazione

A.A. 2018-2019

Elementi di Programmazione Nozioni Introduttive

1

2

Docente: Vittoria Bruni Email: [email protected] Ufficio: Via A. Scarpa, Pal. RM002, I piano, Stanza n. 16 Tel. 06 49766648 Ricevimento Provvisorio: Consultare la sezione Avvisi sulla pagina web dedicata al corso

3

Obiettivi del corso

Fornire una panoramica dei metodi numerici fondamentali per la soluzione di

alcuni problemi di maggior interesse nel settore dell’ingegneria e di alcune

tecniche fondamentali della programmazione

Sviluppo di algoritmi risolutivi e relativa implementazione in un ambiente

di calcolo integrato

Risultati

- individuare un metodo numerico adatto a risolvere alcuni problemi test

- analizzarne e formularne la soluzione in modo algoritmico

- implementare tali algoritmi in Matlab

4

Programma sintetico 1. Nozioni introduttive dell’analisi numerica, classificazione degli errori,

condizionamento, stabilità 2. Nozioni di base dei calcolatori e della programmazione 3. Introduzione alla programmazione in Matlab: tipi di dato primitivi,

variabili, espressioni e assegnazioni, array e matrici, funzioni e script; istruzioni condizionali e espressioni booleane, cicli;

4. Soluzione di equazioni e sistemi di equazioni non lineari; errore di troncamento, convergenza dei metodi, velocità di convergenza

5. Soluzione di sistemi di equazioni lineari: metodi diretti e iterativi 6. Metodi numerici per la soluzione di problemi a valori iniziali; errore di

troncamento locale, errore globale, consistenza e stabilità; convergenza dei metodi

7. Metodi alle differenze finite per problemi ai limiti; convergenza, stabilità e consistenza

8. Approssimazioni di dati e funzioni; stima dell’errore di troncamento e di propagazione; convergenza del polinomio interpolatore

9. Integrazione numerica; stima del resto, convergenza delle formule di quadratura

5

Testi consigliati: Calcolo Numerico, L. Gori, Ed. Kappa, 2006 Esercizi di Calcolo Numerico, L. Gori-M.L. Lo Cascio, F. Pitolli, Ed. Kappa, 2007 Per consultazione: A. Quarteroni, F. Saleri, Calcolo scientifico, Springer, 2008 Il materiale didattico sarà disponibile sul sito http://ingaero.uniroma1.it/ nella pagina dedicata al corso Metodi Numerici con Elementi di Programmazione E’ disponibile la Licenza Campus per Matlab: consultare il sito http://campus3.uniroma1.it/campus/matlabcampus.php oppure seguire le istruzioni pubblicate nella sezione Materiale didattico della pagina web dedicata ala corso

6

Per risolvere numericamente un problema è necessario 1. Comprendere il problema da risolvere

2. Costruire un algoritmo stabile, robusto ed efficace

3. Conoscere lo strumento computazionale utilizzato (per es. il calcolatore elettronico)

7

La nascita del computer digitale tra gli anni ‘40 e ‘50 ha notevolmente accelerato lo sviluppo di algoritmi capaci di sfruttare la potenza di calcolo dei processori che cresce in accordo con la legge di Moore (1965) : «il numero di transistor nei circuiti integrati cresce esponenzialmente nel tempo»

Microprocessore Anno n. transistor

4004 1971 2300

8008 1972 2500

8080 1974 4500

8086 1978 29000

Intel286 1982 134000

Intel386 1985 275000

Intel486 1989 1200000

Intel Pentium 1993 3100000

Intel Pentium II 1997 7500000

Intel Pentium III 1999 9500000

Intel Pentium 4 2000 42000000

Intel Itanium 2001 125000000

Intel Itanium 2 2003 220000000

Intel Itanium 2 (9Mb

Cache)

2004 592000000

8

Il computer è diventato uno strumento di calcolo molto potente che ha favorito lo sviluppo di metodi numerici e algoritmi sempre più sofisticati e

potenti in grado di affrontare problemi complessi

SOLUZIONE Metodi elaborati e complicati per

rendere il problema trattabile

SOLUZIONE Metodi (anche elaborati e complicati)

facili da usare

Formulazione del problema

Prima Dopo

INTERPRETAZIONE Analisi approfondita limitata da

soluzioni troppo costose (in termini di tempo di calcolo)

INTERPRETAZIONE La facilità di calcolo favorisce: - sviluppo e verifica di intuizioni - simulazioni - studio della sensibilità del sistema

9

Linearità (permette soluzioni analitiche)

Sistemi a piccola scala

Leggi ideali

Analisi limitata dalle risorse di calcolo

Non linearità

Sistemi a larga scala (sistemi multicomponenti)

Leggi non ideali

(sono più realistiche ma computazionalmente più onerose)

Facilità di

• valutare come il sistema risponde a differenti condizioni

• determinare i parametri necessari per ottenere certe performance

Prima Dopo

10

Il Computer è un dispositivo elettronico che elabora le informazioni in forma di dati numerici secondo una sequenza di

istruzioni preordinate (programma) Per questo è detto anche

elaboratore elettronico digitale

Memorizza e elabora dati eseguendo operazioni logico-

aritmetiche

Utilizza componenti elettroniche

I dati sono sequenze di cifre binarie (0/1)

11

Il Computer si compone di tre unità principali

Processore Memoria Dispositivi di input/output

periferiche Cache CPU interfacce

principale secondaria

12

«I computer sono incredibilmente veloci, accurati e stupidi Gli uomini sono incredibilmente lenti, inaccurati e intelligenti

L’insieme dei due costituisce una forza incalcolabile» (A. Einstein)

Hardware = insieme delle componenti elettroniche e dei dispositivi fisici che compongono il computer

Software = insieme delle istruzioni (programmi) che consentono allo hardware di svolgere le proprie funzioni

13

Il Sistema operativo è l’insieme dei programmi essenziali per il funzionamento del computer

Permette di rendere fruibili le risorse del computer

Rende il computer user-friendy nascondendo i dettagli relativi alla gestione delle risorse del sistema

14

Risolvere un problema con il calcolatore

• Descrivere il

problema

• Individuare le

informazioni e i

dati noti (input) e i

risultati desiderati

(output)

• Individuare

un metodo

risolutivo

adeguato

• Scomporre il

procedimento in

una sequenza di

azioni elementari e

univoche

(algoritmo)

• Scrivere un programma:

esprimere le istruzioni con un

opportuno formalismo

(linguaggio di programmazione)

comprensibile all’ elaboratore

15

Risolvere un problema con il calcolatore

Problema

Algoritmo

Programma Dati di input Dati di output

16

La programmazione è l’attività con cui si predispone l’elaboratore ad eseguire un insieme di azioni elementari su un insieme di dati di

ingresso al fine di risolvere un certo problema (la soluzione è data in forma di dati di output)

Il programma è quindi la formulazione testuale di un algoritmo in un

linguaggio di programmazione

L’ algoritmo è un insieme finito di istruzioni elementari univocamente interpretabili che, eseguite in un ordine stabilito,

forniscono la soluzione ad un problema in un numero finito di passi

Alcune definizioni

17

• Eseguibilità: ogni istruzione deve poter essere eseguita dalla macchina

• Non ambiguità: ogni azione deve essere univocamente interpretabile

• Finitezza: il numero totale di azioni da eseguire per ogni insieme di dati deve essere finito

Proprietà di un algoritmo

18

Problema: si vuole trasportare un lupo, una capra e un cavolo da una sponda all’altra di un fiume senza «perdere i passeggeri» Algoritmo: 1. Trasporta la capra sull’altra sponda 2. Torna indietro 3. Trasporta il cavolo sull’altra sponda 4. Torna indietro portando anche la capra 5. Lascia la capra e Trasporta il lupo sull’altra sponda 6. Torna indietro 7. Trasporta la capra sull’altra sponda

Esempi di algoritmi

19

Problema: si vuole calcolare il massimo tra due numeri a e b e assegnarlo alla variabile m Algoritmo: 1. Leggi il valore di a e b 2. Se a > b allora poni m=a altrimenti poni m=b 3. Output: m

Esempi di algoritmi

20

Problema: moltiplica per 2 ogni elemento di un insieme L Algoritmo: 1. Leggi L 2. Per ogni elemento k dell’insieme L, poni k=2*k 3. Output: L

Esempi di algoritmi

21

Problema: si vuole calcolare il massimo di un insieme L di numeri e assegnarlo alla variabile m Algoritmo: 1. Leggi L 2. Seleziona il primo elemento dell’insieme L e ponilo in m 3. Per ogni elemento k dell’insieme, se k > m allora poni m=k 4. Output: m

Esempi di algoritmi

22

Ogni algoritmo è una combinazione di strutture Ogni struttura ha un unico punto di ingresso e un unico punto di uscita TEOREMA DI BOEHM-JACOPINI: Un qualunque algoritmo può essere descritto unicamente attraverso le tre strutture: • Sequenza • Diramazione • Ciclo o Iterazione

Teorema di Boehm-Jacopini

23

Sequenza: costituita da istruzioni di lettura e scrittura, istruzioni di assegnazione (leggi, scrivi, assegna,…) Diramazione: permette di eseguire certe istruzioni al verificarsi di una certa condizione; oppure di eseguire certe istruzioni al verificarsi di una certa condizione ed altre istruzioni se non si verifica (Se …. Allora …. Altrimenti) Ciclo: è una struttura che permette di ripetere una o più operazioni in sequenza per un numero finito di volte. La ripetizione del gruppo di istruzioni soggette alla iterazione (o ciclo) è soggetta al verificarsi di una certa condizione ed il controllo su di essa può essere in testa alla struttura oppure in coda alla stessa (Per ogni elemento fai/esegui…. Finché…. esegui…)

Teorema di Boehm-Jacopini

24

Stabilire se un numero N è un quadrato perfetto INIZIO Leggi il numero N Calcola la radice quadrata di N e assegna a Q il risultato Calcola la parte intera di Q e assegna a Y il risultato Se Y2 = N allora visualizza il messaggio ‘N è un quadrato perfetto’ altrimenti visualizza il messaggio ‘N non è un quadrato perfetto’ FINE Nota: sono state usate sequenze e diramazioni

Esempio 1

Altra proposta di soluzione?

25

Si consideri la successione definita come segue xn = a xn-1, n0 con a parametro reale. Stampare 100 elementi della successione con x0 valore assegnato INIZIO Leggi x0, a Esegui 100 volte le seguenti istruzioni Calcola il prodotto a⋅x0 e assegna a x1 il risultato Stampa x1

Assegna a x0 il valore di x1 FINE

Esempio 2

Nota: sono state usate sequenze e ripetizioni

26

Si consideri la successione definita come segue xn = a xn-1, n0 con a parametro reale assegnato. Assegnati x0 e M, se a<1, stampare gli elementi della successione tali che xn>aMx0; se a>1, stampare gli elementi della successione tali che xn<aMx0; se a=1, stampare il messaggio ‘la successione ha tutti gli elementi uguali a x0’

Esercizio

27

Esercizio Soluzione: INIZIO Leggi a x0,M Se a < 1 poni x1=ax0

finché x1>aM x0

stampa x1 poni x1=ax1

altrimenti se a<1 poni x1=ax0

finché x1<aM x0

stampa x1 poni x1=ax1

altrimenti stampa ‘la successione ha tutti gli elementi uguali a x0’ FINE

28

Esercizio Soluzione:

Altra proposta di soluzione?

29

Rappresentazione grafica dell’algoritmo • descrive le azioni da eseguire e il loro ordine di esecuzione • è un linguaggio universale • si basa su pochi simboli:

o ogni azione elementare corrisponde a un simbolo grafico (blocco) diverso

o ogni blocco ha un ramo in ingresso e uno o più in uscita • i dati di ingresso, i risultati finali e temporanei sono rappresentati

attraverso nomi simbolici (variabili)

Un diagramma di flusso appare come un insieme di blocchi di forme diverse che contengono le istruzioni da eseguire, collegati fra loro da linee orientate che specificano la sequenza in cui i blocchi devono essere eseguiti

Diagramma di flusso

30

In un diagramma di flusso possono comparire • Valori: numerici: interi e reali alfanumerici (stringhe): ababab, pluto, m1 logici: Vero, Falso • Grandezze: Costanti: quantità note a priori e fisse • Variabili: nomi simbolici a cui è assegnato un valore che può cambiare durante l’esecuzione • Espressioni: Sequenze di variabili e costanti combinate fra loro mediante operatori (es. operatori aritmetici:+,-,*,/, relazionali: >,>, =; logici: and,or, not) secondo un ordine prestabilito da regole di precedenza (parentesi)

Contenuto del diagramma di flusso

31

Un diagramma di flusso deve sempre avere un inizio ed una fine Tra l’inizio e la fine deve esserci almeno un’ istruzione

Diagramma di flusso: blocchi

start: blocco da cui inizia l’esecuzione stop: blocco che termina l’esecuzione

start

stop

32

Lettura dei dati di Ingresso L’unità di ingresso (per es. la tastiera) invia tanti valori quante sono le variabili specificate all’interno del blocco; I valori ricevuti sono assegnati alle variabili a, b, c rispettivamente

Diagramma di flusso: blocchi

a,b,c

33

Trasmissione dati in uscita Si trasmettono i dati di output contenuti nelle variabili x,y,z all’ unità di uscita (per es. monitor)

Diagramma di flusso: blocchi

x,y,z

34

Assegnazione Assegna alla variabile x il prodotto dei valori delle variabili a e b

Diagramma di flusso: blocchi

x=a*b

35

Calcolare il perimetro p del quadrato di lato l

Esempio

p=4*l

start

stop

l

p

INIZIO Leggi l Poni p = 4 l Stampa p

FINE

36

Istruzioni condizionali Valuta la condizione E specificata all’interno del blocco: se E è verificata, si prosegue con la linea di flusso etichettata con SI, altrimenti si prosegue per il ramo etichettato con NO E è un’ espressione relazionale o logica il cui output è VERO oppure FALSO

Diagramma di flusso: blocchi

E NO SI

37

Calcolare il massimo tra i due numeri a e b

Esempio

m=a

start

stop

a,b

m

a>b NO SI

m=b

38

Iterazione o ripetizione Ripete un blocco di istruzioni più volte (ciclo o loop)

Diagramma di flusso: blocchi

Istr 1

Istr 2

Istr n

Blocco di istruzioni

Iterazione o ripetizione Ripete un blocco (sequenza) di istruzioni più volte in base ad una certa condizione: • Un blocco può essere eseguito fintanto che è verificata una certa

condizione E il ciclo si interrompe non appena la condizione diventa falsa (ciclo a ingresso controllato)

Oss: se la condizione allo stato iniziale è falsa il blocco di istruzioni non viene mai eseguito

39

Diagramma di flusso: blocchi

E NO

SI

Blocco di istruzioni

Iterazione o ripetizione Esempio: Sia v un insieme (vettore) ordinato di numeri. Determinare l’indice di posizione più grande contenente un numero <5

40

Diagramma di flusso: blocchi

stop

v(i)<5 NO

SI i=i+1

start

v

i=0

SI

i

i=i-1

41

Iterazione o ripetizione Ripete un blocco (sequenza) di istruzioni più volte in base ad una certa condizione: • Un blocco può essere eseguito fino a quando non si verifica una certa

condizione E il ciclo si interrompe non appena la condizione diventa falsa (ciclo a uscita controllata)

Oss: il blocco di istruzioni è eseguito almento una volta

Diagramma di flusso: blocchi

E

NO

SI

Blocco di istruzioni

42

Iterazione o ripetizione Esempio: Sia v un insieme (vettore) ordinato di numeri. Determinare l’indice di posizione più grande contenente un numero <5

Diagramma di flusso: blocchi

stop

v(i)<5 SI

NO

i=i+1

start

v

i=-1

i

i=i-1

43

Iterazione o ripetizione Se si conosce il numero di volte (numero di iterazioni) che va eseguito il blocco (sequenza) di istruzioni : • Si introduce contatore che conta il numero di iterazioni da eseguire Il contatore è una variabile (cont) che, partendo da un valore iniziale (v_in), incrementa (h) il suo valore fino a raggiungere un valore finale (v_fin) --- (ciclo enumerativo) . Oss: si può ricondurre ad una delle due forme precedenti Esempio: • Leggi v_in, v_fin, h • Assegna a cont il valore di v_in • Finchè cont <= vfin, esegui le seguenti istruzioni blocco di istruzioni assegna a cont il valore cont+h

Diagramma di flusso: blocchi

44

Iterazione o ripetizione Esempio: Scrivere i primi 10 numeri naturali >0

Diagramma di flusso: blocchi

stop

cont≤10 NO

SI cont=cont+1

start

cont=1

SI

Stampa cont

45

Scrivere un algoritmo e il relativo diagramma di flusso per risolvere i seguenti problemi: 1. Risolvere l’ equazione lineare di primo grado ax-b=0 2. Calcolare le radici di una equazione di secondo grado 3. Calcolare il fattoriale di un numero intero n 4. Approssimare il valore di ex in un punto x0 con i primi n termini dello

sviluppo in serie di Mac Laurin 5. Stabilire se un numero x è intero 6. Convertire un numero intero x dalla base 10 alla base 2 7. Scomporre un numero x in parte intera e parte frazionaria 8. Convertire un numero decimale x dalla base 10 alla base 2 9. Trovare gli elementi maggiori di zero di un insieme ordinato di numeri 10. Trovare gli elementi maggiori di zero di un insieme non ordinato di numeri 11. Calcolare la media aritmetica degli elementi di un vettore di numeri 12. Calcolare la media aritmetica degli elementi di una matrice di numeri

Esercizi

46

• Risolvere l’ equazione lineare di primo grado ax-b=0

Start

1. Leggi a e b

2. Se a0 allora poni x=b/a

output: x

altrimenti se b 0 allora stampa ‘equazione impossibile’

altrimenti stampa ‘equazione indeterminata’

Stop

Esercizi

47

• Risolvere l’ equazione lineare di primo grado ax-b=0

Esercizi

stop

a0

NO

SI

x=b/a

start

SI

a,b

x

b0

Equazione

impossibile Equazione

indeterminata

NO

48

• Calcolare le radici dell’ equazione di secondo grado ax2+bx+c=0

Start

Leggi a, b e c

Se a=0 allora stampa ‘equazione di primo grado’

altrimenti poni D = b⋅b-4 ⋅ a ⋅ c

se D < 0 allora stampa ‘non esistono radici reali’

altrimenti se D=0 allora poni x1=-b/(2 ⋅ a)

Output: x1

altrimenti poni x1=(-b-sqrt(D))/(2 ⋅ a)

poni x2=(-b+sqrt(D))/(2 ⋅ a)

Output: x1, x2

Stop

Esercizi

49

Calcolare le radici della

equazione di secondo

grado ax2+bx+c=0

Esercizi

stop

D=0

x1,x2 x1

SI

a=0

NO

NO

start

SI

a,b,c

Equazione di

primo grado

D=bb-4ac

x1=-b/(2a) x2=(-b+sqrt(D))/(2a)

x1=(-b-sqrt(D))/(2a)

D<0 Non ci sono

radici reali

SI

NO

50

Calcolare il fattoriale di un numero intero n

Start

Leggi n

Poni f = 1

Finché n1 esegui le seguenti istruzioni

poni f = f ⋅ n

poni n = n-1

Output: f

Stop

Esercizi

Esercizi: - disegnare il diagramma a blocchi - aggiungere un controllo sulla variabile di input per gestire il caso n numero negativo

51

Approssimare il valore di ex in un punto x0 con i primi n termini dello sviluppo in

serie di Mac Laurin

Start

1. Leggi n e x0

2. Se n>0 allora

poni T=1

poni i =1

Finché i<n esegui le seguenti istruzioni

calcola il fattoriale di i e assegna ad f il risultato

assegna a T il valore T+x0i / f

incrementa i di una unità

Output T

altrimenti stampa il messaggio ‘n deve essere un numero positivo’

Output: f

Stop

Esercizi

Esercizi:

- disegnare il diagramma a blocchi

- generalizzare al caso di sviluppo in serie di Taylor attorno ad

un punto y assegnato

52

Esercizio

Usando il diagramma di flusso dato,

stabilire cosa rappresenta la variabile

app_val

stop

NO

SI

new_s=new_s+term

app_val

app_val=new_s

|new_s- old_s|>eps

term=term⋅x/n

start

term=1

n=n+1

x,eps

old_s=0

new_s=1

n=0

old_s=new_s

53

Due algoritmi sono equivalenti se: • hanno le stesse variabili di input • hanno le stesse variabili di output • in corrispondenza degli stessi valori delle variabili di input producono gli stessi valori delle variabili di output Algoritmi equivalenti: • possono avere differente efficienza (velocità e risparmio di risorse) • possono essere profondamente diversi Osservazioni: • Un algoritmo semplice può essere meno efficace, soprattutto in termini di

velocità • La semplicità può facilitare la comprensione e la correzione • Non necessariamente un algoritmo “furbo” è più efficiente o affidabile

Algoritmi equivalenti

54

Esempio: Calcolo del Massimo Comun Divisore fra p e q

Algoritmo 1

• Calcola l’insieme A dei divisori di p

• Calcola l’insieme B dei divisori di q

• Calcola l’insieme dei divisori comuni C=(A B)

• Calcola il massimo m in C

• mcd = m

Algoritmo 2: metodo di Euclide

MCD(p,q)=p (oppure q) se p=q

MCD(p-q,q) se p > q

MCD(p,q-p) se p < q

Algoritmo MCD:

• Finchè p è diverso da q esegui le seguenti istruzioni:

se p > q sostituisci a p il valore (p-q)

altrimenti sostituisci a q il valore (q-p)

• mcd = p

Algoritmi equivalenti

55

Esempio: Disegnare il diagramma di flusso degli Algoritmi 1 e 2 per il calcolo del

MCD di due numeri p e q

Esercizi

55

stop

p=q

NO

SI

mcd=p

start

SI

p,q

p

p>q

NO p=p-q

q=q-p

Algoritmo2

56

Linguaggi di programmazione

La programmazione è l’attività con cui si predispone l’elaboratore ad eseguire un insieme di azioni elementari su un insieme di dati di

ingresso al fine di risolvere un certo problema (la soluzione è data in forma di dati di output)

Il programma è quindi la formulazione testuale di un algoritmo in un

linguaggio di programmazione

L’ algoritmo è un insieme finito di istruzioni elementari univocamente interpretabili che, eseguite in un ordine stabilito,

forniscono la soluzione ad un problema in un numero finito di passi

57

Linguaggi di programmazione

Un linguaggio di programmazione è un linguaggio formale costituito da simboli (alfabeto), combinati in sequenze in base a regole precise

(sintassi) e a cui viene associato un determinato significato (semantica)

• Con il termine sintassi si intende l’insieme delle regole che consentono di

legare gli elementi lessicali (parole, simboli, punteggiatura, etc.) in modo da comporre enunciati dotati di senso nell’ambito del linguaggio

• Le regole sintattiche (o grammaticali) si propongono di collegare gli enunciati semplici producendo enunciati composti

• La semantica disciplina il significato da attribuire alle costruzioni linguistiche

58

Linguaggi di programmazione

Esistono diverse famiglie di linguaggi di programmazione:

• Linguaggi assembler

• Linguaggi funzionali

• Linguaggi imperativi (BASIC)

• Linguaggi a oggetti (Java) etc…

59

Linguaggi di programmazione

• Primi calcolatori (anni ‘40): istruiti ad eseguire una certa azione, utilizzando un codice costituito solo dalle cifre binarie (bit) 0 e 1

I linguaggi consentono di descrivere le operazioni da far compiere al calcolatore in maniera più semplice • Linguaggi di tipo assembler (assemblatori): basati su semplici forme

mnemoniche che attribuiscono una sequenza di caratteri al codice operativo in linguaggio macchina

• Linguaggi di programmazione ad alto livello (Fortran, C/C++, Basic, Pascal, ….): evoluti in direzione dell’utente con la definizione di standard in modo che un programma potesse essere eseguito su diversi tipi di calcolatore senza cambiamenti significativi

60

Linguaggi di programmazione

Ma la macchina utilizza esclusivamente l’alfabeto binario! E’ necessaria un’operazione di traduzione dal codice scritto secondo un linguaggio di programmazione (codice sorgente) al codice comprensibile dal calcolatore (codice oggetto) Tale operazione è effettuata per mediante opportuni programmi, detti traduttori I traduttori si dividono in due categorie: • compilatori: la traduzione viene eseguita una volta sola ed è

permanente --- si produce il codice oggetto (file eseguibile) da cui non è facile risalire al codice sorgente

• interpreti: la traduzione è necessaria ogni volta che intendiamo usare un programma

61

Linguaggi di programmazione

I traduttori controllano la sintassi e consentono di correggere eventuali errori di programmazione La traduzione può comportare un rallentamento nell’esecuzione del programma Il compilatore e/o l’interprete possono cambiare da computer a computer, il programma non cambia

62

Variabili

I calcolatori utilizzano esclusivamente numeri, mentre il linguaggio gestisce più facilmente i nomi I linguaggi di programmazione permettono di fare riferimento ai dati utilizzando dei nomi, detti variabili Una variabile è un contenitore etichettato da un nome e caratterizzato da un contenuto Il contenuto di una variabile può cambiare !

pluto

63

Variabili

Il contenuto di una variabile può cambiare a seguito di una assegnazione

pluto

pluto

il contenuto della variabile

è il numero decimale 5.7

pluto := 5.7 5.7

il contenitore è vuoto

pluto

pluto := 5.7*5

il contenuto della

variabile ora è il

numero decimale 38.5

38.5

64

Variabili e Tipi di dato

Il contenuto di una variabile in un calcolatore è una sequenza di bit

è necessario determinare quale valore contiene la variabile (interpretare la sequenza di bit)

I linguaggi di programmazione associano ad ogni variabile informazioni anche sul tipo di valore che essa contiene

L’attribuzione di un significato particolare alla sequenza binaria è fatto

attraverso il concetto di tipo di dato

65

Variabili e Tipi di dato

Un insieme minimo di tipi di dato può essere composto da: • numeri interi • numeri in virgola mobile • caratteri

Una stringa è rappresentabile come una sequenza di caratteri E’ possibile convertire un dato da un tipo ad un altro Nei linguaggi di programmazione ad alto livello esistono tipi di dato predefiniti Nei linguaggi di programmazione ad alto livello è possibile definire tipi di dato per rappresentare informazioni specifiche per una data applicazione

66

Variabili e Tipi di dato: vettori

Un vettore è un insieme ordinato di variabili dello stesso tipo Ogni elemento del vettore è caratterizzato dalla posizione Esempio: v = [2, 14, 13, 44, 142, -2] v(3) = 13 v(6) = -2 Una matrice è un “vettore di vettori” Ogni elemento è caratterizzato dalla posizione: (indice riga, indice colonna) Si possono definire anche vettori n-dimensionali