328
Fiorenzo Formichi Giorgio Meini Corso di informatica Algoritmi e linguaggio C++ Pagine web 1 2 3 Idee per il tuo futuro per Informatica

Corso Di Informatica 1

Embed Size (px)

DESCRIPTION

formichi meini, corso di informatica 1 per universita informatica basi linguaggio sql xml oagine web dinamiche php

Citation preview

  • Fiorenzo FormichiGiorgio Meini

    Corso di informatica

    Algoritmi e linguaggio C++ Pagine web

    1 2 3 Idee per il tuo futuro

    per Informatica

  • Fiorenzo FormichiGiorgio Meini

    Corso diinformatica

    Algoritmi e linguaggio C++Pagine web

    per Informatica

  • Copyright 2012 Zanichelli editore S.p.A., Bologna [6180]www.zanichelli.it

    I diritti di elaborazione in qualsiasi forma o opera, di memorizzazione anche digitale su supporti di qualsiasi tipo (inclusi magnetici e ottici),di riproduzione e di adattamento totale o parziale con qualsiasi mezzo (compresi i microfilm e le copie fotostatiche), i diritti di noleggio,di prestito e di traduzione sono riservati per tutti i paesi.Lacquisto della presente copia dellopera non implica il trasferimento dei suddetti diritti n li esaurisce.

    Per le riproduzioni ad uso non personale (ad esempio: professionale, economico, commerciale, strumenti di studio collettivi, come dispensee simili) leditore potr concedere a pagamento lautorizzazione a riprodurre un numero di pagine non superiore al 15% delle paginedel presente volume. Le richieste per tale tipo di riproduzione vanno inoltrate a

    Associazione Italiana per i Diritti di Riproduzionedelle Opere dellingegno (AIDRO)Corso di Porta Romana, n.10820122 Milanoe-mail [email protected] e sito web www.aidro.org

    Leditore, per quanto di propria spettanza, considera rare le opere fuori del proprio catalogo editoriale, consultabile al sitowww.zanichelli.it/f_catalog.html.La fotocopia dei soli esemplari esistenti nelle biblioteche di tali opere consentita, oltre il limite del 15%, non essendo concorrenziale allopera.Non possono considerarsi rare le opere di cui esiste, nel catalogo delleditore, una successiva edizione, le opere presenti in cataloghidi altri editori o le opere antologiche. Nei contratti di cessione esclusa, per biblioteche, istituti di istruzione, musei ed archivi, la facoltdi cui allart. 71 - ter legge diritto dautore. Maggiori informazioni sul nostro sito: www.zanichelli.it/fotocopie/

    Realizzazione editoriale:

    Coordinamento redazionale: Matteo Fornesi Segreteria di redazione: Deborah Lorenzini Progetto grafico: Editta Gelsomini Collaborazione redazionale, impaginazione, disegni e indice analitico: Stilgraf, Bologna

    Contributi:

    I capitoli della sezione B sono a cura di Federico Meini Rilettura dei testi in inglese: Roger Loughney

    Copertina:

    Progetto grafico: Miguel Sal & C., Bologna Realizzazione: Roberto Marchetti Immagine di copertina: valdis torms/Shutterstock; Artwork Miguel Sal & C.

    Prima edizione: gennaio 2012

    Limpegno a mantenere invariato il contenuto di questo volume per un quinquennio (art. 5 legge n. 169/2008) comunicato nel catalogo Zanichelli, disponibile anche online sul sito www.zanichelli.it,ai sensi del DM 41 dell8 aprile 2009, All. 1/B.

    File per diversamente abiliLeditore mette a disposizione degli studenti non vedenti, ipovedenti, disabili motori o con disturbispecifici di apprendimento i file pdf in cui sono memorizzate le pagine di questo libro. Il formatodel file permette lingrandimento dei caratteri del testo e la lettura mediante software screen reader.Le informazioni su come ottenere i file sono sul sito www.zanichelli.it/diversamenteabili

    Suggerimenti e segnalazione degli erroriRealizzare un libro unoperazione complessa, che richiede numerosi controlli: sul testo, sulle immaginie sulle relazioni che si stabiliscono tra essi. Lesperienza suggerisce che praticamente impossibile pubblicareun libro privo di errori. Saremo quindi grati ai lettori che vorranno segnalarceli.Per segnalazioni o suggerimenti relativi a questo libro scrivere al seguente indirizzo:

    [email protected]

    Le correzioni di eventuali errori presenti nel testo sono pubblicati nel sito www.online.zanichelli.it/aggiornamenti

    Zanichelli editore S.p.A. opera con sistema qualitcertificato CertiCarGraf n. 477secondo la norma UNI EN ISO 9001:2008

  • III

    Algoritmie linguaggio C++

    A1 Informatica e informazione1 Dati e informazioni 42 La codica delle informazioni 63 Linformatica e i suoi ambiti 9SINTESI 11

    A2 Algoritmi1 Dal problema allalgoritmo 132 Algoritmi ed esecutori 143 La rappresentazione degli algoritmi 204 Analisi di problemi e sintesi di algoritmi 345 Un esempio di algoritmo numerico: il calcolo della radice quadrata 466 La macchina di Turing come esecutore di algoritmi 487 Cenni sulla valutazione della complessit degli algoritmi 60SINTESI 64QUESITI ESERCIZI 65ORIGINAL DOCUMENT 74

    A3 Linguaggi di programmazione1 Evoluzione dei linguaggi di programmazione 772 Paradigmi di programmazione 813 Fasi di sviluppo di un programma 824 Traduzione del codice sorgente in codice eseguibile 83SINTESI 87QUESITI 88ORIGINAL DOCUMENT 90

    Indice

    Indice

    SEZIONE

    A

    Formichi, Meini CORSO DI INFORMATICA Zanichelli 2012 per Informatica

  • IV Indice

    A4 Il linguaggio di programmazione C++1 Struttura fondamentale di un programma 952 Variabili e costanti 973 Espressioni e condizioni 1034 Operazioni standard di input e output 1085 Controllo del usso di esecuzione 1116 Esempi di implementazione di algoritmi in linguaggio C++ 1197 Funzioni della libreria matematica 124SINTESI 126QUESITI ESERCIZI 130ORIGINAL DOCUMENT 134

    A5 Le funzioni in C++1 Denizione e invocazione di una funzione 1372 Passaggio dei parametri per valore e per riferimento 1423 Prototipazione delle funzioni 1444 Overloading dei nomi delle funzioni 148SINTESI 150QUESITI ESERCIZI 151

    A6 Gli array in C++1 Array mono e bidimensionali 1542 Array come parametri di funzioni 1633 Stringhe di caratteri in stile C 171SINTESI 175QUESITI ESERCIZI LABORATORIO 176

    A7 Le strutture in C++1 Le strutture come tipi di dato deniti dallutente 1842 Tabelle come array di strutture 187SINTESI 189QUESITI ESERCIZI LABORATORIO 190

    A8 Ordinamento e ricerca1 Ordinamento 1932 Ricerca 202SINTESI 207QUESITI ESERCIZI 208ORIGINAL DOCUMENT 210

    Formichi, Meini CORSO DI INFORMATICA Zanichelli 2012 per Informatica

  • VIndice

    A9 La ricorsione1 Induzione e ricorsione 2122 Funzioni ricorsive 2153 La ricorsione e gli array 2184 Un esempio di strategia risolutiva ricorsiva:

    il gioco della Torre di Hanoi 221SINTESI 225QUESITI ESERCIZI 226

    A10 I le1 Gestione dei le in C++ 2292 Tecniche per la gestione dei le testuali sequenziali 236SINTESI 244QUESITI ESERCIZI 245

    A11 Introduzione alla programmazioneorientata agli oggetti

    1 Tipi di dato astratto in C++ 2492 Code e pile come tipi di dato astratto 2563 Il dimensionamento dinamico degli attributi in C++ 2614 Un esempio di genericit in C++ 266SINTESI 268QUESITI ESERCIZI LABORATORIO 269

    A12 Strumenti di sviluppo in ambiente Linuxe Windows

    1 Uso del compilatore GCC in ambiente Linux2 Uso dellIDE Visual Studio in ambiente WindowsSINTESI

    Il capitolo A12 disponibile,con chiave di attivazione, allindirizzo:www.online.zanichelli.it/formichimeinicorsoinformatica

    Formichi, Meini CORSO DI INFORMATICA Zanichelli 2012 per Informatica

  • VI Indice

    Pagine web

    B1 Il linguaggio HTML1 Gli elementi fondamentali del linguaggio HTML 2752 I collegamenti ipertestuali (link) 2853 Le immagini 2864 Suddivisione della pagina in funzione del contenuto 289SINTESI 291QUESITI 292ORIGINAL DOCUMENT 294

    B2 CSS (Cascading Style Sheet) per pagine web1 Struttura del codice CSS 2972 CSS: formattazione del testo 3003 Sfondi 3064 Il modello a scatola 308SINTESI 313QUESITI 314

    Indice analitico 316

    SEZIONE

    B

    Formichi, Meini CORSO DI INFORMATICA Zanichelli 2012 per Informatica

  • Algoritmie linguaggio C++A

    SEZIONE

    A1 Informatica e informazione

    A2 Algoritmi

    A3 Linguaggi di programmazione

    A4 Il linguaggio di programmazione C++

    A5 Le funzioni in C++

    A6 Gli array in C++

    A7 Le strutture in C++

    A8 Ordinamento e ricerca

    A9 La ricorsione

    A10 I le

    A11 Introduzione alla programmazioneorientata agli oggetti

    A12 Strumenti di sviluppo in ambiente Linuxe Windows

    Formichi, Meini CORSO DI INFORMATICA Zanichelli 2012

  • 2Informaticae informazione

    A1 Informatica e informazione

    Milioni di persone ogni giorno si connettono al web per cercare informazio-ni di vario genere. Per far questo spesso si afdano a sistemi automatici che,analizzando alcune parole chiave fornite dallutente, interrogano un insie-me di dati in precedenza raccolti e organizzati e restituiscono un indice deicontenuti disponibili classicandoli in base a criteri che ne stabiliscono ilgrado di rilevanza con quanto specicato dallutente. Limmagine che segue relativa alla home-page di uno dei pi noti motori di ricerca e costituiscelinterfaccia tramite la quale i cibernauti possono avviare le loro ricerche:

    Nascosta dietro questa semplice pagina web esiste uninfrastruttura moltocomplessa, resa dai suoi progettisti di semplice utilizzo afnch il maggiornumero di persone possa fruire in maniera semplice delle sue funzionalit.Senza scendere nel dettaglio dellarchitettura generale di questo motore diricerca, possiamo vederne nella gura che segue il primo strato nascosto,con lavvertenza che questo, in qualche modo, un po come sollevare solola buccia pi esterna di una cipolla:

    A1

    Formichi, Meini CORSO DI INFORMATICA Zanichelli 2012

  • 3Introduzione

    Software e hardware

    Il termine software viene gene-

    ralmente utilizzato per indicare

    i programmi in grado di funzio-

    nare su computer o comunque

    su un qualsiasi dispositivo con

    capacit di elaborazione (te-

    lefono cellulare, console per

    videogiochi, navigatore satel-

    litare ecc.).

    Il termine deriva dalla lingua

    inglese come contrazione di

    due vocaboli, soft (morbido) e

    ware (oggetto, prodotto). Tra-

    dizionalmente esso si contrap-

    pone ad hardware, ovvero lin-

    sieme delle componenti siche

    (elettroniche, elettriche, ottiche

    e meccaniche) di un sistema di

    elaborazione.

    Questa vista, limitata a una sola parte del software che dal punto di vistagraco realizza la home-page del sito, si ottiene con il comando del browserche consente di visualizzare il codice sorgente della pagina.

    OSSERVAZIONE Da quanto appena visto facile intuire come nelluni-verso informatico vi siano almeno due categorie di attori: gli utilizzatorie gli sviluppatori.I primi sono coloro che si siedono davanti a un computer e utilizzano lesue funzionalit per gli scopi pi disparati: lavoro, studio, gioco ecc.I secondi sono gli informatici di professione, cio coloro che mettonoil loro lavoro al servizio dei primi sviluppando i sistemi che altri o lorostessi utilizzeranno.

    In modo un po scherzoso potremmo dire che, rispetto a ci che apparesullo schermo, i primi sono coloro che in qualche modo stanno davanti,mentre i secondi sono quelli che stanno dietro. Ovviamente, mentre oc-corrono notevoli conoscenze tecniche per appartenere alla categoria degliinformatici di professione, per appartenere a quella degli utenti nali neoccorrono decisamente di meno talvolta solo il minimo indispensabi-le e questo grazie al lavoro dei primi, costantemente orientato a renderesempre pi semplice luso del computer per tutti.Nel corso del tempo quella dellinformatico divenuta una professionemultiforme, in grado di coprire una vasta gamma di mansioni e di affron-tare sempre nuove sde, tra cui la ricerca di soluzioni a molti problemi dellasociet contemporanea, utilizzando la tecnologia informatica disponibile, ela produzione di nuovi strumenti e nuova conoscenza, facendo avanzare lostato dellarte della ricerca tecnologica e scientica.In linea di principio, un buon informatico dovrebbe:

    possedere conoscenze e competenze, circa le scienze e le tecnologie del-linformazione e della comunicazione, tali da poter essere utilizzate nel-la progettazione, nello sviluppo e nella gestione di sistemi informatici;

    avere la capacit di affrontare e analizzare problemi per lo sviluppo disistemi informatici che ne permettano la soluzione;

    riuscire ad acquisire metodologie di indagine per applicarle a situazioniconcrete tramite la conoscenza di vari tipi di strumenti (logici, matema-tici ecc.) di supporto alle competenze informatiche;

    essere capace di lavorare in gruppo o a livello autonomo in attivit ine-renti la progettazione, lorganizzazione, la gestione e la manutenzionedi sistemi informatici (con specico riguardo ai requisiti di afdabilit,prestazioni e sicurezza), al ne di potersi inserire adeguatamente in variambienti di lavoro quali: aziende produttrici di software (software house); aziende ed enti per la ricerca e lo sviluppo di soluzioni nellambito

    delle tecnologie dellinformazione e della comunicazione (ICT, In-formation and Communication Technology);

    centri di calcolo pubblici e privati;

    Formichi, Meini CORSO DI INFORMATICA Zanichelli 2012

  • 4 A1 Informatica e informazione

    aziende fornitrici di servizi informatici e gestionali; enti pubblici e privati con esigenze di gestione di grandi basi di dati; piccole e medie aziende in ogni settore produttivo con esigenze di

    gestione informatica e reti di computer.

    Ma linformatica, considerata una delle scienze moderne per eccellenza, inrealt affonda le sue radici nel passato; padri dellinformatica sono infattisolitamente considerati due matematici del secolo scorso la cui attivit stata al culmine negli anni immediatamente successivi alla seconda guerramondiale:

    John von Neumann (1903-1957), matematico e informatico unghere-se naturalizzato statunitense, ide larchitettura della macchina cheporta il suo nome, sulla base della quale sono progettati e realizzati icomputer moderni;

    Alan Turing (1912-1954), matematico, logico e crittoanalista britanni-co, concep il modello di macchina che porta il suo nome, fondamen-to teorico di ogni moderno sistema programmabile.

    Lintroduzione del PC (Personal Computer), e il conseguente ingressodellinformatica nelle case di tutti, invece un evento molto pi recente:il primo PC fu costruito intorno alla met degli anni 70. Nello stesso pe-riodo ha origine la pi grande rivoluzione informatica, e cio la diffusionedellaccesso a Internet; le funzionalit del protocollo TCP/IP, sul quale sibasa la trasmissione delle informazioni sulla rete, sono state inizialmentedimostrate su reti composte da poche decine di computer. Oggi Internetconnette centinaia di milioni di computer.

    1 Dati e informazioni

    Spesso nella pratica di tutti i giorni si tende a rendere interscambiabili itermini dato e informazione e in effetti non sempre facile fare unanetta distinzione tra questi.Consideriamo le seguenti denizioni e proviamo a fare qualche esempio.

    Un dato (dal latino datum, fatto) la misura primaria di un fenome-no che siamo interessati a osservare.

    Si pu utilizzare un metro per misurare laltezza di una persona, oppure utilizzareun termometro per misurare la sua temperatura corporea. Supponendo di avermisurato nel primo caso 178 cm e nel secondo caso 39 C, abbiamo ottenutodue dati distinti rispetto ad altrettanti fenomeni osservati.E

    SE

    MP

    IO

    Linformazione ci che si ottiene dallelaborazione di uno o pi datie che in grado di accrescere il nostro stato di conoscenza rispetto a unfenomeno con il quale siamo interessati a interagire.

    Il computer

    Il computer moderno una

    macchina basata sul concetto

    di programma memorizzato.

    Le origini di tale idea non sono

    chiare, alcuni ritengono che si

    debba a von Neumann, altri a

    Turing, che si erano conosciu-

    ti nel 1935. In ogni caso, von

    Neumann fu il primo che la

    realizz praticamente. Il punto

    chiave consistette nellinserire

    i programmi dentro la mac-

    china, non sotto la tradizionale

    forma di connessioni tra cavi,

    ma come cariche elettriche o

    impulsi elettrici, in modo tale

    da controllare e modicare

    le operazioni della macchina

    senza la necessit di riposizio-

    nare cavi o interruttori.

    Riuscire a immaginare come

    fecero von Neumann e Turing

    una macchina controllata dal-

    linterno richiese un notevole

    salto concettuale, perch

    Formichi, Meini CORSO DI INFORMATICA Zanichelli 2012

  • 51 Dati e informazioni

    no ad allora le macchineerano sempre state controlla-te dallesterno mediante leve,pulsanti e dispositivi vari.In particolare von Neumanndecise che le funzioni di basedi un computer dovessero es-sere presenti nella macchinacome parte integrante dellasua struttura sica, potendonevariare a piacere ordine e com-binazione di esecuzione, cosda poter lavorare su problemidiversi senza dover modicarela macchina ma semplice-mente cambiando le istruzioni.Una volta fornite le istruzionial dispositivo, spiegava vonNeumann, questo le avrebbesvolte completamente e sen-za bisogno di ulteriori interven-ti dellintelligenza umana.Sulla base di queste idee vonNeumann contribu nel 1945alla progettazione del compu-ter EDVAC, mentre Turing rea-lizz il computer ACE nel 1950.

    In generale, da un punto di vista puramente intuitivo, possiamo affer-mare che, maggiore la quantit di dati di cui si dispone rispetto a unfenomeno da analizzare, migliore sar la qualit dellinformazione che,a partire da una corretta elaborazione, si riesce a conseguire per appro-fondire la sua conoscenza.

    Nel caso della temperatura corporea a cui si fatto riferimento, una sua opportu-na elaborazione ci pu portare a dedurre linformazione che il soggetto osservatoha qualche problema di salute: infatti alcune minime conoscenze di medicina cidicono che una temperatura superiore a 37 C indice di una alterazione febbrilein corso (nel caso specico la nostra elaborazione si limitata al confronto deldato rilevato con un valore di soglia standard).

    ES

    EM

    PIO

    Un medico incrocia tra loro i sintomi e i risultati delle analisi (dati) per formulare unacorretta diagnosi dei problemi di salute del paziente (informazione). Allo stessomodo un economista analizza i dati di una certa azienda per determinarne landa-mento economico ed eventualmente individuare i correttivi idonei afnch la suaredditivit si mantenga su livelli soddisfacenti.

    ES

    EM

    PIO

    Non sempre, osservando lo scenario di un fenomeno, tutti i dati analiz-zabili risultano utili alla sintesi dellinformazione. Per esempio, esistonosituazioni in cui il paziente presenta dei sintomi che non solo non sonoutili alla formulazione di una corretta diagnosi, ma rischiano di portare ilmedico fuori strada.

    OSSERVAZIONE Possiamo affermare che, in generale, il conseguimentodi buone informazioni discende da un aspetto sia quantitativo sia qua-litativo dei dati. Ovvero necessario raccogliere pi dati possibile circail fenomeno oggetto della nostra analisi, ma anche essere in grado discartare quelli che non sono necessari ai nostri scopi.Una corretta elaborazione di tali dati ci condurr quindi a informazioniutili sia alla comprensione sia a una corretta interazione con il fenomenostudiato.

    Esaminiamo ora il lavoro del nostro medico (o economista): egli in gradodi raccogliere molti dati circa il paziente (o azienda) che sta analizzando, discartare con precisione i dati inutili, di correlare in maniera corretta i datie di elaborarli no a formulare una corretta diagnosi e individuare la curaappropriata, ma... il malato muore (o lazienda fallisce)!

    Sempre relativamente al concetto di informazione possibile pensare alla differen-za funzionale che c tra un lampione e un semaforo: entrambi utilizzano lenergiaelettrica in ingresso per produrre energia luminosa in uscita, ma mentre la luce dellampione ha il solo scopo di illuminare, i tre diversi colori della luce del semaforohanno una importante valenza informativa nel controllo dei ussi di trafco a unincrocio.

    ES

    EM

    PIO

    Informatica e velocit

    La storia dellumanit vista at-

    traverso lottica della velocit

    dimostra che solo chi controlla

    le macchine che permettono

    di agire velocemente produce

    ricchezza e detiene il potere.

    Dove per macchina si pu

    intendere la onda che lan-

    cia la pietra, il jet supersonico

    che trasporta un missile come

    pure il pacico fax. Quello che

    conta guadagnare tempo sul

    tempo, superare i limiti dello

    spazio.PAUL VIRILIO

    La rivoluzione industriale, che

    pure aveva prodotto unacce-

    lerazione notevole dei mezzi

    di trasporto, produzione e co-

    municazione, era tuttavia rima-

    staaunavelocitrelativa:

    Formichi, Meini CORSO DI INFORMATICA Zanichelli 2012

  • 6 A1 Informatica e informazione

    Dov che ha sbagliato? Probabilmente non ha tenuto conto di un ulterioreelemento critico, il fattore tempo: ha impiegato troppo tempo nel processodi indagine/formulazione della diagnosi.

    OSSERVAZIONE Spesso nella vita reale le informazioni hanno una vali-dit limitata nel tempo, basta pensare allandamento dei titoli in borsa:nel giro di pochi minuti la loro valutazione pu cambiare notevolmente.

    Una delle funzioni dellinformatica quella di mettere a disposizionedellutente di un sistema informatico procedure e tecnologie in grado disupportare il processo che porta dalla raccolta, selezione, elaborazionedei dati al conseguimento delle informazioni in tempi rapidi.

    2 La codica delle informazioni

    Da sempre la societ umana ha fatto della comunicazione delle informa-zioni uno degli strumenti alla base della propria evoluzione: tramite essa gliindividui si sono scambiati e tramandati concetti e signicati. Da un certomomento la comunicazione ha smesso di essere solo verbale e ha iniziatoa essere rappresentata tramite simboli, a partire dai grafti rupestri no adarrivare alle forme di scrittura cos come le conosciamo oggi.Una costante di questo processo sicuramente stata la scelta della simbo-logia adottata: la scrittura cuneiforme dei Sumeri, i geroglici egiziani, gliideogrammi cinesi, le cifre romane e quelle arabe sono altrettante forme discrittura, ciascuna delle quali ha adottato un proprio alfabeto.

    Un alfabeto un qualunque insieme nito di simboli che ragionevol-mente devono essere facilmente distinguibili e producibili.

    Chiameremo congurazioni (o stringhe) ben formate sequenze pio meno lunghe di simboli denite su un certo alfabeto, distinguibili tradi loro e che, in base a precise regole di composizione, rappresentanoenunciati sintatticamente corretti.

    Facendo riferimento ai numeri (alfabeto composto dalle cifre arabe e da alcunisimboli speciali come + e per rappresentare i numeri positivi e negativi, ilseparatore delle cifre decimali , e quello delle migliaia .) possiamo dire che lestringhe 100,52 e 23.712 sono ben formate, mentre 100,5,2 e 237.12non lo sono.

    ES

    EM

    PIO

    Un codice un insieme di regole che stabilisce una corrispondenzabiunivoca tra un insieme di congurazioni ben formate, denite su uncerto alfabeto, e un insieme di signicati.

    la dimensione spazio-tem-

    po del mondo cambiava ma

    continuava a esistere. Oggi lin-

    formatica tende verso la veloci-

    t assoluta: le tele-tecnologie

    mirano ad annullare le distanze

    e in genere viene introdotto un

    nuovo concetto di spazio-tem-

    po che individua una realt

    che tende a essere sempre pi

    virtuale.

    Formichi, Meini CORSO DI INFORMATICA Zanichelli 2012

  • 72 La codica delle informazioni

    In pratica un codice associa ogni congurazione a una particolare entit diinformazione: la congurazione diventa un modo per rappresentare lentitinformativa.Condizione necessaria per lesistenza di un codice che vi sianoalmeno tante congurazioni quanti sono i dati distinti da rappresentare.Le regole di composizione delle congurazioni ben formate costituisconolaspetto di correttezza sintattica della codica, mentre il codice stesso nestabilisce la semantica, cio lattribuzione dei signicati (FIGURA 1).

    Codice SignificatiConfigurazioniben formate

    10 DIECIX

    FIGURA 1

    OSSERVAZIONE Si noti la differenza che c tra simbologia e signi-cato associato. Essa particolarmente evidente quando si consideranole nozioni di cifra e di numero: la prima un simbolo, mentre ilsecondo una nozione astratta. Per esempio, se pensiamo al numerocinque, facciamo riferimento a un concetto che esprime una precisaquantit. Il simbolo 5 quello che secondo il sistema di numerazionedecimale viene utilizzato per rappresentare concretamente tale concetto;parimenti, secondo la numerazione romana, possibile rappresentare lostesso concetto utilizzando il simbolo V.La rappresentazione o codica la condizione che stabilisce la corri-spondenza tra simboli e signicati: tale convenzione essenziale perchla comunicazione possa avere luogo.

    Uno stesso dato pu essere codicato in modi diversi (FIGURA 2).

    ES

    EM

    PIO

    Ovviamente, a parit di alfabeto, cambiando codice possibile avere unastessa congurazione associata a signicati differenti (FIGURA 3).

    FIGURA 2

    FIGURA 3

    Cane

    da italiano a inglese Dog

    da inglese a italiano Giunco, canna

    Burro

    da italiano a spagnolo Mantequilla

    da spagnolo a italiano Asino, somaro

    Formichi, Meini CORSO DI INFORMATICA Zanichelli 2012

  • 8 A1 Informatica e informazione

    OSSERVAZIONE Sistemi di rappresentazione diversi possono usare unostesso alfabeto per esprimere signicati diversi. Per esempio la notazioneitaliana e quella anglosassone utilizzano la virgola e il punto nella rap-presentazione dei numeri con un signicato molto diverso. Nel primocaso, infatti, la virgola viene utilizzata come separatore della parte interada quella decimale e il punto come separatore delle migliaia, mentre nelsecondo caso avviene il contrario:

    NOTAZIONE ITALIANA

    123,456 = 1 102 + 2 101 + 3 100 + 4 101 + 5 102 + 6 103

    NOTAZIONE ANGLOSASSONE

    123,456 = 1 105 + 2 104 + 3 103 + 4 102 + 5 101 + 6 100

    I dati gestiti dai sistemi di elaborazione devono essere codicati per poteressere memorizzati, elaborati, trasmessi, ed essendo i computer costituitida componenti sici (circuiti elettronici, dischi magnetici ed ottici ecc.) sisfruttano per la codica le loro caratteristiche intrinseche. La cosa pi sem-plice da fare con i circuiti distinguere due stati diversi come una tensionebassa/alta, o lassenza/presenza di corrente. Lo stesso vale per le unit dimemoria, dove possibile individuare due stati di magnetizzazione delleparticelle che costituiscono il rivestimento dei dischi magnetici, oppure lasuccessione di pits e lands presenti sulla supercie di un supporto otticoletto mediante un raggio laser.

    Associando rispettivamente ai due diversi stati i simboli dellalfabetocostituito dalle sole cifre binarie 0 e 1 possibile utilizzare comecodici congurazioni pi o meno lunghe di cifre binarie (binarydigit: bit). A ciascuna di queste congurazioni verr associato, medianteunopportuna codica, uno specico signicato.

    Nelluso comune la scelta del sistema decimale probabilmente derivatadal numero totale di dita delle nostre mani, ma senza voler entrare neldettaglio si pu affermare che il sistema binario tanto efcace quantoquello decimale, o come un qualsiasi altro sistema che utilizzi un diversonumero di cifre.

    OSSERVAZIONE Luso del minor numero possibile di simboli consen-te di introdurre una semplicazione dei componenti sici che devonomemorizzare ed elaborare le informazioni. Il ricorso a due soli simboliriduce la probabilit di errore nel loro riconoscimento, infatti, essendo isimboli associati a grandezze siche, tanti pi se ne devono distinguere etanto meno la loro rilevazione sar afdabile in presenza di rumore (conrumore si intende un qualsiasi elemento aleatorio che disturba la qualite lafdabilit del dato).

    Il bit costituisce lunit elementare di informazione rappresentabile e me-morizzabile; ma, dato che la quantit di informazione che pu essere con-tenuta in un singolo bit minima (0/1), per poter codicare dati complessi necessario utilizzare gruppi di bit.

    Tutto numero

    Pitagora di Samo, uno dei

    matematici pi noti, anche

    una delle gure pi misteriose

    e controverse dellantichit.

    Visse nel VI secolo a.C., ma non

    esiste nessun trattato scritto di

    suo pugno e la sua storia rima-

    ne spesso sospesa tra leggen-

    da e verit. Egli cre il Sodalizio

    Pitagorico: pi che una scuola,

    fu quasi una setta di loso

    (termine coniato da Pitagora

    stesso). Le scoperte della scuo-

    la erano segrete, il linguaggio

    cifrato e le comunicazioni solo

    orali. Lattivit si basava sul-

    lo sviluppo delle conoscenze

    matematiche e aritmetiche,

    sullo studio dei numeri interi

    e dei numeri razionali, ottenuti

    dal rapporto (ratio in latino) tra

    numeri interi.

    Pitagora ebbe lintuizione di

    riconoscere il numero come

    entit astratta, non solo come

    strumento di calcolo, ma anche

    come elemento fondamentale

    della realt e principio assoluto

    che pervade luniverso, giun-

    gendo alla conclusione che:

    Tutto numero.

    Lidea che il cosmo fosse rap-

    presentabile solo per mezzo di

    numeri naturali e razionali, per

    ironia della sorte, entr in crisi

    in seguito a una scoperta degli

    stessi pitagorici: lesistenza di

    numeri irrazionali, come la mi-

    sura della diagonale di un qua-

    drato di lato unitario; per que-

    sto motivo la scoperta venne

    tenuta gelosamente segreta,

    almeno nch Ippaso di Me-

    taponto non la rivel allester-

    no. La reazione dei pitagorici

    fu durissima: egli fu bandito

    dalla scuola e gli fu costruito,

    sebbene ancora in vita, un mo-

    numento funebre; Ippaso mor

    poco tempo dopo in un naufra-

    gio dovuto, secondo la leggen-

    da, alla collera di Zeus.

    Formichi, Meini CORSO DI INFORMATICA Zanichelli 2012

  • 93 Linformatica e i suoi ambiti

    ICT

    Lacronimo ICT (Information

    and Communication Tech-

    nology, in italiano Tecnologia

    dellInformazione e della Co-

    municazione) viene utilizzato

    per indicare linsieme delle

    tecnologie che consentono

    lelaborazione e la comunica-

    zione dellinformazione in for-

    mato digitale (cio rappresen-

    tata mediante codici numerici).

    Rientrano in questo ambito

    lo studio, la progettazione, lo

    sviluppo, la realizzazione e la

    gestione dei sistemi informativi

    e di telecomunicazione compu-

    terizzati, con particolare atten-

    zione alle applicazioni software

    e alle componenti hardware

    che le eseguono.

    Il ne ultimo dellICT la ge-

    stione dei dati e delle informa-

    zioni; lICT ormai da conside-

    rarsi una risorsa essenziale per

    le organizzazioni pubbliche e

    private, per le quali sempre

    pi importante riuscire a gesti-

    re in maniera rapida, efcace

    ed efciente i volumi crescenti

    di informazioni che le caratte-

    rizzano.

    Un gruppo di 8 bit viene detto byte e consente di codicare 256 (28) sim-boli o dati elementari distinti; per esempio un byte pu essere utilizzato percodicare tutti i simboli (caratteri) presenti in un testo: lettere maiuscole eminuscole, cifre numeriche e segni di interpunzione.

    I computer utilizzano codici numerici per rappresentare qualsiasi tipo diinformazione: un numero vero e proprio, un testo, unimmagine, un lma-to. Ogni dato viene quindi trasformato in una successione di cifre binarieper poter essere memorizzato ed elaborato mediante un computer.

    3 Linformatica e i suoi ambiti

    Nella terminologia anglosassone linformatica viene generalmente indicatacon il termine Computer science; pensare linformatica come la scienza deicomputer fornisce per una visione riduttiva di questa disciplina, per laquale il computer solo uno strumento. In italiano si usa spesso lespres-sione Scienze dellinformazione, ma anche questa non del tutto adeguatae per molto tempo stata interpretata in maniera distorta, addirittura as-sociandola al giornalismo.Volendo dare una denizione possiamo dire che:

    Linformatica la scienza che studia i modi e i mezzi per rappresentareed elaborare informazione, ovvero le modalit e gli strumenti adat-ti a raccogliere, organizzare, conservare, trasmettere linformazione,assieme ai mezzi per la sua utilizzazione, in un contesto di procedi-menti che risolvono problemi o che ricavano risultati che a loro voltacostituiscono nuova informazione.

    In particolare linformatica ha ricevuto grande interesse, sviluppo e diffusio-ne quando si sono realizzate le possibilit di trattare linformazione con stru-menti rapidi e automatici basati sulluso di computer costruiti con tecnologiaelettronica. Il termine informatica si riferisce infatti al trattamento automa-tico dellinformazione: esso un neologismo derivato dalla lingua francesedove costituisce una contrazione dei termini informazione e automatica.

    OSSERVAZIONE Da quanto detto risulta chiaro che linformatica non silimita affatto allo studio del computer e del suo utilizzo e, anche se primadellavvento del computer non era, come disciplina, ancora autonomadalle altre scienze, n evidenziata nelle sue caratteristiche fondamentali,linformatica non nata con la diffusione dei calcolatori elettronici, sipu anzi dire che ne ha permesso la progettazione e realizzazione.Linformatica affonda le proprie radici nella matematica, anche se ormai una scienza ben distinta.

    La memoria utilizzata per codicare una pagina di testo di qualche migliaio dibyte, quella usata per unimmagine di alcuni milioni di byte, mentre un lungolmato pu richiedere miliardi di byte per essere memorizzato.

    ES

    EM

    PIO

    Formichi, Meini CORSO DI INFORMATICA Zanichelli 2012

  • 10 A1 Informatica e informazione

    Per capire quali sono i rapporti tra matematica e informatica e quali sono invece lepeculiarit dellinformatica come scienza, utile fare un esempio.Consideriamo unoperazione matematica semplicissima: la moltiplicazione a duecifre. In prima istanza la matematica e linformatica hanno due punti di vista diversisul problema della moltiplicazione a due cifre: la matematica si occupa di scoprireun procedimento per risolvere il problema, mentre linformatica si occupa di codi-care questo procedimento in un linguaggio eseguibile da una macchina.

    ES

    EM

    PIO

    OSSERVAZIONE Se noto un procedimento, possibile spiegarlo aunaltra persona o a una macchina; linformatica si occupa proprio diautomatizzare la procedura matematica in maniera da renderla utilizza-bile tramite un computer e questo perch:

    la macchina pu eseguire tale procedura molto pi rapidamentedelluomo;

    luomo pu commettere errori nelleseguire la procedura, mentre lamacchina la applica sempre in maniera corretta;

    lasciando i compiti pi lunghi e ripetitivi alla macchina, luomo pudedicarsi ad attivit concettualmente pi utili e interessanti.

    Dal punto di vista dellutente linformatica offre una serie di strumenti efunzionalit basate sulluso del computer corredato da applicazioni soft-ware che cercano di guidare lutente nelle sue attivit, tenendo conto delsuo livello di capacit e di iniziativa.Il mercato offre svariati strumenti software orientati ad aumentare la pro-duttivit di varie categorie di utenti: elaborazione di testi, fogli elettronici,gestione di basi di dati, posta elettronica, applicazioni di matematica e sta-tistica, CAD (Computer Aided Design) e cos via.Dal punto di vista della classicazione dei settori in cui si articola linformaticaprofessionale riportiamo di seguito un estratto della classicazione della areedisciplinari suggerita dalla ACM (Association for Computing Machinery).

    1. Algoritmi e strutture dati: studia i procedimenti per trattare linfor-mazione, le loro potenzialit e limiti, le loro caratteristiche, complessite difcolt di effettuazione; studia inoltre come linformazione pu es-sere rappresentata e strutturata ai ni del suo miglior trattamento.

    2. Linguaggi di programmazione: studia i linguaggi per esprimere taliprocedimenti, le loro caratteristiche, le possibilit di traduzione in lin-guaggi eseguibili in modo automatico e le tecniche di programmazionenei vari linguaggi.

    3. Architetture degli elaboratori: studia la struttura di computer capacidi eseguire programmi in maniera sempre pi veloce, afdabile e intel-ligente.

    4. Architetture di rete: studia le tecniche di interconnessione tra computere i protocolli di comunicazione per lo scambio di informazioni su rete.

    5. Sistemi operativi: studia come dotare i computer di un programma dibase che ne renda possibile e agevole luso e ne sfrutti in modo ottimalele prestazioni.

    Formichi, Meini CORSO DI INFORMATICA Zanichelli 2012

  • 11Sintesi

    Sintesi

    Dato. la misura primaria di un fenome-no che siamo interessati a osservare.

    Elaborazione. Insieme di attivit orienta-te alla raccolta, organizzazione, correlazione, co-municazione e interpretazione nalizzata dei dati.

    Informazione. il risultato dellelabora-zione di uno o pi dati che in grado di accrescereil nostro stato di conoscenza rispetto a un fenome-no con il quale siamo interessati a interagire.

    Alfabeto. Insieme nito di simboli facil-mente distinguibili e riproducibili.

    Congurazioni ben formate. Sequenzedi simboli denite su un certo alfabeto, distinguibi-li tra di loro che, in base a regole di composizione,rappresentano enunciati sintatticamente corretti.

    Codice. Insieme di regole che stabilisceuna corrispondenza biunivoca tra un insieme dicongurazioni ben formate denite su un certo al-fabeto e un insieme di signicati.

    Sistema binario. Sistema numerico utiliz-zato nella tecnologia informatica per rappresenta-re dati (qualsiasi tipo di dato viene rappresentatoin formato numerico).

    Bit. Quantit minima di informazione rap-presentabile: pu assumere i due valori 0 e 1.

    Informatica. Scienza che studia i modi e imezzi per rappresentare ed elaborare informazio-ne; con questo termine ci si riferisce al trattamentoautomatico dellinformazione: un neologismoderivato dal francese e costituisce una contrazionedei termini informazione e automatica.

    Ambiti dellinformatica. Tra le varie areedisciplinari dellinformatica, alcune delle pi im-portanti sono le seguenti: Algoritmi e strutturedati, Linguaggi di programmazione, Architettu-re degli elaboratori, Architetture di rete, Sistemioperativi, Ingegneria del software, Computazionenumerica e simbolica, Basi di dati, Intelligenza ar-ticiale, Robotica e visione.

    6. Ingegneria del software: studia strumenti e metodi per ottimizzare illavoro degli sviluppatori e per ottenere programmi pi efcienti e piusabili in unottica di ottimizzazione del lavoro umano.

    7. Computazione numerica e simbolica: studia la costruzione e luso dimodelli per la rappresentazione dei problemi da risolvere con program-mi di calcolo numerico o simbolico.

    8. Basi di dati e sistemi per il reperimento dellinformazione: studia iltrattamento di grandi masse di dati che devono essere facili da accederee da modicare, gestiti e conservati con sicurezza, protetti da intrusioni.

    9. Intelligenza articiale: studia come usare i computer per compiti sem-pre pi complessi e tradizionalmente demandati a operatori umani in-telligenti (riconoscimento del linguaggio naturale, traduzioni, sistemiesperti di supporto alle decisioni ecc.).

    10. Robotica e visione: studia la gestione e il controllo di dispositivi au-tomatici in grado di compiere operazioni complesse; tra le funzioninecessarie a tale scopo importante la visione e il riconoscimento diforme e di oggetti sici.

    Questi sono gli ambiti disciplinari dal punto di vista degli addetti ai lavori,i tecnici capaci di usare queste conoscenze per creare strumenti informaticio servizi informatici, e sono indipendenti dalla capacit di una persona diservirsi di strumenti o servizi propri dellinformatica.

    Formichi, Meini CORSO DI INFORMATICA Zanichelli 2012

  • 12

    Algoritmi

    A2 Algoritmi

    Qual il giorno della settimana che corrisponde a una certa data? Questo un piccolo problema che, nella vita di tutti i giorni, capita spesso di doverrisolvere. In genere ci si afda a una agenda, cartacea o elettronica che sia,ma la questione pu essere risolta con i semplici calcoli descritti di seguito:

    si prenda in considerazione una data, per esempio 12/01/1998; si chiami Y il valore dellanno ed M il valore del mese diminuito di 2, nel

    nostro esempio Y = 1998 ed M = 1 2 = 1; se M

  • 131 Dal problema allalgoritmo

    Il termine algoritmo

    La parola algoritmo entrata

    in uso negli anni 50 del secolo

    scorso per sostituire la parola

    algorismo che, dal medioevo,

    designava il processo di calco-

    lare con i numeri arabi.

    Nel medioevo si credeva (come

    tuttora molti studenti!) che de-

    rivasse dal greco algiros do-

    loroso e arithmos numero,

    ma in realt deriva dal nome di

    Al-Khwarizmi, un grande ma-

    tematico arabo del IX secolo,

    famoso per avere formalizzato

    il sistema di numerazione po-

    sizionale che tutti oggi utiliz-

    ziamo. Il suo libro sui numeri

    indiani fu tradotto in latino,

    anche se la diffusione nel mon-

    do occidentale della numera-

    zione araba da attribuirsi so-

    prattutto allopera di Leonardo

    da Pisa, noto come Fibonacci.

    In ogni caso le procedure che

    permettevano di effettuare i

    calcoli divennero note come

    algorismi o algoritmi, e lo stes-

    so termine fu in seguito usato

    in generale per denire le pro-

    cedure di calcolo necessarie

    per ottenere un determinato

    risultato.

    1 Dal problema allalgoritmo

    Anche se non facile dare una denizione esatta del termine problema,si pu affermare in prima approssimazione che, almeno nelluso comu-ne, viene indicata con questa parola una qualsiasi situazione reale chenecessiti di unazione per poter essere risolta, ovvero trasformata in unostato nale che si valuta migliore o comunque preferibile a quello di par-tenza. Risolvere un problema signica quindi ottenere un risultato par-tendo da una determinata situazione iniziale e seguendo un opportunoprocedimento.

    OSSERVAZIONE importante evidenziare come le soluzioni debbanoessere espresse in modo comprensibile e composte da operazioni chesiano alla portata, in termini sia interpretativi sia operativi, di chi dovrapplicare il procedimento risolutivo.In genere si dice che un problema ben formulato quando contiene tuttele informazioni necessarie per ottenere i risultati voluti applicando unmetodo risolutivo.

    Come abbiamo visto nellesempio in apertura del capitolo, possibile stu-diare e proporre procedure (ovvero metodi e procedimenti sistematici) -nalizzate a effettuare una classe di operazioni, ovvero a risolvere una classedi problemi.

    Intuitivamente chiameremo algoritmo un insieme di istruzioni la cui ese-cuzione porta a risolvere un problema o comunque a conseguire un deter-minato risultato.Il concetto di algoritmo fondamentale nellinformatica ed consideratoprimitivo, cio non formalmente denibile in termini di altri concetti.

    Il procedimento per determinare il giorno della settimana pu essere sinte-ticamente descritto tramite una sequenza di formule (loperazione n MODm determina il resto della divisione tra n ed m ed equivale allespressionen INT(n : m) m):

    Y anno

    Mmese 2Se M

  • 14 A2 Algoritmi

    Si fatto ricorso a variabili letterali per la necessit di rappresentarequantit il cui valore numerico non noto perch ancora da determi-nare, oppure perch variabile in relazione a diversi usi del procedi-mento.

    Il simbolo un operatore di assegnamento col signicato che lavariabile che sta alla sua sinistra assume il risultato della valutazionedellespressione che sta alla sua destra (in questo senso le variabilipermettono la memorizzazione di valori numerici: si noti comeespressioni del tipo MM + 12 o Y Y 1 permettano laggiorna-mento del valore di una variabile).

    Lassegnazione del valore a una variabile pu essere condizionato dalfatto che essa stessa, o altre variabili, assuma/no o meno determinativalori (Se allora ...).

    Una variabile una coppia (nome,valore) dove:

    il nome lidenticatore associato alla variabile (esso rimane costantedurante lesecuzione dellalgoritmo);

    il valore il contenuto associato alla variabile in un certo istantedellesecuzione dellalgoritmo (esso pu variare durante lesecuzionedellalgoritmo).

    OSSERVAZIONE Nella gestione delle variabili si fatto uso del metaca-rattere come operatore di assegnamento o modica del valore di unavariabile. Questo operatore distruttivo, nel senso che con la sua applica-zione si ha la modica del contenuto nella variabile che sta alla sua sinistrae di conseguenza la perdita del precedente valore contenuto in essa.Per esempio, supponendo che M contenga il valore 2, dopo lesecuzionedellistruzione M M + 12 il suo valore sar 14; infatti lordine di ese-cuzione dellassegnamento prevede prima la valutazione dellespressioneM + 12 (2 + 12 = 14) e successivamente la memorizzazione del risultatonella variabile M.

    OSSERVAZIONE In informatica loperatore di moltiplicazione vienein generale sostituito dal simbolo * con lo stesso signicato. Questo, sto-ricamente, dovuto alla necessit di utilizzare una simbologia che non ge-neri confusione,differenziandolo chiaramente dalla lettera x.Nello stessomodo per la divisione viene utilizzato il simbolo / in sostituzione di :.

    2 Algoritmi ed esecutori

    Un algoritmo lesplicitazione dei passi elementari necessari a risol-vere un determinato problema, o una classe di problemi simili. Esso,generalmente, opera su dei dati di ingresso (input) per fornire dei ri-sultati in uscita (output).

    Formichi, Meini CORSO DI INFORMATICA Zanichelli 2012

  • 152 Algoritmi ed esecutori

    Come abbiamo gi osservato, un problema non necessariamente deveessere di natura matematica: per esempio anche cucinare una pietanzapotrebbe essere un problema al quale necessario trovare una soluzione.In questo caso lalgoritmo risolutivo costituito dalla relativa ricetta chedescrive (esplicita) passo per passo quali sono le azioni da intraprendereper ottenere il risultato nale. I dati di ingresso (input) sono in questocaso gli ingredienti da utilizzare, mentre luscita (output) rappresentatadal piatto pronto per essere consumato. Chi esegue lalgoritmo, in que-sto caso il processo di realizzazione della pietanza, in genere viene dettoesecutore.

    Le seguenti propriet rappresentano le caratteristiche fondamentali di unalgoritmo.

    1. Finitezza: un algoritmo composto da un numero nito di istruzio-ni (passi elementari).

    2. Terminazione: dopo lesecuzione di un numero nito di passi lalgo-ritmo deve terminare.

    Esaminiamo il seguente procedimento:

    prendere un numero naturale N; aggiungere 1 a N; ripetere il passo precedente.

    Questo procedimento non un algoritmo perch in contrasto con la proprietdi terminazione, in quanto prevede lesecuzione di alcune istruzioni un numeroinnito di volte.

    ES

    EM

    PIO

    OSSERVAZIONE In effetti esistono algoritmi che non terminano mai;generalmente essi vengono indicati con il termine metodo di computa-zione. Un esempio rappresentato da un procedimento che calcola lesuccessive cifre decimali di pi.Nella nostra trattazione ci limiteremo a trattare algoritmi che rispettanola propriet di terminazione.

    3. Determinatezza: a ogni passo dellalgoritmo deve essere specicatalazione da intraprendere senza che vi siano ambiguit.

    Consideriamo il seguente procedimento:

    prendere due numeri M ed N; se M molto maggiore di N allora calcolare M N, altrimenti calcolare M + N; fornire il risultato ottenuto.

    Il procedimento non un algoritmo perch il secondo passo ambiguo, in quantoil concetto di molto maggiore non determinato e sarebbe pertanto necessariodenire un criterio per valutare quando un numero molto maggiore di un altro.

    ES

    EM

    PIO

    Formichi, Meini CORSO DI INFORMATICA Zanichelli 2012

  • 16 A2 Algoritmi

    4. Effettivit: lazione specicata in ogni passo dellalgoritmo deve es-sere effettivamente eseguibile dallesecutore preposto per lesecuzionedellalgoritmo stesso; non avrebbe infatti senso prevedere in un algorit-mo azioni che lesecutore designato non in grado di svolgere.

    5. Generalit: un algoritmo dovrebbe essere progettato per risolverenon tanto uno specico problema, quanto una classe di problemi si-mili.

    Nella propriet di effettivit si fatto riferimento al termine esecutore, iden-ticando come esecutore chi preposto allesecuzione dei singoli passispecicati in un algoritmo. In genere si classicano gli esecutori in duecategorie fondamentali:

    esecutori intelligenti; esecutori automatici.

    Alla prima categoria appartengono gli esecutori che, nellaffrontare la ri-soluzione di uno specico problema, sono in grado di applicare le cono-scenze derivanti dalle esperienze acquisite nel corso della propria attivit.Un esecutore intelligente quindi caratterizzato dalla capacit di accrescerele proprie conoscenze mano a mano che affronta nuovi tipi di problemi:lesempio pi evidente di un esecutore intelligente luomo (con questotermine indichiamo la nostra specie, senza ovviamente fare distinzioni digenere).

    Alla seconda categoria appartengono invece esecutori che riescono a risol-vere un determinato problema solo eseguendo meccanicamente i singolipassi di un algoritmo predenito, generalmente senza apprendere nulla nelcorso della propria attivit. Lunico vantaggio che questo tipo di esecutoripresenta rispetto a quello intelligente la possibilit di eseguire i passi di unalgoritmo con precisione e velocit.

    A proposito della propriet di generalit, un algoritmo per determinare il giornodella settimana della data 12/01/1998 sarebbe di scarso interesse, mentre senzaltro utile un algoritmo che consente di determinare il giorno della settimanadi una qualsiasi data.E

    SE

    MP

    IO

    La lavatrice espleta la sua attivit in funzione del programma di lavaggio che stato impostato.Il computer esegue programmi che implementano algoritmi per la risoluzione divari tipi di problemi.E

    SE

    MP

    IO

    Nelleseguire un algoritmo si pu supporre che lesecutore predispongauna tabella che permetta di tenere traccia dei valori assunti dalle singolevariabili nel corso della valutazione delle espressioni.

    Formichi, Meini CORSO DI INFORMATICA Zanichelli 2012

  • 172 Algoritmi ed esecutori

    Analizziamo due semplici algoritmi espressi in un linguaggio simile al lin-guaggio naturale, ma con una struttura che ne facilita linterpretazione e lanon ambiguit delle indicazioni.

    Algoritmo 1 Algoritmo 2

    inizio procedimentoleggi il valore di m e di nc 1 nch (c < m) e (c n)

    allora m m naltrimenti n n m

    ne operazionescrivi il valore di n

    ne procedimento

    Applicando i due algoritmi ai valori di input m = 12 ed n = 9 otteniamo ledue tabelle di traccia riportate nelle TABELLE 2 e 3.

    Per la determinazione del giorno della settimana della data 12/01/1998 la tabella di traccia sarebbe la TABELLA 1.

    TABELLA 1

    Istruzione Anno Mese Giorno Y M D

    Y anno 1998 1 12 1998

    M mese 2 1998 1 12 1998 1

    Y Y 1 1998 1 12 1997 1

    M M + 12 1998 1 12 1997 11

    D ((giorno + Y + INT(Y/4) INT(Y/100)+ INT(Y/400) + INT(31 * M/12)) MOD 7)

    1998 1 12 1997 11 1

    ES

    EM

    PIO

    TABELLA 2

    Algoritmo 1

    Istruzione m n c r Condizione

    leggi il valore di m e di n 12 6

    c 1 12 6 1

    (c < m) e (c

  • 18 A2 Algoritmi

    TABELLA 2

    Algoritmo 1

    Istruzione m n c r Condizione

    c c + 1 12 6 3 2

    (c < m) e (c

  • 192 Algoritmi ed esecutori

    In generale si pu affermare che non esiste un algoritmo univoco perrisolvere un determinato problema.

    Ulteriori esempi in questo senso sono forniti dai due successivi procedi-menti (lalgoritmo 3 rappresenta il procedimento di calcolo del massimocomun divisore che generalmente viene insegnato a scuola).

    Algoritmo 3 Algoritmo 4

    inizio procedimentoscomponi m ed n in fattori primimoltiplica i fattori primi comuni,

    col minimo esponentescrivi il risultato della moltiplicazione

    ne procedimento

    inizio procedimentotrova tutti i divisori di m e tutti i divisori

    di nscrivi il pi grande tra i divisori comuni

    ne procedimento

    I quattro algoritmi illustrati forniscono tutti lo stesso risultato (il MCD tradue numeri), anche se non immediato dimostrarlo.

    OSSERVAZIONE I quattro diversi procedimenti sono adatti a esecutoricon differenti capacit di comprensione e di esecuzione; in particola-re i primi due usano semplici operazioni aritmetiche, come sottrazionie divisioni, da ripetere pi volte; il terzo e il quarto, invece, indicanooperazioni pi complesse (trovare tutti i fattori primi, oppure tutti idivisori) eseguite una sola volta. Possiamo quindi affermare che i primidue sono pi adatti a un esecutore automatico e veloce, gli altri due sonopensati per un esecutore intelligente, eventualmente pi lento.

    Anche se nella denizione di algoritmo si fa riferimento a unidea generaledi esecutore, questo si identica spesso con il computer. Quindi un algorit-mo deve essere denito in modo che possa essere interpretato ed eseguitocorrettamente dallelaboratore elettronico; per questo motivo lalgoritmodeve essere opportunamente codicato secondo le regole di uno specicolinguaggio di programmazione. Esistono diversi linguaggi di programma-zione, ognuno con le proprie caratteristiche particolari, ma tutti con unacaratteristica comune: quella di rendere disponibili istruzioni che permet-tono di tradurre lalgoritmo in un programma eseguibile dal computer: siparla di implementazione dellalgoritmo.Lo schema di FIGURA 1 rappresenta sinteticamente il percorso logico che, apartire da un problema, porta allimplementazione di un programma chelo risolve.

    Problema Algoritmo Programma

    Metodorisolutivo

    Linguaggiodi programmazione

    FIGURA 1

    Formichi, Meini CORSO DI INFORMATICA Zanichelli 2012

  • 20 A2 Algoritmi

    Inizio

    Fine

    n n + 1

    Leggi/Scrivi n

    N > 0?Vero

    Falso

    OSSERVAZIONE Nella formulazione delle condizioni negli esempi di al-goritmi proposti sono stati utilizzati degli operatori per il confrontodei valori contenuti nelle variabili: (maggiore), = (maggiore o uguale), (diverso). In parti-colare per gli operatori formati da due simboli importante rispettarelordine in cui questi sono scritti; >= non la stessa cosa di =>: ilprimo un operatore valido mentre il secondo non lo .

    3 La rappresentazionedegli algoritmi

    3.1 Diagrammi a blocchi e notazione lineare strutturata

    Nel corso degli ultimi cinquantanni sono state utilizzate diverse tecnichedi rappresentazione degli algoritmi, sempre con lobiettivo di denire me-todologie efcaci per descrivere gli algoritmi stessi, senza ricorrere a de-scrizioni discorsive non formalizzate, troppo generiche e appesantite dadettagli talvolta inutili.Una tradizionale tecnica di rappresentazione quella del diagramma ablocchi (DAB). Questa tecnica nota anche come diagramma di usso oow-chart secondo la terminologia anglosassone si basa su una rappre-sentazione graca della sequenza di operazioni dellalgoritmo. Un algorit-mo viene strutturato in blocchi di istruzioni ciascuno dei quali, a secondadella propria funzione, viene rappresentato mediante una particolare sim-bologia: linee orientate (connettori di usso) collegano tra di loro i variblocchi per indicare lordine di esecuzione delle operazioni dellalgoritmo.Esistono cinque tipi base di blocchi elementari descritti e rappresentatigracamente nella TABELLA 4.

    TABELLA 4

    Blocco di inizioIndica il punto iniziale dellalgoritmo

    Blocco di neIndica il punto nale dellalgoritmo

    Azione basicaIndica unoperazione elementare, per esempioun assegnamento

    Input/OutputRappresenta unoperazione di ingresso (Leggi)o uscita (Scrivi) di dati

    Controllo basico (o selezione)Rappresenta il punto di scelta tra due ramidellalgoritmo in funzione del risultato dellespressionelogica in esso contenuta

    Formichi, Meini CORSO DI INFORMATICA Zanichelli 2012

  • 213 La rappresentazione degli algoritmi

    Il DAB dellalgoritmo relativo alla determinazione del giorno della settimana di una data fornita come input mo-strato in FIGURA 2.

    ES

    EM

    PIO

    Falso

    M mese 2

    Inizio

    Fine

    Leggianno, mese,

    giorno

    ScriviD

    Y anno

    F l

    M 0)allora .

    [altrimenti ]

    Formichi, Meini CORSO DI INFORMATICA Zanichelli 2012

  • 22 A2 Algoritmi

    OSSERVAZIONE Si noti come nella descrizione appena fornita non tuttele istruzioni abbiano il margine sinistro allineato: il margine sinistro pio meno rientrato viene utilizzato per migliorare la leggibilit della rap-presentazione dellalgoritmo, in questo modo possibile evidenziare ladipendenza di alcune istruzioni da altre. Per esempio lesecuzione delledue istruzioni Y Y 1 e MM + 12 dipende dal vericarsi o menodella condizione M

  • 233 La rappresentazione degli algoritmi

    Teoremadi Bhm-Jacopini

    Il teorema di Bhm-Jacopini,

    enunciato nel 1966 dagli in-

    formatici Corrado Bhm e Giu-

    seppe Jacopini, afferma che

    qualunque algoritmo pu es-

    sere implementato utilizzando

    tre soli schemi la sequen-

    za, la selezione e il ciclo da

    applicare ricorsivamente alla

    composizione di blocchi di

    istruzioni elementari.

    Questo teorema ha un interes-

    se soprattutto teorico, dato che

    spesso i linguaggi di program-

    mazione prevedono costrutti

    semplici da usare, anche se

    internamente complessi, per

    evitare ai programmatori di

    doversi occupare di operazioni

    dispersive rispetto alle nalit

    implementative degli algoritmi.

    Nel seguito presentiamo alcuni esempi di algoritmi che implementano glischemi fondamentali di composizione utilizzando la NLS, lasciando al let-tore lesercizio di rappresentare gli algoritmi mediante DAB.

    Consideriamo lalgoritmo 2 per il calcolo del MCD. La sua descrizione medianteNLS la seguente:

    Inizio

    Leggi m,nFinch (m n) esegui

    Inizio

    Se (m > n)Allora m m nAltrimenti n n m

    Fine

    Scrivi n

    Fine

    La rappresentazione graca con DAB, invece, quella di FIGURA 3.

    ES

    EM

    PIO

    In questo algoritmo sono presenti sia una selezione sia una ripetizione: nellaNLS sono entrambe evidenziate dalluso dei costrutti Se ... allora ... altrimen-ti ... e Finch ... esegui ..., per indicare rispettivamente la selezione e laripetizione. Nel DAB si pu notare come il primo blocco di selezione sia relativoal controllo della ripetizione, mentre il secondo blocco di controllo relativo allaselezione.In generale si pu individuare la presenza di un ciclo in corrispondenza di un bloc-co di selezione e un connettore di usso che torna indietro.

    Falso

    Vero

    Inizio

    Fine

    Leggim, n

    V

    m n?

    F l

    m > n?

    n n m m m n

    Scrivin

    Falso

    Vero

    FIGURA 3

    Formichi, Meini CORSO DI INFORMATICA Zanichelli 2012

  • 24 A2 Algoritmi

    3.3 Esempi di algoritmi basati sullo schema

    di sequenza

    Calcolo dellarea di un triangolo Scambio del contenuto

    di due variabili A e B

    Inizio

    Leggi base,altezzax base * altezzaarea x/2Scrivi area

    Fine

    Inizio

    Leggi A,BC A

    A B

    B C

    Scrivi A,BFine

    OSSERVAZIONE Si noti come nellalgoritmo che scambia il contenutodi due variabili, in conseguenza del fatto che loperatore di assegnamen-to distruttivo e che una variabile pu contenere un solo valore allavolta, sia necessario, per la risoluzione del problema, utilizzare una terzavariabile C.

    La tabella di traccia dellesecuzione dellalgoritmo per il calcolo dellarea del trian-golo con valori di base e altezza rispettivamente uguali a 3 e 6 riportata nellaTABELLA 6.

    TABELLA 6

    Istruzione Base Altezza x Area

    Leggi base,altezza 3 6

    x base * altezza 3 6 18

    area x/2 3 6 18 9

    Scrivi area 3 6 18 9

    ES

    EM

    PIO

    Di seguito vediamo la tabella di traccia dellesecuzione dellalgoritmo per loscambio del contenuto di due variabili con valori iniziali rispettivamente di 2 e 3(TABELLA 7).

    TABELLA 7

    Istruzione A B C

    Leggi A,B 2 3

    C A 2 3 2

    A B 3 3 2

    B C 3 2 2

    Scrivi A,B 3 2 2

    ES

    EM

    PIO

    Formichi, Meini CORSO DI INFORMATICA Zanichelli 2012

  • 253 La rappresentazione degli algoritmi

    3.4 Esempi di algoritmi basati sullo schema

    di selezione

    Stabilire se il numero n

    pari o dispari

    Stabilire se il numero n

    positivo

    Inizio

    Leggi n

    resto n INT(n/2) * 2Se (resto = 0)

    Allora

    Scrivi pari Altrimenti

    Scrivi dispari Fine

    Inizio

    Leggi n

    Se (n > 0)Allora

    Scrivi positivoFine

    OSSERVAZIONE Esaminando i due esempi precedenti possibile vederecome esistano due diversi tipi di selezione:

    a due vie: Se ... allora ... altrimenti ... a una via: Se ... allora ...

    La tabella di traccia dellesecuzione dellalgoritmo per determinare se un numero pari o dispari nel caso n uguale a 5 quella della TABELLA 8.

    TABELLA 8

    Istruzione n Resto Condizione

    Leggi n 5

    resto n INT(n/2) * 2 5 1

    (resto = 0) 5 1 Falso

    Scrivi dispari 5 1

    ES

    EM

    PIO

    La TABELLA 9 riporta la tabella di traccia relativa allesecuzione dellalgoritmo perdeterminare se un numero positivo nel caso n uguale a 8.

    TABELLA 9

    Istruzione n Condizione

    Leggi n 8

    (n > 0) 8 Falso

    ES

    EM

    PIO

    Vi sono situazioni che necessariamente richiedono un utilizzo articolatodella selezione con la conseguente strutturazione del procedimento risolu-tivo in problemi e sottoproblemi. A questo proposito, prendiamo in esameil seguente algoritmo che ha lo scopo di determinare il pi grande tra trenumeri (come vedremo esistono anche altri modi per approcciare a unacorretta soluzione di questo problema, quello proposto di seguito costitui-sce un classico esempio di composizione di selezioni):

    Formichi, Meini CORSO DI INFORMATICA Zanichelli 2012

  • 26 A2 Algoritmi

    InizioLeggi A,B,C

    Se (A > B) Allora Se (A > C) Allora

    (2) Scrivi A

    Altrimenti Scrivi C(1)

    Altrimenti Se (B > C) Allora

    (3) Scrivi B

    Altrimenti Scrivi C

    Fine

    Nello specico, le azioni da intraprendere per risolvere il problema sono con-dizionate da pi strutture di selezione nidicate una allinterno dellaltra.In casi come questo lalgoritmo pu essere pensato come una scomposizio-ne di un problema in sottoproblemi; in particolare, nellesempio appenavisto, pu essere individuata la seguente gerarchia di sottoproblemi:

    Problema: determinazione del massimo tra tre numeri A, B e CSottoproblema 1: determinazione del massimo tra A e BSottoproblema 2: nel caso A > B: determinazione del massimo tra A e CSottoproblema 3: nel caso A B) 2 5 3 Falso

    (B > C) 2 5 3 Vero

    Scrivi B 2 5 3

    ES

    EM

    PIO

    Il DAB dellalgoritmo evidenzia la nidicazione dello schema di selezione(FIGURA 4).

    OSSERVAZIONE Come si pu notare entrambe le rappresentazioni(NLS e DAB), anche se corrette, risultano essere di comprensione nonimmediata, pur trattandosi di soli tre numeri. Applicare questo approc-cio risolutivo a un numero maggiore di valori porterebbe a situazionimolto complesse da rappresentare. Una soluzione pi semplice ed ele-gante a questo problema la seguente:

    Formichi, Meini CORSO DI INFORMATICA Zanichelli 2012

  • 273 La rappresentazione degli algoritmi

    Inizio

    Leggi A

    max A

    Leggi B

    Se (B > max) Allora max B

    Leggi C

    Se (C > max) Allora max C

    Scrivi max

    Fine

    La variabile max alla ne conterr il valore pi grande dei tre: essa vieneposta inizialmente uguale ad A e il suo valore viene aggiornato se allattodelle letture di B e di C si incontra un valore pi grande del suo contentocorrente.Nel caso A = 2, B = 5 e C = 3 la tabella di traccia quella della TABELLA 11.

    TABELLA 11

    Istruzione A B C Max Condizione

    Leggi A 2

    max A 2 2

    (B > max) 2 5 3 3 Vero

    max B 2 5 3 5

    (C > max) 2 5 3 5 Falso

    Scrivi max 2 5 3 5

    VeroVero

    Inizio

    Fine

    LeggiA, B, C

    ScriviC

    ScriviA

    ScriviB

    A > B?

    A > C?

    VB > C

    ?

    FalsoVero

    Falso Falso

    FIGURA 4

    Formichi, Meini CORSO DI INFORMATICA Zanichelli 2012

  • 28 A2 Algoritmi

    Inoltre questo schema di soluzione pu essere facilmente esteso alla de-terminazione del massimo tra n numeri utilizzando un ciclo:

    Inizio Leggi n Leggi A

    max An n 1Finch (n > 0) esegui

    Inizio Leggi A Se (A > max) Allora max A

    n n 1 Fine Scrivi maxFine

    La variabile n viene utilizzata per il numero di valori da esaminare e, diconseguenza, per controllare lesecuzione del ciclo (viene infatti decre-mentata no ad arrivare a 0), mentre la sola variabile A conterr unoalla volta i valori da esaminare; alla ne nella variabile max si otterr ilvalore maggiore. Si noti che la lettura del primo valore avviene fuori dalciclo, in modo da inizializzare con questo valore la variabile max.

    3.5 Esempi di algoritmi basati sullo schema

    di ripetizione

    Redazione di un elenco di libri (1) Redazione di un elenco di libri (2)

    Inizio

    Finch (ci sono libri da esaminare)esegui

    Inizio

    Prendi il libroTrascrivi il titolo

    Fine

    Fine

    Inizio

    Esegui

    Inizio

    Prendi il libroTrascrivi il titolo

    Fine

    Finch (ci sono libri da esaminare)Fine

    I due esempi riportati sono chiaramente equivalenti; infatti in ambedue icasi si richiede allesecutore di esaminare un libro alla volta e di trascriverneil titolo. Schematicamente le due situazioni sono cos:

    Ciclo con controllo in testa Ciclo con controllo in coda

    Finch eseguiInizio

    condizione vera

    Fine

    condizione falsa

    Esegui

    Inizio

    condizione vera

    Fine

    Finch

    condizione falsa

    Formichi, Meini CORSO DI INFORMATICA Zanichelli 2012

  • 293 La rappresentazione degli algoritmi

    In entrambi i casi lesecuzione delle operazioni ripetuta se la condizio-ne vera e il ciclo si arresta se la condizione falsa.

    OSSERVAZIONE Nel secondo caso la condizione di terminazione viene va-lutata alla ne delle istruzioni del ciclo: questo fatto comporta che almenouna volta le stesse sono eseguite. Al contrario, nel primo caso la condizione valutata prima delle istruzioni del ciclo, pertanto se questa risulta imme-diatamente falsa lintero ciclo non viene eseguito nemmeno una volta.

    Per meglio capire le due distinte tecniche di iterazione e come, in situazioni speciche, possano condurre a ri-sultati diversi, prendiamo in esame il seguente problema. Dato un numero N, determinare quante volte occorresommare a N il valore 2 per ottenere un valore superiore a 100. Lalgoritmo risolutivo pu essere realizzato con idue tipi di ciclo seguenti (in entrambi gli esempi la variabile C ha la funzione di contatore del numero di ripetizionidel ciclo e rappresenta il risultato dellalgoritmo):

    Algoritmo 1: controllo in testa Algoritmo 2: controllo in coda

    Inizio

    C 0Leggi N

    Finch (N

  • 30 A2 Algoritmi

    TABELLA 14

    Algoritmo 1: controllo in testa

    Istruzione N C Condizione

    C 0 0

    Leggi N 101 0

    (N

  • 313 La rappresentazione degli algoritmi

    OSSERVAZIONE

    Perch un ciclo indeterminato sia ben costruito necessario che leistruzioni eseguite allinterno del ciclo stesso garantiscano che la condi-zione di controllo divenga falsa causandone la terminazione.Nel caso di un ciclo determinato la terminazione garantita dalla strut-tura stessa del ciclo.

    Inizio

    n 1Finch (n > 0) esegui

    Inizio

    n n + 1Fine

    Fine

    In questo caso la condizione specicata per il controllo del ciclo sempre veri-cata, in quanto n inizialmente viene posto uguale a 1 e nel corso del ciclo vienesempre incrementato di una unit; di conseguenza il valore di n risulta sempremaggiore di 0 e pertanto il ciclo non terminer mai!

    ES

    EM

    PIO

    Inne il seguente algoritmo rappresentato in NLS determina la somma din numeri, ciascuno fornito come valore di input:

    Inizio

    Leggi n

    somma 0Finch (n > 0) esegui

    Inizio

    Leggi numero

    somma somma + numero

    n n 1 Fine

    Scrivi somma

    Fine

    Inizio

    n 1Finch (n < 100) esegui

    Inizio

    n n + 1Fine

    Fine

    Il ciclo termina dopo essere stato eseguito esattamente 99 volte. Infatti dopoaver aggiunto 99 volte ununit al valore della variabile n, inizialmente uguale a 1,questa assume il valore 100 e la condizione n < 100 risulta falsa, causando laterminazione del ciclo.

    ES

    EM

    PIO

    Formichi, Meini CORSO DI INFORMATICA Zanichelli 2012

  • 32 A2 Algoritmi

    Il DAB corrispondente quello di FIGURA 5, mentre la tabella di traccia peri tre valori 8, 4 e 7 la TABELLA 16.

    n n 1

    somma somma + numero

    Inizio

    Fine

    Leggi n

    n > 0?

    Legginumero

    somma 0

    Scrivisomma

    Falso

    Vero

    FIGURA 5

    TABELLA 16

    Istruzione n Numero Somma Condizione

    Leggi n 3

    somma 0 3 0

    (n > 0) 3 0 Vero

    Leggi numero 3 8 0

    somma somma + numero 3 8 8

    n n 1 2 8 8

    (n > 0) 2 8 8 Vero

    Leggi numero 2 4 8

    somma somma + numero 2 4 12

    n n 1 1 4 12

    (n > 0) 1 4 12 Vero

    Leggi numero 1 7 12

    somma somma + numero 1 7 19

    n n 1 0 7 19

    (n > 0) 0 7 19 Falso

    Scrivi somma 0 7 19

    Formichi, Meini CORSO DI INFORMATICA Zanichelli 2012

  • 333 La rappresentazione degli algoritmi

    Blocco operazioni

    Vero

    Falso

    Blocco operazioniBlocco operazioni

    Vero

    Falso

    Blocco operazioni

    Falso

    Vero

    OSSERVAZIONE Esaminando in dettaglio il precedente algoritmo, ana-lizziamo luso che viene fatto delle variabili n, numero e somma:

    n: indica quanti numeri dovranno essere elaborati e viene utilizzataper controllare lesecuzione del ciclo; viene pertanto utilizzata comecontatore (in questo caso a scalare1);

    numero: la variabile utilizzata per la lettura dei singoli numeri dasommare (uno alla volta);

    somma: la variabile che alla ne del procedimento conterr il ri-sultato; posta inizialmente uguale a 0 e successivamente sommataripetutamente al valore numero; variabili utilizzate in questo modosono denite accumulatori.

    La TABELLA 17 riassume le corrispondenze signicative tra NLS e DAB.

    TABELLA 17

    Schema NLS DAB

    Sequenza

    Selezione a una via Se allora

    Selezione a due vie Se allora

    altrimenti

    Ciclo indeterminatocon controllo in testa

    Finch

    eseguiInizio

    Fine

    1. Un uso alternativo,ma altrettantoclassico, della variabilecontatore consistenellincrementarneil valore di una unita ogni iterazione.

    Formichi, Meini CORSO DI INFORMATICA Zanichelli 2012

  • 34 A2 Algoritmi

    Algoritmi e fattoreumano

    Nella risoluzione di un proble-

    ma ci che fa la differenza la

    qualit della strategia risolutiva

    adottata e la sua descrizione

    algoritmica.

    Ovviamente questa attivit

    riservata alluomo, anche se

    una branca dellinformatica

    dedicata allintelligenza arti-

    ciale, che tenta di program-

    mare i computer per attivit di

    questo tipo.

    Allo stato attuale nella deni-

    zione degli algoritmi lattivit

    umana riveste ancora un ruolo

    centrale: quindi il prodotto

    dellattivit umana a essere

    eseguito dalle macchine in

    modo automatico.

    Al di l della conoscenza pi o

    meno approfondita di tecniche

    e di strumenti utilizzabili per la

    progettazione e limplementa-

    zione degli algoritmi, la ca-

    pacit e la competenza a fare

    la differenza.

    Blocco operazioni

    Falso

    Vero

    i 1

    i i + 1

    Blocco operazioni

    1

  • 354 Analisi di problemi e sintesi di algoritmi

    Inizio

    Fine

    Problema

    Verifica:algoritmocorretto?

    Algoritmo

    Analisi problema

    Sintesi algoritmo

    Falso

    Vero

    FIGURA 6

    Nel seguito sono presentati alcuni esempi di analisi di problemi e di sintesie verica dei relativi algoritmi risolutivi; ma ricordiamo che la competenzasi costruisce solo cimentandosi con gli esercizi proposti.

    4.1 Problema 1: determinazione della data

    della Pasqua

    La TABELLA 18 descrive un algoritmo per la determinazione della data dellaPasqua (giorno p del mese n) a partire dallanno x. Per esempio, utilizzandola tabella per determinare la Pasqua dellanno 2010, risulta p = 4 e n = 4,cio la data del 4 aprile (TABELLA 19).Il calcolo manuale permette di vericare che non ci sono selezioni o itera-zioni, per cui lalgoritmo risulta essere una semplice successione di asse-gnamenti:

    Inizio

    Leggi X

    B Int(X/100)C X Int(X : 100) * 100A (5 * B + C) Int((5 * B + C) : 19) * 19R Int((3 * B + 75)/4)S (3 * B + 75) Int((3 * B + 75)/4) * 4T Int((8 * B + 88)/25)H (19 * A + R T) Int((19 * A + R T)/30) * 30

    Formichi, Meini CORSO DI INFORMATICA Zanichelli 2012

  • 36 A2 Algoritmi

    G Int((A + 11 * H)/319)J Int((300 60 * S + C)/4)K (300 60 * S + C) Int((300 60 * S + C)/4) * 4M (2 * J K H + G) Int((2 * J K H + G)/7) * 7N Int((H G + M + 110)/30)Q (H G + M + 110) Int((H G + M + 110)/30) * 30P (Q + 5 N) Int((Q + 5 N)/32) * 32

    Scrivi P, NFine

    TABELLA 18

    Passo Numero da... ...dividere per Risultato

    Quoziente intero Resto

    1 x (anno) 100 b c

    2 5b + c 19 a

    3 3(b + 25) 4 r s

    4 8(b + 11) 25 t

    5 19a + r t 30 h

    6 a + 11h 319 g

    7 60(5 s) + c 4 j k

    8 2 j k h + g 7 m

    9 h g + m + 110 30 n q

    10 q + 5 n 32 p

    TABELLA 19

    Passo Numero da... ...dividere per Risultato

    Quoziente intero Resto

    1 x = 2010 100 b = 20 c = 10

    2 5b + c = 110 19 a = 15

    3 3(b + 25) = 135 4 r = 33 s = 3

    4 8(b + 11) = 248 25 t = 5

    5 19a + r t = 313 30 h = 13

    6 a + 11h = 158 319 g = 0

    7 60(5 s) + c = 130 4 j = 32 k = 2

    8 2 j k h + g = 49 7 m = 0

    9 h g + m + 110 = 123 30 n = 4 q = 3

    10 q + 5 n = 4 32 p = 4

    Lalgoritmo deve essere vericato mediante una tabella di traccia (sceglia-mo nuovamente lanno 2010 come dato) (TABELLA 20).

    Formichi, Meini CORSO DI INFORMATICA Zanichelli 2012

  • 374 Analisi di problemi e sintesi di algoritmi

    OSSERVAZIONE Una singola tabella di traccia corrispondente a un solodato non normalmente sufciente per stabilire la correttezza di un al-goritmo: buona norma realizzare pi tabelle di traccia relative a datidiversi.

    4.2 Problema 2: calcolo del costo di una spedizione

    Unagenzia di spedizioni computa il costo relativo al trasporto di un paccoin funzione del peso, della distanza da percorrere e dellurgenza (norma-le o urgente), secondo lo schema riportato nella TABELLA 21.

    TABELLA 21

    Classe 0-100 km 100-500 km Oltre 500 km

    NORMALE 1 /kg 1,5 /kg 2 /kg

    URGENTE 1,5 /kg 2 /kg 3 /kg

    TABELLA 20

    Istruzione X B C A R S T H G J K M N Q P

    Leggi X 2010

    B Int(X /100) 2010 20

    C X Int(X : 100) * 100 2010 20 10

    A (5 * B + C) Int((5 * B + C) : 19) * 19 2010 20 10 15

    R Int((3 * B + 75)/4) 2010 20 10 15 33

    S (3 * B + 75) Int((3 * B + 75)/4) * 4 2010 20 10 15 33 3

    T Int((8 * B + 88)/25) 2010 20 10 15 33 3 5

    H (19 * A + R T ) Int((19 * A + R T )/30) * 30 2010 20 10 15 33 3 5 13

    G Int((A + 11 * H )/319) 2010 20 10 15 33 3 5 13 0

    J Int((300 60 * S + C)/4) 2010 20 10 15 33 3 5 13 0 32

    K (300 60 * S + C) Int((300 60 * S + C)/4) * 4 2010 20 10 15 33 3 5 13 0 32 2

    M (2 * J K H + G) Int((2 * J K H + G)/7) * 7 2010 20 10 15 33 3 5 13 0 32 2 0

    N Int((H G + M + 110)/30) 2010 20 10 15 33 3 5 13 0 32 2 0 4

    Q (H G + M + 110) Int((H G + M + 110)/30) * 30 2010 20 10 15 33 3 5 13 0 32 2 0 4 3

    P (Q + 5 N ) Int((Q + 5 N )/32) * 32 2010 20 10 15 33 3 5 13 0 32 2 0 4 3 4

    Scrivi P, N 2010 20 10 15 33 3 5 13 0 32 2 0 4 3 4

    Formichi, Meini CORSO DI INFORMATICA Zanichelli 2012

  • 38 A2 Algoritmi

    Anche in questo caso iniziamo da unanalisi del problema calcolando al-cuni costi:

    pacco normale di 50 kg con distanza 200 km: 1,5 50 = 75 ; pacco urgente di 10 kg con distanza 800 km: 3 10 = 30 .

    subito evidente come lalgoritmo debba selezionare nella tabella il cor-retto coefciente per lo svolgimento del calcolo, per cui un algoritmo riso-lutivo potrebbe essere quello di FIGURA 7.Per vericare lalgoritmo compiliamo le tabelle di traccia dei due esempicalcolati in precedenza (TABELLE 22 e 23).

    TABELLA 22

    Blocco Peso Distanza Classe C Costo Condizione

    Leggi

    Peso, Distanza, Classe 50 200 NORMALE

    (Classe = NORMALE) 50 200 NORMALE Vero

    (Distanza < 100) 50 200 NORMALE Falso

    Fine

    Scrivi Costo

    Inizio

    LeggiPeso, Distanza,

    Classe

    Classe= NORMALE

    Distanza< 100

    Distanza< 100

    Distanza> 500

    Distanza> 500

    C 3,0 C 2,0C 1,5 C 2,0 C 1,0C 1,5

    Costo C * Peso

    Vero

    Vero Vero

    Vero VeroFalso

    Falso Falso

    Falso Falso

    FIGURA 7

    Formichi, Meini CORSO DI INFORMATICA Zanichelli 2012

  • 394 Analisi di problemi e sintesi di algoritmi

    TABELLA 22

    Blocco Peso Distanza Classe C Costo Condizione

    (Distanza > 500) 50 200 NORMALE Falso

    C 1,5 50 200 NORMALE 1,5

    Costo C * Peso 50 200 NORMALE 1,5 75

    Scrivi Costo 50 200 NORMALE 1,5 75

    TABELLA 23

    Blocco Peso Distanza Classe C Costo Condizione

    Leggi

    Peso, Distanza, Classe 10 800 URGENTE

    (Classe = NORMALE) 10 800 URGENTE Falso

    (Distanza < 100) 10 800 URGENTE Falso

    (Distanza > 500) 10 800 URGENTE Vero

    C 3,0 10 800 URGENTE 3,0

    Costo C * Peso 10 800 URGENTE 3,0 30

    Scrivi Costo 10 800 URGENTE 3,0 30

    4.3 Problema 3: rimbalzi di una pallina di gomma

    Una pallina di gomma lasciata cadere rimbalza ogni volta no a unaltezzache l80% dellaltezza da cui cade (la prima volta laltezza iniziale, levolte successive laltezza del rimbalzo precedente). Lasciando cadere lapallina da 1 m i rimbalzi successivi raggiungeranno le seguenti altezze daterra:

    1 rimbalzo: 1 0,8 = 0,8 m2 rimbalzo: 0,8 0,8 = 0,64 m3 rimbalzo: 0,64 0,8 = 0,512 m4 rimbalzo: 0,512 0,8 = 0,4096 m

    Volendo determinare mediante un algoritmo laltezza delln-esimo rimbal-zo, intuitivo che dobbiamo ripetere il calcolo per N volte (con N nume-ro dei rimbalzi) come nel diagramma di usso di FIGURA 8.Verichiamo lalgoritmo compiliamo la tabella di traccia relativa allesem-pio calcolato in precedenza (TABELLA 24).

    TABELLA 24

    Blocco Altezza N Condizione

    Leggi altezza, N 1 4

    altezza altezza * 0,8 0,8 4

    N N 1 0,8 3

    (N > 0) 0,8 3 Vero

    Formichi, Meini CORSO DI INFORMATICA Zanichelli 2012

  • 40 A2 Algoritmi

    TABELLA 24

    Blocco Altezza N Condizione

    altezza altezza * 0,8 0,64 3

    N N 1 0,64 2

    (N > 0) 0,64 2 Vero

    altezza altezza * 0,8 0,512 2

    N N 1 0,512 1

    (N > 0) 0,512 1 Vero

    altezza altezza * 0,8 0,4096 1

    N N 1 0,4096 0

    (N > 0) 0,4096 0 Falso

    Scrivi altezza 0,4096 0

    OSSERVAZIONE Luso di una variabile in questo caso N successiva-mente decrementata da un valore iniziale no a 0 per contare il numerodi volte che, mediante un ciclo, si ripete un blocco di istruzioni unatipica tecnica di costruzione degli algoritmi iterativi.

    OSSERVAZIONE Il semplice spostamento del blocco di uscita (corri-spondente allistruzione Scrivi) allinterno del ciclo consente di avere unalgoritmo che visualizza le altezze dei rimbalzi successivi:

    Fine

    Scrivialtezza

    Inizio

    Leggialtezza, N

    N > 0

    altezza altezza * 0,8

    N N 1

    Vero

    Falso

    FIGURA 8

    Formichi, Meini CORSO DI INFORMATICA Zanichelli 2012

  • 414 Analisi di problemi e sintesi di algoritmi

    Inizio

    Leggi altezza, N

    Esegui

    Inizio

    altezza altezza * 0,8Scrivi altezza

    N N 1Fine

    Finch (n > 0)Fine

    Sappiamo che la pallina si ferma quando effettua un rimbalzo la cui altezza inferiore a 1 cm (0,01 m). Il seguente algoritmo una variante del pre-cedente e determina il numero di rimbalzi che la pallina effettua quandoviene lasciata cadere da una certa altezza iniziale:

    Inizio

    Leggi altezza

    N = 0Esegui

    Inizio

    altezza altezza * 0,8 N N + 1

    Fine

    Finch (altezza > 0,01) Scrivi N

    Fine

    OSSERVAZIONE Anche in questo caso la variabile N inizializzata a 0 esuccessivamente incrementata per ogni ripetizione del ciclo di istruzio-ni utilizzata con una modalit tipica, come contatore.

    Verichiamo questa variante dellalgoritmo mediante una tabella di tracciaper laltezza iniziale di 5 cm (0,05 m) (TABELLA 25).

    TABELLA 25

    Istruzione Altezza N Condizione

    Leggi altezza 0,05

    N 0 0,05 0

    altezza altezza * 0,8 0,04 0

    N N + 1 0,04 1

    (altezza > 0,01) 0,04 1 Vero

    altezza altezza * 0,8 0,032 1

    N N + 1 0,032 2

    Formichi, Meini CORSO DI INFORMATICA Zanichelli 2012

  • 42 A2 Algoritmi

    TABELLA 25

    Istruzione Altezza N Condizione

    (altezza > 0,01) 0,032 2 Vero

    altezza altezza * 0,8 0,0256 2

    N N + 1 0,0256 3

    (altezza > 0,01) 0,0256 3 Vero

    altezza altezza * 0,8 0,02048 3

    N N + 1 0,02048 4

    (altezza > 0,01) 0,02048 4 Vero

    altezza altezza * 0,8 0,016384 4

    N N + 1 0,016384 5

    (altezza > 0,01) 0,016384 5 Vero

    altezza altezza * 0,8 0,0131072 5

    N N + 1 0,0131072 6

    (altezza > 0,01) 0,0131072 6 Vero

    altezza altezza * 0,8 0,01048576 6

    N N + 1 0,01048576 7

    (altezza > 0,01) 0,01048576 7 Vero

    altezza altezza * 0,8 0,008388608 7

    N N + 1 0,008388608 8

    (altezza > 0,01) 0,008388608 8 Falso

    Scrivi N 0,008388608 8

    4.4 Problema 4: sequenza dei numeri di Fibonacci

    Un qualsiasi numero di Fibonacci successivo al secondo uguale alla som-ma dei due numeri di Fibonacci che lo precedono nella sequenza (il primonumero di Fibonacci 1, il secondo numero di Fibonacci 1). moltosemplice costruire la sequenza dei primi numeri di Fibonacci seguendoquesta regola:

    1) 12) 13) 2 (1 + 1)4) 3 (2 + 1)5) 5 (3 + 2)6) 8 (5 + 3)7) 13 (8 + 5)8) 21 (13 + 8)9) 34 (21 + 13)10) 55 (34 + 21)

    Formichi, Meini CORSO DI INFORMATICA Zanichelli 2012

  • 434 Analisi di problemi e sintesi di algoritmi

    Anche in questo caso evidente che il calcolo segue uno schema ripetitivoche in un algoritmo, per determinare ln-esimo numero di Fibonacci, do-vr essere reso mediante un ciclo; in questo caso per dobbiamo utilizzaredue variabili per ricordare i due precedenti valori della sequenza mano amano che si procede nella sua costruzione:

    Inizio

    Leggi N

    F1 1 F2 1

    Esegui

    Inizio

    F F1 + F2 N N 1 F2 F1 F1 F

    Fine

    Finch (N > 0) Scrivi F

    Fine

    Verichiamo mediante una tabella di traccia il funzionamento dellalgorit-mo per N = 5 (TABELLA 26).

    TABELLA 26

    Istruzione F1 F2 F N Condizione

    Leggi N 5

    F1 1 1 5

    F2 1 1 1 5

    F F1 + F2 1 1 2 5

    N N 1 1 1 2 4

    F2 F1 1 1 2 4

    F1 F 2 1 2 4

    (N > 0) 2 1 2 4 Vero

    F F1 + F2 2 1 3 4

    N N 1 2 1 3 3

    F2 F1 2 2 3 3

    F1 F 3 2 3 3

    (N > 0) 3 2 3 3 Vero

    F F1 + F2 3 2 5 3

    N N 1 3 2 5 2

    F2 F1 3 3 5 2

    Formichi, Meini CORSO DI INFORMATICA Zanichelli 2012

  • 44 A2 Algoritmi

    TABELLA 26

    Istruzione F1 F2 F N Condizione

    F1 F 5 3 5 2

    (N > 0) 5 3 5 2 Vero

    F F1 + F2 5 3 8 2

    N N 1 5 3 8 1

    F2 F1 5 5 8 1

    F1 F 8 5 8 1

    (N > 0) 8 5 8 1 Vero

    F F1 + F2 8 5 13 1

    N N 1 8 5 13 0

    F2 F1 8 8 13 0

    F1 F 13 8 13 0

    (N > 0) 13 8 13 0 Falso

    Scrivi F 13 8 13 0

    Ora il quinto numero della sequenza di Fibonacci che abbiamo calcolatoin precedenza 5 e non 13, per cui lalgoritmo non corretto, anchese evidente dalla tabella di traccia che calcola effettivamente i numeridella sequenza sommando i due precedenti: ci che errato che nonabbiamo considerato che i primi due numeri della sequenza non devonoessere calcolati, per cui la variabile N deve essere inizialmente decremen-tata di 2:

    Inizio

    Leggi N

    F1 1 F2 1 N N 2 Esegui

    Inizio

    F F1 + F2 N N 1 F2 F1 F1 F

    Fine

    Finch (N > 0) Scrivi F

    Fine

    La tabella di traccia riportata nella TABELLA 27 dimostra che la correzioneapportata rende lalgoritmo corretto.

    Formichi, Meini CORSO DI INFORMATICA Zanichelli 2012

  • 454 Analisi di problemi e sintesi di algoritmi

    TABELLA 27

    Istruzione F1 F2 F N Condizione

    Leggi N 5

    F1 1 1 5

    F2 1 1 1 5

    N N 2 1 1 3

    F F1 + F2 1 1 2 3

    N N 1 1 1 2 2

    F2 F1 1 1 2 2

    F1 F 2 1 2 2

    (N > 0) 2 1 2 2 Vero

    F F1 + F2 2 1 3 2

    N N 1 2 1 3 1

    F2 F1 2 2 3 1

    F1 F 3 2 3 1

    (N > 0) 3 2 3 1 Vero

    F F1 + F2 3 2 5 1

    N N 1 3 2 5 0

    F2 F1 3 3 5 0

    F1 F 5 3 5 0

    (N > 0) 5 3 5 0 Falso

    Scrivi F 5 3 5 0

    OSSERVAZIONE Anche in questo caso un diverso posizionamento delleistruzioni Scrivi consente di produrre come risultato dellalgoritmo lasequenza dei numeri di Fibonacci anzich solo ln-esimo numero:

    InizioLeggi NF1 1Scrivi F1F2 1Scrivi F2N N 2Esegui

    InizioF F1 + F2Scrivi FN N 1F2 F1F1 F

    FineFinch (N > 0)

    Fine

    Formichi, Meini CORSO DI INFORMATICA Zanichelli 2012

  • 46 A2 Algoritmi

    Media geometricae media aritmetica

    La media geometrica di due

    numeri denita come la radi-

    ce quadrata del loro prodotto.

    La media aritmetica di due

    numeri invece la met della

    loro somma.

    5 Un esempio di algoritmo numerico:il calcolo della radice quadrata

    Esiste un algoritmo relativamente semplice attribuito al padre dellaFisica e della Matematica moderne, lo scienziato inglese Isac Newton anche per il calcolo approssimato della radice quadrata di un numeropositivo n.Esso ha inizio con la scelta casuale di un numero positivo x0 da considerarsiuna prima approssimazione del valoren (il numero x0 comunque sceltoin modo che risulti maggiore di n: a questo scopo sufciente che il suoquadrato sia x0

    2 > n; quindi il numero x0 costituisce un valore approssimatoper eccesso di n).

    Calcolando y0 =n

    x0si ha che x0 y0 = n; il valoren che intendiamo appros-

    simare quindi la media geometrica di x0 e y0, e y0 un valore approssimatoper difetto di n.La media aritmetica di x0 e y0 :

    x1 =x0 + y0

    2 =

    1

    2 (x0 +

    n

    x0)

    Ricordando che la media aritmetica fra due numeri maggiore o ugualealla loro media geometrica2, x1 risulter compreso fra n e x0, quindi x1sar un nuovo valore approssimato per eccesso di n e sar unapprossi-mazione migliore, cio pi prossima a n di quanto non fosse x0 (infattix0 > x1 > n):