Sei sulla pagina 1di 38

Fondamenti dell’informatica

Algoritmi e Strutture Dati


insegnamento di
Gestione Informatica dei Dati
CdL in Scienze Turistiche
a cura di Bruno Bertaccini

Materiale didattico a disposizione degli studenti,


scaricabile all’indirizzo http://www.ds.unifi.it/bertaccini.
È vietata la riproduzione non autorizzata a fini commerciali.

Sistemi
di rappresentazione
dei numeri

Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.
La rappresentazione dei numeri

I sistemi di numerazione

Un sistema di numerazione è un sistema utilizzato per


esprimere i numeri e le operazioni che si possono effettuare
su di essi.

Per ovvi motivi, i più antichi sistemi di numerazione hanno


base 10, con riferimento all'atto di contare con le dita delle
mani.
I sistemi di numerazione sono classificabili in base alle loro
proprietà.
Ad esempio, gli antichi Romani usavano un sistema additivo
e non posizionale: ad esempio, il simbolo X rappresenta
sempre il numero dieci, V il numero cinque, in qualunque
posto del numero si trovino.

Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.

La rappresentazione dei numeri

Il sistema metrico decimale

Il comune sistema metrico decimale, che tutti impariamo a


scuola, è di tipo posizionale. Tale sistema ci è stato
tramandato dagli Arabi.

Nel sistema posizionale decimale ogni cifra assume un


significato diverso a seconda della posizione in cui si
trova (unità, decine, centinaia, ecc.):

133  1102  3 101  3 100

Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.
La rappresentazione dei numeri

I sistemi posizionali

I sistemi posizionali sono caratterizzati da:


 una base b, ovvero un qualsiasi numero naturale b (diverso
da zero e da uno);
 b simboli diversi dette cifre.

In un sistema posizionale i numeri si compongono tenendo


presente che il valore di ogni cifra va moltiplicato per:
 b 0 ( 1) se è l’ultima cifra alla destra del numero
considerato;
 b1 se è la seconda cifra da destra;
 b 2 se è la terza cifra da destra;
 …
 b n 1 se è l’n-esima cifra da destra.
La somma di tutti i valori così ottenuti restituisce il
numero che stiamo considerando in base dieci.
Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.

La rappresentazione dei numeri

Il sistema binario

Il sistema di numerazione decimale si presta male ad essere


trattato automaticamente.
Il calcolatore è infatti costituito da componenti elettronici che
hanno la caratteristica di rappresentare due stati opposti:
un transistore può essere in stato di conduzione o di
interdizione; un interruttore come un circuito può essere
aperto o chiuso.
Questi stati sono matematicamente rappresentabili tramite
due sole cifre.
Il più semplice sistema di numerazione è quello che usa due
sole cifre (0 e 1). Tale sistema è detto binario e le sue cifre
sono dette bit (binary digit).

Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.
La rappresentazione dei numeri

Il sistema binario

Secondo le regole dei sistemi posizionali esposte in


precedenza:

101bin  1 22  0  21  1 20  4  0  1  5dec
10110bin  1 24  0  23  1 22  1 21  0  20
 16  0  4  2  0  22dec
Si osservi che la somma di tutte le moltiplicazioni per tutte le
potenze del 2, eccetto 20, restituiscono SEMPRE un numero
pari. Per cui:
 un numero binario è pari se finisce con la cifra 0;
 dispari se finisce con la cifra 1.

Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.

La rappresentazione dei numeri

Il sistema binario

Si è detto che le regole dei sistemi posizionali consentono di


trasformare in base 10 un generico numero espresso in base
b.
Nel caso del sistema binario, l’operazione inversa può essere
ottenuta operando divisioni successive della cifra decimale per
la base b = 2:

5dec 2
1 2 2
0 1 2
1 0
Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.
La rappresentazione dei numeri

Il sistema binario
Dec Bin
Secondo queste semplici regole 0 0 0 0 0
è possibile costruire la tabella di 1 0 0 0 1
conversione delle prime 16 cifre 2 0 0 1 0
decimali naturali: 3 0 0 1 1
4 0 1 0 0
5 0 1 0 1
6 0 1 1 0
7 0 1 1 1
8 1 0 0 0
9 1 0 0 1
10 1 0 1 0
11 1 0 1 1
12 1 1 0 0
13 1 1 0 1
14 1 1 1 0
15 1 1 1 1
Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.

La rappresentazione dei numeri

I sistemi ottale ed esadecimale

L'uso del sistema binario è in genere molto complesso.


L’elevata lunghezza che assumono i numeri in binario (ad
esempio, la sola cifra 9 necessita di quattro posizioni 1001)
comporta un’elevata possibilità di errore nel manipolarli e
nell'interpretarli.
Per ovviare a questo problema esistono sistemi di
numerazione, l’ottale e, soprattutto, l'esadecimale, che
presentano il vantaggio di essere più compatti del binario e
immediatamente convertibili in esso.
 sistema ottale: cifre 0, 1, 2, 3, 4, 5, 6, 7
 sistema esadecimale:
