Terza lezione
This presentation is the property of its rightful owner.
Sponsored Links
1 / 52

Terza Lezione PowerPoint PPT Presentation


  • 81 Views
  • Uploaded on
  • Presentation posted in: General

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(). Sub(). S. S. C. C. vero. falso. falso. vero. End Sub. End Sub. Schema di iterazione. Nota :

Download Presentation

Terza Lezione

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Terza lezione

Terza Lezione

Introduzione alla programmazione lll


Schema di iterazione

Schema di iterazione

  • Schema di iterazione (ciclo o loop)

    • Modo conciso per descrivere azioni che devono essere ripetute

Sub()

Sub()

S

S

C

C

vero

falso

falso

vero

End Sub

End Sub


Schema di iterazione1

Schema di iterazione

  • Nota:

  • I due schemi non sono equivalenti: in un caso lo schema S è eseguito almeno una volta e nell’altro potrebbe non essere mai eseguito

  • 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


Note sullo schema di iterazione

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


Note sullo schema di iterazione1

Note sullo schema di iterazione

Inizializzazione

Inizializzazione

falso

Iterazione

Condizione

di fine ciclo

vero

Condizione

di fine ciclo

Iterazione

falso

vero


Uscita dal ciclo

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


Ciclo enumerativo

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


Ciclo indefinito

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


Esempio diagramma di flusso

Esempio: Diagramma di flusso

RADICI:

Diagramma di Flusso

Inizio: ingressi 1,2,1

MESSAGGIO:

radici coincidenti = -1

Assegna ad a,b,c i

valori d’ingresso

Metti il valori di

b2-4ac in delta

delta<0?

falso

delta=0?

falso

vero

vero

MESSAGGIO:

“radici distinte=”

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

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

MESSAGGIO:

“nessuna soluzione”

MESSAGGIO:

“radici coincidenti=”

-b/2a

Fine


Esercizi

Esercizi

  • Ricerca di un elemento in un vettore

  • Media di un vettore


Soluzione trova

Soluzione: Trova

Sub()

i=0

i=i+1

V(i)=k

i=100

insuccesso

successo

end


I programmi

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


D il programma

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


Linguaggi di programmazione

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.


Esempio

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>


Esempio segue

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.


Il linguaggio macchina

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


Linguaggi di programmazione1

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.


Linguaggi di alto livello

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


Diversit dei linguaggi

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


L arte della programmazione

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


L arte della programmazione1

L’arte della programmazione

  • Definizione del problema

  • Algoritmo per la soluzione del problema

  • Codifica

  • Debugging

  • Validazione

  • Documentazione

  • Manutenzione


Definizione del problema

Definizione del problema

  • Definizione degli ingressi e delle uscite

    • quali variabili

    • quale dominio per ogni variabile

  • Risoluzione delle ambiguità

  • Scomposizione in problemi più semplici


Algoritmo

Algoritmo

  • Soluzione in pseudocodice

  • Soluzione in diagramma a blocchi strutturato


Codifica

Codifica

  • Traduzione dell’algoritmo in istruzioni del linguaggio di programmazione


Debugging

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


Validazione

Validazione

  • Test su tutte le condizioni operative del programma

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


Documentazione

Documentazione

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


Manutenzione

Manutenzione

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


Commenti

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


Scrittura del programma nozione di variabile

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)

  • Valore di una variabile = contenuto corrente della cella di memoria associata alla variabile


Scrittura del programma nozione di costante

Scrittura del programma: nozione di costante

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

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

  • Il set di costanti disponibile dipende dal linguaggio di programmazione


Scrittura del programma espressioni

Scrittura del programma: espressioni

  • Le espressioni servono per rappresentare calcoli a livello simbolico

  • Un’espressione 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


Programma vba

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 Sub e separate dal punto e virgola “;”


Esecuzione di un programma

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 InputOutput

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

  • L’esecuzione dipende dalla semantica dei singoli costrutti


Lettura e scrittura

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): aggiunge il valore corrente di Variabile all’output

    • read(Variabile): toglie il primo valore della lista input e lo assegna a Variabile


Assegnamento

Assegnamento

  • Si utilizza per assegnare il valore corrente di un’espressione ad una variabile

    • Variabile = Espressione

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

  • Es. x=x+1

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


Istruzione condizionale

Istruzione condizionale

  • Sintassi:

    • If Condizione Then Lista Istruzioni1

      Else Lista Istruzioni2

      End If

      Condizione = Espressione booleana

Se la condizione si valuta vero si esegue il

ramo then, altrimenti

si esegue il

ramo else

vero

Condizione

falso

Lista

Istruzioni1

Lista

Istruzioni2


Esempi

Esempi


Istruzione ciclica

Istruzione ciclica

  • Sintassi:

    • Do While Condizione

      Lista Istruzioni

      Loop

      Lista Istruzioni viene eseguita fintantochéCondizione si valuta in vero.

      Quando Condizione si valuta in falso si passa all’istruzione seguente del programma.

- Iterazione

Condizione

falso

vero

Lista

Istruzioni


Esempio somma di k numeri

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=0

    Do While k>0

    read(x)

    S=S+x k=k-1

    Loop

    write(S)

    End Sub


Esecuzione del while

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 V1su 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


Esempio calcolo mcd

Esempio: Calcolo MCD

  • Calcolare il massimo comun divisore tra due numeri interi letti da input, utilizzando l’algoritmo 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


Algoritmo di euclide

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


Es calcolo mcd

Es. Calcolo MCD

Sub 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 If

Loop

write(n)(Nota:a questo punto n=m!)

End Sub


Strutture dati complesse

Strutture dati complesse

  • Oltre a variabili di tipo intero, stringa, 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 LP abbiamo solo array e record


Array

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) As Integer (N costante)

  • Nelle espressioni, assegnamenti, ecc. si utilizza poi:

    • NomeVarArray(Exp) dove Exp è un espressione che si valuta in un valore da 0…N-1


Esempio array

Esempio: Array


Record

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)


Esempio di record

Esempio di record

Coordinate

var Punto:record x,y:int end;

z:int;

Punto.x=3;

Punto.y=2;

z=Punto.x*Punto.y;


Compilatore e loader

Compilatore e Loader

  • Un 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 loader è il programma che carica un programma in linguaggio macchina in memoria centrale ( e quindi mappa indirizzi logici in indirizzi fisici)


Come funziona la compilazione

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


  • Login