Terza Lezione - PowerPoint PPT Presentation

1 / 52
About This Presentation
Title:

Terza Lezione

Description:

Title: Elementi di Informatica (lezione 12) Author: Beatrice Capitani Last modified by: S505153 Created Date: 4/5/2002 3:02:32 PM Document presentation format – PowerPoint PPT presentation

Number of Views:66
Avg rating:3.0/5.0
Slides: 53
Provided by: Beatr99
Category:

less

Transcript and Presenter's Notes

Title: Terza Lezione


1
Terza Lezione
  • Introduzione alla programmazione lll

2
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
3
Schema di iterazione
  • Nota
  • I due schemi non sono equivalenti in un caso lo
    schema S è eseguito almeno una volta e nellaltro
    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 nellaltro caso

4
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

5
Note sullo schema di iterazione
Inizializzazione
Inizializzazione
falso
Iterazione
Condizione di fine ciclo
vero
Iterazione
Condizione di fine ciclo
falso
vero
6
Uscita dal ciclo
  • La condizione di fine ciclo viene controllata
    dopo lesecuzione di ogni blocco di iterazione
  • Può essere con controllo in coda al ciclo o con
    controllo in testa

7
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
    lesecuzione, 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

8
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 dallinterazione con lesterno o
    vengono modificate allinterno delliterazione in
    modo complesso

9
Esempio Diagramma di flusso
RADICI Diagramma di Flusso
a float
1
b float
2
c float
1
delta float
0
Inizio ingressi 1,2,1
MESSAGGIO radici coincidenti -1
Assegna ad a,b,c i valori dingresso
Stato della memoria
Metti il valori di b2-4ac in delta
deltalt0?
delta0?
falso
falso
MESSAGGIO radici distinte (-b-radice(delta))/2
a (-b-radice(delta))/2a
vero
vero
MESSAGGIO nessuna soluzione
MESSAGGIO radici coincidenti -b/2a
Fine
10
Esercizi
  • Ricerca di un elemento in un vettore
  • Media di un vettore

11
Soluzione Trova
Sub()
i0
ii1
V(i)k
i100
insuccesso
successo
end
12
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 linterazione con gli esseri umani
  • In generale durante la stesura di un programma ci
    si deve preoccupare dei limiti nellintervallo di
    rappresentazione dei numeri, della durata non
    nulla delle operazioni, ecc.
  • La soluzione integrata di queste problematiche e
    di quelle dellalgoritmo in sé risulta complessa
    e richiede alta competenza

13
D. Il programma
  • Disegnato il diagramma di flusso e quindi
    delineato in tutte le sue parti lalgoritmo 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.)

14
Linguaggi di programmazione
  • Linguaggi di Basso Livello.
  • Sono linguaggi di programmazione caratterizzati
    da istruzioni molto elementari (ad es.
    lAssembler). 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.

15
Esempio
  • Il linguaggio L1 mette a disposizione i comandi
  • Aggiungi_una_unità_al_dato_A
  • Leggi_dato_A
  • Leggi_dato_B
  • Esegui_per ltnumero di voltegt
  • Il linguaggio L2 mette a disposizione i comandi
  • Leggi_dato_A
  • Leggi_dato_B
  • Somma ltaddendo, addendo2gt

16
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)
17
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

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

19
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

20
Diversità dei linguaggi
  • Sono stati sviluppati diversi linguaggi
  • Fortran, Lisp, Cobol, Basic, Pascal, C, C,
    Java, Prolog
  • I linguaggi si caratterizzano per
  • sintassi linsieme delle regole che specificano
    come comporre istruzioni ben formate
  • semantica linsieme 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

21
Larte 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

22
Larte della programmazione
  • Definizione del problema
  • Algoritmo per la soluzione del problema
  • Codifica
  • Debugging
  • Validazione
  • Documentazione
  • Manutenzione

23
Definizione del problema
  • Definizione degli ingressi e delle uscite
  • quali variabili
  • quale dominio per ogni variabile
  • Risoluzione delle ambiguità
  • Scomposizione in problemi più semplici

24
Algoritmo
  • Soluzione in pseudocodice
  • Soluzione in diagramma a blocchi strutturato

25
Codifica
  • Traduzione dellalgoritmo in istruzioni del
    linguaggio di programmazione

26
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

27
Validazione
  • Test su tutte le condizioni operative del
    programma
  • Caso degli input estremi (vettori di dimensioni 0
    o 1, variabili nulle, file vuoti, ecc.)

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

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