cifre 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F

Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.
La rappresentazione dei numeri

I sistemi ottale ed esadecimale

Secondo le regole dei sistemi posizionali esposte in


precedenza:
147 oct  1 82  4  81  7  80  64  32  7  103dec
A3hes  10 161  3 160
 160  3  163dec
Si osservi che le potenze dell’8 e del 16 sono a loro volta
esprimibili in potenze del 2, per cui la somma di tutte le
moltiplicazioni per tutte tali potenze, eccetto le cifre
moltiplicate per 80 o 160, restituiscono SEMPRE un numero
pari. Per cui:
 un numero ottale o esadecimale è pari se finisce con una
cifra pari;
 dispari se finisce con una cifra dispari.
Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.

La rappresentazione dei numeri

I sistemi ottale ed esadecimale

Come per il binario, nel caso dei sistemi ottale ed esadecimale,


si può convertire un numero decimale in tali sistemi operando
divisioni successive della cifra decimale per le base b = 8 o
b = 16:

103dec 8
7 12 8
4 1 8
1 0

Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.
La rappresentazione dei numeri

La tabella di conversione completa


Dec Bin Oct Hes
0 0 0 0 0 0 0 0
1 0 0 0 1 0 1 1
2 0 0 1 0 0 2 2
3 0 0 1 1 0 3 3
4 0 1 0 0 0 4 4
5 0 1 0 1 0 5 5
6 0 1 1 0 0 6 6
7 0 1 1 1 0 7 7
8 1 0 0 0 1 0 8
9 1 0 0 1 1 1 9
10 1 0 1 0 1 2 A
11 1 0 1 1 1 3 B
12 1 1 0 0 1 4 C
13 1 1 0 1 1 5 D
14 1 1 1 0 1 6 E
15 1 1 1 1 1 7 F
Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.

La rappresentazione dei numeri

Da ottale/esadecimale a binario

Dai sistemi ottale ed esadecimale al binario e viceversa la


conversione è immediata.
Nel sistema ottale, poiché 23 = 8, vanno effettuati
raggruppamenti di tre cifre e ogni cifra ottale va sostituita
dalla sua rappresentazione in tre bit.
Nel sistema esadecimale, poiché 24 = 16, vanno effettuati
raggruppamenti di quattro cifre e ogni cifra esadecimale
va sostituita dalla sua rappresentazione in quattro bit.

147 oct  001 100 111  1100111bin


A3hes  1010 0011  10100011bin

Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.
La struttura degli
elaboratori

Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.

Ordini di grandezza
delle memorie degli elaboratori
 1 byte = 8 bit

I simboli K, M, G, T sono usati per indicare multipli


del byte.

 1 Kbyte = 2 (  1024) byte, ovvero la potenza del 2


10

più vicina al Kilo (103 (  1000) )


 1 Mbyte = 1024 Kbyte = ,
1024 1024  210  210  21010  220 ( 1048576) byte
ovvero la potenza del 2 più vicina al Mega ( 10 ( 1000000) )
6

 1 Gbyte = 1024 Mbyte = 2 byte, ovvero la potenza del 2


30

più vicina al Giga ( 109 )


 1 Tbyte = 1024 Gbyte = 240 byte, ovvero la potenza del 2
più vicina al Tera ( 1012 )
Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.
La programmabilità
degli elaboratori

Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.

La programmabilità degli elaboratori

Introduzione

Gli elaboratori elettronici sono macchine programmabili:

l’utilizzatore deve fornire loro un’insieme di


istruzioni che indichino le operazioni da compiere
ed i dati su cui operare.

Un insieme coerente di tali istruzioni si chiama


PROGRAMMA

Tali istruzioni, una volta memorizzate nella memoria


centrale, verranno prese in considerazione dalla CPU
che si occuperà dell’attivazione dei dispositivi
necessari alla loro elaborazione
Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.
La programmabilità degli elaboratori

Introduzione

Un elaboratore elettronico, a differenza di quanto ci si


potrebbe aspettare, è in grado di compiere
SOLO operazioni estremamente semplici
(es: una radice quadrata, una funzione trigonometrica richiedono
programmi specifici)

OPERAZIONI ELEMENTARI

Tuttavia un elaboratore è molto veloce e


può eseguire un gran numero di operazioni
nell’unità di tempo
(la velocità dipende anche dal fatto che le operazioni
sono appunto elementari)
Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.

La programmabilità degli elaboratori

Le operazioni elementari

Classificazione delle istruzioni elementari in base


alla diversità delle funzioni svolte dall’elaboratore
e agli effetti che queste hanno sui dati.

1. Istruzioni aritmetiche e logiche


2. Istruzioni di trasferimento
3. Istruzioni di input-output
4. Istruzioni di controllo
5. Istruzioni ausiliarie

Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.
La programmabilità degli elaboratori

Le operazioni elementari

Istruzioni Aritmetiche e Logiche.


servono ad eseguire
operazioni aritmetiche ( + ,- , * , / ) e
logiche (NOT, AND, OR)
sui dati presenti nella memoria centrale

Istruzioni di Trasferimento.
permettono lo spostamento dei dati all’interno della
memoria centrale e tra questa e i registri presenti nella
unità aritmetico logica (ALU) della CPU

Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.

La programmabilità degli elaboratori

Le operazioni elementari

Istruzioni Input-Output.
consentono l’immissione e l’emissione dei dati nella e
dalla memoria centrale;
il dialogo avviene generalmente con in i dispositivi di
I/O e e con le memorie ausiliarie.

Istruzioni di Controllo.
guidano lo svolgimento dell’elaborazione controllando
l’ordine di esecuzione delle istruzioni elementari;
sono eseguite dalla unità di controllo (CU) della CPU.

Istruzioni Ausiliarie.
sono deputate a riordinare alcuni dispositivi fisici
dell’elaboratore e a controllarne lo stato.
Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.
La programmabilità degli elaboratori

Le operazioni elementari

Operazione Elementare (generalizzata)

codice operativo operando

indica il tipo di operazione identifica i dati o i dispositivi


da compiere che interessano l’operazione

L’insieme dei codici operativi e le regole che guidano il modo


di esprimere gli operatori costituiscono un sistema di
programmazione, un sistema completo per gestire il
funzionamento dell’elaboratore ed indirizzarlo alla risoluzione
di un determinato problema.

Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.

La programmabilità degli elaboratori

Il linguaggio macchina ed i linguaggi simbolici

Tale sistema è detto LINGUAGGIO MACCHINA


perché è il SOLO comprensibile dall’unità di controllo
dell’elaboratore.
Il Linguaggio Macchina varia da elaboratore ad
elaboratore ed è estremamente complicato da
utilizzare ed interpretare da parte dell’utilizzatore.

Generalmente vengono utilizzati altri linguaggi di


programmazione, i cosiddetti LINGUAGGI SIMBOLICI,
basati su una modalità di espressione di operatori
ed operandi più simili ai criteri usati dal linguaggio
umano.

Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.
La programmabilità degli elaboratori

Il linguaggio macchina ed i linguaggi simbolici

Un programma espresso per mezzo di un linguaggio


simbolico non è direttamente utilizzabile dall’unità di
controllo dell’elaboratore;
sarà prima necessario TRADURLO per mezzo di un
apposito programma nell’unico linguaggio comprensibile
alla CU: il linguaggio macchina appunto.

Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.

Gli ALGORITMI

Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.
Gli Algoritmi

Algoritmi: aspetti definitori

I problemi umani la cui soluzione è demandata ad un


elaboratore sono notoriamente MOLTO COMPLESSI.
(es: f ( x)  2 x 2  3 x  5 per x = 1.347)
Ma un elaboratore è in grado di svolgere
SOLO OPERAZIONI ELEMENTARI
e NON operazioni complesse.

Come è possibile allora utilizzare un elaboratore


per risolvere un problema complesso?

Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.

Gli Algoritmi

Algoritmi: aspetti definitori

Occorre SCOMPORRE il problema complesso in una


serie di operazioni elementari in grado di poter essere
compiute da un esecutore che non riesce
ASSOLUTAMENTE a prendere in considerazione
il problema nella sua interezza.

Tale procedimento è detto


PROCESSO ALGORITMICO
ed il risultato di tale processo è detto
ALGORITMO

Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.
Gli Algoritmi

Algoritmi: aspetti definitori

L’ALGORITMO è una serie finita e completa di operazioni


elementari ordinate alla soluzione di un problema, da
effettuare meccanicamente, ossia attraverso una
esecuzione precisa delle regole, senza implicare
alcuna conoscenza del caso da trattare.
Le operazioni in cui viene scomposto il processo risolutivo
del problema devono essere comprensibili ed
eseguibili dall’entità cui l’algoritmo è destinato,
entità che può non necessariamente essere l’elaboratore.
In pratica esisterà sempre un limite preciso al numero di
istruzioni che possono comporre l’algoritmo e al tempo di
esecuzione dello stesso, limite dettato dalle caratteristiche
dell’elaboratore.
Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.

Gli Algoritmi

Algoritmi: caratteristiche

Un ALGORITMO adatto ad essere utilizzato da


un elaboratore deve rispondere ad alcune
proprietà essenziali; deve cioè essere:

effettivo;
definito e non ambiguo;
generale;
finito.

Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.
Gli Algoritmi

