Elementi di programmazione
Lezione n. 2bis
Programma
„
Descrizione di un algoritmo
‰ effettuata tramite un linguaggio artificiale detto
linguaggio di programmazione
‰ dove l’esecutore è un dispositivo tecnologico
come un elaboratore elettronico
‰ ottenuto tramite un procedimento di traduzione
(algoritmico) effettuato da programmi traduttori
classificabili in compilatori e interpreti
‰ Il linguaggio di programmazione è dato da dati
e istruzioni organizzate in strutture di controllo
Corso di Informatica Giuridica
2
1
Rappresentazione logica degli algoritmi
„
pseudocodifica (esempio precedente)
‰ professionale
„
„
„
„
diagramma a blocchi
‰ utile a scopi dimostrativi
„
indica un flusso di istruzioni ovvero la sequenza dei passi da
eseguire
basato su simboli grafici
„
ogni simbolo corrisponde a un costrutto
„
„
verbi di ”esecuzione” (effetto osservabile)
condizioni
iterazioni
le due modalità sono semanticamente equivalenti
Corso di Informatica Giuridica
3
Pseudocodice
„
„
„
„
Al posto dei diagrammi a blocchi si possono
usare altre tecniche
Una di queste è detta pseudocodice
Descrive l’algoritmo con il linguaggio
naturale semplificato al fine di togliere le
ambiguità
La descrizione mediante la pseudocodifica
si suddivide in due parti:
•
dichiarazione delle variabili
•
dichiarazione delle azioni
Corso di Informatica Giuridica
4
2
Pseudocodice - esempio
Inizio
Inizializza MAX a 0
Inizializza N1 a 0
Leggi N1
Finché N1 != 999
Se N1 > MAX allora
Assegna N1 a MAX
Leggi N1
Stampa MAX
Fine
Corso di Informatica Giuridica
5
I diagrammi a blocchi – (1/6)
„
„
„
„
la diagrammazione a blocchi o flow chart è un
metodo per rappresentare l’algoritmo in modo
sintetico e preciso
un diagramma a blocchi indica un flusso di
istruzioni ovvero la sequenza dei passi da
eseguire
è basato su simboli grafici
ogni simbolo corrisponde ad un preciso costrutto
o insieme di istruzioni
Corso di Informatica Giuridica
6
3
I diagrammi a blocchi - (2/6)
„
Un diagramma a blocchi è un insieme di blocchi
elementari costituito sempre dalle seguenti parti:
‰ blocco di inizio
‰ blocco di fine
‰ numero finito di blocchi di lettura/scrittura o di
azione
‰ numero finito di blocchi di controllo
(opzionale)
7
Corso di Informatica Giuridica
I diagrammi a blocchi - (3/6)
Rappresenta il flusso (l'ordine) del
diagramma
Istruzioni di inizio e di fine
inizio
Corso di Informatica Giuridica
fine
8
4
I diagrammi a blocchi - (4/6)
istruzione operativa (effettiva)
Rappresenta una elaborazione
Esempi:
calcola
archivia
9
Corso di Informatica Giuridica
I diagrammi a blocchi - (5/6)
simbolo di decisione
vero
Corso di Informatica Giuridica
condizione
falso
10
5
I diagrammi a blocchi - (6/6)
Simbolo di input/output
Rappresenta un'operazione di
input/output. Esempi:
scrivi
leggi
Corso di Informatica Giuridica
11
Esempio in diagrammi a blocchi
1.
2.
3.
4.
5.
6.
Introdurre una moneta da un euro
Inserire il bicchierino nell’apposito spazio
Premere il bottone al di sopra della scritta
“caffè”
Se esce il caffè, attendere il segnale sonoro e
quindi ritirare il bicchiere
Altrimenti premere il bottone al di sopra della
scritta “restituzione” e ritirare la moneta.
Ricominciare da 1
Corso di Informatica Giuridica
12
6
Start
Introdurre una moneta da 1 euro
Inserire il bicchierino nell’apposito spazio.
Premere il bottone al di sopra della scritta “caffè”
No
Esce il caffe’
Premere il pulsante restituzione
Ritirare la moneta
Si’
Attendere il segnale sonoro
e ritirare il bicchiere
Fine
13
Corso di Informatica Giuridica
Dati: costanti e variabili
„
„
„
Un dato può essere:
costante - un dato che assume un valore all’inizio
dell’algoritmo e lo mantiene per tutta l’esecuzione
di questo
importo x 1936,27 rate di conversione
variabile - è una coppia <nome, valore>
valore
nome
Corso di Informatica Giuridica
14
7
Variabili
„
„
Il valore delle variabili deve appartenere a una
categoria che solitamente sono:
‰ numeri interi - 60
‰ numeri reali - 220,56
‰ sequenze di caratteri - Mario Rossi
‰ valori booleani - vero, falso
I valori una volta che appartengono ad una
categoria di dati devono rispettare le regole della
categoria
‰ Esempio i numeri si possono moltiplicare fra
loro i caratteri no
Corso di Informatica Giuridica
15
Istruzioni – (1/2)
„
Istruzioni operative ‰
‰
„
Istruzioni di controllo
‰
‰
„
istruzioni che eseguono azioni che producono risultati
anche parziali
moltiplica, conta, trasforma, etc.
istruzioni che guidano l’andamento dell’esecuzione
se piove allora resto a casa
Istruzioni di salto
‰
‰
istruzioni che spostano il punto di esecuzione da una parte
all’altra dell’algoritmo
salto condizionato, salto incondizionato
Corso di Informatica Giuridica
16
8
Istruzioni - (2/2)
„
Istruzioni di inizio e di fine
‰
„
sono le istruzione di apertura e di chiusura dell’algoritmo
Istruzioni di ingresso e di uscita
‰
‰
sono le istruzioni che consentono l’acquisizione dei dati
(ingresso) e l’emissione dei risultati (uscita)
lettura del codice, inserimento della carta, stampa del
fogliettino, emissione dei soldi
17
Corso di Informatica Giuridica
La formalizzazione dell’algoritmo
Esempio 1: calcolo dell’area di un rettangolo
Linguaggio pseudocodifica
Diagramma a blocchi
INIZIO
Dati di input: b,h
INIZIO
1 Lettura b,h
2. Area=b*h
3. Stampa Area
FINE
Corso di Informatica Giuridica
Lettura b,h
Area=b*h
Stampa Area
FINE
18
9
Implementazione del programma
La scelta opportuna del linguaggio ad alto
livello in cui implementare l’algoritmo dipende
anch’esso dall’ambito del problema.
Esempi di linguaggi ad alto livello:
‰
‰
‰
‰
‰
C (programmazione di sistemi)
FORTRAN (Programmazione scientifica)
COBOL (Applicazioni commerciali)
LISP (Applicazioni di intelligenza artificiale)
PROLOG (Applicazioni di intelligenza artificiale)
…..
Corso di Informatica Giuridica
19
Test e verifica
„
„
„
„
Il software deve soddisfare a tutte le richieste di
output, cioe’ deve restituire tutti i parametri
richiesti
Le richieste di output devono essere coerenti
con le richieste di input (cioe’ il risultato deve
essere corretto)
La correttezza del risultato deve essere
verificata per una ampia gamma di dati di input,
anche in condizioni limite
Debugging (togliere gli errori) e Testing
(correttezza funzionale)
Corso di Informatica Giuridica
20
10
Documentazione e mantenimento del
programma
„
„
„
Seguire linee guida nello sviluppo del
software.
Allegare al software documentazione scritta
sulle
scelte
metodologiche
e
di
implementazione effettuate.
Mantenere aggiornata tale documentazione
ogni volta che viene fatta una modifica,
tenendo traccia dei cambiamenti effettuati.
21
Corso di Informatica Giuridica
Esempio: conversione miglia-chilometri
Diagramma a blocchi
Algoritmo
1.Inizio
2.Leggi miglia
3. Km=miglia*1.609
4. Scrivi km
5. Fine
inizio
Leggi miglia
km=miglia*1.609
scrivi km
fine
Corso di Informatica Giuridica
22
11
PROBLEMA: Calcolare l’area di un
rettangolo
Algoritmo
Dati di input: b,h
INIZIO
1 Lettura b,h
2. Area=b*h
3. Stampa Area
FINE
Programma in linguaggio C
/* Il programma calcola l'area di un
triangolo */
#include <stdio.h>
int main(void)
{ float b,h,area;
printf("introduci base e altezza \n ");
scanf("%f%f",&b,&h);
area=b*h;
printf("area = %f",area);
}
Corso di Informatica Giuridica
23
Istruzioni di condizione e decisione
„
Condizione
‰
‰
è una espressione che si verifica o vera o
falsa
ogni tipo di dati ha i suoi operatori di confronto
Corso di Informatica Giuridica
24
12
Le condizioni
Operatori di confronto dei numeri:
‰ uguale =
X==3
‰ maggiore >
X>3
‰ maggiore uguale =>
X>=3
‰ minore <
X<3
‰ minore uguale <=
X<=3
‰ diverso <>
X<>3
Operatori di confronto dei caratteri:
‰ uguale = =
“monica”==Y
‰ diverso <>
“monica” <>Y
Corso di Informatica Giuridica
25
Gli operatori booleani - I
Operatori booleani:
„ and
“canta” e “danza” ossia la condizione
è vera quando il soggetto canta e
danza contemporaneamente
„ or
“canta” o “danza” - in modo alternativo
ossia sono valide le seguenti
situazioni: “canta e non danza”,
oppure
“danza e non canta”, oppure
“canta e danza”
„ not
non “canta” – negazione
„ xor
“canta” o “danza” - in modo esclusivo
ovvero sono valide le seguenti
situazioni “canta e non danza”
oppure “danza e non canta”
Corso di Informatica Giuridica
26
13
Gli operatori booleani - II
A
B
VERO
FALSO
VERO
FALSO
VERO
VERO
FALSO
FALSO
A AND B
VERO
FALSO
FALSO
FALSO
A OR B
VERO
VERO
VERO
FALSO
NOT A
FALSO
VERO
FALSO
VERO
Corso di Informatica Giuridica
A XOR B
FALSO
VERO
VERO
FALSO
27
Scomposizione in sotto-algoritmi:
sviluppo top-down
„
„
„
„
Spesso per semplificare il flusso procedurale si
rappresentano insieme di istruzioni in un solo
blocco concettualmente omogeneo
Successivamente si scompone il blocco in
istruzioni sempre più “fini”
Si procede dal generale al particolare
Questo metodo di analizzare i problemi partendo
da macro-blocchi per poi arrivare alle istruzioni
più dettagliate è detto top-down
Corso di Informatica Giuridica
28
14
Esempio - bancomat
scomposizione dell’azione 3
3. Scelta dell’operazione da eseguire
3.1 visualizzazione dei possibili menu
3.2 scelta del menu
3.3 visualizzazione delle operazioni possibili
nel menu scelto
3.4 scelta dell’operazione
Corso di Informatica Giuridica
29
Sviluppo strutturato degli algoritmi
e
Ingegneria del software
Lezione n. 5
15
Programmazione strutturata e metodo
top-down
Problema :
prendere un caffè alla macchinetta automatica
Corso di Informatica Giuridica
31
Analisi top-down
„
„
„
„
„
Introduzione dati
Esecuzione caffè
Gestione dell’errore
Richiesta di continuazione
Fine
Corso di Informatica Giuridica
32
16
Start
Introduzione dati
Blocco1
Preparazione del caffè
Blocco2
Gestione dell’errore
Blocco3
si
Vuoi ricominciare?
no
Corso di Informatica Giuridica
Fine
33
Start blocco1
Introdurre una moneta da un euro
Inserire il bicchierino nell’apposito spazio
Premere il bottone “caffè”
Fine blocco1
Corso di Informatica Giuridica
34
17
Start blocco2
Sensore=“spento”
falso
C’è acqua
vero
vero
Sensore=“acceso”
C’è caffè
Sensore=“acceso”
Misura una
dose di acqua
Scalda l’acqua
Aggiungi una
dose di caffè
Fine blocco2
Corso di Informatica Giuridica
35
Start blocco3
falso
Versa il caffé
Ritira il caffé
Sensore
=“acceso”
vero
Premi il bottone
“Restituzione”
Ritira moneta
Ripara il guasto
Corso di Informatica Giuridica
Fine blocco3
36
18
Istruzioni di controllo: i salti
„
Istruzione di salto (jump, goto):
‰ prescrive che l’ulteriore elaborazione
continui a partire da un certo punto
‰
trasferisce il controllo al punto indicato
Corso di Informatica Giuridica
37
Salti incondizionati e condizionati
Salto incondizionato
1. X = 0;
2. X = X+1;
3. Goto 50
Soluzione: Salto condizionato
1. X = 0;
2. X = X+1;
3. If X < 10 go to 2
Corso di Informatica Giuridica
38
19
Salto incondizionato
X=0
X = X+1
Istruzione numero 50
39
Corso di Informatica Giuridica
Salto condizionato
X=0
X = X+1
X < 100
Corso di Informatica Giuridica
40
20
Programmazione strutturata
„
„
„
la programmazione strutturata è quel procedimento che
permette di ottenere algoritmi facilmente documentabili e
comprensibili
si basa su tre costrutti:
‰ Sequenza
‰ Selezione
‰ Ripetizione : tre tipi di ciclo condizione in testa (while),
condizione in coda (repeat), ripetizione enumerativa
(for)
regole base:
‰ i salti sono rigorosamente proibiti
‰ esiste una sola fine di tutto il programma
‰ le selezioni si chiudono sempre
Corso di Informatica Giuridica
41
La sequenza
„
„
Le istruzioni si susseguono rispetto ad un ordine
e vengono eseguite nella sequenza indicata
{<S1>; <S2>; … <Sn>}
Corso di Informatica Giuridica
42
21
La sequenza
inizio
S1
S2
…...
Sn
fine
Corso di Informatica Giuridica
43
La selezione
„
If (<condizione>)
{
BLOCCO
<S1>…..
<Sn>
}
‰ Se la “condizione” è vera allora vengono
eseguite l’istruzioni del blocco
‰ Se la “condizione” e’ falsa, allora il blocco non
viene eseguito
Corso di Informatica Giuridica
44
22
La selezione con alternativa
„
If (<condizione>)
then
{
<blocco1>
}
else
{
<blocco2>
}
‰
‰
Se la condizione è vera allora viene eseguito il blocco1
altrimenti il blocco2
45
Corso di Informatica Giuridica
La selezione
inizio
falso
vero
condizione
A
fine
Corso di Informatica Giuridica
46
23
La ripetizione con condizione in testa
(while)
While (<condizione>)
do
{
<blocco>
}
„
il blocco viene ripetuto finché la condizione risulta vera
„
quando l’espressione risulta falsa la ripetizione cessa e
si passa all’istruzione successiva
47
Corso di Informatica Giuridica
Ripetizione con condizione in testa
(while)
inizio
vero
condizione
B
falso
A
fine
Corso di Informatica Giuridica
48
24
La ripetizione con condizione in coda
(repeat)
Repeat
{
<blocco>
}
Until (<condizione>)
„
„
il blocco viene ripetuto finché la condizione risulta falsa
quando l’espressione risulta vera la ripetizione cessa e si passa
all’istruzione successiva
49
Corso di Informatica Giuridica
Ripetizione in coda (repeal)
inizio
A
B
falso
vero
condizione
Corso di Informatica Giuridica
fine
50
25
La ripetizione enumerativa (for)
for (<espressione iniziale>, <condizione>,
<aggiornameto espressione>)
{
<blocco>
}
„
il blocco viene ripetuto finché la condizione risulta vera
„
la formula di aggiornamento modifica i valori di confronto
nell’espressione fino a quando la condizione non diviene
vera
51
Corso di Informatica Giuridica
La ripetizione enumerativa (for)
i=1
For i= 1 a 100
Blocco A
Blocco B
aggiornamento di i=i+1
Fine
Corso di Informatica Giuridica
52
26
Esempio di for
X=1
For X= 1 a 100
Stampa X
X=X+1
Fine
Cosa produce questo algoritmo ?
Corso di Informatica Giuridica
53
Potenza della programmazione
strutturata
„
Le tre strutture presentate consentono di
esprimere qualsiasi algoritmo
„
Teorema di Bohm-Jacopini:
“Ogni diagramma a blocchi non strutturato è
sempre trasformabile in un diagramma a
blocchi strutturato equivalente...”
(...con l’eventuale aggiunta di una variabile)
Corso di Informatica Giuridica
54
27
Il metodo top-down
„
Metodo top-down: scomposizione progressiva del
problema e delle azioni (istruzioni) che lo risolvono
„
Favorisce la divisione del lavoro:
‰
‰
Analisi: definizione della struttura generale del
programma, dei moduli principali che lo compongono, e
delle operazioni astratte svolte da ciascuno di essi, le
cosiddette “specifiche”
Programmazione: realizzazione dei programmi che
svolgono le singole operazioni individuate nella fase di
analisi
Corso di Informatica Giuridica
55
Un esempio
„
„
il problema: calcola il voto medio ottenuto dagli
studenti del corso
la descrizione dell’algoritmo non è in un
linguaggio di programmazione ma è una
astrazione espressa linguaggio naturale
(pseudocodice)
Corso di Informatica Giuridica
56
28
Primo raffinamento
„
Calcola il voto medio ottenuto dagli studenti
del corso
‰
‰
‰
Inizializza e acquisisci le variabili
Inserisci, somma e calcola i voti
Calcola e stampa la media
57
Corso di Informatica Giuridica
Secondo raffinamento
–
Inizializza le variabili
Inizializza il totale a 0
Inizializza il contatore voti a 0
–
Inserisci, somma e calcola i voti
Leggi il primo voto
Finché l’utente non ha inserito la sentinella, ripeti
Aggiungi il voto al totale parziale
Aggiungi 1 al contatore voti
Leggi il prossimo voto
Corso di Informatica Giuridica
58
29
Secondo raffinamento (continua)
- Calcola e visualizza la media
Calcola la media dividendo il totale per il
contatore voti
Visualizza la media
Corso di Informatica Giuridica
59
30