Logo dell'Università di Catania: Siciliae Studium Generale 1434 Logo DMI, Fondamenti di informatica
matite e gomma
Loghi istituzionali: Siciliae Studium Generale 1434, Università di Catania, Facoltà di Scienze Matematiche, Fisiche, Naturali, Insegnamento di Fondamenti di Informatica

Introduzione all'informatica

Lezione 1 di Fondamenti di informatica

Docenti: Marina Madonia & Giuseppe Scollo

Università di Catania
Facoltà di Scienze Matematiche, Fisiche e Naturali
Corso di Laurea in Informatica, I livello, AA 2008-09

Logo di Conformità WCAG-1 di Livello Tripla A, W3C-WAI Web Content Accessibility Guidelines 1.0 Validazione XHTML 1.0 Validazione CSS 2

Indice

  1. Introduzione all'informatica
  2. di che tratta l'informatica?
  3. algoritmi! (e dintorni)
  4. esempi di comuni algoritmi
  5. definizioni di algoritmo
  6. addizione Maya: algoritmi "manuali"
  7. terminazione di algoritmi: il caso 3x+1
  8. una definizione più ampia di algoritmo
  9. algoritmi e calcolo: precedenti storici
  10. precursori nella rivoluzione industriale
  11. la macchina analitica di Babbage
  12. calcolatori elettromeccanici e ... teorici
  13. calcolatori elettronici, Von Neumann
  14. informatica moderna e contemporanea
  15. esercizi: algoritmi nella vita quotidiana
  16. esercizi: algoritmi di calcolo
  17. temi per ulteriori approfondimenti

di che tratta l'informatica?

primo dovere di ogni 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

algoritmi! (e dintorni)

N. Gibbs e A. Tucker (1986) individuano nello studio di algoritmi la caratteristica centrale dell'informatica, che comprende le loro:

questa caratterizzazione rivela un ampio spettro di competenze ... ma che c'è al fondo?

occorre una definizione del termine "algoritmo"   [da dizionario:]

come spesso accade con le definizioni, ne occorrono altre...

esempi di comuni algoritmi

un algoritmo per la cottura dell'uovo alla coque

  1. immergi completamente l'uovo in un pentolino con acqua fredda
  2. se l'uovo galleggia, scartalo, procuratene uno più fresco e ricomincia dal passo 1
  3. poni il pentolino sul fornello
  4. accendi una fiamma vivace sotto il pentolino
  5. attendi fino all'ebollizione
  6. modera la fiamma sotto il pentolino
  7. attendi 100 secondi circa
  8. spegni la fiamma sotto il pentolino
  9. blocca rapidamente la cottura temperando con acqua fredda

un algoritmo per la conversione da Celsius a Fahreneit

  1. moltiplica il valore della temperatura in gradi Celsius per 9
  2. dividi per 5 il risultato del passo precedente
  3. aggiungi 32 al risultato del passo precedente

definizioni più formali di algoritmo

il carattere fondamentale del concetto di algoritmo in informatica può essere riconosciuto 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?

  1. sebbene la definizione non lo implichi, gli autori intendono un ordinamento totale delle operazioni da eseguire, ovvero una unica sequenza di esecuzione (per un dato input); vediamo appresso un esempio che solleva qualche dubbio in proposito;
  2. il requisito di arresto in ogni caso è inoltre piuttosto critico, come vedremo

addizione Maya: algoritmi "manuali"

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 relativo ad una diversa scelta dei 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:

nella rappresentazione decimale, 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:

  1. allineare a destra le sequenze di cifre che rappresentano i numeri da sommare
  2. raccogliere assieme in fondo a ciascuna colonna i costituenti delle cifre di quella colonna
  3. trasformare la raccolta ottenuta da ciascuna colonna, ed eventualmente altre di maggiore significatività generate dal procedimento, applicando in qualsiasi ordine, in ciascuna posizione, le due regole seguenti, fintantoché applicabili:
    •   se presenti, rimpiazza 5 unità con una cinquina
    •   se presenti, rimpiazza 2 cinquine nella posizione data con una unità nella successiva posizione più significativa (a sinistra)

terminazione di algoritmi: il caso 3x+1

sia f : N+ → N+ la funzione definita sui numeri naturali positivi (0 escluso) dalla regola:

un algoritmo di calcolo per questa funzione può essere descritto da un diagramma a blocchi

diagramma a blocchi di un algoritmo

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, ...

diagramma a blocchi di un sistema dinamico

sia f kx il k-simo elemento della sequenza; si dice ritardo di x il 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...

una definizione più ampia di algoritmo

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

algoritmi e calcolo: precedenti storici

un rapida escursione introduttiva:

precursori nella rivoluzione industriale

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

telaio Jacquard
fonte: Wikimedia Commons

i fili corrispondenti alla trama programmata sono sollevati automaticamente, permettendone il passaggio

  • un addetto basta ad operare con questo telaio, invece di tre ...

analogie con i moderni calcolatori:

  • macchina a programma = sequenza di istruzioni
  • rappresentazione binaria del programma