Algoritmi: caratteristiche

Deve avere un punto di partenza


e deve essere EFFETTIVO
cioè deve avere un punto di partenza
ed ogni operazione deve produrre un certo e ben
determinato risultato ogni volta che si presentano le
stesse condizioni.

Deve essere DEFINITO e NON AMBIGUO


è necessario ciò che sia stato previsto ogni aspetto che
il problema può assumere durante la fase risolutiva
e che ogni espressione sia interpretabile
in maniera univoca senza ambiguità.

Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.

Gli Algoritmi

Algoritmi: caratteristiche

Deve essere GENERALE


ossia utilizzabile per una serie o classe di problemi.
Dominio dell’algoritmo: insieme dei dati che possono essere
elaborati e le condizioni che ne permettono l’elaborazione

Deve essere FINITO


deve cioè poter giungere al suo termine dopo che sia
stato eseguito un numero anche elevatissimo
ma finito di istruzioni
(poiché spesso le istruzioni possono essere eseguite in modo
ciclico – loop -, sarà necessario che non sia possibile prevedere
loop non aventi limite finito).

Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.
Gli Algoritmi

Analisi e Programmazione

ANALISI: fase di comprensione del problema, in base


all’obiettivo da perseguire. Conduce ad un
disegno articolato del problema stesso.

Ogni problema che l’uomo si pone comporta una serie di


azioni (“decisioni”) stabilite in base allo stato
dell’informazione disponibile all’insorgere del problema
stesso: si effettua una rassegna degli elementi
determinanti alla soluzione, elencando gli elementi
necessari e quelli disponibili.

Vengono “decise” le azioni da compiere e la loro sequenza


temporale.
Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.

Gli Algoritmi

Analisi e Programmazione

Generalizzazione della fase d’Analisi:


definizione dei dati in ingresso;
definizione dei risultati in uscita;
individuazione dei termini del problema e dei possibili
metodi risolutivi;
determinazione della necessità e della disponibilità di
risorse (di calcolo e memorizzazione);
generalizzazione del problema (definizione di una
classe di problemi da risolvere);
descrizione informale dell’algoritmo o degli algoritmi
necessari a risolvere la procedura.

Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.
Gli Algoritmi

Analisi e Programmazione

PROGRAMMAZIONE: ha lo scopo di descrivere le


operazioni che l’elaboratore deve eseguire per
risolvere il problema.

Fase della programmazione


insieme delle attività e delle funzioni che trasformano il
bisogno (necessità di risolvere il problema con un
elaboratore) in una richiesta di formulazione,
costruzione e definizione delle regole di
comportamento per la soluzione di classi di processi di
elaborazione, fatte ad un insieme di risorse di calcolo.

Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.

Gli Algoritmi

Analisi e Programmazione

Tecnica TOP-DOWN: si definiscono inizialmente


un insieme d’azioni a grandi linee (macro
istruzioni) e si procede per raffinamenti
successivi, fino ad arrivare ad operazioni
elementari che l’esperienza designa come
indipendenti dal linguaggio di programmazione
utilizzato per scrivere il programma.

Tecnica BOTTOM-UP: parte dai singoli dati e dalle


operazioni elementari da compiere su di essi,
arrivando, per aggregazione, ad una o più
procedure automatiche.

Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.
Gli Algoritmi

Analisi e Programmazione

Indipendentemente dalla tecnica usata, la


programmazione si concretizza nei seguenti passi:

definizione formale dell’algoritmo, spesso in forma


grafica tramite un diagramma a blocchi;
stesura del programma
nel linguaggio di programmazione prescelto;
prova del programma.

La programmazione è sicuramente
un processo creativo non vincolato da regole,
che deve tenere in considerazione alcuni criteri di ottimizzazione
quali i tempi di calcolo e l’occupazione delle memorie.
Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.

Gli Algoritmi

Esempi di algoritmi

Una ricetta di cucina.

Lettura di due valori numerici


e stampa del maggiore tra i due
Lettura di due valori numerici A e B
e stampa di (A-B)^2
n
Lettura del valore numerico n e calcolo di 2
i 0
i

Lettura di due valori numerici M e N (con M>=N)


e calcolo del M.C.D.
Ordinamento di una sequenza di numeri
Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.
Gli Algoritmi

Algoritmi rilevanti

Progetto Genoma Umano per la mappatura dei 100000


geni del DNA umano;
Navigazione Internet: percorsi ottimali che i dati devono
percorrere in rete per il rapido accesso a grandi quantità di
informazioni e motori di ricerca;
Percorso stradale minimo data una certa rete viaria (es:
mappe in internet);
Compressione del testo, crittografia e firme digitali;
Allocazione ottimale dei prodotti negli scaffali di un
supermercato (P. L. e Game Theory);
Gestione delle code;

Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.

