Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Fondamenti di Informatica: Teoria, Algoritmi e Applicazioni, Appunti di Elementi di Informatica

I fondamenti dell'informatica, dalla teoria alla pratica. Vengono trattati argomenti come la definizione di algoritmi, l'implementazione, l'uso del calcolatore e le diverse specializzazioni dell'informatica, tra cui l'informatica teorica e applicata. Si discute anche di come l'informatica si integra con altre discipline, come la bioinformatica e la chimica computazionale. Infine, vengono affrontati temi come la sicurezza informatica e le applicazioni mediche, fornendo una panoramica completa del campo dell'informatica e delle sue implicazioni.

Tipologia: Appunti

2024/2025

Caricato il 04/09/2025

rosadonati
rosadonati 🇮🇹

11 documenti

1 / 35

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
INFORMATICA
LEZIONE 1
La progettazione dei contenuti di questo insegnamento di Informatica si fonda sulla concezione
dell'informatica come disciplina scientifica e non soltanto sul ruolo che l'informatica ha assunto
nella società contemporanea. A tal fine, si riporta di seguito un passo significativo
del
Manifesto dell'Informatica
, un documento ufficiale che il GRIN (http://www.grin-
informatica.it), l'Associazione Italiana dei Docenti di Informatica, ha sottoscritto per definire il
corretto approccio alla disciplina informatica e al suo insegnamento.
L'informatica è un elemento essenziale della società moderna, non solo perché necessaria al
normale svolgimento di quotidiane attività, ma anche in quanto il suo sviluppo plasma e
determina quello dell'intera società. Non esiste campo dell'attività umana in cui le scoperte
dell'informatica non abbiano lasciato il segno. L'uso del calcolatore, infatti, è uscito dai campi
tradizionali del calcolo scientifico per entrare in tutte le aree della produzione industriale, dalla
medicina all'editoria. Due miliardi di persone si collegano ad Internet. Centinaia di milioni di
miliardi (il numero non è un errore di battitura) di transistor – i componenti elementari delle
tecnologie dell'informazione – popolano i prodotti che ci circondano, dall'automobile
all'elettrodomestico, dalla pompa di benzina al videogioco, per l'equivalente della metà del
valore economico di questi oggetti. Centinaia di miliardi di istruzioni software, manifestazioni di
intelligenza umana, animano questi componenti e attraverso di essi tutti i processi che
caratterizzano la nostra società moderna.
Nel linguaggio comune il termine “informatica” viene usato per riferirsi a tre aspetti tra loro
distinti, seppur collegati:
1.
operativo: un insieme di applicazioni e manufatti (i computer);
2.
tecnologico: una tecnologia che realizza quelle applicazioni;
3.
culturale: una disciplina scientifica che fonda e rende possibile quella tecnologia.
L’informatica come insieme di applicazioni è la percezione della persona comune; “conoscere
l’informatica” significa “saper usare le applicazioni”. L’informatica come tecnologia è la
percezione del tecnico (del perito, del laureato, dello specialista, ciascuno al suo livello di
competenza); “conoscere l’informatica” significa in questo caso “saper realizzare le
applicazioni”. L’informatica come scienza dovrebbe essere invece patrimonio di ogni persona
con educazione superiore. Come i principi della fisica, della matematica o della chimica sono
utili anche e soprattutto come modello interpretativo della realtà, e non perché chi li conosce
possa diventare un fisico, un matematico, o un chimico, così i principi fondamentali
dell’informatica sono in grado di fornire modelli di interpretazione e una strumentazione
culturale utile nella vita comune della persona colta che deve affrontare le sfide del mondo
moderno.
In altre parole, si può pensare all'informatica come alla scienza che si occupa dei seguenti
temi:
lo studio dei fondamenti teorici della scienza dell'informazione;
la definizione di algoritmi per l'elaborazione automatica delle informazioni;
la realizzazione (implementazione) di questi algoritmi;
e, infine, l’uso del calcolatore.
In definitiva,
l’informatica non riguarda i computer più di quanto l’astronomia riguardi i
telescopi
.
Lo studio dell'informatica è quindi importante perché:
lo sviluppo di algoritmi consente diaccrescerele facoltà creative, logiche e
cognitivedell'individuo;
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23

Anteprima parziale del testo

Scarica Fondamenti di Informatica: Teoria, Algoritmi e Applicazioni e più Appunti in PDF di Elementi di Informatica solo su Docsity!

INFORMATICA

LEZIONE 1

La progettazione dei contenuti di questo insegnamento di Informatica si fonda sulla concezione dell'informatica come disciplina scientifica e non soltanto sul ruolo che l'informatica ha assunto nella società contemporanea. A tal fine, si riporta di seguito un passo significativo

del Manifesto dell'Informatica, un documento ufficiale che il GRIN (http://www.grin-

informatica.it), l'Associazione Italiana dei Docenti di Informatica, ha sottoscritto per definire il corretto approccio alla disciplina informatica e al suo insegnamento.

L'informatica è un elemento essenziale della società moderna, non solo perché necessaria al

normale svolgimento di quotidiane attività, ma anche in quanto il suo sviluppo plasma e

determina quello dell'intera società. Non esiste campo dell'attività umana in cui le scoperte

dell'informatica non abbiano lasciato il segno. L'uso del calcolatore, infatti, è uscito dai campi

tradizionali del calcolo scientifico per entrare in tutte le aree della produzione industriale, dalla

medicina all'editoria. Due miliardi di persone si collegano ad Internet. Centinaia di milioni di

miliardi (il numero non è un errore di battitura) di transistor – i componenti elementari delle

