Fondamenti dell'informatica. Algoritmi e Strutture Dati a cura di Bruno Bertaccini
insegnamento di. Gestione Informatica dei Dati. CdL in Scienze Turistiche.
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 (aritmetica degli elaboratori)
Bruno Bertaccini (mail to:
[email protected])
È 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:
[email protected])
È 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 1102 3 101 3 100
Bruno Bertaccini (mail to:
[email protected])
È 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:
[email protected])
È 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:
[email protected])
È 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:
[email protected])
È 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:
Bruno Bertaccini (mail to:
[email protected])
5dec
2
1
2 0
2 1
2
1
0 È vietata la riproduzione non autorizzata a fini commerciali.
La rappresentazione dei numeri
Il sistema binario Secondo queste semplici regole è possibile costruire la tabella di conversione delle prime 16 cifre decimali naturali:
Bruno Bertaccini (mail to:
[email protected])
Dec 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
Bin 0 0 0 0 0 1 0 1 1 0 1 0 1 1 1 1 0 0 0 0 0 1 0 1 1 0 1 0 1 1 1 1
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
È 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:
[email protected])
È 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:
[email protected])
È 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:
Bruno Bertaccini (mail to:
[email protected])
103dec
8
7
12 4
8 1
8
1
0
È 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:
[email protected])
È 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 A3hes 1010 Bruno Bertaccini (mail to:
[email protected])
100
111 1100111bin
0011 10100011bin È vietata la riproduzione non autorizzata a fini commerciali.
La struttura degli elaboratori
Bruno Bertaccini (mail to:
[email protected])
È vietata la riproduzione non autorizzata a fini commerciali.
La struttura degli elaboratori
Il concetto di elaboratore def: elaboratore elettronico: macchina elettronica, modulare, a stati discreti, programmabile. elettronica: macchina costituita da componenti elettroniche, che sono prevalenti, sia quantitativamente, che qualitativamente; modulare: le unità funzionali, che lo compongono, possono essere realizzate con unità fisiche suscettibili di variare come numero e caratteristiche; a stati discreti: i componenti elementari di un elaboratore potranno trovarsi, ai fini del nostro studio, in due sole condizioni: si/no, acceso/spento, 1/0; programmabile: sarà di volta in volta l'utilizzatore ad indicare alla macchina le operazioni da compiere per la risoluzione di differenti problemi o classi di problemi; Bruno Bertaccini (mail to:
[email protected])
È vietata la riproduzione non autorizzata a fini commerciali.
La struttura degli elaboratori
Il concetto di elaboratore Quella esposta in queste dispense non è la vera e propria struttura fisica di un elaboratore, ma solo una sua schematizzazione logica. Tale struttura funzionale può essere diversamente realizzata, a seconda dei tipi e delle dimensioni delle macchine. Per struttura funzionale intendiamo un dispositivo capace di compiere operazioni sui dati che transiteranno nel sistema.
Bruno Bertaccini (mail to:
[email protected])
È vietata la riproduzione non autorizzata a fini commerciali.
La struttura degli elaboratori
Struttura funzionale Ogni rettangolo rappresenta una unità funzionale dell'elaboratore che dovrà necessariamente essere presente, affinché la macchina possa svolgere il proprio lavoro. Ogni unità funzionale potrà essere, poi, costituita da uno o più dispositivi fisici di dimensioni e caratteristiche variabili.
Bruno Bertaccini (mail to:
[email protected])
È vietata la riproduzione non autorizzata a fini commerciali.
La struttura degli elaboratori
Unità di ingresso e uscita (I/O) Unità d’ingresso: queste unità hanno lo scopo di immettere dati nel sistema elettronico. Dispositivi tipici usati per questo scopo sono: lettori ottici, tastiere, lettori di caratteri magnetici, penne luminose associate ad unità video, video «touchscreen». Unità di uscita: tale unità servono ad emettere dati all'esterno dati e risultati di elaborazioni compiute dall'elaboratore. Dispositivi tipici usati a questo scopo sono: schermi video, stampanti, plotter.
Bruno Bertaccini (mail to:
[email protected])
È vietata la riproduzione non autorizzata a fini commerciali.
La struttura degli elaboratori
Memoria centrale La memoria centrale ha lo scopo di immagazzinare dati e programmi. I dati inseriti in memoria centrale generalmente sono memorizzati per il tempo necessario alle elaborazioni e non conservati per future elaborazioni. Le moderne memorie centrali degli elaboratori, formate da circuiti integrati, consentono operazioni di lettura e scrittura con tempi dell’ordine del nanosecondo e sono destinate a contenere, sia le istruzioni che l'utilizzatore fornisce alla macchina, sia i dati di immediato utilizzo, necessari, di volta in volta, per un determinato lavoro. La memorizzazione delle istruzioni fa sì che l'elaboratore esegua le elaborazioni "in maniera automatica", senza l'intervento umano e alla velocità che gli è propria. Bruno Bertaccini (mail to:
[email protected])
È vietata la riproduzione non autorizzata a fini commerciali.
La struttura degli elaboratori
Memoria centrale La memoria centrale è anche detta memoria ad accesso casuale (RAM = Random Access Memory), in quanto l’elaboratore può direttamente arrivare all'indirizzo di memoria desiderato, senza dover scorrere altri indirizzi di memoria, cioè, appunto, in maniera casuale o diretta. Tale memoria è volatile, ovvero le informazioni in essa contenute si perdono ogniqualvolta l'elaboratore viene spento. Ci sono però altre zone di memoria in cui vengono immesse informazioni (dati od istruzioni) in maniera permanente, fin dal momento della costruzione dell'elaboratore; queste informazioni servono a scopi ben precisi e possono venir solo lette, senza possibilità di modifica: tale parte della memoria è detta memoria a sola lettura (ROM = Read Only Memory).
Bruno Bertaccini (mail to:
[email protected])
È vietata la riproduzione non autorizzata a fini commerciali.
La struttura degli elaboratori
Memoria centrale La memoria centrale è schematizzabile come un insieme finito, ordinato e numerato di celle o posizioni, ciascuna delle quali, da sola od in gruppo, può contenere un'informazione in forma binaria. Il numero delle celle rappresenta la capacità della memoria. La dimensione di una cella è equivalente al numero di bit da cui essa è composta: generalmente una cella di memoria corrisponde ad un byte ovvero è formata da 8 bit. Il byte è pertanto l'unità di misura delle memorie degli elaboratori (comprese quelle ausiliarie). L'utilizzo pratico comporta, spesso, l'uso di celle di dimensioni maggiori. Ogni cella è individuata da un suo numero d'ordine, che ne rappresenta l'indirizzo, a cui si fa riferimento per accedere all'informazione memorizzata o per inserire l'informazione (dato l’elevato numero di celle, gli indirizzi sono rappresentati in formato esadecimale). Bruno Bertaccini (mail to:
[email protected])
È vietata la riproduzione non autorizzata a fini commerciali.
La struttura degli elaboratori
Memorie ausiliarie Le memorie ausiliarie esterne (dette anche memorie secondarie o di massa) sono memorie deputate alla memorizzazione di tutti gli archivi che vogliamo conservare per future consultazioni, nonché i programmi realizzati o acquisiti. Gli archivi possono anche essere il risultato di elaborazioni in corso, e venire poi eliminati al termine del processo elaborativo, o possono essere costituiti dal risultato di precedenti elaborazioni. Il tempo di accesso, ossia il tempo necessario alla lettura o alla scrittura di un insieme elementare di dati, è variabile a seconda dell'unità fisica impiegata e del sistema di organizzazione dei dati usato. Sono esempi di memorie ausiliare gli hard-disk, i supporti magnetici rimovibili (floppy, CD e DVD), le moderne flash-memory.
Bruno Bertaccini (mail to:
[email protected])
È vietata la riproduzione non autorizzata a fini commerciali.
La struttura degli elaboratori
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 più vicina al Kilo (103 ( 1000) ) 1 Mbyte = 1024 Kbyte = , 1024 1024 210 210 21010 220 ( 1048576) byte 6 ovvero la potenza del 2 più vicina al Mega ( 10 ( 1000000) ) 30 1 Gbyte = 1024 Mbyte = 2 byte, ovvero la potenza del 2 più vicina al Giga ( 109 ) 1 Tbyte = 1024 Gbyte = 240 byte, ovvero la potenza del 2 più vicina al Tera ( 1012 ) 10
Bruno Bertaccini (mail to:
[email protected])
È vietata la riproduzione non autorizzata a fini commerciali.
La struttura degli elaboratori
CPU: central processing unit La CPU è l’unità centrale di elaborazione tradizionalmente composta da 2 componenti, che possono essere, o meno, fisicamente separati (l'unità di controllo e l'unità aritmetico-logico). L'unità di controllo (CU) è il dispositivo che provvede a controllare l'attività di elaborazione. Il suo ruolo è quello di decodificare e far eseguire le istruzioni presenti in memoria centrale, nonché di supervisionarne l'esecuzione. Questa unità non esegue, quindi, le istruzioni: il suo compito è quello di leggere le istruzioni, una alla volta, prelevandole dalla memoria centrale, di interpretarle, cioè di capirne il significato, di provvedere a che vengano eseguite, dando gli opportuni comandi alle varie unità interessate.
Bruno Bertaccini (mail to:
[email protected])
È vietata la riproduzione non autorizzata a fini commerciali.
La struttura degli elaboratori
CPU: central processing unit L'unità aritmetico-logica (ALU) è il dispositivo che esegue le operazioni aritmetiche e logiche. Per far ciò si serve, oltre che di appositi circuiti elettronici, di particolari registri, fra cui alcuni che possono essere specificamente dedicati alla manipolazione aritmetica e logica dei dati, detti accumulatori. Oltre che dalla capacità di memoria, la potenza di un elaboratore dipende, anche dalle caratteristiche della unità logico-aritmetica, quali la sua velocità e le operazioni che essa può eseguire, per altro legate alle capacità e velocità dell'unità di controllo.
Bruno Bertaccini (mail to:
[email protected])
È vietata la riproduzione non autorizzata a fini commerciali.
La struttura degli elaboratori
Unità canale (BUS) Nella descrizione della struttura funzionale di un elaboratore è stato precisato che la CPU comunica con le altre unità, comprese quelle di input/output, attivandole affinché effettuino le operazioni che sono loro proprie. I moderni sistemi elettronici sono anche dotati di una o più unità di elaborazione distinte dall'unità centrale (processori esterni), alle quali quest'ultima affida il compito di comunicare direttamente con le periferiche. In questo modo è possibile gestire al meglio le operazioni di ingresso e di uscita. Tali unità si chiamano canali. I canali sono, in pratica, unità di elaborazione che hanno un accesso diretto alla memoria e sono in grado di trasferire i dati fra la CPU, la memoria centrale e le periferiche con le quali comunicano.
Bruno Bertaccini (mail to:
[email protected])
È vietata la riproduzione non autorizzata a fini commerciali.
La programmabilità degli elaboratori
Bruno Bertaccini (mail to:
[email protected])
È 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:
[email protected])
È 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:
[email protected])
È 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:
[email protected])
È 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:
[email protected])
È 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:
[email protected])
È 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 da compiere
identifica i dati o i dispositivi 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:
[email protected])
È 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:
[email protected])
È 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:
[email protected])
È vietata la riproduzione non autorizzata a fini commerciali.
Gli ALGORITMI
Bruno Bertaccini (mail to:
[email protected])
È 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:
[email protected])
È 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:
[email protected])
È 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:
[email protected])
È 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:
[email protected])
È 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:
[email protected])
È 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:
[email protected])
È 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:
[email protected])
È 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:
[email protected])
È 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:
[email protected])
È 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:
[email protected])
È 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:
[email protected])
È 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
2 Lettura del valore numerico n e calcolo di
i
i 0
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:
[email protected])
È 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:
[email protected])
È 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:
[email protected])
È vietata la riproduzione non autorizzata a fini commerciali.
Strutture dati (fondamenti)
Bruno Bertaccini (mail to:
[email protected])
È 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:
[email protected])
È vietata la riproduzione non autorizzata a fini commerciali.
Strutture dati
Strutture di memorizzazione Variabili singole: singole celle di memoria cui fare riferimento sfruttando un’etichetta definita dal programmatore es: A, pippo, tot Vettori: una sequenza indicizzabile di variabili dello stesso tipo accomunate da una stessa etichetta definita dal programmatore es: vett[1] consente di accedere alla prima cella di memoria del vettore denominato vett ab[10] consente di accedere alla 10° cella di memeoria del vettore denominato ab
Bruno Bertaccini (mail to:
[email protected])
È vietata la riproduzione non autorizzata a fini commerciali.
Strutture dati
Strutture di memorizzazione Matrici: una sequenza indicizzabile di vettori dello stesso tipo; una matrice di fatto si configura come un insieme di celle di memoria dello stesso tipo organizzate in righe e colonne, accumunate da una stessa etichetta definita dal programmatore es: mat[1,3] consente di accedere alla cella collocata all’intersezione tra la prima riga e la terza colonna della matrice denominata mat; M[2,2] consente di accedere alla cella collocata all’intersezione tra la seconda riga e la seconda colonna della matrice denominata M;
Bruno Bertaccini (mail to:
[email protected])
È vietata la riproduzione non autorizzata a fini commerciali.
I DIAGRAMMI a BLOCCHI (o Diagrammi di Flusso)
Bruno Bertaccini (mail to:
[email protected])
È 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:
[email protected])
È 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:
[email protected])
È 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:
[email protected])
È 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:
[email protected])
È vietata la riproduzione non autorizzata a fini commerciali.
I Diagrammi a Blocchi
es. 1 : scambio di due valori numerici START
INPUT A INPUT B
semplice scambio di 2 valori numerici immessi da tastiera nelle variabili A e B
AUX = B B=A A = AUX
PRINT A PRINT B
STOP Bruno Bertaccini (mail to:
[email protected])
È vietata la riproduzione non autorizzata a fini commerciali.
I Diagrammi a Blocchi
es. 1 : scambio di due valori numerici START
INPUT A INPUT B
Scambia A con B
PRINT A PRINT B
semplice scambio di 2 valori numerici immessi da tastiera nelle variabili A e B dove
Scambia A con B
AUX = B B=A A = AUX
STOP Bruno Bertaccini (mail to:
[email protected])
È vietata la riproduzione non autorizzata a fini commerciali.
I Diagrammi a Blocchi
es. 2 : scambio di due valori numerici START
INPUT A INPUT B
A>B
No
scambio di 2 valori numerici immessi da tastiera nelle variabili A e B solo se il primo è maggiore del secondo
Sì
Scambia A con B
PRINT A PRINT B
STOP Bruno Bertaccini (mail to:
[email protected])
È 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:
[email protected])
È vietata la riproduzione non autorizzata a fini commerciali.
I Diagrammi a Blocchi
es. 3 : somma dei valori di un vettore Somma degli elementi di un vettore V già presente in memoria
Somma vettore
START
J=1 S=0
No
J N
Scambia M con N
Sì
Q = INT(N/M) R = N - M*Q
No
N=M
Sì R=0
M=R Bruno Bertaccini (mail to:
[email protected])
PRINT ”MCD :”, M
STOP
È vietata la riproduzione non autorizzata a fini commerciali.
I Diagrammi a Blocchi
es. 7 : calcolo del MCD (algoritmo inefficiente) START
INPUT N INPUT M
No M>N
Scambia M con N
Sì
Lettura di due valori numerici M e N (con M>=N) e calcolo del M.C.D. con un algoritmo inefficiente
J=M
Q = INT(N / J) R = N - J*Q J=J-1 Sì
No R=0 Bruno Bertaccini (mail to:
[email protected])
PRINT ”MCD :”, J
STOP È 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 4ac 2
Bruno Bertaccini (mail to:
[email protected])
b 2a
>0 :
x
=0 :
x
B) then { AUX=B B=A A=AUX } write A,B stop
No
Sì
Scambia A con B
PRINT A PRINT B
STOP Bruno Bertaccini (mail to:
[email protected])
È vietata la riproduzione non autorizzata a fini commerciali.
Diagrammi a blocchi e pseudo-linguaggio
es. 3 : somma dei valori di un vettore Somma di una certa sequenza di valori, immessi da tastiera all’interno di un vettore
start read N S=0 for I=1 to N{ read VETT[I] S=S+VETT[I] } write S stop Bruno Bertaccini (mail to:
[email protected])
È vietata la riproduzione non autorizzata a fini commerciali.
Pseudo-linguaggio
es. 3 : somma di valori (variante) Somma di una certa sequenza di valori, immessi da tastiera senza ricorrere al vettore start read N S=0 for I=1 to N{ read A S=S+A } write "totale: ", S stop Bruno Bertaccini (mail to:
[email protected])
È vietata la riproduzione non autorizzata a fini commerciali.
Pseudo-linguaggio
es. 4
Leggere un numero da tastiera tra 50 e 90 e produrre la somma di tutti i numeri dispari tra 49 ed il valore letto
start write "inserisci numero tra 50 e 90: " read N if (N90) then { write ("errore") NB: in questa forma, l’algoritmo si ferma in stop caso di errore (condizione numero tra 50 e 90 non rispettata per cui l’IF fa eseguire lo } STOP) senza dare la possibilità all’utente di S=0 inserire un nuovo numero for I = 49 to N step 2{ S=S+I } write "totale: ", S stop Bruno Bertaccini (mail to:
[email protected])
È vietata la riproduzione non autorizzata a fini commerciali.
Pseudo-linguaggio
es. 4 (variante) Leggere un numero da tastiera tra 50 e 90 e produrre la somma di tutti i numeri dispari tra 49 ed il valore letto start N=0 while (N90){ write "inserisci numero tra 50 e 90: " read N if (N90) then { write ("errore") } } S=0 Per ovviare al problema precedente (uscita forzata for I = 49 to N step 2{ al primo errore) si utilizza il WHILE: per far sì che l’algoritmo entri nel WHILE si S=S+I preassegna ad N (variabile che conterrà il numero } da leggere) un valore NON compreso tra 50 e 90 (nell’esempio si parte con N=0). write "totale: ", S Finchè l’utente continuerà ad inserire valori NON stop compresi tra 50 e 90, il WHILE continuerà ad eseguire le istruzioni tra parentesi graffe
Bruno Bertaccini (mail to:
[email protected])
È vietata la riproduzione non autorizzata a fini commerciali.
Pseudo-linguaggio
es. 5: successione semplice Produrre la somma dei primi 20 numeri della successione: 1, 3, 7, 15, 31 … (an+1 = 2*an +1) start Partendo da 0, il primo elemento generato A=0 della successione all’interno del FOR è 1, come richiesto dall’esercizio SUM=0 for I = 1 to 20{ A = 2*A + 1 SUM = SUM + A } write SUM stop
Bruno Bertaccini (mail to:
[email protected])
È vietata la riproduzione non autorizzata a fini commerciali.
Pseudo-linguaggio
es. 5: successione di Fibonacci Produrre la somma dei primi M numeri della successione di Fibonacci: 0, 1, 1, 2, 3, 5, 8 … (an+1 = an + an-1)
start write "quanti numeri: " read M if (M