Gli Algoritmi

Efficienza di un Algoritmo

Quand’è che un Algoritmo è EFFICIENTE?

quando è CORRETTO: cioè produce il risultato


atteso;
quando è VELOCE (in termini di tempo impiegato
per produrre il risultato);
quando è PARSIMONIOSO (in termini di risorse
allocate per produrre il risultato).

Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.
Strutture dati

(fondamenti)

Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.

Strutture dati

Classificazione

Variabili numeriche
Bit
Intere
Reali (razionali)
precisione singola
precisione doppia
Complesse

Variabili carattere

Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.
Strutture dati

Strutture di memorizzazione

Variabili singole
Vettori: una sequenza indicizzabile di valori numerici
dello stesso tipo
es: stringa = vettore di caratteri
Matrici: una sequenza indicizzabile di vettori dello
stesso tipo
Array: matrici multidimensionali

Liste: array differenziabili per tipo di valori memorizzabili

Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.

I DIAGRAMMI
a BLOCCHI

(o Diagrammi di Flusso)

Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.
I Diagrammi a Blocchi

Aspetti definitori

I Diagrammi a Blocchi sono uno strumento molto


utilizzato in informatica per una chiara e semplice
esposizione in forma grafica degli algoritmi.
Sono uno strumento fondamentale per l’analista
(servono a definire in modo schematico il processo
algoritmico di scomposizione di un problema),
danno una visione immediata dell’iter risolutivo e facilitano
il controllo di correttezza logica dell’algoritmo.
Inoltre hanno anche uno scopo comunicativo:
la documentazione di un algoritmo nel tempo.
È infatti molto più facile leggere un algoritmo schematizzato mediante
un diagramma a blocchi che leggerne la sua traduzione in uno
specifico linguaggio di programmazione.
Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.

I Diagrammi a Blocchi

Aspetti definitori

Requisiti essenziali di un Diagramma a Blocchi:


• deve esistere un solo blocco di inizio;
• deve essere previsto almeno un blocco di fine;
• il diagramma può esibire un numero finito di blocchi
di controllo;
• il diagramma può prevedere un numero finito di
blocchi relativi sia ad operazioni aritmetiche e logiche
che di I/O.

Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.
I Diagrammi a Blocchi

Simboli e regole di costruzione

Punto di Inizio e punti di Fine

Operazioni Aritmetiche e Logiche

Operazioni di Input/Output

Decisioni

Sottoprogrammi

Connessioni ad un qualsiasi punto


del diagramma
Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.

I Diagrammi a Blocchi

Simboli e regole di costruzione

Regole di implementazione:
• ogni blocco logico/aritmetico o di I/O deve avere una
sola linea in ingresso e una sola in uscita;
• ogni blocco di controllo deve avere una sola linea in
ingresso e due (o più) linee in uscita;
• una linea può inserirsi in un blocco o in un’altra linea;
• dall’unico blocco iniziale parte una sola linea,
seguendo la quale, attraverso un insieme non vuoto
di blocchi deve potersi raggiungere uno dei blocchi
finali.

Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.
I Diagrammi a Blocchi

es. 1 : scambio di due valori numerici

START
semplice scambio
di 2 valori numerici
INPUT A
INPUT B
immessi da tastiera
nelle variabili A e B

AUX = B
B=A
A = AUX

PRINT A
PRINT B

STOP

Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.

I Diagrammi a Blocchi

es. 1 : scambio di due valori numerici

START
semplice scambio
di 2 valori numerici
INPUT A
INPUT B
immessi da tastiera
nelle variabili A e B

Scambia dove Scambia


A con B A con B

PRINT A
PRINT B AUX = B
B=A
A = AUX

STOP

Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.
I Diagrammi a Blocchi

es. 2 : scambio di due valori numerici


START

scambio di 2 valori
INPUT A
INPUT B
numerici immessi da
tastiera nelle variabili A e B
solo se il primo è maggiore
del secondo
No
A>B

Scambia
A con B

PRINT A
PRINT B

STOP

Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.

I Diagrammi a Blocchi

es. 3 : somma dei valori di un vettore

Somma di una certa


sequenza di valori,
immessi da tastiera
all’interno di un vettore

Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.
I Diagrammi a Blocchi

es. 3 : somma dei valori di un vettore

Somma Somma degli elementi


vettore
di un vettore V
START
già presente in memoria

J=1
S=0

No
J <= N PRINT S STOP

S = S + V[J]

J=J+1

Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.

I Diagrammi a Blocchi

es. 4 : ricerca del minimo di un vettore


Minimo di
un vettore

Ricerca del minimo


START
di un vettore V
già presente in memoria
min = V[1]
N = length(V)
J=2

No PRINT
J <= N STOP
min

J = J +1 Sì

No
V[J] < min

min = V[J]

Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.
I Diagrammi a Blocchi

