Algoritmi e basi della programmazione - · PDF file2.2 Rappresentazione degli algoritmi .....4 2.2.1 Concetto di variabile ... telligente, capace solo di eseguire istruzioni molto

  • Upload
    buithu

  • View
    219

  • Download
    0

Embed Size (px)

Citation preview

  • Algoritmi e basi dellaprogrammazione

    Fulvio Ferroni [email protected]

    2010.08.31

  • II

  • Indice generale1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

    2 Gli algoritmi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2

    2.1 Propriet degli algoritmi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

    2.2 Rappresentazione degli algoritmi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

    2.2.1 Concetto di variabile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42.2.2 Linguaggio di progetto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62.2.3 Diagrammi di flusso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

    2.3 Strutture di controllo fondamentali degli algoritmi . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8

    2.3.1 Sequenza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82.3.2 Selezione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92.3.3 Iterazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

    2.4 Strutture di controllo derivate degli algoritmi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

    2.4.1 Selezione multipla . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .182.4.2 Iterazione calcolata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

    2.5 La programmazione strutturata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

    2.5.1 Il teorema di Jacopini-Bohm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

    2.6 Le tecniche Top-Down . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

    3 I linguaggi di programmazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

    4 Strutture dati astratte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

    5 Documentazione del software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

    III

  • IV

  • 1Capitolo 1

    IntroduzioneScopo di questa dispensa quello di esaminare le nozioni fondamentali riguardanti la scrittura diprogrammi senza esaminare in dettaglio alcun linguaggio di programmazione.

    Una scelta precisa viene invece effettuata a livello di modello di programmazione, a vantaggiodel paradigma imperativo, senza che ci impedisca un breve esame anche degli altri paradigmi.

    Il linguaggio cui si fa riferimento, pur senza dettagliarne i costrutti e le istruzioni, il c; perquesto anche il linguaggio di progetto per la descrizione degli algoritmi, proposto nel prossimocapitolo e concepito autonomamente dallautore, si ispira alla sintassi del linguaggio c.

    La dispensa inizia con la teoria degli algoritmi, allargando il discorso allattivit di analisi dasvolgere come primo passo del ciclo di vita dei programmi; si passa poi alle generalit sui pa-radigmi di programmazione, alla suddivisione in livelli dei linguaggi, alle modalit per la lorotraduzione; successivamente si illustrano le pi importanti strutture dati astratte e si conclude conun breve esame sulla documentazione e produzione del software.

  • 2Capitolo 2

    Gli algoritmiIl termine algoritmo ispirato dal nome del matematico e astronomo arabo del VII secolo Abu JaMohammed Ibn Musa Al-Khowarizmi che, oltre ad essere linventore dello zero e dellalgebra,ha la paternit di quello che considerato uno dei primi algoritmi della storia: il metodo persommare due numeri incolonnandoli e procedendo cifra per cifra da destra verso sinistra tenendoconto dei riporti.

    Per algoritmo si pu intendere un insieme di istruzioni che definiscono una sequenza dioperazioni mediante le quali si risolvono tutti i problemi di una certa classe; in particolare importante lultima parte della definizione dove si specifica che un algoritmo deve avere tra lesue caratteristiche quella della generalit.

    Unaltra fra le numerose definizioni possibili pu essere la seguente: metodo di elaborazione daapplicare a certi dati iniziali per ottenere dei dati finali o risultati.

    In ogni caso importante che, in partenza, il problema da risolvere sia ben posto e cio che:

    sia chiaro lobiettivo da raggiungere;

    i dati di partenza sia noti e sufficienti;

    il problema sia risolubile da parte di chi lo affronta.

    Se manca una di queste condizioni lalgoritmo non pu essere individuato.

    Si deve anche notare come sia importante, quando si affronta un problema, non confondere il ri-sultato (ci che si vuole ottenere) con la soluzione (il metodo che conduce al risultato elaborandoi dati di partenza).

    Lindividuazione dellalgoritmo risolutivo di un problema solo il primo passo di un proce-dimento in pi fasi che conduce alla soluzione del problema stesso in modo automatico conlutilizzo del sistema di elaborazione.Questo procedimento verr dettagliato in seguito, ma possiamo gi accennare che il passosuccessivo consiste nella trasformazione dellalgoritmo in un programma scritto usando unlinguaggio di programmazione; si pu affermare che lalgoritmo e il relativo programma sonodue descrizioni, fatte con mezzi diversi, dello stesso metodo di soluzione.

    2.1 Propriet degli algoritmi

    Distinguiamo da ora in poi laspetto della risoluzione del problema da quello dellesecuzionedel relativo algoritmo; distinguiamo cio tra risolutore (luomo, che individua il metodo disoluzione del problema) ed esecutore (la macchina che deve eseguire tale metodo, descrittotramite un algoritmo).

    Lalgoritmo solo la descrizione delle operazioni da svolgere; quindi unentitstatica costituita da istruzioni, anchesse statiche.

    Quando lalgoritmo viene eseguito si ottiene un flusso desecuzione che invece ovviamente dinamico ed costituito da passi (ogni passo lesecuzione di unistruzione).

    A tale proposito pu essere utile pensare alla differnza esistente tra una ricetta di una torta(descrizione delle operazioni da svolgere) e la sua esecuzione per la realizzazione della torta.

  • Gli algoritmi 3

    Nel contesto informatico lesecutore, cio il sistema di elaborazione, una macchina non in-telligente, capace solo di eseguire istruzioni molto elementari (anche se in modo rapidissimo),ma senza alcuna capacit critica o di ragionamento autonomo.

    Un algoritmo deve allora avere le seguenti propriet:

    generalit, della quale abbiamo accennato in precedenza: non un algoritmo il metodoche mi permette di stabilire se 19 un numero primo, lo invece il metodo che permette didecidere se un qualsiasi numero naturale primo;

    comprensibilit: lalgoritmo deve essere espresso in una forma comprensibile alle-secutore; questo non vuol dire che gli algoritmi debbano essere espressi nel linguaggioproprio della macchina, cio quello binario, e neanche che si debbano subito utilizzare i lin-guaggi di programmazione, ma significa che si deve rispettare fin da subito un formalismoabbastanza rigido nella loro stesura;

    eseguibilit: lalgoritmo deve anche essere eseguibile dalla macchina e quindi nondeve prevedere operazioni ad essa sconosciute (linsieme delle istruzioni eseguibili da uncomputer ha cardinalit finita) o che non possano essere eseguite in un tempofinito (le istruzioni devono avere complessit finita);

    finitezza: lalgoritmo deve avere un numero finito di istruzioni;

    riproducibilit: esecuzioni successive dellalgoritmo sugli stessi dati di input devonodare lo stesso risultato;

    non ambiguit: non possono esserci istruzioni vaghe, che prevedano un comportamen-to probabilistico o la scelta casuale del prossimo passo da eseguire; la macchina non infattiin grado di prendere decisioni complesse con ragionamento autonomo e quindi il metodo disoluzione deve essere completo (devono essere previste tutte le possibilit che possanoverificarsi durante lesecuzione) e deterministico (in caso contrario verrebbe menoanche la caratteristica della riproducibilit);

    discretezza: lesecuzione deve avvenire per passi discreti; i dati coinvolti nei calcoliassumono valori che cambiano tra un passo e il successivo e non assumono altri valoriintermedi;

    non limitatezza dellinput: non deve esserci un limite (almeno in linea teorica)alla lunghezza dei dati di input (e quindi anche alla capacit di memoria dellesecutore);

    non limitatezza dei passi desecuzione: devono essere possibili (almeno inlinea teorica) esecuzioni costituite da un numero infinito di passi.

    Le ultime due propriet possono sembrare irrealistiche nelle applicazioni pratiche, ma sononecessarie per i seguenti motivi:

    se ci fosse un limite alla lunghezza dei dati di input verrebbe meno la propriet della gene-ralit: ad esempio non potremmo pi concepire un algoritmo per decidere se un qualsiasinumero naturale primo oppure no;

    esistono funzioni che si dimostra essere computabili a patto di ammettere un numeroinfinito di passi nellalgoritmo di calcolo.

  • 4 Gli algoritmi

    Si deve comunque notare che queste grandi potenzial