Corso Di Informatica 1
-
Upload
gino-starda -
Category
Documents
-
view
2.431 -
download
539
description
Transcript of Corso Di Informatica 1
-
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:
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):