es. 5 : somma, media, min e max di un vettore

START A

Somma, media, min e max


di una sequenza di valori,
media = S/N
INPUT N
immessi da tastiera
all’interno di un vettore
PRINT
DIM V[N] media

INPUT V[1] Minimo di un


… vettore
INPUT V[N]

Somma Massimo di
vettore un vettore

A STOP

Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.

I Diagrammi a Blocchi

es. 6 : calcolo di una serie parziale

Lettura del valore numerico


n e calcolo di
n

 2 i

i 0

Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.
I Diagrammi a Blocchi

es. 7 : calcolo del MCD (algoritmo di Euclide)

START
Lettura di due valori
numerici M e N
INPUT N (con M>=N)
e calcolo del M.C.D.
INPUT M

No
Scambia
M>N
M con N

Q = INT(N/M)

R = N - M*Q

N=M No Sì
PRINT
R=0 STOP
”MCD :”, M
M=R

Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.

I Diagrammi a Blocchi

es. 7 : calcolo del MCD (algoritmo inefficiente)

Lettura di due valori


START

INPUT N
numerici M e N
INPUT M (con M>=N)
e calcolo del M.C.D.
con un algoritmo
No
Scambia
M>N
M con N

Sì inefficiente

J=M

Q = INT(N / J)
R = N - J*Q

J=J-1

No Sì
PRINT
R=0 STOP
”MCD :”, J

Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.
I Diagrammi a Blocchi

es. 8 : radici di un polinomio di 2° grado

Ricerca delle due radici


reali x1 e x2, di una
equazione del tipo
ax 2  bx  c  0
se a, b, c  
b  
>0 : x
2a
b
  b  4ac 2
=0 : x
2a
<0 : non esistono radici reali

Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.

I Diagrammi a Blocchi

es. 8 : radici di un polinomio di 2° grado

Ricerca delle due radici


reali x1 e x2, di una
equazione del tipo
ax 2  bx  c  0

Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.
I Diagrammi a Blocchi

La traduzione del diagramma


a blocchi in pseudolinguaggio

Condizioni: IF (condizione) THEN


inizio blocco
istruzione 1
istruzione 2

fine blocco
ELSE
inizio blocco
istruzione 1
istruzione 2

fine blocco
Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.

I Diagrammi a Blocchi

La traduzione del diagramma


a blocchi in pseudolinguaggio

Condizioni:

IF (condizione) THEN
[blocco istruzioni]
ELSE IF (condizione) THEN
[blocco istruzioni]
ELSE
[blocco istruzioni]

Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.
I Diagrammi a Blocchi

La traduzione del diagramma


a blocchi in pseudolinguaggio

Condizioni: SWITCH (espressione)


CASE (condizione1):
NON [blocco istruzioni]
in tutti i CASE (condizione2):
linguaggi di
[blocco istruzioni]
programmazione
CASE (condizione3):
[blocco istruzioni]

OTHER:
[blocco istruzioni]

Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.

I Diagrammi a Blocchi

La traduzione del diagramma


a blocchi in pseudolinguaggio
Iterazioni: FOR (variabile) = (inizio) TO (fine) (step)
inizio blocco
istruzione 1
istruzione 2

fine blocco

WHILE (condizione)
inizio blocco
istruzione 1
istruzione 2

fine blocco
Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.
IL LINGUAGGIO
FORTRAN
Selezione di esercizi svolti tratti
dagli esami degli appelli precedenti
Note per la lettura:
 i nomi delle variabili sono scritti in maiuscolo;
 le istruzioni FORTRAN sono scritte in minuscolo;
 nei riquadri, sono riportati alcuni commenti aggiuntivi che non sono
codice FORTRAN e non devono essere confusi con esso, e che hanno
il solo scopo fornire chiarimenti sul flusso delle istruzioni.
Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.

Il linguaggio FORTRAN

5 giugno 2008 – es. 1

le istruzioni iniziano a colonna 7;


una C a colonna 1 indica che stiamo scrivendo un commento che non verrà
considerato dal compilatore

C Scrivere un programma FORTRAN che legga un valore


C da tastiera in lire e lo converta in euro (1€ = 1936,27 L.)

write (*,*) "inserire valore in lire"


read (*,*) V
le variabili utilizzate rispettano i criteri imposti dalla
V2 = V/1936.27 dichiarazione implicita: V e V2 sono di tipo reale

write (*,20) 'il valore in euro:', V2


stop
20 format (f10.2) occorre assegnare un formato con 2 cifre decimali
end al risultato, in quanto la conversione in euro
prevede al massimo 2 cifre decimali (i centesimi)

Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.
Il linguaggio FORTRAN

18 giugno 2008 – es. 1

C Si scriva un programma FORTRAN che legga da tastiera


C in sequenza 15 numeri naturali (interi non negativi) e,
C al termine, stampi a video il valore massimo tra i 15
C valori inseriti.