tecnologie dell'informazione – popolano i prodotti che ci circondano, dall'automobile

all'elettrodomestico, dalla pompa di benzina al videogioco, per l'equivalente della metà del

valore economico di questi oggetti. Centinaia di miliardi di istruzioni software, manifestazioni di

intelligenza umana, animano questi componenti e attraverso di essi tutti i processi che

caratterizzano la nostra società moderna.

Nel linguaggio comune il termine “informatica” viene usato per riferirsi a tre aspetti tra loro

distinti, seppur collegati:

1. operativo: un insieme di applicazioni e manufatti (i computer);

2. tecnologico: una tecnologia che realizza quelle applicazioni;

3. culturale: una disciplina scientifica che fonda e rende possibile quella tecnologia.

L’informatica come insieme di applicazioni è la percezione della persona comune; “conoscere

l’informatica” significa “saper usare le applicazioni”. L’informatica come tecnologia è la

percezione del tecnico (del perito, del laureato, dello specialista, ciascuno al suo livello di

competenza); “conoscere l’informatica” significa in questo caso “saper realizzare le

applicazioni”. L’informatica come scienza dovrebbe essere invece patrimonio di ogni persona

con educazione superiore. Come i principi della fisica, della matematica o della chimica sono

utili anche e soprattutto come modello interpretativo della realtà, e non perché chi li conosce

possa diventare un fisico, un matematico, o un chimico, così i principi fondamentali

dell’informatica sono in grado di fornire modelli di interpretazione e una strumentazione

culturale utile nella vita comune della persona colta che deve affrontare le sfide del mondo

moderno.

In altre parole, si può pensare all'informatica come alla scienza che si occupa dei seguenti temi:  lo studio dei fondamenti teorici della scienza dell'informazione;  la definizione di algoritmi per l'elaborazione automatica delle informazioni;  la realizzazione (implementazione) di questi algoritmi;  e, infine, l’uso del calcolatore.

In definitiva, l’informatica non riguarda i computer più di quanto l’astronomia riguardi i

telescopi.

Lo studio dell'informatica è quindi importante perché:  lo sviluppo di algoritmi consente di accrescere le facoltà creative, logiche e cognitive dell'individuo;

 l’informatica è intrinsecamente multidisciplinare : ogni disciplina prevede una opportuna forma di organizzazione e trattamento delle informazioni;  l’informatica offre strumenti per modellare i formalmente problemi e poterne affrontare la risoluzione in modo efficiente ed efficace;  le tecnologie dell'informazione sono diventate strategiche in numerosi ambiti applicativi. Esse non solo semplificano lo svolgimento di compiti realizzabili anche senza calcolatore, ma offrono vantaggi sul lungo termine altrimenti non accessibili. Branche dell'informatica Nel sentire comune, l'informatica è vista come una disciplina monolitica. Ogni volta che si pensa ad un informatico, si immagina un esperto capace di risolvere qualsiasi problema legato all'uso dei calcolatori. In realtà l'informatica è una disciplina complessa dove si possono riconoscere numerose specializzazioni. Pertanto è possibile, per non dire frequente, che un esperto sviluppi le proprie competenze rispetto a un sottoinsieme di specializzazioni. A titolo esemplificativo, senza alcuna pretesa di completezza, elenchiamo alcune specializzazioni della disciplina informatica:  Informatica teorica o Teoria dell'informazione o Teoria della computazione o Algoritmi e strutture dati o Teoria dei linguaggi di programmazione  Informatica applicata o Architettura dei calcolatori

o Sistemi e architetture ( Information Technology - IT)

o Reti di calcolatori o Basi di dati o Sicurezza informatica e crittografia o Interazione uomo-macchina o Intelligenza artificiale o Elaborazione digitale dei segnali o Programmazione  Sviluppo software  Sviluppo web  Sviluppo sistemi integrati Inoltre l'informatica può essere coniugata ad altre discipline per dare vita a branche multidisciplinari come ad

esempio bioinformatica, chimica computazionale, robotica, computer grafica

e musicologia computazionale.

Storia dell'informatica e nascita del calcolatore Perché si possa arrivare all'informatica come la intendiamo oggi è stato necessario sviluppare parallelamente due diversi aspetti: quello tecnologico e quello filosofico (in particolare logico- matematico). La serie di eventi, idee e scoperte che culmina con i moderni calcolatori ha quindi una moltitudine di protagonisti, disseminati in un arco temporale di almeno 4000 anni, con molte storie parallele. Per quanto il racconto possa essere avvincente e ricco di colpi di scena, non è questa la sede per una esposizione esaustiva. Ci si limiterà pertanto a citare solo alcuni degli aspetti cruciali: quelli più funzionali alla comprensione del pensiero informatico e del funzionamento del calcolatore.

Generazione 1: I tubi a vuoto (valvole) Nel 1939, fu la volta del matematico e fisico John Vincent Atanasoff e del suo allievo Clifford Berry i quali costruirono l’Atanasoff Berry Computer, meglio noto come ABC. Si tratta del primo calcolatore digitale totalmente elettronico, ma mai brevettato. Nel 1945, John von Neumann definisce l'architettura per calcolatori digitali programmabili tutt'ora in uso nella maggior parte dei dispositivi moderni di questo tipo. La peculiarità dell'architettura di von Neumann risiede nel fatto che dati e programmi condividono la stessa memoria. Nel 1946 venne presentato l’ENIAC, il primo calcolatore elettronico basato interamente su tecnologia a valvole. Progettato presso l’Università della Pennsylvania, fu il primo vero calcolatore dell’era elettronica in quanto eliminava tutti i dispositivi meccanici. L’ENIAC era in grado di compiere operazioni molto complesse in pochissimo tempo per l'epoca, ma pesava 300 tonnellate e occupava 170 metri quadrati. Quella delle dimensioni rimase per lungo tempo una delle più grandi sfide dell’industria dei calcolatori.

