ALGORITMI Un algoritmo (detto anche procedura, prescrizione, processo, routine, metodo) è un...

42
ALGORITMI Un algoritmo (detto anche procedura, prescrizione, processo, routine, metodo) è un insieme di regole (dette anche direttive o istruzioni) che, eseguite secondo un ordine prestabilito, consentono di trovare il risultato di un problema a partire dai dati in ingresso. Le caratteristiche fondamentali degli algoritmi sono: 1. non ambiguità: le operazioni indicate devono essere sufficientemente semplici e ben definite da poter essere comprese da un esecutore non particolarmente esperto (uomo o macchina); 2. eseguibilità: l’esecutore deve essere in grado di eseguire ogni singola regola con le risorse a sua disposizione; 3. finitezza: ogni algoritmo deve terminare dopo un numero finito di passi, cioè in un intervallo finito di tempo.

Transcript of ALGORITMI Un algoritmo (detto anche procedura, prescrizione, processo, routine, metodo) è un...

Page 1: ALGORITMI Un algoritmo (detto anche procedura, prescrizione, processo, routine, metodo) è un insieme di regole (dette anche direttive o istruzioni) che,

ALGORITMI

Un algoritmo (detto anche procedura, prescrizione, processo, routine, metodo) è un insieme di regole (dette anche direttive o istruzioni) che, eseguite secondo un ordine prestabilito, consentono di trovare il risultato di un problema a partire dai dati in ingresso.

Le caratteristiche fondamentali degli algoritmi sono:

1. non ambiguità: le operazioni indicate devono essere sufficientemente semplici e ben definite da poter essere comprese da un esecutore non particolarmente esperto (uomo o macchina);

2. eseguibilità: l’esecutore deve essere in grado di eseguire ogni singola regola con le risorse a sua disposizione;

3. finitezza: ogni algoritmo deve terminare dopo un numero finito di passi, cioè in un intervallo finito di tempo.

Page 2: ALGORITMI Un algoritmo (detto anche procedura, prescrizione, processo, routine, metodo) è un insieme di regole (dette anche direttive o istruzioni) che,

La parola “algoritmo” si è diffusa a partire dalla fine degli anni ’60 grazie allo sviluppo rapido della scienza dei calcolatori, che ha uno dei suoi punti focali proprio nello studio degli algoritmi.

Questi si possono infatti tradurre in modo abbastanza semplice e meccanico in programmi, in base alle regole di uno dei molti linguaggi di programmazione oggi esistenti.

Se programmi per problemi numerici sono stati compilati fin dal 1800 a.C., quando matematici babilonesi stabilirono delle regole di risoluzione per alcuni tipi di equazioni, l’esperienza con i calcolatori ha mostrato che i dati elaborati dai programmi possono rappresentare anche quantità non numeriche.

Di conseguenza l’informatica ha focalizzato la sua attenzione sullo studio delle diverse strutture con cui si possono rappresentare le informazioni, e sull’aspetto ramificato o decisionale degli algoritmi, che permette di seguire differenti sequenze di operazioni in dipendenza dallo stato delle cose in un determinato istante.

Page 3: ALGORITMI Un algoritmo (detto anche procedura, prescrizione, processo, routine, metodo) è un insieme di regole (dette anche direttive o istruzioni) che,

Per questa ragione i modelli algoritmici sono talvolta preferiti a quelli matematici tradizionali per la rappresentazione e l’organizzazione delle informazioni.

Gli algoritmi si possono esprimere in modo discorsivo tramite una serie di frasi, oppure in forma grafica.

Ad esempio, per risolvere il PROBLEMA

quanti sono i giorni di maggio

si può applicare il noto ALGORITMO

trenta dì conta novembrecon april, giugno e settembre;

di ventotto ve n’è unotutti gli altri ne han trentuno

Page 4: ALGORITMI Un algoritmo (detto anche procedura, prescrizione, processo, routine, metodo) è un insieme di regole (dette anche direttive o istruzioni) che,

• Nel primo caso (serie di frasi) si può seguire una sintassi libera (pseudo-linguaggio);