MAX=0 0 è i più piccolo numero naturale

do I=1,15
write (*,*) 'inserisci (', I, ' ) numero naturale:'
ciclo read (*,*) N
per la
appena viene individuato un
sequenza if (N .GT. MAX) MAX=N numero più grande di MAX, MAX
dei 15
end do viene riassegnato a quel numero
valori
write (*,*) 'massimo valore inserito', MAX
stop
end
anche in questo caso le variabili utilizzate rispettano
i criteri imposti dalla dichiarazione implicita.

Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.

Il linguaggio FORTRAN

24 gennaio 2008 – es. 1

C Si scriva un programma FORTRAN che legga da tastiera


C in sequenza 10 numeri interi e, al termine, stampi a video
C la loro somma e il loro valore medio.
in questo caso invece occorre dichiarare esplicitamente le variabili
integer SUM SUM e MEAN che non rispettano la convenzione implicita: la somma
real MEAN di interi è una variabile intera, la loro media è una variabile reale

SUM=0 variabile totalizzatore inizializzata a zero


(zero è l’elemento neutro per la somma)
do I=1,10
ciclo write (*,*) 'inserisci (', I, ' ) numero intero:'
per la read (*,*) N
sequenza
dei 10 tutti i numeri inseriti vengono di volta
valori
SUM = SUM + N
in volta cumulati nel totalizzatore
end do
essendo MEAN reale, se SUM, che è intera, venisse
MEAN = SUM / 10.0 divisa per 10 restituirebbe un risultato di tipo intero
e non reale come invece accade dividendo per 10.0
write (*,*) 'somma:', SUM, '; media:', MEAN
stop
end
Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.
Il linguaggio FORTRAN

luglio 2007 – es. 1

C Scrivere un programma FORTRAN che legga da tastiera i


C valori N e M, controllando che siano compresi fra 10 e 90;
C Il programma deve poi procedere a calcolare:
C 1. il prodotto di tutti i numeri tra il maggiore dei due ed
C il minore dei due (estremi compresi);
C 2. la somma di tutti i numeri interi positivi più piccoli
C (cioè fino al valore 1) del minore dei due.
PROD e SUM sono dichiarate intere di 8 byte per
integer*8 PROD, SUM
contenere numeri interi molto grandi
10 write (*,*) 'inserisci primo numero:'
read (*,*) N
if (N .lt. 10 .or. N .gt. 90) goto 10
15 write (*,*) 'inserisci secondo numero:'
read (*,*) M
if (M .lt. 10 .or. M .gt. 90) goto 15

controllo sul rispetto dei vincoli per i valori inseriti

C continua a pag. successiva

Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.

Il linguaggio FORTRAN

luglio 2007 – es. 1 (continua)

MAX=M
MIN=N dei due valori inseriti, inizialmente si suppone
if (MAX .lt. MIN) then che M sia il più grande e N sia il più piccolo;
poi si controlla se ciò e vero ed in caso
MAX=N contrario si inverte l’assegnazione
MIN=M
endif

PROD=1 variabile moltiplicatore inizializzata a 1


(uno è l’elemento neutro per il prodotto)
do I=MIN,MAX
PROD=PROD*I
end do
variabile totalizzatore inizializzata a zero
SUM=0
(zero è l’elemento neutro per la somma)
do I=1,(MIN-1)
SUM=SUM+I
end do

write (*,*) SUM, PROD

end

Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.
Il linguaggio FORTRAN

luglio 2007 – es. 2

Testo dell’esercizio

Scrivere un programma FORTRAN che legga da un file relativo alle vendite di un


outlet in un certo periodo due variabili da ogni record (senza conoscere a priori il
numero di record da leggere). Le due variabili sono rispettivamente:

a. il prezzo intero del capo d’abbigliamento venduto (espresso in € con due


decimali, il campo è di 6 byte);
b. lo sconto percentuale che è stato praticato (un numero intero, in un campo di 2
cifre). A esempio, il valore 30 indica che è stato praticato uno sconto del 30%.
Qualora siano presenti valori superiori a 70 sono da considerare come errori e
devono essere rimpiazzati dal valore 70.

Dopo aver letto tutto l’archivio si vuole stampare il totale incassato, in € con due
decimali.

Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.

Il linguaggio FORTRAN

luglio 2007 – es. 2 (continua)

tutte le variabili utilizzate sono reali e non devono essere dichiarate


perché rispettano le regole della convenzione implicita

TOTI=0.0

