Transcript Slide 1

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 10 n valori (0, ..., 10 n – 1) Informatica di base – Linea 1 10

La rappresentazione decimale

• La posizione delle cifre decimali e il numero corrispondente: c n x 10 n + … + c 3 x 10 3 + c 2 x 10 2 + c 1 x 10 1 + c 0 x 10 0 … migliaia centinaia decine unità • dove c 0 , …, c n sono cifre da 0 a 9 Esempio: – 7523 = 7 x 10 3 + 5 x 10 2 + 2 x 10 1 + 3 x 10 0 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 2 n valori diversi (0, …, 2 n -1) Informatica di base – Linea 1 15

La rappresentazione binaria

• La posizione delle cifre binarie e il numero corrispondente: c n x 2 n + … + c 3 x 2 3 + c 2 x 2 2 + c 1 x 2 1 + c 0 x 2 0 … otto dove c 0 , …, c n sono 0 o 1 quattro due uno • Esempio: – 1001 2 = 1 x 2 3 + 0 x 2 2 + 0 x 2 1 + 1 x 2 0 Informatica di base – Linea 1 16

Per non fare confusione

• Per non fare confusione, indichiamo la base a pedice: – 18 10 = “diciotto in base 10” – 101 2 – = “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 0 10 . Rappresentazione: 0 2 – il numero successivo è 1 10 . Rappresentazione: 1 2 – il numero successivo è 2 • • 10 . Rappresentazione: 10 non abbiamo un singolo simbolo per rappresentare 2 10 facciamo come in base 10 quando siamo arrivati a contare fino a 9: aggiungiamo una cifra 2 Informatica di base – Linea 1 18

6 7 8 9 10 ...

4 5 2 3

Base 10

1

Contiamo in base 2

Base 2

1 10 11 100 101 110 111 1000 1001 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: – 1001 2 = 1 x 2 3 + 0 x 2 2 + 0 x 2 1 + 1 x 2 0 = = 1 x 8 + 0 x 4 + 0 x 2 + 1 x 1 = – = 8 + 1 = 9 10 011011 2 = 0 x + 1 2 5 x + 1 x 2 0 = 2 4 + 1 x 2 3 + 0 x 2 2 + 1 x 2 1 + = 0 x 32 + 1 x 16 + 1 x 8 + 0 x 4 + 1 x 2 + 1 x 1 = = 16 + 8 + 2 + 1 = 27 10 Informatica di base – Linea 1 22

Da base 10 a base 2

• • Serve qualche passaggio in più… Dato il numero x 10 dobbiamo: che vogliamo convertire, – dividere x 10 • 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 13 10 – 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: 13 10 • = 1101 2 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”

1. Sia alfa il numero in input 2. Sia beta una lista vuota Lista = “insieme in cui conta l’ordine” 3. Se alfa è zero, termina e restituisci beta 4. Sia gamma il resto di alfa diviso 2 5. Aggiungi gamma come simbolo più a sinistra di beta 6. alfa diventa uguale alla parte intera di (alfa diviso 2) 7. Torna al passo 3 Parte intera = “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 base esponente 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 (=2 4 ) valori diversi: non bastano!

– 5 bit? Rappresentano 32 (=2 5 ) 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)  2 8 =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 • 2 32 (=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 97 10 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 ciao ” scritto nel linguaggio HTML corrisponde a “ciao ciao” – “ciao ciao ” 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