Nel 1948, Claude Shannon introdusse il termine bit (contrazione di binary digit), da lui coniato

per designare l'unità elementare binaria di informazione ( vero e falso, o 0 e 1).

Generazione 2: I transistor Nel 1954, l’IBM propose il primo calcolatore commerciale con memoria su nastro magnetico. Tra le più importanti innovazioni di quegli anni, vi furono l'uso dei transistor al posto dei tubi a vuoto e l’evoluzione dei linguaggi di programmazione. Nel 1959 venne lanciato l’IBM 705, che usava il FORTRAN, un linguaggio di programmazione molto più vicino a quello umano rispetto alle istruzioni comprensibili dal calcolatore. I problemi principali che ostacolavano la diffusione commerciale del calcolatore restavano i costi elevati e la dimensione di queste macchine. Generazione 3: I circuiti integrati Il problema delle dimensioni durò fino al 1964, quando l'azienda italiana Olivetti

introdusse Programma 101, da molti considerato il primo personal computer (PC) della storia,

in quanto disponeva delle principali caratteristiche dei grandi calcolatori dell'epoca, ma era sufficientemente compatto da stare su una scrivania. Tuttavia non aveva uno schermo: le informazioni erano trasmesse all'utente per mezzo di un nastro di carta stampata. Parallelamente, la Digital Equipement Corporation introdusse il suo primo minicomputer, il PDP- 8, dotato di uno schermo molto rudimentale (sostanzialmente un oscilloscopio). Generazione 4: Il microprocessore

Agli inizi degli anni ’70, la Intel Corporation sviluppò il microprocessore, il primo circuito

integrato capace di contenere l’intera unità di calcolo di un calcolatore. In seguito venne commercializzato quello che viene oggi considerato il primo PC della storia per come lo intendiamo oggi, l'Apple II, con il suo sistema operativo chiamato Apple Dos. Solo quattro anni dopo, nel 1981, l’IBM brevettò il suo primo PC, destinato a imporsi come

standard di riferimento con il sistema operativo MS-Dos prodotto dalla software house

Microsoft. Generazione 5: Il calcolo parallelo e la rete Tra gli anni '80 e '90 si sono affermate in rapida successione tecnologie come le interfacce grafiche, la possibilità di compiere più operazioni in parallelo, e l'avvento di Internet,

coadiuvate da un costante incremento della potenza di calcolo e delle capacità di memorizzazione. Problemi, algoritmi e programmi Un algoritmo può essere definito come un metodo per risolvere in modo efficiente, univoco, universale, formalmente preciso e finito un problema. Nella sua accezione più ampia, è possibile includere nella categoria degli algoritmi anche una semplice ricetta di cucina oppure il libretto di istruzioni di un elettrodomestico. Entrambi infatti sono una successione di istruzioni precise per la realizzazione di un risultato. Il termine algoritmo deriva dal nome del matematico Muhammad ibn Musa al-Khuwarizmi. Le proprietà fondamentali di un algoritmo sono:  finitezza delle operazioni da svolgere;  non ambiguità del linguaggio in cui sono scritte le operazioni da effettuare. Questo significa che le istruzioni devono essere scritte in un linguaggio codificato e formale;  universalità della procedura algoritmica, nel senso che essa deve valere per tutti i problemi dello stesso genere;  completezza delle operazioni, nel senso che ogni operazione necessaria allo svolgimento del compito deve essere explicitamente dichiarata. Nonostante sia più semplice affrontare algoritmicamente calcoli matematici, o geometrici, è possibile affrontare nello stesso modo qualsiasi problema, a patto che se ne possa fornirne una definizione formalmente corretta e non ambigua. Questo esercizio di formalizzazione trascende l'uso del computer e aiuta gli individui ad affrontare i problemi in modo astratto. Va notato che ogni problema può essere affrontato e descritto in molti modi diversi; quindi non esiste un unico algoritmo per la risoluzione di un problema. Questo significa che lo sviluppo di algoritmi è un'attività che richiede, tra le altre cose, creatività e ingegno. A tal proposito, vale

la pena citare una famosa battuta di Bill Gates (co-fondatore della Microsoft): " Sceglierò

sempre un pigro per fare un lavoro difficile perché troverà il modo più facile per farlo".

Si sottolinea inoltre come l'efficacia e la complessità di un algoritmo dipendano anche dall'organizzazione dei dati a disposizione dell'algoritmo per la risoluzione del problema. Esistono molti modi di organizzare i dati, ognuno dei quali ha pregi e difetti. In genere gli aspetti più rilevanti di cui tenere conto sono:  la quantità di spazio occupato;  la velocità con cui è possibile reperire un determinato dato;  la facilità con cui si possono aggiungere, modificare o eliminare dati.

Infine, un programma può essere definito come un algoritmo scritto in un linguaggio

comprensibile al calcolatore, che utilizza dati organizzati secondo una determinata strategia ed è vincolato alle risorse disponibili e alle condizioni al contorno del calcolatore sul quale il programma viene eseguito.

