Docente:
Giuseppe Scollo
Università di Catania
Facoltà di Scienze Matematiche, Fisiche e Naturali
Corso di Laurea in Informatica, I livello, AA 2009-10
primo dovere di una disciplina scientifica è la definizione dell'oggetto di studio
ad esempio (e non si tratta degli equivoci più gravi), spesso si identifica l'informatica con lo studio
conoscenze di tal sorta sono rilevanti all'oggetto dell'informatica, e professionalmente utili, ma
N. Gibbs e A. Tucker (1986) individuano nello studio di algoritmi la caratteristica centrale dell'informatica, che comprende le loro:
questa caratterizzazione ha un ampio spettro di competenze... che c'è al fondo?
occorre una definizione del termine "algoritmo" [da dizionario:]
come spesso accade con le definizioni, ne occorrono altre...
un algoritmo per la cottura dell'uovo alla coque
un algoritmo per la conversione da Celsius a Fahreneit
il carattere fondamentale del concetto di algoritmo in informatica è riconoscibile nella definizione di quest'ultima come
l'utilità pratica di algoritmi ben formalizzati deriva dal fatto che essi permettono di automatizzare la risoluzione di (classi di) problemi
il testo (Schneider & Gersting, 2007) propone la seguente:
come gli stessi autori notano, la definizione è piuttosto stringente... forse un po' troppo?
il testo citato illustra la definizione di algoritmo con un esempio familiare dai banchi di scuola elementare: l'addizione di due numeri; lo si confronti con quello analogo, ma con una diversa scelta di simboli per le cifre, mutuata dalla cultura Maya (per semplicità qui in base 10: la rappresentazione Maya dei numeri è in base 20):
le cifre diverse da zero sono costruite mettendo assieme costituenti di due tipi:
•
: vale 1 (lo chiamiamo "unità")
——
: vale 5 (lo chiamiamo "cinquina")
in base 10, un cifra non nulla è costituita da al più 4 unità e al più 1 cinquina
ecco un procedimento per sommare due (o più) numeri in tale rappresentazione:
sia f : N+ → N+ la funzione definita sui numeri naturali positivi (0 escluso) dalla regola:
=
n/2,
altrimenti
f n
=
3n + 1
un algoritmo di calcolo per questa funzione può essere descritto da un diagramma a blocchi
con un piccolo ritocco al diagramma a blocchi, lo trasformiamo in quello di un sistema dinamico, che, avviato da un input x, genera la sequenza infinita delle applicazioni iterate di f : f x, f f x, f f f x, ...
sia f kx il
k-simo
elemento della sequenza; ritardo di
x
≡
minimo k
tale che f kx
=
1
dal diagramma a blocchi del sistema dinamico si ottiene facilmente quello di un algoritmo per il calcolo del ritardo, ma...
ecco una definizione informale meno esigente di quella citata, tale da permettere di annoverare fra gli algoritmi i procedimenti visti nei due esempi precedenti:
dove è inteso che
la definizione non prescrive che l'esecuzione termini
la non terminazione di un algoritmo non è necessariamente sintomo di un errore di progettazione o di realizzazione dell'algoritmo
un rapida escursione introduttiva:
l'idea di J.-M. Jacquard (1804): introdurre nei telai delle schede di cartone forato; ad ogni scheda corrispondeva un preciso disegno, formato dai fori
telaio Jacquard
fonte: Wikimedia Commons
lettura delle schede: le file di aghi possono attraversarle solo dove ci sono i fori
i fili corrispondenti alla trama programmata sono sollevati automaticamente, permettendone il passaggio
analogie con i moderni calcolatori:
per maggiori dettagli sul funzionamento del telaio Jacquard: v. sito del Museo del Tessile di Chieri
la prima invenzione di Charles Babbage è la macchina differenziale (1823): estende le idee di Pascal e Leibniz, può operare fino a 6 cifre significative
questa fu la sola che riuscì a costruire ...
il progetto di costruirne una con precisione a 20 cifre è stato realizzato... nel 1991, dopo sei anni di lavoro, dal London Museum of Science
la successiva macchina analitica non è però una mera (per quanto sofisticata) calcolatrice:
Sketch of the Analytical Engine di L. F. Menabrea, tradotto e corredato di ricche note da Ada Lovelace, "prima programmatrice della storia "
Ada Augusta Byron, contessa di Lovelace, 1838
fonte: Wikimedia Commons
XX secolo: elaborazione automatica di dati su larga scala, motivazioni:
Porzione del calcolatore Mark I
fonte: Wikimedia Commons
non meno importanti sono gli sviluppi teorici dei primi decenni, che negli anni '30 producono:
negli anni '40, grazie alla disponibilità delle prime tecnologie elettroniche, prende definitivamente avvento la rappresentazione binaria dell'informazione
spesso si riporta quale primo esemplare di calcolatore elettronico l'ENIAC, costruito da Eckert e Mauchly (U. of Pennsylvania, 1946), ma la questione è controversa
l'idea di Von Neumann (che aveva partecipato al progetto ENIAC): rappresentare e memorizzare il programma di calcolo così come si rappresentano e memorizzano i dati su cui opera
con Von Neumann, l'idea prende "corpo tecnologico": nasce il calcolatore general-purpose a programma memorizzato
sviluppi salienti: