Terza Lezione Introduzione alla programmazione lll.

52
Terza Lezione Introduzione alla programmazione lll

Transcript of Terza Lezione Introduzione alla programmazione lll.

Page 1: Terza Lezione Introduzione alla programmazione lll.

Terza Lezione

Introduzione alla programmazione lll

Page 2: Terza Lezione Introduzione alla programmazione lll.

Schema di iterazione

Schema di iterazione (ciclo o loop) Modo conciso per descrivere azioni che devono

essere ripetute

Sub()

C

S

End Sub

Sub()

C

S

End Sub

falsofalsovero

vero

Page 3: Terza Lezione Introduzione alla programmazione lll.

Schema di iterazione Nota:1. I due schemi non sono equivalenti: in un

caso lo schema S è eseguito almeno una volta e nell’altro potrebbe non essere mai eseguito

2. La condizione vero/falso può essere invertita: si parla di iterazione per vero quando S è eseguito finché la condizione su C è vera e iterazione per falso nell’altro caso

Page 4: Terza Lezione Introduzione alla programmazione lll.

Note sullo schema di iterazione

Quando è necessario eseguire lo stesso insieme di operazioni più volte si adotta un particolare schema di iterazione: una sequenza di azioni di assegnazione

dette istruzioni di inizializzazione Una iterazione (ripetizione) di una sequenza

di azioni (iterazione) per un numero specificato di volte

Page 5: Terza Lezione Introduzione alla programmazione lll.

Note sullo schema di iterazione

Inizializzazione

Iterazione

Inizializzazione

IterazioneCondizionedi fine ciclo

Condizionedi fine ciclo

vero

vero

falso

falso

Page 6: Terza Lezione Introduzione alla programmazione lll.

Uscita dal ciclo

La condizione di fine ciclo viene controllata dopo l’esecuzione di ogni blocco di iterazione

Può essere con controllo in coda al ciclo o con controllo in testa

Page 7: Terza Lezione Introduzione alla programmazione lll.

Ciclo enumerativo Un ciclo è detto enumerativo quando è noto

a priori il numero di volte che deve essere eseguito Si usa la tecnica del contatore per controllarne

l’esecuzione, si usa cioè una variabile detta contatore del ciclo che viene inizializzata opportunamente prima di iniziare il ciclo e poi viene incrementata (o decrementata) fino a raggiungere un valore prefissato, permettendo così di eseguire una iterazione un numero specificato di volte

Page 8: Terza Lezione Introduzione alla programmazione lll.

Ciclo indefinito Un ciclo è detto indefinito quando non è

noto a priori il numero di volte che deve essere eseguito Questo accade quando la condizione di fine

ciclo dipende dal valore di una o più variabili che o dipendono dall’interazione con l’esterno o vengono modificate all’interno dell’iterazione in modo complesso

Page 9: Terza Lezione Introduzione alla programmazione lll.

Esempio: Diagramma di flusso

Assegna ad a,b,c ivalori d’ingresso

Metti il valori dib2-4ac in delta

Inizio: ingressi 1,2,1

delta<0? delta=0?

MESSAGGIO:“nessuna soluzione”

MESSAGGIO:“radici coincidenti=”

-b/2a

MESSAGGIO:“radici distinte=”

(-b-radice(delta))/2a(-b-radice(delta))/2a

Fine

vero vero

falso falso

RADICIRADICI:Diagramma di Flusso a : float

1

b : float

2

c : float

1

delta : float

0

MESSAGGIO:radici coincidenti = -1

Stato della memoriaStato della memoria

Page 10: Terza Lezione Introduzione alla programmazione lll.

Esercizi

Ricerca di un elemento in un vettore Media di un vettore

Page 11: Terza Lezione Introduzione alla programmazione lll.

Soluzione: Trova

i=0

Sub()

V(i)=k

i=100

insuccesso

end

i=i+1

successo

Page 12: Terza Lezione Introduzione alla programmazione lll.

I programmi Per fare sì che un algoritmo sia effettivamente

utilizzabile da un esecutore automatico occorre eliminare le ambiguità circa la codifica dei dati e l’interazione con gli esseri umani

In generale durante la stesura di un programma ci si deve preoccupare dei limiti nell’intervallo di rappresentazione dei numeri, della durata non nulla delle operazioni, ecc.