per maggiori dettagli sul funzionamento del telaio Jacquard: v. sito del Museo del Tessile di Chieri

la macchina analitica di Babbage

la prima invenzione di Charles Babbage è la macchina differenziale (1823): estende le idee di Pascal e Leibniz, ed è in grado di 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:

  • la sua architettura è straordinariamente simile a quella del moderno calcolatore! v.:

Sketch of the Analytical Engine di L. F. Menabrea, tradotto e corredato di ricche note da Ada Lovelace, "prima programmatrice della storia"

Augusta Ada Byron, contessa di Lovelace

Ada Augusta Byron, contessa di Lovelace, 1838
fonte: Wikimedia Commons

calcolatori elettromeccanici e ... teorici

XX secolo: elaborazione automatica di dati su larga scala, motivazioni:

Porzione del calcolatore Mark I

Porzione del calcolatore Mark I
fonte: Wikimedia Commons

non meno importanti sono gli sviluppi teorici dei primi decenni, che negli anni '30 producono:

  • modelli concettuali, simbolici, di macchine da calcolo: Post, Turing, Church
  • un concetto generale di calcolabilità (di una funzione): Tesi di Church-Turing
  • un risultato fondamentale per l'Informatica: l'indecidibilità della terminazione della macchina di Turing universale

calcolatori elettronici, Von Neumann

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 preso parte al progetto dell'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

informatica moderna e contemporanea

sviluppi salienti:

esercizi: algoritmi nella vita quotidiana

  1. Descrivere un algoritmo per la preparazione di una pietanza di proprio gusto.
  2. Descrivere un algoritmo per la conversione di un valore di temperatura da gradi Fahreneit a gradi Celsius.
  3. Descrivere un algoritmo per la spedizione di una raccomandata con ricevuta di ritorno.
  4. Descrivere un algoritmo per il pagamento di un bollettino di conto corrente postale adoperando il servizio di pagamento automatizzato disponibile in alcuni uffici postali (ad es. Catania, c. Italia 33).
  5. Descrivere un algoritmo per la prenotazione on-line di un biglietto ferroviario.
  6. Descrivere un algoritmo per lo spelling di un nome nella comunicazione telefonica (dove, ad esempio, si dice "Ancona" per "A", "Bari" per "B", etc.).
  7. Esercizi proposti dal testo (Schneider & Gersting, 2007): p. 31, n. 1, 2, 6.

esercizi: algoritmi di calcolo

  1. Descrivere un algoritmo per la sottrazione di un numero da un altro non più grande, utilizzando la rappresentazione dei numeri, qui descritta, simile a quella Maya ma in base 10.
  2. La scheda su al-Khwarizmi a p. 5 del testo (Schneider & Gersting, 2007) è affetta da un errore, in merito al significato della parola araba al-jabr : trovarlo.
  3. Descrivere un algoritmo per determinare il valore massimo presente nella sequenza di numeri prodotta dal sistema dinamico 3x+1 visto a lezione.
    • N.B. Si può garantire l'esistenza di tale massimo se il ritardo di x ha un valore definito: perché? Tale condizione è sufficiente, ma non necessaria: perché? Quale condizione è necessaria e sufficiente?
  4. Esercizi proposti dal testo (Schneider & Gersting, 2007): pp. 31-32, n. 3-5, 7-9, 14.

temi per ulteriori approfondimenti

  1. Precisione della definizione di "algoritmo"
    Né la definizione di algoritmo qui proposta, né le sue varianti più comuni, precisano se l'ordine a cui si fa riferimento riguardi la descrizione dei passi dell'algoritmo o piuttosto la loro esecuzione. Riflettere sulle differenze fra le due interpretazioni della definizione che ne conseguono, e possibilmente proporre una definizione migliore.
  2. Approfondimenti storici su algoritmi e calcolo
    In ciascuno dei 12 punti qui proposti (e in altri "in mezzo") fra i precedenti storici del rapporto fra algoritmi e calcolo, si individuano facilmente uno o più temi suscettibili di approfondimento storico; sceglierne uno di particolare interesse personale, reperire fonti attendibili di studio sul tema e produrre una sintesi documentata dello studio svolto.
  3. Algoritmi paralleli e griglie computazionali
    Molti problemi possono essere risolti da algoritmi eseguibili da più agenti di calcolo che operano contemporanemente, spesso ciascuno su una parte assegnata dei dati in ingresso (ad esempio, l'algoritmo per l'addizione Maya qui descritto ha questa proprietà, dove ciascun esecutore opera sulle cifre di una colonna assegnata); le griglie computazionali sono reti di calcolatori organizzate per l'esecuzione di tali algoritmi, e il termine grid computing designa questo tipo di elaborazione; raccogliere documentazione su queste reti e/o su algoritmi eseguiti su griglie e produrne una sintesi, corredata di riferimenti alle fonti.
  4. Altri temi proposti dal testo (Schneider & Gersting, 2007): p. 32, Esercizi 10, 12, 15.