• nel secondo caso (forma grafica) si usano i simboli standard dei diagrammi di flusso oppure la rappresentazione tramite struttogrammi.

Nella fase finale l’algoritmo viene espresso o codificato secondo uno specifico linguaggio di programmazione.

Page 5: ALGORITMI Un algoritmo (detto anche procedura, prescrizione, processo, routine, metodo) è un insieme di regole (dette anche direttive o istruzioni) che,

Diagrammi di flusso

Il diagramma di flusso è una rappresentazione grafica di un algoritmo costituita da un insieme di simboli (figure geometriche standard) collegate da frecce.

Questo metodo è stato messo a punto negli Stati Uniti da Larry Constantine ed Edward Yourdon a metà degli anni ’80.

Esso presenta, rispetto alla descrizione verbale, una maggiore concisione, una minore possibilità di ambiguità e una comprensione più immediata.

Per consentire una comprensione uniforme dei diagrammi di flusso, è bene disegnarli secondo alcune convenzioni grafiche standard.

Page 6: ALGORITMI Un algoritmo (detto anche procedura, prescrizione, processo, routine, metodo) è un insieme di regole (dette anche direttive o istruzioni) che,

I simboli dei diagrammi di flusso si possono ottenere in modo semplice con il programma

cliccando sull’icona del disegno

e quindi sul menu Forme → Diagrammi di flusso.

Page 7: ALGORITMI Un algoritmo (detto anche procedura, prescrizione, processo, routine, metodo) è un insieme di regole (dette anche direttive o istruzioni) che,

I simboli in uso sono riportati nelle due figure successive.

Page 8: ALGORITMI Un algoritmo (detto anche procedura, prescrizione, processo, routine, metodo) è un insieme di regole (dette anche direttive o istruzioni) che,
Page 9: ALGORITMI Un algoritmo (detto anche procedura, prescrizione, processo, routine, metodo) è un insieme di regole (dette anche direttive o istruzioni) che,

La figura successiva riporta un semplice diagramma di flusso, che indica la sequenza di passi necessari per calcolare il prodotto 2*3 e visualizzarne il risultato.

Page 10: ALGORITMI Un algoritmo (detto anche procedura, prescrizione, processo, routine, metodo) è un insieme di regole (dette anche direttive o istruzioni) che,

terminatore indica l’inizio e la fine dell’elaborazione; deve essere presente in ogni diagramma di flusso, con la fine non necessariamente come ultimo elemento

processo rappresenta una funzione operativa, quale un calcolo matematico o un’assegnazione di valore a una variabile

visualizzazione indica di mostrare sullo schermo il risultato di una elaborazione

Questo esempio usa i tre simboli:

Page 11: ALGORITMI Un algoritmo (detto anche procedura, prescrizione, processo, routine, metodo) è un insieme di regole (dette anche direttive o istruzioni) che,

Naturalmente i diagrammi di flusso sono sempre più complessi di questo, e uno solo di essi può occupare diverse pagine.

Per questa ragione va posta grande attenzione alle frecce che uniscono i blocchi del diagramma, e che indicano l’ordine in cui saranno eseguite le varie istruzioni.

Come regola generale, il flusso delle operazioni procede dall’alto in basso e da sinistra a destra; tuttavia si potrebbe talvolta dover variare questa regola, e a tale fine si utilizzano appunto le frecce nel modo opportuno.

Osserviamo anche che le frasi scritte nei blocchi di un diagramma non devono seguire alcuna regola grammaticale o sintattica, ma possono avere una forma libera, purché indichino chiaramente l’operazione da eseguire.

Page 12: ALGORITMI Un algoritmo (detto anche procedura, prescrizione, processo, routine, metodo) è un insieme di regole (dette anche direttive o istruzioni) che,

Nella fase successiva della programmazione, quando cioè il diagramma viene tradotto in programma, si deve invece tenere conto scrupoloso delle regole previste dal linguaggio di programmazione scelto.

Gli errori che si possono commettere in questa seconda fase sono, tutto sommato, più facili da evidenziare e da correggere di quelli in cui si può incorrere disegnando un diagramma di flusso.