open (5, file=‘vendite.dat')


10 read (5,*,END=40) PI, SC
controllo sul valore dello sconto come richiesto
if (SC .gt. 70) SC=70
dall’esercizio
TOTI=TOTI+PI*(100-SC)/100 gli sconti vengono applicati al prezzo intero
ed il risultato viene immediatamente cumulato
goto 10
nella variabile totale incassato TOTI
40 write (*,45) 'totale incassato:', TOTI
stop
formato di visualizzazione del totale incassato con 2 cifre
45 format (f8.2)
decimali: 8 caratteri totali disponibili per l’output di cui
uno riservato alla virgola e 2 ai decimali, per cui solo
end cinque sono riservati alla parte intera

Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.
Il linguaggio FORTRAN

10 luglio 2008 – es. 2

Testo dell’esercizio

Un’indagine campionaria vuole accertare la passione dei fiorentini per la


cinematografia: agli intervistati è stato chiesto di indicare il numero di proiezioni
cinematografiche cui hanno assistito nel corso del 2007. I risultati dell’indagine sono
memorizzati in un archivio il cui tracciato record può essere esemplificato dalla
seguente tabella:
n° proiezioni n° intervistati
0 2130
1 3412
2 5323
… …

Scrivere un programma FORTRAN che produca in output:


a. il totale degli proiezioni cinematografiche cui hanno assistito gli intervistati;
b. il numero medio di proiezioni cui ha assistito ciascun intervistato.

Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.

Il linguaggio FORTRAN

10 luglio 2008 – es. 2 (continua)


integer TOTPR, TOTI queste variabili devono essere dichiarate perché non
real MEDIAPR rispettano i criteri della convenzione implicita

TOTPR=0
i totalizzatori devono sempre essere azzerati
TOTI=0

open (5, file=“archivio.dat”) al file (device o dispositivo) contenente le


10 read (5,*,END=35) NUMP, NUMI informazioni viene assegnato l’etichetta 5

TOTI = TOTI + NUMI


TOTPR = TOTPR + NUMP*NUMI
si continua a leggere dal file finché non se ne raggiunge la fine
goto 10
(eof = end of file); quando cò avviene, l’esecuzione riprende dalla riga 35

35 MEDIAPR = 1.0*TOTPR/TOTI il rapporto tra due interi è intero; poiché la


media è reale occorre premoltiplicare per 1.0
write (*,*) 'totale proiezioni:', TOTPR
write (*,*) 'media proiezioni per intervistato:', MEDIAPR
stop
end

Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.
Il linguaggio FORTRAN

24 gennaio 2008 – es. 2

Testo dell’esercizio

Una catena di grande distribuzione gestisce in città 4 supermercati (codificati


rispettivamente con i numeri da 1 a 4). In un archivio sono memorizzati, per ciascun
supermercato e per ciascun mese del 2007, il numero degli scontrini emessi (vedi
esempio sotto riportato) e il totale incassato.
Supermercati Mese Scontrini Incasso
1 1 1200 201103
2 1 1106 202123
3 1 1154 312234
4 1 1183 254321
1 2 1233 342167
… … … …

Produrre un programma FORTRAN che produca in output:


a. il totale degli scontrini emessi per tutto il 2007;
b. il totale incassato per tutto il 2007;
c. il valore dello scontrino medio per i mesi estivi del 2007 (giugno, luglio e agosto).

Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.

Il linguaggio FORTRAN

24 gennaio 2008 – es. 2 (continua)


integer*4 S, TOTS, TOTSE queste variabili devono essere dichiarate perché non
real I, MEDIASE
rispettano i criteri della convenzione implicita; alle
TOTS=0 variabili scontrino (S) e totali scontrino (TOTS e
TOTI=0.0 TOTSE) viene riservato una zona di memoria di 4 byte
TOTSE=0
TOTIE=0.0

open (7, file=‘supermarket.dat')


15 read (7,*,END=65) A, M, S, I

TOTS = TOTS + S
totale TOTI = TOTI + I
incasso e if (M .gt. 5 .and. M .lt. 9) then
totale TOTSE = TOTSE + S
scontrini TOTIE = TOTIE + I
per i mesi endif
si continua a leggere dal file finché non se ne raggiunge la fine
estivi goto 15
(eof = end of file); quando ciò avviene, l’esecuzione riprende dalla riga 65
65 MEDIASE = 1.0*TOTIE/TOTSE come esercizio precedente

write (*,70) 'totale scontrini:', TOTS


write (*,72) 'totale incasso:', TOTI
write (*,72) 'scontrino medio mesi estivi:', MEDIASE
stop a28: formato di un output di tipo carattere (28 carat. disponibili)
70 format (a28,i9)
i9: formato di un output di tipo intero (9 carat. disponibili)
72 format (a28,f12.2)
f12.2: formato di un output di tipo reale (12 carat. disponibili di cui uno
end
per la virgola e 2 per la parte decimale)
Bruno Bertaccini (mail to: brunob@ds.unifi.it) È vietata la riproduzione non autorizzata a fini commerciali.

Potrebbero piacerti anche