Nell'esempio della Figura 2.3, è stato mostrato un codice che richiedeva 15 simboli per rappresentare altrettante informazioni diverse. Un codice costruito in questo modo è molto semplice e di rapida realizzazione, ma comporta che il numero di simboli che compongono il codice e la tabella di codifica crescano con il numero di informazioni da rappresentare. È facile intuire che la gestione di un codice con un elevato numero di simboli possa essere molto complessa. È possibile costruire un codice che consenta di rappresentare lo stesso numero di informazioni diverse utilizzando un numero inferiore di simboli. Ciò significa ridurre il numero di simboli a disposizione senza tuttavia ridurre il numero di informazioni che possono essere codificate. E' evidente che, avendo meno simboli a disposizione, la rappresentazione di un’informazione richiederà una combinazione di più simboli e quindi una maggiore lunghezza dei messaggi codificati. Con riferimento all'esempio del codice per rappresentare i voti di un esame universitario, si supponga di poter utilizzare soltanto i simboli! £ $ %. Nella Figura 2.4, si mostra un esempio di tabella di codifica basata sui quattro simboli considerati. Figura 2.4. Esempio di codice per i voti di un esame universitario basato su quattro simboli. In questo modo, dato un voto, la lunghezza del messaggio codificato sarà pari a due simboli, il doppio rispetto all'unico simbolo richiesto dal codice della Figura 2.3. Si noti inoltre che sono importanti tanto i simboli quanto la posizione che questi occupano nel messaggio. Infatti il significato di “!$” è ben diverso da “$!”. Codifica binaria La rappresentazione dell’informazione numerica può adottare varie tecniche. Normalmente si usa la numerazione decimale posizionale, dove una cifra assume un valore dipendente dalla

posizione che occupa nel numero. Per esempio, la cifra “2” nel numero 12 vale 2*10^0 (dove 0 è

la posizione occupata dal 2 nel numero in esame) e nel numero 2987 vale 2*10^3 (dove 3 è la

posizione occupata dal 2 nel numero in esame). Adottando una numerazione in base 10 si hanno 10 cifre con le quali costruire i numeri: 0, 1, 2, 3, 4, 5, 6, 7, 8 e 9. Esistono molti altri tipi di numerazione in cui il numero di cifre è minore a

10, come ad esempio nella numerazione binaria. Questa fu inventata nel XVII secolo da

Gottfried Liebniz e si basa sull’utilizzo di soltanto due cifre: 0 e 1. La differenza è che mentre nella numerazione decimale il valore si misura in potenze di 10, nel caso della numerazione binaria il valore si misura in potenze di 2. A parità di valore da scrivere con la numerazione binaria, è necessario impiegare molte più cifre. Questo tipo di numerazione divenne fondamentale con l’avvento dei calcolatori elettronici, poiché le due cifre 0 e 1 sono intuitivamente associabili ai due possibili stati fisici del calcolatore, come ad esempio passaggio/non-passaggio di corrente attraverso un cavo elettrico; polarizzazione/non- polarizzazione di una sostanza magnetizzabile; c arica elettrica positiva/negativa di una sostanza.

Per manipolare ed elaborare informazioni (numeri, testo, immagini, audio, video), il calcolatore ha bisogno che queste siano codificate attraverso un codice composto dai soli simboli di 0 e 1.

Tale rappresentazione dell’informazione prende il nome di rappresentazione

binaria o rappresentazione digitale.

Un bit ( binary digit) rappresenta l’unità minima di informazione, ossia una sola unità

informativa che può avere valore 0 o 1. Per poter rappresentare un numero maggiore di informazioni sarà necessario combinare i bit in sequenze. Ad esempio, si supponga di voler fornire una rappresentazione binaria del codice della Figura 2.4. Ogni informazione, cioè ogni possibile voto, deve avere una rappresentazione binaria diversa dalla codifica degli altri voti, come mostrato nella Figura 2.5. Figura 2.5. Esempio di codifica binaria per i voti di un esame universitario. Si noti che, poiché il numero di simboli che costituiscono il codice binario è due (0 e 1), la lunghezza di ogni informazione è maggiore rispetto all'esempio della Figura 2.4 in cui si erano usati quattro simboli. All'aumentare del numero di bit di un simbolo, aumenta la quantità di informazioni rappresentabili. Ad esempio, nel caso in cui si voglia rappresentare un numero naturale (intero), il numero di bit determina il valore massimo rappresentabile, mentre nel caso di un numero irrazionale (con virgola), il numero di bit determina implicitamente anche la precisione con cui è possibile rappresentarlo. Nel primo caso sono frequenti le rappresentazioni a 8, 16 e 32 bit, mentre nel secondo caso sono più comuni rappresentazioni a 32 e 64 bit. A titolo di esempio, se si volesse rappresentare un numero intero non negativo con 8 bit, le combinazioni possibili sarebbero 2^8 =256, quindi i valori rappresentabili andrebbero da 0 a 255. Unità di misura dell'informazione digitale In informatica, dopo il bit, un'altra unità di misura fondamentale è il byte. Un byte è formato da una sequenza di 8 bit contigui. Un byte può rappresentare 256 informazioni diverse. Questo dipende dal fatto che, avendo 8 bit a disposizione e potendo assumere ogni bit due valori (0 e 1), è possibile definire 2^8 =256 diverse combinazioni di bit. Come per ogni unità di misura, anche il byte possiede multipli che consentono di rappresentare maggiori quantità di informazioni, tuttavia esistono due diverse scale di misura, spesso confuse anche dagli informatici. Errore comune (riscontrabile anche in Windows o MacOS) è infatti usare i nomi del Sistema Internazionale (SI) per riferirsi ai multipli binari, i cui nomi corretti sono stati standardizzati nel 1998 dalla Commissione Elettronica Internazionale (IEC):

Multipli del byte

