Corsi di Laurea in Biotecnologie
(primo anno interfacoltà)
Corso integrato di Matematica,
Informatica e Statistica
Informatica di base
Linea 1
Daniela Besozzi
Dipartimento di Informatica e Comunicazione
Università degli Studi di Milano
Quinta lezione:
Rappresentazione dell’informazione
(Capitolo 6)
Informatica di base – Linea 1
2
Prima parte
Dove eravamo arrivati?
Informatica di base – Linea 1
3
Nella prima lezione avevamo detto
• L’informatica studia:
– le fondamenta teoriche della rappresentazione e
dell’elaborazione dell’informazione
– l’applicazione di tali teorie
• Abbiamo accennato ad alcuni aspetti relativi
all’elaborazione dell’informazione:
– gli algoritmi, i programmi
Informatica di base – Linea 1
4
La rappresentazione dell’informazione
• Come rappresentiamo l’informazione che
vogliamo elaborare?
– ad esempio, come si rappresenta un testo? E una
fotografia? E una sequenza di DNA?
• Durante la lezione di oggi e della settimana
prossima affronteremo:
– la rappresentazione dei numeri, dei caratteri e dei
testi
– la rappresentazione delle immagini e del suono
Informatica di base – Linea 1
5
Seconda parte
Rappresentazione dei numeri
Informatica di base – Linea 1
6
Cos’è un numero?
• Numero: concetto astratto utilizzato per
descrivere una quantità
• Non fare confusione tra:
– numero
• concetto astratto
– rappresentazione (o codifica) di un numero
• formalismo utilizzato per rappresentare i numeri
• ogni numero corrisponde ad una configurazione
univoca dei simboli (cifre) usate per la sua
rappresentazione
Informatica di base – Linea 1
7
Inventiamo una rappresentazione
• Concentriamoci sui numeri interi:
– come se dovessimo contare oggetti
• Inventiamo un modo di rappresentare i numeri:
– x  un oggetto
– x x  due oggetti
– x x x  tre oggetti
– x x x x  quattro oggetti
– ....
• Cosa ci ricorda?
Informatica di base – Linea 1
8
Due tipi di notazione
• “Additiva” e “posizionale”:
– nella rappresentazione della slide precedente,
“x x x x x” corrisponde a “cinque”  sommiamo
(contiamo) i simboli nella sequenza
• se scambiamo la posizione di due “x”, il numero non
cambia
– nella nostra numerazione, “516” corrisponde a 5
centinaia più 1 decina più 6 unità:
• 516 è diverso da 651
• ogni cifra specifica una “quantità” diversa a seconda della
sua posizione
Informatica di base – Linea 1
9
La rappresentazione decimale
• Sono i numeri che siamo abituati ad usare:
– si compongono usando dieci simboli: 0, 1, ..., 9
• Quanti valori diversi posso rappresentare:
– con una cifra  10 valori (0, ..., 9)
– con due cifre  100 valori (0, ..., 99)
– con tre cifre  1000 valori (0, ..., 999)
– in generale, con n cifre possiamo rappresentare
10n valori (0, ..., 10n – 1)
Informatica di base – Linea 1
10
La rappresentazione decimale
• La posizione delle cifre decimali e il numero
corrispondente:
cn x 10n + … + c3 x 103 + c2 x 102 + c1 x 101 + c0 x 100
…
migliaia
centinaia
decine
unità
dove c0, …, cn sono cifre da 0 a 9
• Esempio:
– 7523 = 7 x 103 + 5 x 102 + 2 x 101 + 3 x 100
Informatica di base – Linea 1
11
La numerazione in basi diverse
• Sapete contare?
– 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ....
– “Troppo facile, non siamo mica all’asilo!”
• La rappresentazione in base 10 ci sembra
scontata:
– abbiamo sempre usato solo questa!
• Ma è possibile rappresentare un numero in
una base diversa da 10?
– cioè, possiamo rappresentare un valore avendo a
disposizione un numero diverso di simboli?
Informatica di base – Linea 1
12
La numerazione binaria
• Abbiamo detto:
– la memoria contiene sequenze di bit (0 o 1)
• Dunque è una numerazione in base 2
• Attenzione: ci sono solo due simboli, ma non
importa quali:
– si, no
– vero, falso
– acceso, spento
– 1, 0 (sono i più comodi, quindi useremo questi)
Informatica di base – Linea 1
13
Rappresentazione in base 2
• “Se ci sono solo 0 e 1, come faccio a
rappresentare gli altri numeri, come il 5, per
esempio?”
• Si usano sequenze di più cifre:
– esattamente come si fa in base 10, quando
vogliamo rappresentare, ad es., il numero “dodici”
• Il numero “cinque” in “base due” si
rappresenta come 101:
– anche questa è una notazione posizionale!
Informatica di base – Linea 1
14
Quanti valori diversi in base 2?
• Con 1 cifra, rappresentiamo 2 valori diversi:
– 0, 1
• Con 2 cifre, rappresentiamo 4 valori diversi:
– 00, 01, 10, 11
• Con 3 cifre, rappresentiamo 8 valori diversi:
– 000, 001, 010, 100, 011, 101, 110, 111
• In generale, con n cifre possiamo rappresentare
2n valori diversi (0, …, 2n-1)
Informatica di base – Linea 1
15
La rappresentazione binaria
• La posizione delle cifre binarie e il numero
corrispondente:
cn x 2n + … + c3 x 23 + c2 x 22 + c1 x 21 + c0 x 20
…
otto
quattro
due
uno
dove c0, …, cn sono 0 o 1
• Esempio:
– 10012 = 1 x 23 + 0 x 22 + 0 x 21 + 1 x 20
Informatica di base – Linea 1
16
Per non fare confusione
• Per non fare confusione, indichiamo la base a
pedice:
– 1810 = “diciotto in base 10”
– 1012 = “uno-zero-uno in base 2”
– 32 = “trentadue” (se non indichiamo nulla, è in
base 10)
Informatica di base – Linea 1
17
Contiamo in base 2
• Pensate a cosa fate quando contate in base 10
(con le cifre 0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
• Facciamo la stessa cosa in base 2 (cifre 0, 1)
– iniziamo da 010. Rappresentazione: 02
– il numero successivo è 110. Rappresentazione: 12
– il numero successivo è 210. Rappresentazione: 102
• non abbiamo un singolo simbolo per rappresentare 210
• facciamo come in base 10 quando siamo arrivati a
contare fino a 9: aggiungiamo una cifra
Informatica di base – Linea 1
18
Contiamo in base 2
Base 10
Base 2
1
1
2
10
3
11
4
100
5
101
6
110
7
111
8
1000
9
1001
10
1010
...
...
Informatica di base – Linea 1
19
“Stai dando i numeri!”
• “Vabbè, ma se esprimo un numero in una
base diversa da 10, come faccio a sapere a
cosa corrisponde in base 10?”
• “Oppure, viceversa, se ho un numero in base
10, come faccio a trovare la sua
rappresentazione in una base diversa?”
• “Non dovrò mica contare tutti i numeri uno
per uno!”
Informatica di base – Linea 1
20
Conversioni tra basi
• Esistono degli algoritmi (abbastanza semplici)
per convertire un numero rappresentato in
una base, nel corrispondente numero
rappresentato in una qualsiasi altra base
Informatica di base – Linea 1
21
Da base 2 a base 10
• E’ facile!
• Esempio:
– 10012 = 1 x 23 + 0 x 22 + 0 x 21 + 1 x 20 =
=1x8+0x4+0x2+1x1=
= 8 + 1 = 910
– 0110112 = 0 x 25 + 1 x 24 + 1 x 23 + 0 x 22 + 1 x 21 +
+ 1 x 20 =
= 0 x 32 + 1 x 16 + 1 x 8 + 0 x 4 + 1 x 2 + 1 x 1 =
= 16 + 8 + 2 + 1 = 2710
Informatica di base – Linea 1
22
Da base 10 a base 2
• Serve qualche passaggio in più…
• Dato il numero x10 che vogliamo convertire,
dobbiamo:
– dividere x10 per due e memorizzare il resto
• il resto sarà 0 oppure 1
– se il quoziente (della divisione precedente) non è
uguale a zero, dividere per due il quoziente e
memorizzare il resto
– iterare finché il quoziente non diventa zero
Informatica di base – Linea 1
23
Da base 10 a base 2
• Esempio: conversione di 1310
– 13 : 2  quoziente: 6, resto=1
– 6 : 2  quoziente: 3, resto=0
– 3 : 2  quoziente: 1, resto=1
– 1 : 2  quoziente: 0, resto=1
– STOP!
leggiamo i valori
dei resti:
il primo resto
corrisponde
all’ultimo bit, …,
l’ultimo resto al
primo bit
Quindi: 1310 = 11012
• E’ corretto? Provate a fare la trasformazione inversa!
Informatica di base – Linea 1
24
Algoritmo “Da10a2”: converti da
decimale a binario
• Input: un numero in rappresentazione
decimale
• Output: un numero in rappresentazione
binaria
Informatica di base – Linea 1
25
Procedura “Da10a2”
Lista = “insieme in
cui conta l’ordine”
1.
2.
3.
4.
5.
Sia alfa il numero in input
Sia beta una lista vuota
Se alfa è zero, termina e restituisci beta
Sia gamma il resto di alfa diviso 2
Aggiungi gamma come simbolo più a sinistra
di beta
6. alfa diventa uguale alla parte intera di (alfa
diviso 2)
Parte intera =
7. Torna al passo 3
“ignora i decimali”
Informatica di base – Linea 1
26
Terminazione
• La procedura termina, in quanto:
– alfa assume sempre il valore di un intero non
negativo
– ad ogni iterazione il valore di alfa diminuisce
– quando il valore di alfa diventa uguale a zero,
l’algoritmo termina
• Domanda: sono soddisfatte anche le proprietà
di determinatezza e calcolabilità?
Informatica di base – Linea 1
27
Rappresentazione dei numeri
• Quindi, se avessimo un programma che deve
salvare in memoria un numero intero positivo:
– convertiamo la rappresentazione decimale in
rappresentazione binaria e salviamo questa
• Quando dobbiamo rileggere il numero:
– convertiamo la rappresentazione binaria (usata
per salvare) in rappresentazione decimale
Informatica di base – Linea 1
28
E gli altri tipi di numeri?
• Numeri interi con segno:
– notazione in complemento a due
– bit del segno: per i numeri negativi è 1, altrimenti
è0
• Numeri razionali:
– notazione in virgola mobile
• numero = mantissa x baseesponente
• es: 6,523 = 6523 x 10-3
– es. con 1 byte: 1 bit di segno, 3 bit per l’esponente,
4 bit per la mantissa
Informatica di base – Linea 1
29
Terza parte
Rappresentazione dei caratteri e
dei testi senza formattazione
“Cos’è la formattazione?”
Informatica di base – Linea 1
30
“E come rappresentiamo le lettere?”
• Per essere precisi, non parliamo di “lettere” ma
di “caratteri”:
– quando vogliamo memorizzare un testo, dobbiamo
memorizzare anche dei caratteri che non sono delle
lettere (es: punteggiatura, spazio, ecc.)
• Si decide di associare ogni carattere ad un
numero:
– es: A = 1, B=2, .... spazio = 89....
Informatica di base – Linea 1
31
Capiamoci!
• Abbiamo detto che:
– sappiamo rappresentare i numeri (in decimale) in
binario
– ad ogni carattere associamo un numero (in
decimale)
• Quindi, in pratica:
– ad ogni carattere possiamo associare un numero
in binario!
Informatica di base – Linea 1
32
Le codifiche
• A quale numero è associata la lettera “a”?
– possiamo scegliere un numero qualsiasi, a patto
che poi tutti usino sempre questo numero per “a”
• cioè, che si decida una codifica sulla quale tutti concordano
• Esistono diverse codifiche:
– ASCII (=American Standard Code for Information Interchange)
– ASCII esteso
– Unicode
–…
Informatica di base – Linea 1
33
Le differenze tra le diverse codifiche
• Differenza principale tra le codifiche:
– i caratteri (e il numero di caratteri) che possono
essere rappresentati
• Maggiore è il numero di caratteri che possono
essere rappresentati  maggiore il numero di
bit necessari per rappresentarlo!
Informatica di base – Linea 1
34
Dimensione di una codifica
• Quanti bit servono per rappresentare 26 caratteri?
– 4 bit? Rappresentano 16 (=24) valori diversi: non
bastano!
– 5 bit? Rappresentano 32 (=25) valori diversi: va bene!
• Quanti caratteri vogliamo rappresentare in tutto?
– lettere dell’alfabeto, lettere accentate, punteggiatura,
qualche spazio, qualche carattere speciale (non
importa cosa sono)
– Codice ASCII esteso: 256 caratteri
• 8 bit (1 byte)  28=256 caratteri diversi
Informatica di base – Linea 1
35
01100001
Informatica di base – Linea 1
36
Altri caratteri da rappresentare?
• Non tutti scrivono nel nostro alfabeto!
– arabo, cinese, greco, cirillico, ecc.
• Codifica Unicode:
– codifica che utilizza 32 bit (= 4 byte) per ogni
carattere
• 232 (=circa 4 miliardi) di caratteri rappresentabili
– rappresenta tutti i caratteri di tutte le lingue
(correnti e morte)
Informatica di base – Linea 1
37
Come si rappresenta un testo
non formattato?
• Ricorda: la formattazione è l’aggiunta di
informazioni su come deve essere mostrato il
testo:
– es: tipo e dimensione del carattere, allineamento,
spazio tra le righe, sottolineato, grassetto, ecc.
• Un testo non formattato si rappresenta come
una serie di caratteri codificati, uno dopo
l’altro
Informatica di base – Linea 1
38
Esempio
ciao ciao
• Dobbiamo codificare 9 caratteri:
– perché 9 e non solo 8?
• Quanto spazio sarà necessario per memorizzare
queste informazioni?
– dipende dalla codifica!
– ASCII esteso: 1 byte per ogni carattere  9 byte
– Unicode: 4 byte per ogni carattere  36 byte
Informatica di base – Linea 1
39
La codifica delle informazioni
• Abbiamo detto che 01100001 rappresenta il
carattere “a”
• Ma sappiamo che 01100001 rappresenta anche il
numero intero 9710
• Quando un programma legge 01100001, come fa
a sapere come interpretare 01100001?
– ogni programma scrive (o legge) delle informazioni
seguendo un formato
Informatica di base – Linea 1
40
Nella pratica
• Se provi ad aprire un file che NON è un
documento di testo (es: un foglio di calcolo)
usando un editor di testi, cosa succede?
– l’editor di testi visualizza delle informazioni senza
senso
– perché prova ad interpretare come testo qualcosa
che non è un testo
Informatica di base – Linea 1
41
Quarta parte
Rappresentazione dei testi
con formattazione
“Ho capito
cos’è
la formattazione”
Informatica di base – Linea 1
42
Codifica del testo formattato –
un tentativo
• Esempio: vogliamo codificare un testo con
alcuni caratteri sottolineati
• Inventiamo una nuova codifica:
– chiamiamola TNF (=Tanto Non Funziona)
•
•
•
•
1 = a; 2 = b; ...
30 = A; 31 = B; ...
60 = a; 61 = b; ...
90 = A; 91 = B; ...
– qual è il problema di TNF?
Informatica di base – Linea 1
43
Problemi con TNF
• Vantaggio: è semplice, basta che tutti si accordino,
come con ASCII o UNICODE
• Tuttavia:
– per codificare la sola sottolineatura abbiamo dovuto
raddoppiare il numero di caratteri
– se ora volessimo codificare anche il grassetto, la
sottolineatura e l’italico (con tutte le loro combinazioni)?
– e non abbiamo ancora considerato moltissimi altri tipi di
formattazione:
• tipo di font, dimensione del font, colore del font, posizione del
paragrafo, interlinea, ecc.
Informatica di base – Linea 1
44
Problemi con TNF
• Avremmo bisogno di milioni di diverse
combinazioni solo per rappresentare le lettere
del nostro alfabeto:
– ogni carattere occuperebbe molto spazio
– non sarebbe possibile aggiungere nuovi font,
nuove dimensioni del carattere, ecc.
• Assolutamente TNF non va bene!
– e infatti non esiste
• “Ma allora, come si fa?”
Informatica di base – Linea 1
45
La marcatura del testo
• Definiamo un carattere speciale:
– ad esempio “&”
• Quello che segue il carattere & indica come deve
essere formattato il testo
• Esempio: “ciao ciao” potrebbe essere codificato come:
– ciao &IniziaSottolineato ciao &FineSottolineato
– che a sua volta può essere memorizzato come normale
testo in codifica ASCII
• Quindi basta accordarsi sulle marcature da utilizzare,
e per il resto si usa la codifica dei caratteri tipo ASCII
o Unicode
Informatica di base – Linea 1
46
Quanto spazio occupa il testo
formattato?
• Lo stesso spazio del testo non formattato...
• …più lo spazio per codificare le marcature:
– dipende dal tipo di marcature utilizzate
– in genere occupa molto poco spazio
Informatica di base – Linea 1
47
Un esempio: HTML
• HTML (=HyperText Markup Language) è una
codifica del testo formattato:
– “ciao <u> ciao </u>” scritto nel linguaggio HTML
corrisponde a “ciao ciao”
– “ciao <b> ciao </b>” scritto nel linguaggio HTML
corrisponde a “ciao ciao”
• marcatura=tag, racchiusa fra parentesi triangolari
• Utilizzato per scrivere le pagine web
• Se avremo tempo, studieremo anche l’HTML
Informatica di base – Linea 1
48
Quinta parte:
Riepilogo
Informatica di base – Linea 1
49
• E’ stata efficace la lezione di oggi?
“Ci sono 10 tipi di persone al mondo:
quelli che conoscono la codifica binaria
e quelli che non la conoscono”
(anonimo)
• Oggi abbiamo imparato:
– la rappresentazione binaria dei numeri e degli altri
caratteri
– la conversione da numero decimale a binario, e viceversa
– la codifica di testi formattati e non formattati
– i codici ASCII e Unicode
Informatica di base – Linea 1
50
Esercizi
• Converti i seguenti numeri
da base 10 a base 2:
– 9, 15, 23
• Converti i seguenti numeri da base 2 a base
10:
– 10010100, 11010, 001011
• Disegna il diagramma di flusso dell’algoritmo
“Da10a2”
Informatica di base – Linea 1
51
Esercizi
• Ecco un messaggio in codice
ASCII esteso. Cosa dice?
00100010 01101000 01101111 00100000
01110100 01110010 01101111 01110110
01100001 01110100 01101111 00100000
01101100 01100001 00100000 01110011
01101111 01101100 01110101 01111010
01101001 01101111 01101110 01100101
00100001 00100010
Informatica di base – Linea 1
52
Scarica

rappresentazione - Università degli Studi di Milano