Page 13: ALGORITMI Un algoritmo (detto anche procedura, prescrizione, processo, routine, metodo) è un insieme di regole (dette anche direttive o istruzioni) che,

sequenzaselezione (o scelta)iterazione (o ciclo)

La sequenza indica una successione di operazioni che devono essere eseguite una dopo l’altra, ciascuna una sola volta; ne è un esempio il diagramma di flusso precedente.

In molti linguaggi di programmazione, tra i quali il C, non esiste una forma sintattica specifica per la sequenza in quanto, in assenza di istruzioni di controllo di flusso, le istruzioni del programma vengono eseguite nell’ordine in cui sono scritte.

Controllo del programma

L’ordine con cui le diverse operazioni devono essere eseguite è specificato da particolari costrutti linguistici, detti strutture di controllo.

Alla metà degli anni ‘60 i due studiosi italiani G. Jacopini e C. Boehm hanno dimostrato che, dato un algoritmo idoneo a risolvere un problema, ne esiste sempre uno equivalente in cui compaiano esclusivamente le tre seguenti strutture fondamentali:

Page 14: ALGORITMI Un algoritmo (detto anche procedura, prescrizione, processo, routine, metodo) è un insieme di regole (dette anche direttive o istruzioni) che,

La selezione (o scelta) permette a un programma di proseguire secondo uno tra due (o più) flussi di istruzioni alternative, a seconda del risultato di un test o del verificarsi di una condizione.

L’iterazione (o ciclo, o loop) consiste nella ripetizione di una o più istruzioni, e si può ottenere collegando il flusso in uscita da un blocco con il flusso in entrata nel blocco stesso o in uno precedente.

In tal modo si possono eseguire compiti ripetitivi senza specificare uno per uno un gran numero di singoli passi, ma scrivendo per esempio un’istruzione del tipo: “esegui il prossimo passo 1.000 volte”.

Page 15: ALGORITMI Un algoritmo (detto anche procedura, prescrizione, processo, routine, metodo) è un insieme di regole (dette anche direttive o istruzioni) che,

Selezione binaria. Nella selezione il test o la condizione sono tipicamente costituiti da una variabile logica, scritta dentro il simbolo di decisione, dal quale escono due frecce. Queste indicano le possibili azioni da compiersi a seconda del valore della variabile, come mostra la figura.

Page 16: ALGORITMI Un algoritmo (detto anche procedura, prescrizione, processo, routine, metodo) è un insieme di regole (dette anche direttive o istruzioni) che,

La selezione tra due alternative viene realizzata nel linguaggio C dal costrutto if...else... dove

• i puntini dopo la parola if indicano la condizione di cui si esamina la verità e le azioni da compiere se la condizione risulta vera,

• quelli dopo la parola else le azioni da compiere se risulta falsa.

Il diagramma di flusso precedente si traduce quindi nel seguente costrutto:

if (a == b) azione 1;else azione 2;

Page 17: ALGORITMI Un algoritmo (detto anche procedura, prescrizione, processo, routine, metodo) è un insieme di regole (dette anche direttive o istruzioni) che,

Si può anche volere compiere una certa azione se il test o la condizione hanno un valore vero, e nessuna azione nel caso contrario.

In tale caso la clausola else viene omessa, e si impiega lo schema seguente, che può essere considerato una forma abbreviata del precedente, dove manca l’azione2.

Ad esempio, se vogliamo determinare il massimo di due numeri, x, y e assegnare tale valore alla variabile maxnum scriveremo:

if (x >= y) maxnum = x;else maxnum = y;

Page 18: ALGORITMI Un algoritmo (detto anche procedura, prescrizione, processo, routine, metodo) è un insieme di regole (dette anche direttive o istruzioni) che,

Per esempio, se si vogliono leggere due numeri e indicare con M il maggiore e m il minore, si può usare lo schema seguente, privo della clausola else

leggi M, m;if (M < m) scambia M con m;

Osserviamo che l’istruzione “scambia M con m;” non è una istruzione elementare (dal punto di vista del computer), e quindi potrebbe non essere disponibile nel linguaggio di programmazione usato.

Essa può comunque essere realizzata sostituendola con le seguenti tre istruzioni elementari:

t = M;M = m;m = t;

Page 19: ALGORITMI Un algoritmo (detto anche procedura, prescrizione, processo, routine, metodo) è un insieme di regole (dette anche direttive o istruzioni) che,

Esempio: Massimo Comun Divisore (1). Un esempio di algoritmo contenente due selezioni binarie con una sola azione è fornito da quello che calcola il Massimo Comun Divisore (MCD) di due interi positivi secondo il seguente metodo di Euclide(*)

(*) Questo algoritmo è enunciato, in termini equivalenti a quelli sopra riportati, nelle proposizioni 1 e 2 del libro VII degli “Elementi” di Euclide.

Per calcolare il MCD di due interi positivi:

• si divide il maggiore per il minore

• se il resto è 0 il minore rappresenta il MCD cercato

• altrimenti il minore sostituisce il maggiore, il resto sostituisce il minore e il procedimento ricomincia da capo.

Page 20: ALGORITMI Un algoritmo (detto anche procedura, prescrizione, processo, routine, metodo) è un insieme di regole (dette anche direttive o istruzioni) che,

Il relativo diagramma di flusso è indicato in figura.

La corrispondente espressione in pseudo istruzioni è la seguente:

1. leggi x, y;2. if (x < y)

scambiali;3. dividi x per y e

chiama r il resto;4. poni x = y;5. poni y = r;6. if (r == 0) stampa

x ; fine 7. vai a 3);

Page 21: ALGORITMI Un algoritmo (detto anche procedura, prescrizione, processo, routine, metodo) è un insieme di regole (dette anche direttive o istruzioni) che,

Selezione multipla. Non sempre la scelta prevede due sole alternative; se queste sono più di due è necessaria una selezione multipla (o n-aria), secondo il seguente schema:

Page 22: ALGORITMI Un algoritmo (detto anche procedura, prescrizione, processo, routine, metodo) è un insieme di regole (dette anche direttive o istruzioni) che,

Osserviamo che anche tale selezione multipla si potrebbe eseguire tramite la selezione binaria, disponendo in cascata più selezioni binarie.

Se, ad esempio, si vuole eseguire

• una addizione tra due numeri se è stato digitato 1;• una moltiplicazione se è stato digitato 2;• una divisione se è stato digitato 3,

si potrebbero disporre in cascata tre selezioni binarie come indicato in figura

Page 23: ALGORITMI Un algoritmo (detto anche procedura, prescrizione, processo, routine, metodo) è un insieme di regole (dette anche direttive o istruzioni) che,
Page 24: ALGORITMI Un algoritmo (detto anche procedura, prescrizione, processo, routine, metodo) è un insieme di regole (dette anche direttive o istruzioni) che,

Tuttavia i moderni linguaggi di programmazione dispongono anche del costrutto di selezione multipla, che permette di realizzare direttamente una scelta n-aria.

Nel linguaggio C, le istruzioni dell’esempio precedente sarebbero:

switch (numero){ case 1: esegui la somma; break; case 2: esegui il prodotto; break; case 3: esegui la divisione; break;}

Page 25: ALGORITMI Un algoritmo (detto anche procedura, prescrizione, processo, routine, metodo) è un insieme di regole (dette anche direttive o istruzioni) che,

Esempio: lati di un triangolo. Come esempio di selezioni binarie in cascata si può considerare il seguente

PROBLEMA: “scrivere un algoritmo che consenta di stabilire se tre numeri, a, b, c possono essere i lati di un triangolo”.

ALGORITMO: come è noto, in un triangolo la somma di due lati qualsiasi è maggiore del terzo (*).

Perciò dovranno essere contemporaneamente soddisfatte le tre condizioni:

a + b > c a + c > b b + c > a

(*) È questa la proposizione n° 20 del libro I degli “Elementi” di Euclide.

Page 26: ALGORITMI Un algoritmo (detto anche procedura, prescrizione, processo, routine, metodo) è un insieme di regole (dette anche direttive o istruzioni) che,

1) leggi a, b, c;2) se (a + b <= c) vai a 7);3) se (a + c <= b) vai a 7);4) se (b + c <= a) vai a 7);5) stampa “Lati validi”;6) fine;7) stampa “Lati non validi”;8) fine;