La soluzione integrata di queste problematiche e di quelle dell’algoritmo in sé risulta complessa e richiede alta competenza

Page 13: Terza Lezione Introduzione alla programmazione lll.

D. Il programma

Disegnato il diagramma di flusso e quindi delineato in tutte le sue parti l’algoritmo non resta che tradurlo in un programma che il calcolatore sarà in grado di eseguire

Il programma verrà scritto usando un linguaggio di programmazione (ad es. C, Java, Matlab, ecc.)

Page 14: Terza Lezione Introduzione alla programmazione lll.

Linguaggi di programmazione

Linguaggi di Basso Livello. Sono linguaggi di programmazione

caratterizzati da istruzioni molto elementari (ad es. l’Assembler). Richiedono uno sforzo di codifica maggiore da parte del programmatore.

Linguaggi di Alto Livello. Sono linguaggi di programmazione in cui ad

ogni istruzione corrisponde un insieme di azioni più articolato. Richiedono uno sforzo di codifica inferiore.

Page 15: Terza Lezione Introduzione alla programmazione lll.

Esempio Il linguaggio L1 mette a disposizione i comandi:

Aggiungi_una_unità_al_dato_A Leggi_dato_A Leggi_dato_B Esegui_per <numero di volte>

Il linguaggio L2 mette a disposizione i comandi: Leggi_dato_A Leggi_dato_B Somma <addendo, addendo2>

Page 16: Terza Lezione Introduzione alla programmazione lll.

Esempio (segue) Vogliamo scrivere un programma per la somma di

due numeri memorizzati rispettivamente nei registri A e B.

L2 è un linguaggio di livello più alto rispetto a L1, perché offre al programmatore la possibilità di usare istruzioni che sono meno “vicine” al modo i cui lavora il processore.

In L1:

Leggi_dato_A

Leggi_dato_B

Esegui_per B volte:

Aggiungi_una_unità_al_dato_A

In L2:

Leggi_dato_A

Leggi_dato_B

Somma (A,B)

Page 17: Terza Lezione Introduzione alla programmazione lll.

Il linguaggio macchina

Il processore è in grado è in grado di riconoscere (e quindi di eseguire) solo programmi scritti in un proprio linguaggio di basso livello.

Ogni modello di processore (es: Intel, Pentium, Motorola, PowerPC) ha un proprio linguaggio macchina diverso da quello degli altri processori.

Un programma scritto in un linguaggio diverso dal linguaggio macchina deve essere quindi tradotto nel linguaggio che il processore sa individuare

Page 18: Terza Lezione Introduzione alla programmazione lll.

Linguaggi di programmazione

Invece di codificare algoritmi in linguaggi macchina si utilizzano linguaggi ad alto livello.

Le istruzioni dei linguaggi ad alto livello sono facilmente comprensibili ai programmatori.

Compilatore: (programma che) traduce automaticamente un programma ad alto livello in linguaggio macchina.

Page 19: Terza Lezione Introduzione alla programmazione lll.

Linguaggi di alto livello Per facilitare la stesura dei programmi sono

stati definiti linguaggi di programmazione di alto livello che permettono di descrivere le soluzioni dei

problemi ad un livello di astrazione di poco inferiore a quanto visto fino ad ora per gli algoritmi

permettono di descrivere le operazioni di ingresso/uscita

sono traducibili automaticamente in linguaggio macchina

Page 20: Terza Lezione Introduzione alla programmazione lll.

Diversità dei linguaggi Sono stati sviluppati diversi linguaggi

Fortran, Lisp, Cobol, Basic, Pascal, C, C++, Java, Prolog I linguaggi si caratterizzano per

sintassi: l’insieme delle regole che specificano come comporre istruzioni ben formate

semantica: l’insieme delle regole che specificano come associare ad una istruzione una azione da compiere

La diversità fra i vari linguaggi può consistere nella sintassi (le stesse azioni vengono descritte con termini diversi) o nella semantica

Page 21: Terza Lezione Introduzione alla programmazione lll.

L’arte della programmazione

La soluzione di un problema tramite un programma è un procedimento che non si esaurisce solo nello scrivere linee di codice in un dato linguaggio di programmazione, ma comprende una fase di progetto che precede e una di verifica che segue la scrittura del codice

Page 22: Terza Lezione Introduzione alla programmazione lll.

L’arte della programmazione

Definizione del problema Algoritmo per la soluzione del problema Codifica Debugging Validazione Documentazione Manutenzione

Page 23: Terza Lezione Introduzione alla programmazione lll.

Definizione del problema

Definizione degli ingressi e delle uscite quali variabili quale dominio per ogni variabile

Risoluzione delle ambiguità Scomposizione in problemi più semplici

Page 24: Terza Lezione Introduzione alla programmazione lll.

Algoritmo

Soluzione in pseudocodice Soluzione in diagramma a blocchi

strutturato

Page 25: Terza Lezione Introduzione alla programmazione lll.

Codifica

Traduzione dell’algoritmo in istruzioni del linguaggio di programmazione

Page 26: Terza Lezione Introduzione alla programmazione lll.

Debugging

Correzione degli errori sintattici e semantici:

Errori sintattici espressioni non valide o non ben formate

nel linguaggio di programmazione Errori semantici

Comportamento non aderente alle aspettative/alla intenzionalità del programmatore

Page 27: Terza Lezione Introduzione alla programmazione lll.

Validazione

Test su tutte le condizioni operative del programma

Caso degli input estremi (vettori di dimensioni 0 o 1, variabili nulle, file vuoti, ecc.)

Page 28: Terza Lezione Introduzione alla programmazione lll.

Documentazione

Inserimento di commenti esplicativi nelle varie parti del programma per facilitarne la comprensione dopo molto tempo dalla sua stesura per terze persone

Page 29: Terza Lezione Introduzione alla programmazione lll.

Manutenzione

Modifica del programma per soddisfare il cambiamento delle specifiche con cui deve operare

Page 30: Terza Lezione Introduzione alla programmazione lll.

Commenti

L’importanza dei commenti e della documentazione: i programmi possono essere utilizzati più

volte nel corso di tempi lunghi (mesi, anni) fare cambiamenti (aggiunta di caratteristiche) risolvere errori

documentare il programma serve per rendere chiaro ed evidente lo scopo delle varie parti del codice

Page 31: Terza Lezione Introduzione alla programmazione lll.

Scrittura del programma: nozione di variabile

Come si indirizzano le celle di memoria? Invece di usare gli indirizzi fisici si usano dei

nomi simbolici (es. x, y, nome, …) che vengono mappati n indirizzi fisici attraverso la fase di compilazione

Le variabili vanno dichiarate all’inizio del programma (celle diverse, nomi diversi)

ValoreValore di una variabile = contenuto contenuto corrente della cella di memoria associata alla variabile

Page 32: Terza Lezione Introduzione alla programmazione lll.

Scrittura del programma: nozione di costante

Per esprimere direttamente valori prefissati (cioè che non devono essere modificati dal programma) si utilizzano le costanti

Una costantecostante è una rappresentazione simbolica di un numero, stringa, ecc. (es. 1, “ciao”, 3.14, ecc.)

Il set di costanti disponibile dipende dal linguaggio di programmazione

Page 33: Terza Lezione Introduzione alla programmazione lll.

Scrittura del programma: espressioni

Le espressioni servono per rappresentare calcoli a livello simbolico

Un’espressioneespressione può coinvolgere nomi di variabili, costanti, operatori aritmetico-logici, ecc.

Es.3+4

x+y-1 (dove x è una variabile)

x>0 and y>1

Page 34: Terza Lezione Introduzione alla programmazione lll.

Programma VBA La sintassi di un programma consiste di due blocchi Dichiarazione di variabili e costanti:

Const pi As Single = 3,14, nome As String= “Beatrice” Dim x As Integer, y As String, z As Variant

Sono liste di dichiarazioni introdotte rispettivamente dalla keyword const e dim

Sequenza di istruzioni racchiusa tra le parole chiave Sub (nome()) … End SubSub (nome()) … End Sub e separate dal punto e virgola “;;”

Page 35: Terza Lezione Introduzione alla programmazione lll.

Esecuzione di un programma

Qual è il significato (semantica) di un programma? Trasformazione da Input iniziale a Output finale