Prefissi Binari IEC Prefissi SI

Nome

Simbol

o

Multiplo Differenza Nome Simbolo Multiplo

byte B 1 B (8 bit) 0 % byte B 1 B (8 bit)

Figura 2.6. Il codice ASCII a 7 bit. In questo primo standard (mostrato nella Figura 2.6) non era possibile rappresentare caratteri come le lettere accentate, di uso comune nei paesi di influenza neolatina. A questo primo codice ne fece seguito una sua estensione, detta ASCII esteso. Questa si serve di un byte ( bit) consentendo la rappresentazione di 2^8 = 256 caratteri diversi nei quali sono contenute anche le lettere accentate e altri simboli. Per codificare una parola occorre recuperare dalla tabella ASCII la sequenza di bit corrispondenti ad ogni lettera che la compone. Ad esempio si voglia rappresentare la stringa “Inf”. Essa richiede 3 byte, uno per ogni carattere, e l’insieme dei bit corrispondente ad ogni lettera sarà:  I = 01001001  n = 01101110  f = 01100110 Per decodificare un testo ASCII il procedimento è inverso rispetto a quello di codifica. Data la sequenza 010010010110111001100110, dobbiamo suddividerla in gruppi di otto bit, e poi decodificare ogni gruppo con il carattere corrispondente mediante la tabella ASCII:  01001001 = I  01101110 = n  01100110 = f Si noti come alla lettera maiuscola corrisponde un simbolo diverso rispetto alla corrispettiva minuscola, infatti la lettera “i” corrisponde alla sequenza 01101001. I caratteri maiuscoli e minuscoli sono a tutti gli effetti diversi dal punto di vista della codifica binaria. Si noti inoltre che per decodificare un messaggio è necessario conoscere a priori il tipo di codifica usato. Dall'analogico al digitale La codifica di elementi come suoni, immagini e animazioni presenta aspetti molto diversi rispetto a quella di testi e singoli numeri. Il testo è naturalmente composto da un insieme discreto di simboli (che diventano quindi l'unità minima di informazione), mentre per i numeri ciò che conta è il loro valore (codificato direttamente in binario con la precisione desiderata). Ma quali sono le unità informative minime di un suono o di un'immagine?

Suoni e immagini sono descrivibili come segnali, cioè variazioni di una certa grandezza fisica

lungo una o più dimensioni: la pressione che varia in funzione del tempo nel caso di un suono,

la luce che varia in funzione dello spazio nel caso di un'immagine, o la posizione di un corpo

che varia in funzione del tempo nel caso di un'animazione.

La particolarità di questi segnali è che sono continui (Figura 2.7): perchè la pressione sonora passi da un valore ad un altro, devono essere attraversati tutti gli infiniti valori intermedi. Lo stesso vale per una fotografia (la transizione tra due colori, per quanto repentina e impercettibile, non può essere immediata) e per il movimento (per andare da un punto ad un altro occorre passare per infiniti punti intermedi). Figura 2.7. Un segnale analogico e il rispettivo segnale digitale

Se si volesse dunque usare tutti i valori assunti dal segnale come unità minime informative di

suoni e immagini, ci si scontrerebbe con la necessità di una memoria infinita. Per questo

motivo, per poter rappresentare suoni e immagini in un calcolatore, è necessario passare dal dominio analogico (continuo) a quello digitale (discreto, composto da un numero finito di punti) attraverso un processo chiamato campionamento. Il campionamento (Figura 2.8) è una tecnica che consiste nel convertire un segnale continuo nel tempo o nello spazio in un segnale discreto, valutandone l'ampiezza a intervalli temporali o spaziali solitamente regolari, in modo da ottenere un numero finito di punti (chiamati campioni). Perché questa operazione non comporti una perdita di informazione o la comparsa

di difetti percepibili (chiamati aliasing), è necessario che gli intervalli temporali o spaziali a cui

si legge il valore del segnale siano più piccoli della metà del più piccolo dettaglio a cui si è interessati (teorema di Nyquist-Shannon). Un numero finito di campioni però non basta a permettere la rappresentazione di un segnale

nel calcolatore, è infatti necessario che ogni campione abbia anche una precisione finita, cioè

sia rappresentabile con un numero finito di bit. L'operazione con cui il valore di un campione viene arrotondato alla precisione desiderata prende il nome di quantizzazione (Figura 2.8). A differenza del campionamento, l'operazione di quantizzazione non è reversibile, non è cioè possibile ricostruire i valori reali assunti originariamente dal segnale analogico. La

quantizzazione è dunque una fonte di distorsione del segnale, che può solo essere mascherata

con una tecnica chiamata dithering, ma non può essere eliminata.

Figura 2.8. Campionamento e quantizzazione per rappresentare il segnale con un numero finito di numeri a precisione finita.