Esse si traducono nelle seguenti pseudo istruzioni:

e quindi nel diagramma di flusso indicato a lato:

Page 27: ALGORITMI Un algoritmo (detto anche procedura, prescrizione, processo, routine, metodo) è un insieme di regole (dette anche direttive o istruzioni) che,

Iterazione. Affinché l’iterazione sia costituita da un numero finito di passi (caratteristica n. 3 degli algoritmi), è necessario che nella linea di collegamento sia inserito un simbolo di decisione che contenga la condizione di uscita dal ciclo.

Tale blocco di controllo si dice guardia, e si può trovare prima del gruppo di istruzioni che costituiscono il ciclo

Page 28: ALGORITMI Un algoritmo (detto anche procedura, prescrizione, processo, routine, metodo) è un insieme di regole (dette anche direttive o istruzioni) che,

o dopo di esso.

Page 29: ALGORITMI Un algoritmo (detto anche procedura, prescrizione, processo, routine, metodo) è un insieme di regole (dette anche direttive o istruzioni) che,

Per dividere tra loro due numeri naturali:

• si sottrae il divisore dal dividendo;

• si continua a sottrarlo dal risultato dell’ultima sottrazione fino a che tale risultato sia maggiore o uguale al divisore

• il numero di sottrazioni effettuate fornisce il quoziente

• il risultato dell’ultima fornisce il resto della divisione

Esempio: divisione con sottrazioni ripetute. Un esempio di ciclo con guardia all’inizio è costituito dall’algoritmo che esegue la divisione intera fra due numeri naturali con il seguente metodo delle sottrazioni ripetute:

Questo algoritmo si traduce facilmente nel diagramma di flusso seguente, dove la variabile res contiene inizialmente il dividendo, la variabile den il divisore. res contiene poi i risultati delle successive sottrazioni, l’ultimo dei quali fornisce appunto il resto.

Il quoziente è fornito dal contatore quoz, che inizialmente vale 0 e viene incrementato di 1 a ogni sottrazione eseguita.

Page 30: ALGORITMI Un algoritmo (detto anche procedura, prescrizione, processo, routine, metodo) è un insieme di regole (dette anche direttive o istruzioni) che,
Page 31: ALGORITMI Un algoritmo (detto anche procedura, prescrizione, processo, routine, metodo) è un insieme di regole (dette anche direttive o istruzioni) che,

Esempio: moltiplicazione con addizioni ripetute. Un esempio di ciclo con guardia alla fine è costituito dall’algoritmo che esegue la moltiplicazione di due numeri naturali con il metodo delle addizioni ripetute:

Questo algoritmo si traduce facilmente nel seguente diagramma di flusso dove indichiamo con

•A, B i due numeri da moltiplicare

•prod il prodotto

•K una variabile contatore, posta inizialmente uguale a uno dei due numeri. K viene diminuita di 1 ogni volta che si esegue un’addizione, e quando raggiunge il valore 0 determina la fine del ciclo.

per moltiplicare tra loro due numeri naturali si somma uno di essi a se stesso un numero di volte uguale all’altro.

Page 32: ALGORITMI Un algoritmo (detto anche procedura, prescrizione, processo, routine, metodo) è un insieme di regole (dette anche direttive o istruzioni) che,
Page 33: ALGORITMI Un algoritmo (detto anche procedura, prescrizione, processo, routine, metodo) è un insieme di regole (dette anche direttive o istruzioni) che,

Strutturazione degli algoritmi

Come si vede dai due esempi precedenti, un ciclo potrebbe essere realizzato utilizzando, oltre alla sequenza:

• il costrutto di selezione binaria,

• una variabile contatore che viene incrementata o decrementata al suo interno,

• una o più istruzioni di salto ad altri punti del programma.

Tuttavia, per realizzare i cicli la maggior parte dei linguaggi (tra cui il C) dispone dei tre costrutti specifici

for , while , do-while

il cui uso costituisce uno dei fondamenti della cosiddetta programmazione strutturata.