Un programma deve essere eseguito per poter calcolare la trasformazione InputOutput

L’esecuzione modifica lo stato del programma. Si parla di stato iniziale, corrente e finalestato iniziale, corrente e finale

L’esecuzione dipende dalla semantica dei singoli costrutti

Page 36: Terza Lezione Introduzione alla programmazione lll.

Lettura e scrittura Le operazioni di lettura e scrittura servono

per ottenere valori in input (es. tastiera) o fornire valori in output (es. video)

Assumiamo che input e output siano sequenze di valori: write(Variabile)write(Variabile): aggiunge il valore corrente di

VariabileVariabile all’output read(Variabile)read(Variabile): toglie il primo valore della lista

input e lo assegna a VariabileVariabile

Page 37: Terza Lezione Introduzione alla programmazione lll.

Assegnamento Si utilizza per assegnare il valore correntecorrente di

un’espressione ad una variabile Variabile = Espressione

Se nello stato corrente Espressione si valuta in valval allora Variabile varrà valval dopo l’esecuzione dell’assegnamento

Es. x=x+1L’espressione x+1 va valutata nello stato corrente. Il risultato dell’espressione è assegnato nuovamente a x.

Page 38: Terza Lezione Introduzione alla programmazione lll.

Istruzione condizionale Sintassi:

If CondizioneCondizione Then Lista IstruzioniLista Istruzioni11Else Lista IstruzioniLista Istruzioni22End If

CondizioneCondizione = Espressione booleana

CondizioneCondizione

Lista Lista IstruzioniIstruzioni11

Lista Lista IstruzioniIstruzioni22

vero falso

Se la condizione si valuta verovero si esegue ilramo then, altrimentisi esegue il ramo else

Page 39: Terza Lezione Introduzione alla programmazione lll.

EsempiLeggi da tastieraLeggi da tastiera e e scrivi su videoscrivi su video::

Sub Es1()

Dim s As String

read(s)

write(s)

End Sub

Leggi due numeri, Leggi due numeri, sommali e stampa sommali e stampa il risultato:il risultato:Sub Es2()

Dim x As Integer, y As Integer, somma As integer

read(x)

read(y)

somma=x+y

write(somma)

End Sub

Trova il massimo Trova il massimo tra 2 numeri:tra 2 numeri:Sub Es3()

Dim x As Integer, y As Integer

read(x)

read(y)

If x>y Then

write(x)

Else write(y)

End If

End Sub

Page 40: Terza Lezione Introduzione alla programmazione lll.

Istruzione ciclica Sintassi:

Do While CondizioneCondizione Lista IstruzioniLista Istruzioni

Loop

Lista Istruzioni Lista Istruzioni viene eseguita fintantoché CondizioneCondizione si valuta in vero.vero.Quando CondizioneCondizione si valuta in falsofalso si passa all’istruzione seguente del programma.

CondizioneCondizione

Lista Lista IstruzioniIstruzioni

- Iterazione

vero

falso

Page 41: Terza Lezione Introduzione alla programmazione lll.

Esempio: somma di k numeri

Problema: leggere k e quindi calcolare la somma di k valori letti dall’input.

Memorizziamo k, la somma e i valori letti V1, V2, … ,Vk poiché si usa ogni Vi una sola volta, bastano 3 variabili: k, x ed S x manterrà il valore Vi corrente, S la somma progressiva

Sub Es4()Dimr k As Integer,x As Integer,S As Integer

read(k) S=0Do While k>0

read(x)S=S+x k=k-1

Loopwrite(S)

End Sub

Page 42: Terza Lezione Introduzione alla programmazione lll.

Esecuzione del while Inizialmente: val(x),val(k)=indefiniti, val(S)=0 Si legge il valore 3: val(k)=3 Poiché val(k)>0, si entra nel ciclo Si legge il primo valore in input V1 su cui fare la

somma e si memorizza in x Si calcola S=S+x e si decrementa k Quindi, dopo l’esecuzione delle istruzioni dentro il

ciclo, val(x)=3, val(S)=3, val(k)=2 Si prosegue con il ciclo fino a che val(k)=0 A questo punto si esce dal ciclo e si scrive il valore

finale di S

Page 43: Terza Lezione Introduzione alla programmazione lll.