30
Commenti
  • Limportanza 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

31
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 allinizio del
    programma (celle diverse, nomi diversi)
  • Valore di una variabile contenuto corrente
    della cella di memoria associata alla variabile

32
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

33
Scrittura del programma espressioni
  • Le espressioni servono per rappresentare calcoli
    a livello simbolico
  • Unespressione può coinvolgere nomi di variabili,
    costanti, operatori aritmetico-logici, ecc.
  • Es.
  • 34
  • xy-1 (dove x è una variabile)
  • xgt0 and ygt1

34
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

35
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
  • Lesecuzione modifica lo stato del programma. Si
    parla di stato iniziale, corrente e finale
  • Lesecuzione dipende dalla semantica dei singoli
    costrutti

36
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 alloutput
  • read(Variabile) toglie il primo valore della
    lista input e lo assegna a Variabile

37
Assegnamento
  • Si utilizza per assegnare il valore corrente di
    unespressione ad una variabile
  • Variabile Espressione
  • Se nello stato corrente Espressione si valuta in
    val allora Variabile varrà val dopo lesecuzione
    dellassegnamento
  • Es. xx1
  • Lespressione x1 va valutata nello stato
    corrente. Il risultato dellespressione è
    assegnato nuovamente a x.

38
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
Condizione
vero
falso
Lista Istruzioni1
Lista Istruzioni2
39
Esempi
Leggi da tastiera e scrivi su video Sub Es1() Dim s As String read(s) write(s) End Sub Leggi due numeri, sommali e stampa il risultato Sub Es2() Dim x As Integer, y As Integer, somma As integer read(x) read(y) sommaxy write(somma) End Sub Trova il massimo tra 2 numeri Sub Es3() Dim x As Integer, y As Integer read(x) read(y) If xgty Then write(x) Else write(y) End If End Sub

40
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
    allistruzione seguente del programma.

- Iterazione
Condizione
falso
vero
Lista Istruzioni
41
Esempio somma di k numeri
  • Problema leggere k e quindi calcolare la somma
    di k valori letti dallinput.
  • 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)
  • S0
  • Do While kgt0
  • read(x)
  • SSx kk-1
  • Loop
  • write(S)
  • End Sub

42
Esecuzione del while
  • Inizialmente val(x),val(k)indefiniti, val(S)0
  • Si legge il valore 3 val(k)3
  • Poiché val(k)gt0, si entra nel ciclo
  • Si legge il primo valore in input V1 su cui fare
    la somma e si memorizza in x
  • Si calcola SSx e si decrementa k
  • Quindi, dopo lesecuzione 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

43
Esempio Calcolo MCD
  • Calcolare il massimo comun divisore tra due
    numeri interi letti da input, utilizzando
    lalgoritmo di Euclide
  • mcd(m,n)mn se nm
  • mcd(m,n)mcd(m-n,n) se mgtn
  • mcd(m,n) mcd(m,n-m) se ngtm

44
Algoritmo di Euclide
  • Leggo m e n
  • () Fino a che m diverso da n
  • se mgtn allora sottraggo n ad m
  • se ngtm allora sottraggo m ad n
  • torno a ()
  • Quando mn stampo, ad esempio, n

45
Es. Calcolo MCD
  • Sub Es5()
  • Dim m As Integer,n As Integer
  • read(m)
  • read(n)
  • Do While mltgtn
  • If mgtn Then
  • mm-n
  • Else
  • nn-m
  • End If
  • Loop
  • write(n) (Nota a questo punto nm!)
  • End Sub

46
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

47
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 0N-1

48
Esempio Array
Leggere klt10 valori e stamparli in ordine inverso Dobbiamo leggere V1, ,Vk, memorizzarli e poi stamparli in ordine Vk, , V1. Usiamo un array A di Ngtk posizioni per memorizzare i dati in input. Dopo aver memorizzato i dati, li scriviamo scorrendo larray dallindice k allindice 1. Sub Dim A(10) As Integer Dim i As Integer, k As Integer read(k) i1 Do While ik read(A(i)) ii1 Loop ik Do While igt0 write(A(i)) ii-1 Loop End Sub
49
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 li-esimo campo)

50
Esempio di record
  • Coordinate
  • var Puntorecord x,yint end
  • zint
  • Punto.x3
  • Punto.y2
  • zPunto.xPunto.y

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

52
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
Write a Comment
User Comments (0)
About PowerShow.com