Page 34: ALGORITMI Un algoritmo (detto anche procedura, prescrizione, processo, routine, metodo) è un insieme di regole (dette anche direttive o istruzioni) che,

I costrutti for, while, do-while mascherano l’esistenza della selezione binaria e consentono di evitare l’istruzione di salto, fortemente sconsigliata dai principi della programmazione strutturata.

Infatti le istruzioni di salto rendono difficile comprendere il flusso logico di un programma e quindi intervenire su di esso, specie se le sue istruzioni sono abbastanza numerose.

Page 35: ALGORITMI Un algoritmo (detto anche procedura, prescrizione, processo, routine, metodo) è un insieme di regole (dette anche direttive o istruzioni) che,

Come si può osservare, nella forma strutturata sono scomparse le istruzioni di salto e i riferimenti numerici delle singole istruzioni.

Come esempio di ciclo strutturato, consideriamo l’algoritmo per il MCD (1) già visto, e confrontiamolo con la sua forma strutturata, riportata nella colonna di destra della seguente tabella.

Page 36: ALGORITMI Un algoritmo (detto anche procedura, prescrizione, processo, routine, metodo) è un insieme di regole (dette anche direttive o istruzioni) che,

Struttogrammi. Una rappresentazione grafica degli algoritmi alternativa a quella basata sui diagrammi di flusso, e particolarmente adatta per programmare secondo le tecniche della programmazione strutturata, è quella degli struttogrammi (ingl. structure chart), introdotti nel 1973 da I. Nassi e B. Shneiderman all’IBM.

I grafi di Nassi-Shneiderman consistono in un rettangolo principale, suddiviso a sua volta in rettangoli o triangoli più piccoli, che indicano le operazioni elementari costituenti l’algoritmo.

A differenza di un diagramma di flusso, uno struttogramma non impiega frecce né blocchi di inizio e fine.

La figura seguente indica la rappresentazione mediante struttogrammi delle tre strutture fondamentali della programmazione: la sequenza, la selezione binaria e l’iterazione.

Page 37: ALGORITMI Un algoritmo (detto anche procedura, prescrizione, processo, routine, metodo) è un insieme di regole (dette anche direttive o istruzioni) che,

Come si vede,

• la sequenza è rappresentata da una successione di rettangoli sovrapposti;

• la selezione binaria è rappresentata da un rettangolo diviso in tre parti da due segmenti obliqui: nella zona centrale si indica la condizione da verificare, nelle due laterali le parole “vero” e “falso” (oppure “then” - “else”, “allora” - “altrimenti”, “+” e “-”, o equivalenti);

Page 38: ALGORITMI Un algoritmo (detto anche procedura, prescrizione, processo, routine, metodo) è un insieme di regole (dette anche direttive o istruzioni) che,

• l’iterazione è rappresentata da un rettangolo interno a un altro, con possibilità di porre il controllo all’inizio o alla fine del ciclo.

Page 39: ALGORITMI Un algoritmo (detto anche procedura, prescrizione, processo, routine, metodo) è un insieme di regole (dette anche direttive o istruzioni) che,

• la selezione multipla è rappresentata da una serie di colonne (blocchi case) delle quali viene attivata quella il cui valore è uguale alla condizione.

Page 40: ALGORITMI Un algoritmo (detto anche procedura, prescrizione, processo, routine, metodo) è un insieme di regole (dette anche direttive o istruzioni) che,

Esempio: MCD (1). Come primo esempio, esprimiamo con uno struttogramma l’algoritmo del MCD (1) visto in precedenza:

Page 41: ALGORITMI Un algoritmo (detto anche procedura, prescrizione, processo, routine, metodo) è un insieme di regole (dette anche direttive o istruzioni) che,

Esempio: divisione con sottrazioni ripetute. Come altro esempio, esprimiamo con uno struttogramma l’algoritmo della divisione tramite sottrazioni ripetute:

Page 42: ALGORITMI Un algoritmo (detto anche procedura, prescrizione, processo, routine, metodo) è un insieme di regole (dette anche direttive o istruzioni) che,

Un approfondimento dei grafi di Nassi-Shneiderman si trova in:

http://faculty.kutztown.edu/bobeck/nassi_schart.pdf