Esempio: Calcolo MCD

Calcolare il massimo comun divisore tra due numeri interi letti da input, utilizzando l’algoritmo di Euclidealgoritmo di Euclide: mcd(m,n)=m=n se n=m mcd(m,n)=mcd(m-n,n) se m>n mcd(m,n)= mcd(m,n-m) se n>m

Page 44: Terza Lezione Introduzione alla programmazione lll.

Algoritmo di Euclide

Leggo m e n (*) Fino a che m diverso da n

se m>n allora sottraggo n ad m se n>m allora sottraggo m ad n torno a (*)

Quando m=n stampo, ad esempio, n

Page 45: Terza Lezione Introduzione alla programmazione lll.

Es. Calcolo MCDSub Es5()Dim m As Integer,n As Integer

read(m)read(n)Do While m<>n

If m>n Then m=m-n

Else n=n-m

End IfLoopwrite(n) (Nota: a questo punto n=m!)

End Sub

Page 46: Terza Lezione Introduzione alla programmazione lll.

Strutture dati complesse Oltre a variabili di tipo interointero, stringastringa, ecc.

può essere molto utile utilizzare dati strutturati (ad es. liste, insiemi, ecc.)

Molti linguaggi di programmazione forniscono vari tipi di dato, quali: array record list

Nel linguaggio didattico LPLP abbiamo solo arrayarray e recordrecord

Page 47: Terza Lezione Introduzione alla programmazione lll.

Array Un array (vettore) rappresenta una sequenza di

celle consecutive contenenti dati omogenei (es. interi)

Una variabile V di tipo array denota la sequenza di celle

Per accedere direttamente alla cella i-esima si utilizza il suo indice i come segue: V(i)

Sintassi dichiarazione: Dim NomeVarArray(N) NomeVarArray(N) As Integer (N costante)

Nelle espressioni, assegnamenti, ecc. si utilizza poi: NomeVarArrayNomeVarArray(Exp) dove Exp è un espressione che si

valuta in un valore da 0…N-1

Page 48: Terza Lezione Introduzione alla programmazione lll.

Esempio: ArrayLeggere k<=10 valori e Leggere k<=10 valori e stamparli in ordine inverso:stamparli in ordine inverso:

Dobbiamo leggere V1, … ,Vk, memorizzarli e poi stamparli in ordine Vk, … , V1.

Usiamo un array A di N>k posizioni per memorizzare i dati in input.Dopo aver memorizzato i dati, li scriviamo scorrendo l’array dall’indice k all’indice 1.

Sub

Dim A(10) As Integer

Dim i As Integer, k As Integer

read(k)

i=1

Do While i≤k

read(A(i))

i=i+1

Loop

i=k

Do While i>0

write(A(i))

i=i-1

Loop

End Sub

Page 49: Terza Lezione Introduzione alla programmazione lll.

Record Tipo di dato per gestire dati strutturati di tipo

eterogeneo; ogni dato viene chiamato campo del record

Sintassi: Variabile: record

Campo1: Tipo1;

CampoN: TipoN;

end Per accedere ai campi di un record si utilizza:

Variabile.Campoi (rappresenta l’i-esimo campo)

Page 50: Terza Lezione Introduzione alla programmazione lll.

Esempio di record

CoordinateCoordinate

var Punto:record x,y:int end;

z:int;

Punto.x=3;

Punto.y=2;

z=Punto.x*Punto.y;

Page 51: Terza Lezione Introduzione alla programmazione lll.

Compilatore e Loader Un compilatore compilatore è un programma che traduce

un programma scritto in linguaggio ad alto livello in un programma scritto in linguaggio macchina Un compilatore produce quindi un programma

eseguibile (Es. .exe in Windows) Il loaderloader è il programma che carica un

programma in linguaggio macchina in memoria centrale ( e quindi mappa indirizzi logici in indirizzi fisici)

Page 52: Terza Lezione Introduzione alla programmazione lll.

Come funziona la compilazione

Un compilatore (che abbia anche la funzione di loader) deve:

riconoscere la sintassi del linguaggio ad alto livello

associare uno spazio in memoria centrale per poter gestire le variabili dichiarate nel programma

tradurre i costrutti di alto livello in sequenze di istruzioni in linguaggio macchina