FONDAMENTI DI INFORMATICA I
A.A. 2006-2007 - prof. Angelo GALLIPPI
[email protected]
Data inizio: 5 marzo 2007
Data fine: 25 giugno 2007
Totale ore: 90
n° crediti: 10
Orario
Lunedì
Martedì
Mercoledì
14-15.45
11.30-13.15
14-15.45
Aula 3 PP2
Aula 8 PP2
Aula 3 PP2
TEST D’INGRESSO
• Cosa indicano le seguenti sigle: NMOS, NAND, DRAM, CD-ROM?
1. Come si chiama il fisico che ha realizzato il primo microprocessore?
Qual è la sua nazionalità?
3. Come si chiama il fisico, premio Nobel, che ha inventato il circuito
integrato?
4. Cos’è una memoria cache?
5. Cosa si misura in Megahertz? E in Megabyte?
6. Qual è il risultato della seguente operazione: “9 modulo 4”?
7. Cosa indica la parola inglese “file”?
8. Quali sono I primi 5 termini della successione di Fibonacci?
9. A cosa può servire il triangolo di Tartaglia?
10. Quanto valgono le seguenti espressioni: 2-3 ; 0,54 ; 161/2 ?
PROGRAMMA
Le basi dei calcolatori digitali
Sistemi di numerazione binari
• Codifica binaria pura (Conversioni di base. Operazioni)
• Sistema esadecimale
• Codifica BCD
• Codici binari alfanumerici (Codifiche ASCII, EBCDIC)
• Codici rilevatori di errori
• Codifica delle grandezze fisiche (Digitalizzazione di una forma
d’onda analogica. Digitalizzazione di una immagine. Vantaggi della
digitalizzazione).
Algebra di Boole
•Operatori AND, OR, NOT
•Tabelle di verità
•Operatore OR esclusivo (XOR)
•Addizionatore binario
•Operatore NOR
•Operatore NAND
•Operatori logici orientati al bit
Macchina di Turing
•Macchina sommatrice
•Macchina copiatrice
Architettura di un elaboratore elettronico
• Macchina di von Neumann
• Unità centrale di elaborazione (processori Intel, AMD, Alpha, Mips,
SPARC, ARM)
• ROM BIOS
• Bus di sistema e di espansione (ISA, MCA, EISA, SCSI)
• Memoria (RAM, cache)
• Scheda madre. Disco rigido (RAID, ATA seriale)
• Lettori di floppy disc, CD-ROM, DVD
• Porte seriali e parallele
Algoritmi. Diagrammi di flusso. Il controllo del programma
(Selezione binaria. Selezione multipla. Iterazione). Strutturazione
degli algoritmi. Struttogrammi. Iterazione enumerativa (for).
Iterazione con guardia all’inizio (while). Calcolo del fattoriale.
Iterazione con guardia alla fine (do-while). Calcolo della radice
quadrata. Cicli nidificati. Confronto tra do-while e while. Iterazione
e ricorsività (Definizione ricorsiva di fattoriale e di potenza).
Algoritmi di ricerca (lineare; binaria; tempo di esecuzione).
Notazione O-grande. Algoritmi di ordinamento (a bolle; per
selezione; per inserimento; Shell Sort; Heap Sort; per fusione;
Quicksort; esterno; fusione bilanciata). Cifratura RSA (Chiavi
asimmetriche. Cifratura e decifrazione.
Strutture dati. Tipi dati predefiniti (Tipi dati semplici. Tipi dati
strutturati).
3. La programmazione nel linguaggio C
•Introduzione: la modularità
•Funzioni: main(), printf()
•Commenti
•Tipi di dati, dichiarazioni e visualizzazioni
•Assegnazioni, indirizzi e ingresso interattivo
•Selezione (if, switch)
•Iterazione (while, for, do-while)
•Funzioni definite dall’utente
•Tipi di dati complessi (array, indirizzi, puntatori, stringhe, strutture)
4. Software di base
•Sistemi operativi (processi; memoria virtuale; file e indirizzari; strati del
sistema operativo; utilità)
•Cenni ai sistemi operativi Dos e Windows
•Gerarchia e tipologie dei linguaggi di programmazione
5. Il sistema operativo Linux
• Cenno sulle principali distribuzioni (SuSE, DLD, Mandrake,
RedHat, Slackware, Turbo)
• Shell e utilità
• Principi di amministrazione
• Il kernel
• Processi e comunicazioni
• Il file system
• Il sistema X Windowing
TESTI CONSIGLIATI:
Gallippi, A. Dizionario di informatica Inglese/Italiano, Tecniche Nuove,
Milano, 2006
Deitel, H.M. C Corso completo di programmazione, Apogeo, Milano,
2004.
Medri, D. Linux facile, Edizioni Seven Star, Roma, 2001.
Missiroli, M. Linux da zero, Edizioni Seven Star, Roma, 2002.
INTRODUZIONE
Il termine informatica deriva dalla contrazione delle parole
informazione e automatica, e indica appunto il trattamento
automatico delle informazioni, di tipo numerico o no, reso possibile
da quelle macchine che sono i computer o calcolatori elettronici
costruiti a partire dagli anni ’40.
Gli attuali computer sono praticamente tutti di tipo digitale, cioè
elaborano i dati considerandoli come dei numeri costituiti da un
numero finito di cifre (in inglese digit).
Tuttavia questa scelta non si è imposta con immediatezza ai
progettisti dei primi calcolatori, i quali avevano di fronte anche
l’alternativa analogica, se non altro perché su essa era basato il più
diffuso strumento di calcolo allora esistente: il regolo calcolatore.
Le due concezioni si sono confrontate per un certo periodo, fino a
che la scelta digitale è risultata vincente, relegando i calcolatori
analogici in nicchie applicative assai specializzate.
Nel seguito ci interesseremo esclusivamente dei calcolatori digitali.
LE BASI DEI CALCOLATORI DIGITALI
Affinché una macchina basata sull’elettricità possa compiere in modo
automatico delle operazioni matematiche (ma anche di altro tipo) sono
necessari evidentemente tre passaggi:
 la trasformazione dei numeri (o di altri tipi di informazioni) in segnali
elettrici;
 la disponibilità di dispositivi in grado di eseguire su tali segnali elettrici
le stesse operazioni che gli operatori matematici eseguono sui numeri;
 la possibilità di eseguire istruzioni precedentemente impartite
dall’uomo, ed eventualmente delle scelte fra più alternative.
Ebbene, a partire dagli anni ’40 queste tre esigenze sono risultate
contemporaneamente soddisfatte, grazie all’esistenza di tre
costruzioni logiche fondamentali sviluppate in tempi diversi e in
modo indipendente l’una dall’altra. Esse sono:
 il sistema di numerazione binario di Leibniz;
 l’algebra di Boole;
 la macchina di Turing.
Essenziale dal punto di vista pratico per la applicazione pratica di
questi risultati, e quindi per la realizzazione del computer, è stata la
realizzazione di dispositivi elettronici sufficientemente veloci, piccoli
ed economici quali
• il transistore, realizzato nel 1948 da John Bardeen, Walter Houser
Brattain e William Bradford Shockley ai Bell Telephone Labs (Nobel
1956);
• il circuito integrato, realizzato nel 1958 da Jack St. Clair Kilby, alla
Texas Instrument (Nobel 1970);
• il microprocessore, realizzato nel 1971 da Federico Faggin alla Intel.
Sistemi di numerazione binari
Il sistema di numerazione binario, ideato dal filosofo tedesco
Gottfried Wilhelm Leibniz [1], consente di rappresentare un
qualsiasi numero usando i due soli simboli o cifre (in inglese
digit) “0” e “1”, e di compiere con essi tutte le usuali operazioni
aritmetiche.
[1] Leibniz espose il suo sistema in diversi scritti, tra i quali De progressione
dyadica che porta la data del 15 marzo 1679, una lettera a Claudio Filippo
Grimaldi del gennaio/febbraio 1697 e una al padre gesuita Joachim Bouvet
del 18 maggio 1703. In quest’ultima, in particolare, Leibniz scrive:
Erano ben più di venti anni che avevo in testa questa aritmetica fondata
sullo 0 e sull’1, della quale vedevo le mirabili conseguenze per condurre la
scienza dei numeri a una perfezione che supera tutto quello che
possediamo.
from the Postdoctoral Thesis by Johann Bernard Wiedeburg of Jena (1718)
Leibniz’s medallion for the Duke of Brunswick
from the Postdoctoral Thesis by Johann Bernard Wiedeburg of Jena (1718)
Le stesse cifre 0 e 1 consentono di codificare anche dati testuali o
alfabetici e, attraverso il processo di digitalizzazione, una qualsiasi
grandezza analogica, cioè variabile in maniera continua nel
tempo.
Le cifre 0 e 1 - o, più in generale, i termini antitetici “vero-falso”,
“sì-no” e simili - possono essere rappresentate dagli stati fisici
(“acceso-spento”, “aperto-chiuso”, “conduttore-isolante”, ecc.) di
dispositivi quali lampadine, interruttori e transistori, e ciò
determina la grande versatilità dei calcolatori elettronici.
Codifica binaria pura
La rappresentazione di un numero tramite le sole cifre “0” e “1”
può avvenire secondo diversi criteri; la codifica binaria pura
(detta semplicemente “binaria”, senza altra specificazione)
rappresenta i numeri in modo che continuino a valere le stesse
regole dell’aritmetica decimale.
Negli altri tipi di notazione binaria, invece, i risultati della conversione
non possono essere impiegati in operazioni aritmetiche, perché non
fornirebbero i risultati corretti.
Il sistema binario è, come quello decimale, di tipo “posizionale”, in
quanto la posizione di una cifra in un numero determina il valore o
“peso” di quella cifra.
Ciò a differenza, per esempio, del sistema di numerazione degli antichi
romani, che era solo parzialmente posizionale.
MDCCXIV
Per esempio, nei due numeri 300 e 3.000 la stessa cifra 3 ha un
valore diverso, in quanto nel primo viene moltiplicata per 100, nel
secondo per 1.000 (come si avverte anche leggendo i due
numeri).
Ciò si esprime dicendo che le cifre (prima della virgola) di un
numero decimale vengono moltiplicate per le successive potenze
con esponente positivo del numero 10 (detto base del sistema di
numerazione), che sono:
Invece le cifre dopo la virgola di un numero in base 10 vengono
moltiplicate per le successive potenze con esponente negativo del
numero 10, che sono:
Anche nel sistema binario le cifre di un numero vanno pensate
moltiplicate per una opportuna potenza, in questo caso della base 2.
Per quanto riguarda la parte prima della virgola di un numero in base
2, tali potenze sono:
Per quanto riguarda la parte dopo la virgola di un numero in base 2,
le successive potenze del 2 sono:
Vediamo le regole per convertire un numero dal sistema decimale a
quello binario e viceversa.
Conversione da base 10 a base 2 (parte intera)
Per convertire la parte intera di un numero da base 10 a base 2 si può
seguire il seguente algoritmo delle divisioni successive:
•si divide il numero per 2 annotando il quoziente e il
resto della divisione
•si ripete l’operazione fino a ottenere per quoziente 0
•la successione dei resti ottenuti, scritti dall’ultimo al
primo, fornisce la conversione desiderata.
Per indicare esplicitamente che un numero è scritto nel sistema di
numerazione decimale, gli si aggiunge il pedice 10; se il numero è
scritto nel sistema binario si aggiunge il pedice 2.
Ad esempio, la conversione in binario di 3710 si effettua secondo lo
schema seguente:
Quindi
3710  1001012.
Conversione da base 10 a base 2 (parte dopo la virgola)
Per convertire la parte dopo la virgola di un numero da base 10 a base
2 si può seguire il seguente algoritmo delle moltiplicazioni successive:
•si moltiplica il numero per 2, annotando la prima cifra del
prodotto se essa vale “1”, altrimenti annotando “0”;
•si ripete la moltiplicazione del risultato ottenuto,
terminando il procedimento quando si ottiene come
prodotto una potenza del 10
•la successione degli “0” e “1” ottenuti, scritti a partire dal
primo, fornisce la conversione desiderata.
Nel caso, ad esempio, del numero 0,812510 la conversione si effettua
secondo lo schema seguente:
Quindi
0,812510  0,11012.
Esercizio. Convertire il numero 0,310 in base 2.
Si ottiene:
0,310 → 0,01(0011)2
Quindi nel convertire la parte dopo la virgola di un numero da
base 10 a base 2 può succedere che il numero, non periodico
nel primo sistema di numerazione, diventi periodico nel
secondo.
Questo fatto può comportare una perdita di esattezza quando si
eseguano operazioni tra numeri con la virgola che siano stati
convertiti nel sistema binario.
Conversione da base 2 a base 10
Per convertire un numero da base 2 a base 10 si segue il seguente
algoritmo:
si moltiplica ogni bit del numero per il valore dalla corrispondente
potenza del 2, e si sommano i valori così ottenuti.
Nel caso, ad esempio, del numero 1011012 la conversione si
effettuerebbe secondo lo schema seguente:
Quindi
1001012  3710.
Osserviamo che tale procedimento si applica sia alla parte intera sia
a quella decimale del numero.
Quindi nel caso, ad esempio, del numero 0,11012 la conversione si
effettua secondo lo schema seguente.
Operazioni nel sistema binario
Le operazioni sui numeri binari si eseguono secondo le regole
ordinarie dell’aritmetica, con l’ulteriore semplificazione derivante
dall’operare su due sole cifre.
Somma. La somma si esegue allineando i numeri sulla destra e
applicando alle cifre sulla stessa verticale le regole della somma
binaria riportate in tabella.
Per esprimere in modo più uniforme i 4 risultati indicati in tabella,
conviene ragionare in termini di: “due addendi / un risultato e un
riporto”, ossia:
Tuttavia, dato che in pratica si sommano numeri costituiti da più di
una cifra binaria, conviene utilizzare ragionare in termini di “due
addendi e un riporto / un risultato e un riporto”, ossia
Ad esempio, la somma di 10110 e 11111 si esegue secondo lo
schema seguente:
Moltiplicazione. Anche la moltiplicazione tra due numeri si esegue
come nel sistema decimale; in particolare:
• si applicano ai prodotti parziali delle singole cifre le regole della
tabella seguente
• quindi si sommano i prodotti parziali con le regole della somma viste
in precedenza.
Osserviamo che la tabella costituisce un sottoinsieme della
familiare tavola pitagorica (scritta, di solito, senza la riga e la
colonna dello “0”).
Sottrazione. La sottrazione nel sistema binario si potrebbe eseguire
come nel sistema decimale ma di fatto, per evitare la situazione di
dovere “prendere in prestito” una unità dalla cifra di sinistra quando
una cifra del sottraendo superi quella corrispondente del minuendo,
conviene eseguire la sottrazione tramite due operazioni più semplici
per i circuiti binari: la complementazione e l’addizione.
Ricordiamo che nel sistema decimale il complemento a 9 di un
numero è quel numero che sommato al primo dà un risultato
costituito da tutte cifre 9.
Quindi il complemento di un numero di due cifre si ottiene
sottraendo il numero da 99, di uno a tre cifre sottraendo il numero
da 999 e così via.
Per esempio il complemento di 13 è (99 - 13) = 86.
L’uso del complemento evita di eseguire una sottrazione, sostituendola
con un’addizione. Infatti, per esempio nell’identità
13 – 9 = 4
si può sottrarre 99 a entrambi i membri, ottenendosi
13 – 9 – 99 = 4 – 99
e, cambiando segno a entrambi i membri,
(99 – 13) + 9 = (99 – 4)
Dato che la parentesi a primo membro rappresenta il complemento
del minuendo e quella a secondo membro il complemento del
sottraendo, se ne trae la seguente regola:
Per eseguire una sottrazione si può:
• eseguire il complemento a 9 del minuendo,
• sommargli il sottraendo,
• eseguire il complemento a 9 della somma ottenuta.
La stessa regola vale ovviamente anche nel sistema binario - dove
anzi risulta di applicazione ancora più semplice - sostituendo il
complemento a 9 con il complemento a 1.
Complemento a 1. Si definisce complemento a 1 di un numero quel
numero che sommato al primo dà un risultato costituito da tutte cifre
1. Ad esempio il complemento a 1 di
11012
è
00102
dato che
11012 +
00102 =
----11112
Si vede che:
il complemento a 1 di un numero si ottiene
cambiando i suoi 0 in 1 e viceversa.
Applichiamo allora la regola precedente alla sottrazione 13 – 9:
Tuttavia, nel sistema decimale si considera anche il complemento a
10 di un numero, definito come quel numero che sommato al primo
dà tutte cifre 0 (trascurando la cifra di riporto più a sinistra).
Complemento a 2. Allo stesso modo, nel sistema binario si
considera il complemento a 2 di un numero, definito come quel
numero che sommato al primo dà un risultato costituito da tutte
cifre 0 (trascurando il bit di riporto più a sinistra).
Ad esempio, il complemento a 2 di
1101
è
0011
dato che
1101 +
0011 =
-----1 0000
Si vede che:
il complemento a 2 di un numero si ottiene
sommando 1 al complemento a 1 del numero.
Usando il complemento a 2, la sottrazione si può eseguire con la
seguente regola:
Per eseguire una sottrazione si può:
• sommare al minuendo il complemento a 2 del sottraendo
• sopprimere la cifra più a sinistra della somma ottenuta.
Applichiamo questa regola alla solita sottrazione 13 – 9
Sistema esadecimale
Molto usato in informatica è il sistema di numerazione esadecimale,
che impiega i 16 simboli
0 1 2 3 4 5 6 7 8 9 A B C D E F
Pertanto anche le “lettere” A-F vanno considerate cifre, di valori
rispettivamente:
A=10
B=11
C=12
D=13
E=14
F=15
Anche il sistema esadecimale è di tipo posizionale, in quanto le cifre
di un numero vanno pensate moltiplicate per una opportuna
potenza, in questo caso della base 16.
Per quanto riguarda la parte prima della virgola di un numero
esadecimale (la sola di effettivo utilizzo) tali potenze sono:
Nel linguaggio C i numeri esadecimali iniziano con le cifre 0x. Così,
ad esempio, vale la conversione
0x2A7F
10.87910
in quanto
Questo è pertanto il metodo per convertire un numero da base 16
a base 10.
Conversione da base 16 a base 2.
Per convertire un numero esadecimale in
binario
si convertono successivamente, le sue cifre
tramite gruppi di 4 bit, secondo la
corrispondenza della tabella a fianco.
Lo stesso criterio vale ovviamente per il
passaggio inverso binario > esadecimale,
con l’avvertenza di iniziare la sostituzione
partendo dal gruppo di 4 bit meno
significativi (quelli più a destra).
Conversione da base 10 a base 16. Per
questa conversione conviene passare
attraverso la base 2. Quindi, ad esempio:
3710  0010 01012  0x25
Codifica BCD
Un altro tipo di codifica binaria è costituito dalla notazione BCD (da
Binary Coded Decimal, decimale codificato in binario), nella quale
ogni cifra di un numero decimale viene rappresentata tramite le
quattro cifre della sua codifica in binario puro.
Ad esempio, il numero 2310 viene rappresentato in BCD come
0010 0011
dato che questi due gruppi di 4 cifre sono gli equivalenti binari
rispettivamente dei numeri 2 e 3.
Questo tipo di codifica non consente di eseguire le operazioni
aritmetiche applicando le solite regole, e presenta quindi un
interesse minore rispetto alla codifica in binario puro.
CODICI BINARI ALFANUMERICI
Come abbiamo detto, l’uso delle cifre “0” e “1” permette di codificare
anche dati testuali o alfabetici[1].
[1] Il primo esempio di codifica binaria delle lettere dell’alfabeto si deve a
Francis Bacon, il quale escogitò il codice omnia per omnia al fine di cifrare i
suoi messaggi diplomatici segreti. Il suo codice sostituiva a ogni lettera
dell’alfabeto un gruppo di cinque lettere costituito da varie combinazioni della
a e della b. Ulteriori elaborazioni erano poi eseguite per garantire la
segretezza della comunicazione.
Naturalmente questi comprendono come loro sottoinsieme anche i
dati numerici (e allora si parla, più propriamente, di caratteri
alfanumerici), ma quando si parla di dati alfabetici, si esclude
implicitamente che su di essi si possano eseguire le operazioni
aritmetiche.
Per esempio un numero quale un codice di avviamento postale, sul
quale non si dovranno eseguire né addizioni né sottrazioni, può
essere codificato convenientemente in forma testuale o
alfanumerica, considerando le sue cifre alla stregua degli altri
simboli presenti su una tastiera.
A differenza della codifica dei dati numerici, quella dei dati
alfanumerici è puramente convenzionale, nel senso che non c’è
alcuna ragione particolare per attribuire a una lettera una certa
successione di “0” e “1” piuttosto che un’altra. Le due codifiche più
diffuse sono i codici ASCII ed EBCDIC.
Codifica ASCII. Il codice ASCII (da American Standard Code for
Information Interchange, Codice standard americano per lo
scambio di informazioni) è impiegato in quasi tutti i personal
computer e in buona parte dei sistemi di elaborazione mediograndi.
Usa una codifica a 7 bit per codificare 128 simboli standard, mentre un
ottavo bit può essere impiegato per codificare in modo non standard
lettere di particolari alfabeti, caratteri semigrafici o simboli speciali,
oppure per aggiungere un controllo di parità.
I primi 32 caratteri del codice corrispondono a codici di controllo,
cioè non codificano i tasti presenti su una tastiera, ma determinano
particolari operazioni quando sono ricevuti da una periferica.
Nel codice ASCII i caratteri minuscoli vengono dopo quelli maiuscoli,
e sono “sfasati” rispetto a essi di 32 caratteri; ciò consente di
trasformare un carattere minuscolo in maiuscolo sottraendo 32 al
numero che lo codifica.
Per esempio, il numero 1234 avrebbe nel codice ASCII la codifica
seguente.
Codifica EBCDIC. Il codice EBCDIC (da Extended Binary Coded
Decimal Interchange Code, Codice di scambio decimale
codificato in binario esteso) è un codice a 8 bit impiegato in
prevalenza dai mainframe IBM.
In esso non tutte le 256 posizioni sono occupate, la collocazione
delle lettere dell’alfabeto è discontinua e alcuni caratteri del
codice ASCII sono assenti (ma vale anche il viceversa).
Pertanto non vi è una corrispondenza tra i due codici, cosicché
nel collegare personal computer a mainframe IBM si devono
utilizzare dispositivi di traduzione specifici.
Dec
Hex
Code
Dec
Hex
0
00
NUL
32
1
01
SOH
2
02
3
03
4
04
5
05
Dec
Hex
Code
Dec
Hex
Code
20
64
40
space
96
60
-
33
21
65
41
97
61
/
STX
34
22
66
42
98
62
ETX
35
23
67
43
99
63
36
24
68
44
100
64
37
25
LF
69
45
101
65
6
06
38
26
ETB
70
46
102
66
7
07
39
27
ESC
71
47
103
67
8
08
40
28
72
48
104
68
9
09
41
29
73
49
105
69
10
0A
42
2A
74
4A
[
106
6A
|
11
0B
VT
43
2B
75
4B
.
107
6B
,
12
0C
FF
44
2C
76
4C
<
108
6C
%
13
0D
CR
45
2D
ENQ
77
4D
(
109
6D
_
14
0E
SO
46
2E
ACK
78
4E
+
110
6E
>
15
0F
SI
47
2F
BEL
79
4F
|!
111
6F
?
16
10
DLE
48
30
80
50
&
112
70
17
11
49
31
81
51
113
71
18
12
50
32
82
52
114
72
19
13
51
33
83
53
115
73
20
14
52
34
84
54
116
74
21
15
53
35
85
55
117
75
22
16
54
36
86
56
118
76
23
17
55
37
87
57
119
77
24
18
CAN
56
38
88
58
120
78
25
19
EM
57
39
89
59
121
79
‘
26
1A
58
3A
90
5A
!]
122
7A
:
27
1B
59
3B
91
5B
$
123
7B
#
28
1C
IFS
60
3C
92
5C
*
124
7C
@
29
1D
IGS
61
3D
93
5D
)
125
7D
‘
30
1E
IRS
62
3E
94
5E
;
126
7E
=
31
1F
IUS
63
3F
95
5F
^
127
7F
"
HT
DEL
BS
Code
SYN
EOT
NAK
SUB
Dec
Hex
128
80
129
81
130
131
Code
Dec
Hex
160
A0
a
161
A1
82
b
162
83
c
163
132
84
d
133
85
134
86
135
136
Code
Dec
Hex
Code
Dec
Hex
Code
192
C0
{
224
E0
\
~
193
C1
A
225
E1
A2
s
194
C2
B
226
E2
A3
t
195
C3
C
227
E3
T
164
A4
u
196
C4
D
228
E4
U
e
165
A5
v
197
C5
E
229
E5
V
f
166
A6
w
198
C6
F
230
E6
W
87
g
167
A7
x
199
C7
G
231
E7
X
88
h
168
A8
y
200
C8
H
232
E8
Y
137
89
i
169
A9
z
201
C9
I
233
E9
Z
138
8A
170
AA
202
CA
234
EA
139
8B
171
AB
203
CB
235
EB
140
8C
172
AC
204
CC
236
EC
141
8D
173
AD
205
CD
237
ED
142
8E
174
AE
206
CE
238
EE
143
8F
175
AF
207
CF
239
EF
144
90
176
B0
208
D0
}
240
F0
0
145
91
j
177
B1
209
D1
J
241
F1
1
146
92
k
178
B2
210
D2
K
242
F2
2
147
93
l
179
B3
211
D3
L
243
F3
3
148
94
m
180
B4
212
D4
M
244
F4
4
149
95
n
181
B5
213
D5
N
245
F5
5
150
96
o
182
B6
214
D6
O
246
F6
6
151
97
p
183
B7
215
D7
P
247
F7
7
152
98
q
184
B8
216
D8
Q
248
F8
8
153
99
r
185
B9
217
D9
R
249
F9
9
154
9A
186
BA
218
DA
250
FA
155
9B
187
BB
219
DB
251
FB
156
9C
188
BC
220
DC
252
FC
157
9D
189
BD
221
DD
253
FD
158
9E
190
BE
222
DE
254
FE
S
Codici rilevatori di errori
Quando si trasmettono caratteri codificati mediante stringhe di “0” e
“1” attraverso una rete dati, può succedere che uno degli “0” o degli
“1” venga modificato da disturbi di trasmissione, trasformandosi nel
bit opposto: uno “0” in un “1” o viceversa.
È allora utile che il sistema di comunicazione sia in grado di rilevare
quando un bit della stringa è stato modificato, in modo da segnalare
la necessità di ripetere la trasmissione.
Per potere rilevare un cambiamento di un singolo bit, è necessario
che nel codice adottato non ci siano due caratteri la cui
rappresentazione differisca di un solo bit.
Se così non fosse, infatti, il risultato sarebbe la codifica dell’altro
carattere e non sarebbe possibile rilevare l’errore avvenuto.
Se per esempio si inviassero i bit della codifica ASCII del carattere “A”
A
1
0
0
0
0
0
1
e si verificasse un cambiamento nella sesta posizione da sinistra,
verrebbe inviato il codice del carattere “C”
C
1
0
0
0
0
1
1
e non vi sarebbe modo di accorgersi che si è verificato un errore.
Una possibilità per trasformare il codice ASCII in modo che non vi
siano codici che differiscano in una sola posizione consiste nel fare
seguire ai 7 bit che codificano un carattere un ottavo bit detto di
parità.
Esso viene scelto in modo che il numero totale dei bit “1” di qualsiasi
codice sia pari o, come anche si dice, che ogni gruppo di 8 bit
abbia parità pari (naturalmente si potrebbe anche scegliere l’ottavo
bit in modo che il gruppo abbia una parità dispari).
Dato che due sequenze di bit che abbiano entrambe parità pari non
possono differire per un solo bit (ma almeno per due), ne
concludiamo che l’aggiunta di un bit di parità fornisce un codice
rilevatore di errori per la codifica dei caratteri.
Se, infatti, nell’esempio precedente aggiungiamo il bit di parità ai
codici ASCII delle lettere “A” e “C”, otteniamo rispettivamente le
stringhe
A
1
0
0
0
0
0
1
0
C
1
0
0
0
0
1
1
1
che, come è evidenziato, differiscono in due posizioni (la sesta e
l’ottava da sinistra).
Osserviamo che utilizzando n bit si possono costruire 2n sequenze
diverse, e quindi codificare 2n caratteri; se tuttavia si aggiunge un bit
di parità, il numero di caratteri codificabili si dimezza, a parità di
numero di bit impiegati.
Codifica delle grandezze fisiche
Oltre ai dati numerici o testuali, un computer può ovviamente
elaborare anche grandezze fisiche quali una temperatura o una
pressione.
Per esempio un computer potrebbe essere collegato costantemente
con una termocoppia che gli invia una tensione elettrica
proporzionale alla differenza di temperatura tra due punti, in
maniera da eseguire determinate operazioni a seconda dei valori di
temperatura rilevati.
La prima operazione che si deve compiere perché un sistema
informatico possa memorizzare, elaborare e trasmettere i dati
relativi a una grandezza fisica, è quella di trasformarla in una
forma adatta a essere trattata dal sistema stesso.
Date le caratteristiche degli attuali calcolatori elettronici, tale forma è
quella cosiddetta digitale binaria, nella quale cioè i dati vengono
dapprima trasformati in una serie di numeri (ingl. digit), che
successivamente vengono espressi secondo il sistema di
numerazione binario (forma binaria).
Una volta che i dati siano stati così codificati in una opportuna
successione di “0” e “1”, essi potranno essere trattati direttamente
dai circuiti elettronici del computer.
Naturalmente, dopo il trattamento essi subiranno la trasformazione
inversa, riassumendo la forma originaria o comunque una
comprensibile agli utenti del sistema.
Digitalizzazione di una forma d’onda analogica. Vediamo su
un esempio schematico come sia possibile codificare un
segnale analogico, cioè variabile nel tempo in modo continuo, in
un segnale digitale, cioè costituito da una serie di numeri (interi),
che successivamente sono convertiti in forma digitale.
Consideriamo il diagramma seguente, che potrebbe essere per
esempio il grafico di un segnale audio analogico o di un’onda di
pressione acustica.
Per trasformarlo in una serie di numeri si considera un certo
numero di punti sull’asse x e sull’asse y.
Quindi si segnano sulla curva i punti in cui essa interseca le
ordinate alzate dai punti considerati sull’asse x (procedimento
detto di campionamento), e si legge sull’asse y l’ordinata dei
punti della curva, assegnando a ciascuno di essi il valore più
vicino tra i valori discreti considerati sull’asse y (procedimento
detto di quantizzazione).
In pratica ciò equivale a sostituire una curva continua con una
spezzata, per cui si vede che quanto più ravvicinati sono i punti
considerati sui due assi, tanto meglio la spezzata approssima la
curva.
In particolare, se l’asse y è stato suddiviso in 2 intervalli si parla di
quantizzazione a 1 bit, se è stato suddiviso in 4 intervalli si parla di
quantizzazione a 2 bit, in 8 intervalli a 3 bit e così via.
Digitalizzazione di una immagine. Vediamo come sia possibile
digitalizzare una immagine, iniziando dal caso più semplice che
essa sia in bianco/nero.
1. Immaginiamo di sovrapporre alla immagine da digitalizzare una
griglia a maglie quadrate (in questo caso di 34 righe e 32 colonne).
2. In ogni quadratino della griglia scriviamo “0” se esso è riempito
per meno della metà, “1” se è riempito per metà o più.
3. Abbiamo così ottenuto 34 numeri binari da 32 bit ciascuno, che
permettono di ricostruire l’immagine di partenza riga per riga
(ovviamente al crescere del numero dei quadratini della griglia
cresce la definizione della digitalizzazione).
I singoli elementi che costituiscono l’immagine digitalizzata si
chiamano pixel (da picture element), e nel caso di immagini in
bianco/nero valgono 0 o 1.
Se l’immagine da digitalizzare è a colori, a ogni suo pixel si associa
un valore variabile in un intervallo più ampio, che ne codifica il colore
(prevalente). Per codificare 8 colori servono 3 bit, per 16 colori 4 bit e
così via.
In pratica, a ciascun colore si associa un numero esadecimale di 6
cifre del formato #RRGGBB, dove RR rappresenta la quantità del
colore fondamentale rosso (Red), GG la quantità di verde (Green), BB
la quantità di blu (Blue) presenti in quel colore.
Sono possibili in tal modo 2563 = 16.777.216 sfumature diverse di
colori.
La figura seguente mostra i nomi dei 16 colori standard e i loro
codici esadecimali.
Vantaggi della digitalizzazione. La digitalizzazione di una
grandezza analogica comporta diversi vantaggi, qui di seguito
illustrati:
 possibilità di compressione. Una volta digitalizzati, i testi, i segnali
audio e le immagini video e possono venire “compressi”, cioè
occupare uno spazio anche molte volte inferiore a quello
originario, senza perdita apprezzabile di informazione. La forma
compressa è particolarmente adatta per trasmettere velocemente
o per memorizzare in spazi ridotti le informazioni, che quando
serve vengono “decompresse” in modo assai facile;
 integrazione di media diversi. Il fatto di trattare informazioni di
natura diversa – quali testi e disegni, brani audio, immagini video
– nella stessa forma digitale consente la loro integrazione in
prodotti “multimediali” e “interattivi”, dei quali l’esempio forse più
conosciuto è costituito dalle diffuse “Enciclopedie multimediali”;
· possibilità di manipolazione. Sulle informazioni di tipo digitale sono
possibili diversi tipi di manipolazioni, quali per esempio la
formattazione automatica di un testo secondo una varietà di
parametri (tipo e grandezza del carattere, lunghezza e spaziatura
delle righe, giustificazione del margine, divisione in sillabe, ecc.),
l’eliminazione di un rumore di fondo in un brano audio, la
trasformazione di un colore in una immagine, la generazione
automatica di immagini (effetti speciali, attori virtuali nei film);
· qualità della riproduzione. Se si duplica ripetutamente una
registrazione audio, una videocassetta o una immagine tramite
fotocopia, la qualità del duplicato peggiora progressivamente a ogni
copia successiva. Invece la duplicazione digitale conferisce al
duplicato la stessa qualità dell’originale, consentendo una
riproducibilità all’infinito;
· crittazione sicura. Le informazioni digitali si possono cifrare in
maniera estremamente difficile da decifrare, e quindi si possono
trasmettere con elevati margini di sicurezza.
•utilizzo più efficiente della larghezza di banda. La trasmissione di
segnali radiofonici e televisivi in forma digitale richiede una
disponibilità di frequenze inferiore di 4-5 volte rispetto a
un'analoga trasmissione in tecnica analogica, e costituisce uno dei
rincipali vantaggi della prossima televisione digitale terrestre.
Quest'ultima richiede anche una potenza di emissione minore - a
parità d copertura - della televisione analogica.
Scarica

Fonda1