640 x 480 = 307200 pixel, ognuno dei quali richiede 3 byte per rappresentare il colore associato, quindi 307200 x 3 = 921600 byte = 900 KiB. Rappresentazione digitale dei suoni Per i suoni l’unità minima di informazione è rappresentata da un campione di ampiezza, cioè il valore di ampiezza dell'onda sonora in un determinato istante. Gli esempi in Figura 2.7 e 2.8 si riferiscono proprio al suono (questa codifica prende il nome di Pulse Code Modulation, PCM). Un suono può essere descritto come la sensazione causata dall'oscillazione più o meno periodica dell'aria che incide sul timpano dell'ascoltatore. Oscillazioni di diversa ampiezza danno origine alla sensazione di volumi più o meno elevati, mentre il periodo delle oscillazioni incide sulla percezione di suoni gravi o acuti. L'orecchio umano può sentire suoni che oscillano da 20 fino a 20000 volte al secondo (da 20 a 20000 hertz, o Hz). Dunque, per il teorema di Nyquist-Shannon, in genere si campiona il segnale più di 40000 volte al secondo (solitamente 44100 o 48000). Tuttavia, per suoni particolari come la voce, tutte le oscillazioni sopra i 4000 Hz non hanno un particolare contenuto informativo; non è quindi raro vedere codifiche a 8000 campioni al secondo per applicazioni come telefonia o messaggistica vocale. Riguardo alla precisione di ogni campione audio, si è scelto un numero di bit consono a rappresentare la gamma di volumi a cui si è normalmente esposti, dal sussurro fino a rumori forti (ma sotto la soglia del dolore); questo valore è stato fissato a 16 bit. Tuttavia non è raro trovare suoni registrati a 24 bit, in modo da poter sfruttare una precisione maggiore durante le fasi di lavorazione di un prodotto, come può essere un disco musicale. Infine si noti che l'essere umano, in genere, è dotato di due orecchie. Questo gli permette di localizzare la direzione da cui provengono i suoni. Per poter codificare (almeno in parte) questo tipo di informazione, solitamente vengono rappresentati segnali audio stereofonici, cioè composti da due sequenze di campioni, una relativa al canale sinistro ed una al canale destro. Esistono poi codifiche a più canali (come il 5.1, composto da 6 canali indipendenti), che permettono una maggiore precisione spaziale. In definitiva, la rappresentazione binaria di un suono è costituita da una sequenza di campioni, cioè gruppi di bit che descrivono il valore di pressione sonora di ciascun canale. A scopo esemplificativo si può calcolare la memoria necessaria a memorizzare un minuto di musica in qualità CD: 60 secondi x 44100 campioni al secondo x 16 bit per campione x 2 canali = 84672000 bit = 10584000 byte =10336 KiB = 10.1 MiB Rappresentazione digitale dei video Per un video l’unità minima di informazione è rappresentata dal fotogramma, a sua volta composto da pixel. Un video quindi eredita quanto detto relativamente alle immagini, con l'aggiunta però di avere tante immagini quanti sono i fotogrammi di cui è composto, riprodotte ad una velocità sufficientemente alta da fornire, all'occhio umano, l'illusione del movimento. Per via del fenomeno di persistenza delle immagini sulla retina, l'occhio umano fatica a percepire come separate tra loro immagini che si susseguono ad una velocità minima di 10 o 15 fotogrammi al secondo (fps), dunque tale velocità è sufficiente per creare l'impressione del movimento. Tuttavia velocità più elevate consentono di creare un'illusione più realistica, e non è raro trovare codifiche a 25, 30, 50 o 60 fps. Va inoltre considerato che anche in questo caso vale il teorema di Nyquist-Shannon: sarà capitato di vedere video in cui le pale di un elicottero

sembrino ferme o girino molto lentamente; questo è il tipico effetto di aliasing temporale che

ha luogo quando il movimento da codificare è molto superiore alla velocità con cui si campiona.

Materiale registrato a fps più alti (come 120, 240, 300 o addirittura >1000) viene impiegato per la riproduzione in "slow motion" (movimento rallentato), viene cioè riprodotto ad una velocità inferiore per osservare nel dettaglio i movimenti del soggetto del video, altrimenti troppo veloci per essere notati. La tecnica opposta prende invece il nome di "stop motion"; in questo caso i fotogrammi sono registrati a distanza di diversi minuti l'uno dall'altro e poi riprodotti a fps tradizionali, in modo da rendere percepibili movimenti altrimenti troppo lenti per essere notati. Infine si noti che l'essere umano, in genere, è dotato di due occhi, che consentono la

cosiddetta visione stereoscopica. Questo permette di valutare la distanza a cui si trovano gli

oggetti grazie alle diverse informazioni che ogni occhio riceve. Per poter codificare (almeno in

parte) questo tipo di informazione è possibile codificare video stereoscopici, cioè composti da

due sequenze di fotogrammi, una relativa all'occhio sinistro ed una all'occhio destro. Queste due sequenze possono essere memorizzate: come aree diverse dello stesso fotogramma; come alternarsi di fotogrammi dell'una e dell'altra sequenza; come sequenze distinte (una successiva all'altra). In definitiva, la rappresentazione binaria di un video è costituita da una sequenza immagini, complete di un'indicazione della velocità a cui vanno riprodotte. A scopo esemplificativo si può calcolare la memoria necessaria a memorizzare un minuto di video in Full-HD a 30 fps: 60 secondi x 30 fps = 1800 immagini, ognuna delle quali con una risoluzione di 1920 colonne x 1080 righe = 2073600 pixel (circa 2 megapixel) 1800 immagini x 2073600 pixel x 24 bit per pixel = 89579520000 bit = 11197440000 byte = 10.43 GiB Elaborazione dei dati multimediali La comodità di codificare il materiale multimediale nei modi descritti in precedenza risiede nel fatto che è possibile applicare modifiche ai dati in maniera molto efficiente sfruttando semplici operazioni matematiche. Consultando la tabella in Figura 2.4, ad esempio, si può notare come la conversione di una lettera maiuscola in una lettera minuscola si può ottenere sommando 32 al numero con cui è codificata. Lo stesso vale per i formati multimediali: se si volesse conferire una tinta rossa ad una foto basterebbe sommare una piccola costante a tutti i byte relativi a quel colore primario, tale da aumentare la quantità totale di rosso che giunge all'occhio. Analogamente, si può simulare l'eco in una registrazione sommando ad ogni campione il campione che lo precede ad una certa distanza. Principali formati multimediali Lo studente più attento si sarà accorto che il numero di bit necessario alla memorizzazione di suoni, immagini e video è decisamente superiore a quanto suggerisce l'esperienza: quasi 1 MiB per una piccola immagine, 10 MiB per un audio di 1 minuto e addirittura 10 GiB per un breve video ad alta qualità.

Questa discrepanza trova una giustificazione nel fatto che il modo in cui viene rappresentato

nativamente un dato non corrisponde necessariamente al modo in cui viene archiviato in un

contenitore.

è più onerosa per il calcolatore in termini di potenza di calcolo richiesta. Inoltre, sebbene la decompressione sia sempre necessaria per la fruizione del dato originale, è caldamente sconsigliata la manipolazione dei dati e la successiva ricompressione lossy, in quanto si affronterebbe una nuova perdita di informazioni, con l'introduzione di sempre più distorsioni e artefatti. Formati di questo tipo sono ideali per la fruizione in streaming da parte dell'utente finale. Nella tabella seguente si illustrano i nomi di alcuni formati e contenitori di questo tipo, mentre in Figura 2.10 si può vedere un esempio di immagine che ha subito diverse ri-codifiche (decompressione e ricompressione) in formato JPEG.

Esempi di codifiche lossy

Tipo di

dati

Esempio di Codifica

Esempio

di Contenitore

Esempio di funzionamento

Audio

Mpeg, AAC, ADPCM,

GSM, AMR, WMA

MP3, AC3, OGG,

WMA

Se una porzione di segnale è sotto la soglia di udibilità viene scartata

Immagini JPEG, GIF TIFF, JPG

Si riduce la quantità di colori disponibili (GIF) o si eliminano i dettagli impercettibili (JPG)

Video

DV, H264, Divx,

3GPP, WMV, Mpeg

AVI, MP4, MOV,

MKV

Ogni immagine viene divisa in blocchetti e si memorizzano le coordinate dello spostamento di ogni blocco

Altro - -

Non conoscendo la tipologia di dati non è possibile sapere cosa si può scartare Figura 2.10: A sinistra l'immagine originale, a destra la stessa immagine dopo diversi cicli di salvataggio in JPG. La comparsa di difetti visibili si verifica ad esempio quando si salva sul proprio computer un'immagine e poi la si condivide sui social network, che solitamente ricomprimono le immagini.

LEZIONE 3

Anatomia di un calcolatore

Grazie al lavoro intellettuale di Alan Turing, è possibile modellare il funzionamento di un calcolatore come l’interazione tra componenti fisiche hardware e programmi software. Il

termine hardware, letteralmente “ferraglia”, designa la parte fisica della macchina, composta

da tutte le componenti materiali che ne consentono il funzionamento sulla base dei principi dell’elettronica. Ogni componente svolge una sua funzione di base:  l'unità di calcolo o Unità Centrale di Elaborazione ( CPU ) si occupa di elaborare i dati ed in genere coincide con uno o più microprocessori;  la memoria centrale , o di lavoro (Random Access Memory, RAM ) contiene i dati in uso e/o i programmi in esecuzione;  i bus permettono il trasferimento dei dati tra le diverse componenti;  le periferiche di input/output permettono la comunicazione tra il calcolatore e l'utente;  la memoria di massa , un caso particolare di periferica di input/output, permette di memorizzare dati e programmi quando non sono in uso.

Esistono diversi modi di combinare questi elementi. La maggior parte dei calcolatori moderni

segue quella che è chiamata architettura di von Neumann, caratterizzata dall'utilizzo di

un'unica memoria di lavoro, in cui sono memorizzati sia i dati sia i programmi (contrapposta all'architettura Harvard, dove dati e programmi risiedono in spazi di memoria distinti), e dove tutte le componenti sono collegate tra loro da bus. Oltre a queste parti, il calcolatore si compone anche di una scheda madre (la piastra sulla quale si inseriscono le varie componenti) e un alimentatore elettrico (che ha il compito di adattare la corrente della rete elettrica per poter essere utilizzata dai dispositivi all'interno del calcolatore). Nei calcolatori portatili l’alimentatore è affiancato da una batteria che permette il funzionamento del dispositivo anche senza il collegamento alla rete elettrica. Questi elementi sono contenuti nel case: la scatola di metallo o di plastica che racchiude tutti i componenti. Alcune delle componenti principali dell’hardware sono esemplificate in Figura 3.1. Figura 3.1. Esempi di dispositivi hardware di un calcolatore. Unità di calcolo

La CPU ( Central Processing Unit) è l’unità centrale del calcolatore. Si occupa di eseguire i

programmi che sono scritti in linguaggio macchina. Attualmente le CPU sono costituite da microprocessori che racchiudono in un unico circuito integrato le seguenti componenti di calcolo.  L’unità di controllo (CU, Control Unit) esegue le istruzioni dei programmi, coordina le attività del microprocessore e controlla il flusso delle istruzioni tra il microprocessore e la memoria. Inoltre svolge la sua attività in modo ciclico: preleva dalla memoria principale la “prossima” istruzione da eseguire, preleva gli operandi specificati nell'istruzione, decodifica ed esegue l’istruzione, e infine ricomincia (ciclo macchina).  I registri di memoria sono delle unità di memoria estremamente veloci con capacità ridotta, ma con tempo di accesso molto breve. Attualmente le loro dimensioni variano da 16 a 64 bit e i registri vengono utilizzati per immagazzinare le istruzioni e i dati che stanno per essere processati o sono appena stati processati.  L’unità logico aritmetica (ALU, Arithmetic-Logic Unit) è il nucleo di esecuzione dei calcoli, essendo in grado di eseguire operazioni come somma, sottrazione, moltiplicazione e divisione, oltre che le principali operazioni logiche come AND, OR e NOT. Una volta prelevati gli operandi dai Registri di memoria, la ALU esegue l'operazione richiesta e ne deposita il risultato nuovamente in memoria. La ALU, insieme all'unità di controllo, collabora al completamento di un ciclo macchina.  I bus sono canali di comunicazione tra le varie componenti dell’elaboratore e si differenziano a seconda della funzione svolta. Tra i principali produttori di microprocessori è possibile citare Intel, AMD, Motorola, Qualcomm e ARM. Ogni microprocessore è caratterizzato da un clock che scandisce la sequenza delle operazioni da eseguire. Ogni operazione può richiedere uno (nel caso di operazioni elementari) o più cicli di clock. La frequenza di clock è uno dei parametri con i quali si valuta la velocità di calcolo di un microprocessore. L’unità di misura della frequenza di clock è l’hertz (1 hertz corrisponde ad un ciclo al secondo). I microprocessori attualmente in commercio raggiungono frequenze di

all'introduzione di supporti chiamati SSD (Solid State Drive) utilizzati come sostituti dei vecchi hard disk: questi nuovi dischi sono ancora molto costosi e non riescono a raggiungere la capacità di memorizzazione dei vecchi hard disk, ma garantiscono enormi incrementi della velocità di lettura e scrittura oltre che consumi ed emissioni sonore estremamente ridotte. Figura 3.2. Dispositivi di memoria secondaria. Le periferiche Oltre alla CPU e alla memoria primaria e secondaria, il calcolatore ha bisogno di dispositivi di input e output chiamati periferiche per supportare l'interazione con l’ambiente esterno. Le periferiche si collegano al calcolatore mediante interfacce di comunicazione (comunemente dette porte), e possono variare a seconda del tipo e della velocità di trasmissione. Inoltre, per ogni tipo di periferica esiste una scheda chiamata controller che viene connessa alla scheda madre e che ha il compito di gestire il comportamento della periferica. I dispositivi di input consentono di comunicare al calcolatore informazioni provenienti dall'utente o dall'ambiente esterno. I principali dispositivi di input (Figura 3.3) sono: la tastiera, gli strumenti di puntamento (mouse), lo scanner, il microfono, le macchine fotografiche e le videocamere digitali. La tastiera è il dispositivo di input principale ed è comunemente affiancata dagli strumenti di puntamento. Oltre al popolarissimo mouse, un esempio di strumento di puntamento è il touchpad, molto diffuso sui calcolatori portatili e con funzionalità analoghe a quelle del mouse. In particolare, il touchpad è costituito da un’area sensibile al movimento e alla pressione delle dita che è collegata con il puntatore sullo schermo. Lo scanner è una periferica che si collega alla macchina, spesso usando una porta che è detta USB (Universal Serial Bus), che permette di rappresentare digitalmente una sorgente cartacea (una fotografia o un documento scritto). Microfoni, macchine fotografiche e videocamere digitali sono dispositivi analoghi a quelli tradizionalmente conosciuti, con la differenza che sono in grado di comunicare al calcolatore una versione digitale del suono, delle fotografie e dei video realizzati. Figura 3.3. Esempi di periferiche di input. I dispositivi di output consentono al calcolatore di comunicare all'esterno informazioni in esso contenute. I principali dispositivi di output (Figura 3.4) sono: lo schermo, la stampante e le casse per la riproduzione del suono.

Figura 3.4. Esempi di periferiche di output. E’ importante notare che nella maggior parte dei casi il collegamento al calcolatore di una periferica richiede, oltre al collegamento dei cavi alla porta adeguata, l’installazione di uno

specifico software chiamato driver che ha il compito di gestire il flusso di dati diretto al e

proveniente dal dispositivo, facendo in modo che la periferica funzioni correttamente. Esso rappresenta in pratica il vocabolario contenente il "linguaggio" di comunicazione della periferica. Oltre a quelle menzionate, esistono altre tipologie di periferiche. Tra le più comuni è possibile citare la scheda di rete, che permette di collegare un calcolatore ad altri calcolatori tramite una rete locale o la rete Internet, e il modem, che consente di far comunicare due calcolatori tramite la rete telefonica. Si tratta di due esempi di periferiche che sono simultaneamente di input e di output.

LEZIONE 4

Il ruolo del software

Se l'hardware è la componente materiale di un calcolatore, il software ne costituisce la

componente immateriale.

Il termine software (letteralmente "materia morbida") è l'insieme dei programmi che possono essere eseguiti da un calcolatore. In particolare, un singolo programma software è un insieme di istruzioni che un calcolatore, e più precisamente la CPU, deve eseguire per portare a

compimento un certo compito ( task).

Microsoft Word è un esempio di programma software che contiene istruzioni per la creazione e la gestione di documenti. Nel contesto di Word, il pulsante che consente di formattare in grassetto un testo selezionato è una funzione software associata a un insieme di istruzioni che consentono di raggiungere l’obiettivo (cioè visualizzare in grassetto una data porzione di testo). Firefox o Chrome sono invece esempi di programmi software che si propongono come strumenti per reperire e visualizzare pagine web. E’ facile pensare a numerosi altri esempi di programmi software, ciascuno con le proprie caratteristiche e finalità. Ne risulta che esistono diverse tipologie di programmi software di cui è opportuno conoscere le specificità.