15/10/2015
Fondamenti di Informatica
Antonio Camurri
[email protected]
Fondamenti di Informatica
Modulo 1: Introduzione ai calcolatori
Modulo 2: Codifica della informazione
Modulo 3: Sistemi informatici multimediali
Modulo 1
Introduzione ai calcolatori
1
15/10/2015
Calcolatore,
Sistema di elaborazione delle informazioni,
Computer
Per iniziare a comprendere la struttura di un calcolatore, proviamo
a immaginare un essere umano come una “macchina” in grado di
ricevere, elaborare e produrre informazioni e azioni.
Nel 1983 i ricercatori Card, Moran e Newell hanno proposto
un modello di processore umano (Human Processor Model):
Il loro scopo era studiare la Interazione Uomo-Macchina
(Human-Computer Interaction), una delle principali discipline
della Informatica.
Approfondimento su Human-Computer Interaction:
Dix, Finlay, Abowd, Beale (2004) “Interazione uomo-macchina”, McGraw-Hill
Modello di processore umano
(Human Processor Model)
Card, Moran, Newell, The psychology of human-computer interaction, 1983
Modello di un essere umano come sistema di elaborazione delle informazioni:
il modello di processore umano è una rappresentazione semplificata che descrive
le dinamiche di elaborazione da parte dell'uomo quando si trova ad interagire con
il computer.
Modello di processore umano
(Human Processor Model)
sistema percettivo, elabora lo stimolo sensoriale proveniente dall'esterno;
sistema motorio, gestisce e controlla le azioni
sistema cognitivo, fornisce il procedimento necessario di elaborazione degli
stimoli ricevuti attraverso i sensi per produrre risultati e azioni
2
15/10/2015
1. Struttura del calcolatore
Che cosa è un computer?
A prescindere dalle dimensioni e dal luogo in cui
si trova, può essere definito come un
elaboratore elettronico digitale
• elaboratore
in grado di immagazzinare ed elaborare dati in
base ad una serie di istruzioni (il programma)
• elettronico
evidentemente utilizza componenti elettronici.. :-)
• digitale
elabora informazioni convertendole in segnali
digitali basati sul sistema binario
Che cosa è un computer?
Il computer è uno strumento estremamente
versatile:
- Utilizzato in moltissimi campi: applicazioni
industriali, in azienda, in casa, nella vita di tutti i
giorni, negli ospedali, nella didattica, nelle arti e
nella musica, nel gioco e nel tempo libero.
- Impatto nella società
- I costruttori hanno differenziato varie categorie
di computer, ognuna adatta a rispondere a
determinate esigenze
3
15/10/2015
Computer: tipologie
• supercomputer
Elevatissima capacità di
elaborazione; calcolo parallelo;
singole applicazioni
• mainframe
• minicomputer
• personal computer
• network computer
• terminali
Computer: tipologie
• supercomputer
• mainframe
Funzioni centralizzate di
elaborazione dati; grande
numero di utenti (es.
grandi aziende, servizi)
• minicomputer
• personal computer
• network computer
• terminali
Computer: tipologie
• supercomputer
• mainframe
• minicomputer
Anni ‘60: primi elaboratori dal
costo abbastanza ridotto da
essere comprati da piccole
aziende e organizzazioni
• personal computer
• network computer
• terminali
4
15/10/2015
Computer: tipologie
• supercomputer
• mainframe
• minicomputer
• personal computer
Utilizzo individuale:
• desktop (da scrivania)
• workstation (professionale)
• notebook (portatile)
• tascabili, palmari
(dimensioni ridotte,
funzioni ridotte)
• network computer
• terminali
Computer: tipologie
• supercomputer
• mainframe
• minicomputer
• personal computer
• network computer
• terminali
Terminali con capacità di
calcolo e spesso anche di
immagazzinamento dati
Computer: tipologie
• supercomputer
• mainframe
• minicomputer
• personal computer
• network computer
• terminali
Terminali “stupidi”, nessuna
potenza di calcolo, sfruttano
quella di un server cui si
collegano. Server: computer che
fornisce servizi di elaborazione dati ad
altri computer, di solito meno potenti
(client)
5
15/10/2015
Dimensione
Capacità
Costo
•
•
•
•
•
•
•
•
Supercomputer
Mainframe
Mini-computer
Workstation
Personal Computer
Notebook
Network Computer
Tablet, Smartphone
Facilità d’uso
Genericità
Wearable, Pervasive, Disappearing,
Ubiquitous, Mobile Computing
• Riduzione di dimensioni, miniaturizzazione
• Crescita delle capacità computazionali
• Sviluppo di sensoristica
• Sviluppo di reti informatiche wireless veloci
• Riduzione dei costi
Il computer è impiegato in modo capillare in moltissimi settori e
nella vita quotidiana:
-
Trasporti (automobili, ad es ABS, computer di bordo)
Supporto nel lavoro (ad es CAD, accesso a web da sistemi mobili)
Social media
Giochi, musica
Elettrodomestici (smart home, domotica)
Salute (terapia e riabilitazione)
Nuove professioni e opportunità
Nuovi problemi: etici, sicurezza, privacy, cyber-criminalità
Struttura di un computer
CPU
Memoria
primaria
Memoria
secondaria
Dispositivi
I/O
Bus
6
15/10/2015
La CPU
CPU
Memoria
primaria
Memoria
secondaria
Dispositivi
I/O
Bus
La CPU
• Unità centrale di elaborazione (Central Processing
Unit): un insieme di circuiti, detto microprocessore,
che controlla l’attività del computer.
• Il clock di una CPU, misurato in MHz o in GHz (ad
esempio 2 GHz), è la frequenza con cui vengono
eseguite le istruzioni elementari.
• Compito della CPU è quello di leggere istruzioni e
dati dalla memoria e di decodificare ed eseguire le
istruzioni; il risultato dell’esecuzione di una istruzione
dipende dal dato su cui opera e dallo stato interno
della CPU stessa.
• Esempi di CPU: Intel Core i3, i5, i7, AMD Athlon II, ...
La CPU
AMD Athlon II
Intel Core i7
7
15/10/2015
Struttura della CPU
Registri
Unità di
controllo
Unità
Logico
Aritmetica
Struttura della CPU
L’unità centrale di elaborazione è costituita da:
• un insieme di registri che sono degli spazi di
memorizzazione accessibili ad una velocità
superiore di quella della memoria principale;
• una unità logico aritmetica (ALU) che esegue
operazioni aritmetiche, logiche e confronti sui
dati della memoria principale o dei registri;
• una unità di controllo che esegue le istruzioni
secondo quello che viene detto ciclo di
accesso-decodifica-esecuzione.
Ciclo Accesso, Decodifica,
Esecuzione
Si tratta di una sequenza di passi nella quale:
1. Si accede all’istruzione successiva portandola
dalla memoria nell’apposito registro istruzione
2. Si decodifica il tipo dell’istruzione
3. Si individuano i dati usati dall’istruzione, che
vengono portati negli opportuni registri
4. Si esegue l’istruzione
8
15/10/2015
La CPU:prestazioni
Esistono diversi criteri per valutare la performance
di un processore. Sono tutti più o meno discussi o
discutibili.
• Frequenza di clock (MHz o GHz)
• Mips (millions instructions per second)
• Flops (floating-point operations per second)
• SPEC (Standard Performance Evaluation
Corporation) real-world benchmarks
• …
La memoria
CPU
Memoria
primaria
Memoria
secondaria
Dispositivi
I/O
Bus
Memorie: una gerarchia
La memoria di un computer è organizzata in
maniera gerarchica, in base alla velocità di accesso.
Memorie più veloci sono anche più costose.
• Memoria cache:
molto veloce, piccole dimensioni, costosa
• Memoria principale (primaria):
veloce, medie dimensioni, accessibile
• Memoria secondaria:
lenta, notevoli dimensioni, economica
9
15/10/2015
La memoria cache
• Memoria piccola, ma molto veloce,
intermedia tra memoria primaria e CPU
• I dati di uso più frequente sono mantenuti
nella memoria cache per minimizzare i
trasferimenti tra memoria primaria e CPU
• Ci sono due tipi di memorie cache:
– Cache interna al processore (~256KB)
– Cache esterna al processore (~2MB)
La memoria principale
La memoria principale o primaria è quella cui ci si
riferisce solitamente parlando di “memoria”.
La memoria principale
• La memoria principale è costituita da memoria di
tipo RAM (Random Access Memory), che
consente un rapido accesso ai suoi dati.
• Una RAM consente l’accesso ai dati in essa
contenuti senza dover rispettare un determinato
ordine e con lo stesso tempo di accesso.
• La memoria principale è una memoria volatile:
allo spegnimento del computer i dati in essa
contenuti vanno persi.
10
15/10/2015
Tipi di RAM
• DRAM (Dynamic RAM): il tipo più diffuso,
•
altamente volatile, deve essere
aggiornata continuamente, economica
SRAM (Static RAM): può mantenere i dati
finché è alimentata, molto più veloce e
costosa della DRAM, viene utilizzata per
realizzare la memoria cache
La memoria principale
• La memoria principale contiene il codice del
programma in esecuzione e i dati che questo usa.
• Codice e dati sono contenuti in un insieme di celle
identificate da un indirizzo univoco, che ne
consente l’individuazione.
• Dato un indirizzo di memoria, le operazioni
effettuabili sono:
– lettura del contenuto della cella corrispondente e suo
trasferimento verso il bus
– scrittura del contenuto proveniente dal bus nella
corrispondente cella di memoria
Indirizzamento di memoria
• Ogni cella della memoria è
identificata da un numero, chiamato
indirizzo di memoria.
• In questo modo ogni dato all’interno
della memoria presenta una precisa
collocazione, ed è pertanto possibile
recuperarlo, o decidere dove
memorizzarlo, indicandone l’indirizzo.
• Lo spazio di indirizzamento indica il
massimo indirizzo di memoria
rappresentabile.
Indirizzi
..
..
34342
34343
34344
34345
34346
34347
34348
34349
..
..
Memoria
5
34
234
43
32
234
112
22
4
22
54
125
11
15/10/2015
Bit
• All’interno della memoria e, in generale, del
calcolatore l’informazione è rappresentata come
sequenze di bit.
• Il bit è l’unità elementare dell'informazione trattata
da un elaboratore.
• La rappresentazione logica del bit è costituita dai
soli valori {0, 1}.
• L’adozione della rappresentazione binaria si deve
alla semplicità di realizzare fisicamente un
elemento con due stati anziché un numero
superiore, ed anche alla corrispondenza diretta
con i valori logici vero e falso.
Byte
• Sequenze di bit sono raggruppate in entità più
vaste, che contengono generalmente un numero di
bit pari ad una potenza binaria, pari cioè a 2n;
• Il più noto di tali raggruppamenti è il byte
(chiamato anche ottetto), corrispondente ad 8 bit,
che costituisce l’unità di misura più utilizzata in
campo informatico.
• Ad esempio le dimensioni della memoria si
misurano in multipli del byte.
• Una cella di memoria contiene una sequenza di
byte, ad esempio quattro, detta parola (word).
Multipli del byte e del bit
Multipli del byte:
Nome
Kilobyte
Megabyte
Gigabyte
Terabyte
Simbolo
kB
MB
GB
TB
Multiplo
103
106
109
1012
Multipli del bit: I più usati sono
Kilobit e Megabit
As esempio per definire la velocità di una connessione internet: 4Mbit/s
significa una linea che riesce a comunicare fino a 4 megabit (4 milioni di
bit) al secondo.
12
15/10/2015
Dimensioni della memoria
• Le dimensioni della memoria principale
variano a seconda del tipo di computer
• Nei PC attuali le dimensioni tipiche della
memoria principale vanno da 1 GB a 16 GB.
Dimensioni dello
spazio di indirizzamento
• Nei computer attuali gli indirizzi di memoria
sono rappresentati con almeno 32 bit, con
cui si possono indirizzare
232 byte (circa 4 GB)
• Lo spazio di indirizzamento è pertanto
generalmente maggiore della memoria
fisica realmente esistente nel computer.
Tempi di accesso
• Un’importante caratteristica della memoria è
il suo tempo di accesso (tempo necessario
per leggere o scrivere una parola)
• Le memorie principali dei computer attuali
sono molto veloci e i loro tempi di accesso
sono di pochi nanosecondi (= 10-9 sec, un
miliardesimo di secondo)
13
15/10/2015
Riassunto delle caratteristiche
della memoria RAM
La memoria RAM è:
– ad accesso diretto (si può accedere a
qualsiasi cella senza accedere alle altre)
– veloce (accesso nell’ordine dei
nanosecondi)
– relativamente costosa
– di dimensioni limitate
– volatile (non può mantenere dati
permanenti)
Memorie ROM
• La ROM (Read Only Memory) è un tipo di
memoria che consente solamente l’operazione di
lettura dei dati, poiché il suo contenuto viene
permanentemente definito in fase di costruzione
della memoria stessa.
• È di tipo non volatile
quindi il suo contenuto
non viene perso se viene
a mancare
l'alimentazione.
Tipi di ROM
• PROM (Programmable Read Only Memory): ROM
programmabili dall’utente una sola volta;
• EPROM (Erasable Programmable Read Only
Memory): programmabili dall’utente e cancellabili
mediante esposizione ai raggi UV;
• EAROM (Electrically Alterable Read Only Memory):
ROM programmabili dall’utente e cancellabili
elettricamente mediante tensioni più elevate rispetto
a quelle di funzionamento normale;
• EEPROM (Electrically Erasable Programmable
Read Only Memory dette anche flash): stesso
funzionamento delle EAROM, ma migliori.
14
15/10/2015
Tipi di ROM
• Soltanto le vecchie ROM sono veramente di
sola lettura.
• Le flash ROM, aggiornabili via software, sono
quelle di uso corrente.
• Oltre che nei computer, le flash ROM sono
molto usate nelle fotocamere digitali, nei
lettori di musica portatili, nei telefoni cellulari,
nei pendrive.
BIOS
• Tutti i computer contengono un chip di
memoria elettronica non volatile e non
modificabile (ROM).
• Contiene un programma (detto Basic
Input Output System, BIOS) per
l’avviamento del computer e per altre
operazioni fondamentali.
La memoria secondaria
• La memoria secondaria (o memoria di massa)
è costituita da uno o più dispositivi capaci di
contenere molti più dati della memoria
principale, a discapito della velocità.
• I dati contenuti nella memoria secondaria
sono conservati in maniera permanente anche
quando il computer viene spento.
• Esempi di dispositivi di memoria secondaria
sono: i dischi rigidi (hard disk), i dischetti
(floppy disk), i CD e i DVD.
15
15/10/2015
La memoria secondaria
Criteri per distinguere tra differenti tipologie di
memorie secondaria:
• Tecnologia impiegata
• Capacità di memorizzazione
• Velocità di accesso ai dati
I dischi rigidi (hard disk)
• Tecnologia impiegata: magnetica
• Capacità di memorizzazione: fino a ~ 1 TB
• Velocità di accesso ai dati: alta, nell’ordine delle
decine di ms
Utilizzo dei dischi rigidi
Prima che un disco possa essere utilizzato
per immagazzinare dati, sono necessari tre
passaggi:
• formattazione a basso livello
• divisione in partizioni
• formattazione ad alto livello
16
15/10/2015
Formattazione a basso livello
• La formattazione a basso livello divide la
superficie del disco in cerchi concentrici
chiamati tracce.
• Ciascuna traccia viene a sua volta suddivisa
in segmenti chiamati settori.
• Un settore costituisce lo spazio minimo di
memorizzazione di un disco.
• Di norma, la formattazione a basso livello
viene effettuata una sola volta, in fabbrica.
Struttura dei dischi
Settori
Tracce e cilindri
Partizionamento
• Il partizionamento divide il disco fisico in
volumi logici. E’ un’operazione necessaria
anche se si intende usare un unico volume.
• Nei sistemi operativi Microsoft, ciascun
volume viene identificato da una lettera
dell’alfabeto (C:\, D:\, ecc.).
17
15/10/2015
Formattazione ad alto livello
• Questo tipo di formattazione può essere
eseguita dall’utente.
• Spesso si esegue prima dell’installazione di un
sistema operativo: la formattazione ad alto livello
consiste infatti nella creazione delle strutture del
file system specifico di un sistema operativo.
• La formattazione tuttavia cancella l’indice dei
file contenuti nel disco. Ai fini pratici, equivale a
cancellare il contenuto del disco.
Compact Disk (CD)
• Tecnologia impiegata: ottica
• Capacità di memorizzazione: tipicamente 650 MB
• Velocità di accesso ai dati: misurata a multipli di 0.15
MB/s (1x). Ad esempio, 40x corrisponde a 6 MB/s.
Digital Versatile Disk (DVD)
• Tecnologia impiegata: ottica
• Capacità di memorizzazione: da 4.7 a 17 GB
• Velocità di accesso ai dati: misurata a multipli di 1.35
MB/s (1x), nove volte maggiore rispetto a un CD.
18
15/10/2015
Blu-ray Disk (BD)
• Tecnologia impiegata: ottica
• Capacità di memorizzazione: da 25 GB fino a 128
GB
• Velocità di accesso ai dati: misurata a multipli di 4.5
MB/s (1x), fino a 54 MB/s.
Unità a stato solido (SSD)
• Tecnologia impiegata: elettrica
• Capacità di memorizzazione: fino a 2 TB (2011)
• Velocità di accesso ai dati: da 100 a 600 MB/s.
• Al momento più costose degli Hard Disk.
Il bus
CPU
Memoria
primaria
Memoria
secondaria
Dispositivi
I/O
Bus
19
15/10/2015
Il bus
• Un bus è un canale attraverso il quale due o
più dispositivi si scambiano informazioni.
• Senza questo sistema, ogni componente del
computer dovrebbe possedere un collegamento
fisico distinto verso ognuno degli altri dispositivi
(cosiddetti collegamenti punto-punto).
• A differenza dei collegamenti punto-punto, il
bus consente una maggiore configurabilità.
• Il clock di un bus esprime la velocità con cui
vengono scambiati i dati.
Il bus
Memorie
Monitor
Disco
BUS
CPU
Il bus
All’interno di un computer
esistono più bus dati che rendono
possibile il transito di quest’ultimi
dalle periferiche alla memoria,
dalla memoria ai processori, dai
processori alle periferiche,
dall’unità di controllo all’unità
aritmetico logica, ecc.
CPU
RAM
ROM
PCI
AGP
SCSI
USB
20
15/10/2015
Bus: una gerarchia
• Bus del processore: il più veloce.
• Bus della cache: in certe architetture, la cache è
connessa ad un bus separato; altrimenti è
connessa al bus della memoria.
• Bus della memoria: collega la memoria centrale
al processore.
• Bus per l’input-output locale: schede video,
schede di rete, memoria di massa.
• Bus input-output standard: vecchio e lento, vi si
possono trovare collegate schede audio e modem
interni.
Dispositivi di I/O
CPU
Memoria
primaria
Memoria
secondaria
Dispositivi
I/O
Bus
Dispositivi di I/O
• Sono tutti quegli apparati che servono per il
trasferimento di dati fra il computer e il mondo esterno
• Esempi di dispositivi di input (ingresso):
tastiera, mouse, microfono, webcam, scanner, …
• Esempi di dispositivi di output (uscita):
monitor, stampante, altoparlanti, …
• Esempi di dispositivi sia di input che di output:
modem, scheda di rete, …
21
15/10/2015
Dispositivi di I/O
• Molti dispositivi di I/O sono collegati al computer
dall'esterno attraverso le cosiddette porte di I/O.
• Tipiche porte di I/O sono la porta parallela, la porta
seriale, la porta di rete, ecc.
• Talvolta alcuni possono essere inseriti all'interno
del computer stesso come schede.
Porte di I/O
Esempio di scheda:
scheda audio
22
15/10/2015
Altri dispositivi di I/O
Data gloves
Head-Mounted Display (HMD)
Computer Aided Virtual
Environment (CAVE)
Oltre i calcolatori tradizionali…
Simulatori
Applicazioni mediche
Applicazioni
per musei
Oltre i calcolatori tradizionali…
Arti performative teatro
ICT per fruizione attiva
di contenuti culturali
www.casapaganini.org
www.youtube.com/InfoMusLab
Terapia e riabilitaizone
23
15/10/2015
Esempio: dentro un case
Il case (o cabinet) è il contenitore,
l’involucro in cui vengono montati i vari
componenti di cui è composto un
personal computer
Silicon Graphics O2
PowerMac G4
La facilità di accesso
alla parte interna può
variare molto.
Nei PowerMac è
sufficiente manovrare
una leva
La forma del case può
essere dettata, oltre
che da motivi pratici,
anche da
considerazioni
estetiche. Il
parallelepipedo grigio
non è d’obbligo!
Case generico per PC
Esempio: dentro un case
Parte anteriore
Alloggiamenti
dischi
Vista
laterale
Parte
posteriore
Scheda madre
Alimentazione
Esempio:
dentro un case
•
•
•
•
CPU
RAM
BIOS
Controller
integrati
• SLOT per
controller
aggiuntivi
porta parallela
porta USB
slot PCI
slot AGP
IDE
floppy
24
15/10/2015
La scheda madre
La scheda madre (motherboard) svolge funzioni di
integrazione e comunicazione tra tutti i componenti
del computer. Dalla scheda madre dipendono:
• Organizzazione (forma e design)
• Supporto per il processore
• Supporto per le periferiche
(numero e tipo di alloggiamenti)
• Prestazioni
(indirettamente e direttamente, attraverso il chipset)
• Possibilità di aggiornamenti/espansioni
Il clock della scheda madre
• Componenti diversi del computer sono sincronizzati
in base a clock diversi.
• Sulla scheda madre esiste un circuito che genera il
clock principale; un “tick” di questo clock rappresenta
la più piccola unità di tempo durante la quale può
venire eseguita un’elaborazione di qualche tipo.
• Il clock principale è usato come base da altri circuiti
(ad esempio la CPU) che ne generano multipli o
sottomultipli, per regolare le operazioni di dispositivi
più veloci o più lenti.
Esempio: saper leggere la
configurazione di un PC
25
15/10/2015
Il sistema operativo
• Il sistema operativo è un programma che
agisce da intermediario fra l’utente e
l’hardware dell’elaboratore.
• E’ responsabile del diretto controllo e della
gestione efficiente dell’hardware
dell’elaboratore.
• Fornisce un ambiente nel quale l’utente è in
grado di eseguire i programmi.
Il sistema operativo
• Principali funzioni di un sistema operativo:
- Gestione dei processi
- Gestione della memoria
- Gestione del file system
- Gestione dell’input/output da periferiche
• Esempi di sistemi operativi: Windows, Linux.
2. Codifica dell’informazione
26
15/10/2015
Codifica
• Una codifica è una regola per associare in
modo univoco i valori di un dato da codificare
con sequenze di simboli.
• La corrispondenza definita dalla codifica è
arbitraria, è una convenzione.
• Essa deve pertanto essere nota e rispettata
da chi genera e da chi utilizza i dati.
• A tale scopo vengono definiti degli standard.
Codifica binaria
• In un calcolatore i dati sono rappresentati
in forma binaria con sequenze di bit,
ovvero sequenze di due soli simboli: 0 e 1.
• Bisogna perciò poter associare
univocamente ad ogni dato elementare
(numeri, caratteri, …) una sequenza di bit
che lo rappresenti.
Codifica binaria
• Alfabeto (insieme dei simboli utilizzabili)
costituito da cifre 0 e 1.
• Con N cifre binarie si possono codificare 2N
configurazioni diverse e pertanto si possono
rappresentare al più 2N valori distinti.
• Per rappresentare M valori distinti sono
necessarie N = log2M cifre binarie.
27
15/10/2015
Codifica binaria: esempi
• Con 4 cifre binarie posso rappresentare
24 = 16 valori distinti.
• Per rappresentare i 7 giorni della settimana,
occorrono N = log27 = 3 cifre binarie.
• Una possibile codifica è ad esempio:
Lunedì
000
Venerdì
100
Martedì
001
Sabato
101
Mercoledì
010
Domenica
110
Giovedì
011
Codifica binaria dei numeri
• Distinguiamo la rappresentazione per:
– numeri naturali (interi positivi)
– numeri interi con segno
– numeri reali
Numeri interi positivi
• La codifica si basa sulla notazione posizionale
o “pesata” adottata usualmente per i numeri
codificati in decimale.
• Nella notazione posizionale il valore numerico
rappresentato da una cifra dipende dal valore
della cifra e dalla sua posizione nel numero.
• Data una base B, le cifre ck possono assumere
i valori da 0 a B - 1.
28
15/10/2015
Numeri interi positivi
• In notazione posizionale un numero X di N
cifre si può esprimere in base B come
somma di potenze della base B:
• Ad esempio
132810 = 1  103 + 3  102 + 2  101 + 8  100
3568 = 3  82 + 5  81 + 6  80 =
= 192 + 40 + 6 = 23810
Numeri interi positivi
• Nel caso binario (base B = 2), una sequenza
di bit bn-1...b1b0 rappresenta il numero:
n 1
b  2
i 0
i
i
 2 n 1  bn 1  ...  4  b2  2  b1  b0
• Dati n bit è possibile rappresentare numeri
da 0 a 2n-1
• Esempio (con 8 bit): 00001001 rappresenta il
numero 9:
1*23+1*20 = 8 + 1 = 9
Esempio
• Rappresentazione a 4 bit dei numeri interi
positivi tra 0 e 15:
Base 10
Base 2
Base 10
Base 2
0
0000
8
1000
1
0001
9
1001
2
0010
10
1010
3
0011
11
1011
4
0100
12
1100
5
0101
13
1101
6
0110
14
1110
7
0111
15
1111
29
15/10/2015
Codifica dei caratteri
Qualunque codifica deve soddisfare:
• 'a' < 'b' < ... < 'z'
• 'A' < 'B' < ... < 'Z'
• '0' < '1' < ... < '9'
• Continuità dei codici delle successioni
– 'a', 'b', ..., 'z'
– 'A', 'B', ..., 'Z'
– '0', '1', ..., '9'
Nota: non è fissa la relazione tra maiuscole e
minuscole o fra i caratteri non alfabetici
Codifica dei caratteri
• Codifica ASCII (American Standard Code for
Information Interchange)
– Comprende caratteri speciali, punteggiatura,
a-z, A-Z, 0-9
– Utilizza 7 bit (128 caratteri)
– I codici ASCII estesi usano 8 bit (256 caratteri)
• Codifica UNICODE
– Utilizza 16 bit (65536 caratteri)
– I primi 128 caratteri sono gli stessi di ASCII
– Gli altri corrispondono ad altri alfabeti (greco,
cirillico,…)
– Non copre i simboli (oltre 200.000) di tutte le
lingue!
Esempio: Codifica ASCII
0
8
16
24
32
40
48
56
64
72
80
88
96
104
112
120
NUL| 1
^H | 9
^P | 17
^X | 25
SP | 33
( | 41
0 | 49
8 | 57
@ | 65
H | 73
P | 81
X | 89
` | 97
h |105
p |113
x |121
^A
^I
^Q
^Y
!
)
1
9
A
I
Q
Y
a
i
q
y
| 2
| 10
| 18
| 26
| 34
| 42
| 50
| 58
| 66
| 74
| 82
| 90
| 98
|106
|114
|122
^B
^J
^R
^Z
"
*
2
:
B
J
R
Z
b
j
r
z
| 3
| 11
| 19
| 27
| 35
| 43
| 51
| 59
| 67
| 75
| 83
| 91
| 99
|107
|115
|123
^C
^K
^S
^[
#
+
3
;
C
K
S
[
c
k
s
{
| 4
| 12
| 20
| 28
| 36
| 44
| 52
| 60
| 68
| 76
| 84
| 92
|100
|108
|116
|124
^D
^L
^T
^\
$
,
4
<
D
L
T
\
d
l
t
|
| 5
| 13
| 21
| 29
| 37
| 45
| 53
| 61
| 69
| 77
| 85
| 93
|101
|109
|117
|125
^E
^M
^U
^]
%
5
=
E
M
U
]
e
m
u
}
| 6
| 14
| 22
| 30
| 38
| 46
| 54
| 62
| 70
| 78
| 86
| 94
|102
|110
|118
|126
^F
^N
^V
^^
&
.
6
>
F
N
V
^
f
n
v
~
| 7
| 15
| 23
| 31
| 39
| 47
| 55
| 63
| 71
| 79
| 87
| 95
|103
|111
|119
|127
^G
^O
^W
^'
/
7
?
G
O
W
_
g
o
w
DEL
30
15/10/2015
Codifica esadecimale
• La rappresentazione esadecimale consente
di esprimere lunghe sequenze binarie in
modo più compatto.
• Ogni gruppo di 4 bit può infatti essere
direttamente convertito nella corrispondente
cifra esadecimale.
• Parole di 16 o di 32 bit possono così essere
espresse in modo più conveniente
rispettivamente con 4 e 8 cifre esadecimali.
Codifica esadecimale
• Alfabeto costituito da 16 simboli.
• Esempio: rappresentazione esadecimale
dei numeri interi positivi tra 0 e 15:
Base 10
Base 16
Base 10
Base 16
0
0
8
8
1
1
9
9
2
2
10
A
3
3
11
B
4
4
12
C
5
5
13
D
6
6
14
E
7
7
15
F
Esempio
• La rappresentazione esadecimale della
parola di 16 bit
0110 1100 0011 1010 è 6C3A.
• La rappresentazione esadecimale della
parola di 32 bit
1110 0010 0001 1111 1101 1011 0000 0101
è E21FDB05
• Quando nello scrivere un programma occorre
specificare i dati in forma binaria, spesso si
usa la rappresentazione esadecimale.
31
15/10/2015
Software
• Informalmente un programma può essere
definito come una serie di operazioni
elementari, eseguite in sequenza, che
trasformano un insieme di dati di ingresso
(input) in un insieme di dati di uscita (output).
• L’insieme dei programmi e dei dati presenti su
di un calcolatore ne costituiscono il software.
Programmazione
• La programmazione è l’attività di progettare
e sviluppare programmi per un calcolatore.
• Informalmente, è come se il programmatore
“insegnasse” al calcolatore come svolgere
un determinato compito.
• Scopo della scrittura di un programma è la
risoluzione automatica di un problema.
• Il risultato della programmazione è un
programma scritto in un linguaggio di
programmazione.
Progetto software
• Di solito comporta i seguenti passi:
– Formulare il problema (specifica dei requisiti)
– Capire il problema e scomporlo in parti gestibili
(analisi )
– Progettare una soluzione (algoritmo)
– Implementare la soluzione (scrittura del codice)
– Testare la soluzione e correggere eventuali
errori (verifica, testing e debugging)
– Tenere aggiornato il programma (manutenzione)
32
15/10/2015
Algoritmo
• Un algoritmo per la risoluzione di un problema
è una sequenza di passi discreti
– di lunghezza finita
– deterministici
– ripetibili
che producono la soluzione del problema.
• Esempio: procedimenti per calcolare il
risultato di espressioni aritmetiche o
algebriche.
Proprietà fondamentali degli algoritmi
Proprietà necessarie, senza le quali un algoritmo non può
essere definito tale:
• i passi costituenti devono essere "elementari", ovvero non
ulteriormente scomponibili (atomicità);
• i passi costituenti devono essere interpretabili in modo
diretto e univoco dall'esecutore, sia esso umano o
artificiale (non ambiguità);
• l'algoritmo deve essere composto da un numero finito di
passi e richiedere una quantità finita di dati in ingresso
(finitezza)
• l'esecuzione deve avere termine dopo un tempo finito
(terminazione);
• l'esecuzione deve portare a un risultato univoco (effettività).
Algoritmi: proprietà
«rompere le uova» può essere considerato legittimamente un passo elementare di un
«algoritmo per la cucina» (ricetta), ma non potrebbe esserlo anche «aggiungere sale quanto
basta», dato che l'espressione «quanto basta» è ambigua, e non indica con precisione quali
passaggi servano per determinare la quantità necessaria.
Un passo come «preparare un pentolino di crema pasticcera» non può considerarsi legittimo
perché ulteriormente scomponibile in sotto-operazioni (accendere il fuoco, regolare la fiamma,
mettere il pentolino sul fornello, ecc.) e anche perché contenente ambiguità (non specifica
quanto grande deve essere il pentolino, quanto deve essere riempito di crema e così via).
Al contrario, «continuare a mescolare a fuoco vivo fino a quando il composto non assume colore
bruno» è un'istruzione accettabile di tipo iterativo, che comporta un numero finito di operazioni
(le rimestate) sebbene tale numero non sia conoscibile a priori, perché dipendente da ciò che è
chiamato input (il grado di umidità della farina nel composto, il vigore della fiamma, ecc.).
All'istruzione non elementare di preparazione della crema potrebbe, però, essere associato a un
opportuno rimando a un'altra sezione del ricettario, che fornisca un sotto-algoritmo apposito per
questa specifica operazione. Questo suggerisce che, per comodità d'implementazione, gli
algoritmi possano essere modulari, ovvero orientati a risolvere specifici sotto-problemi, e
gerarchicamente organizzati.
Inoltre, una ricetta che preveda la cottura a microonde non può essere preparata da un
esecutore sprovvisto dell'apposito elettrodomestico; questo rimanda al problema della
realizzabilità degli algoritmi, ovvero della loro compatibilità con le risorse materiali e temporali a
disposizione.
Infine, possono esistere più algoritmi validi per risolvere uno stesso problema, ma ognuno con
un diverso grado di efficienza.
33
15/10/2015
Algoritmi: generalità
Algoritmo = «procedimento di risoluzione di un problema».
In questo contesto, i «problemi» sono caratterizzati da dati di ingresso (input)
variabili, su cui l'algoritmo opererà per giungere alla soluzione.
Esempio di «problema»: calcolo del massimo comune divisore fra due numeri; i
dati di ingresso, variabili di volta in volta, sono i due numeri in questione.
Questo potrebbe apparire come una «famiglia di problemi»: il problema di
calcolare il massimo comune divisore fra 10 e 15, il problema di calcolarlo fra
40 e 60, fra 35 e 95, ecc. Nella informatica si identificano con la parola
«problema» l'intera famiglia e con «istanza» ciascuno dei quesiti specifici
ottenuti fissando due particolari valori.
Data questa premessa, un algoritmo risolve un problema se per qualunque
istanza del problema esso produce in un tempo finito la soluzione desiderata,
ovvero un certo risultato o dato in uscita (output).
Algoritmi: generalità
Se questa idea aveva già una certa importanza per il
calcolo matematico, l'avvento dell'informatica l'ha arricchita
di una nuova importanza, ed è infatti con l'informatica che il
termine «algoritmo» ha iniziato a diffondersi.
Difatti, se per ottenere un certo risultato (risolvere un certo
problema) esiste un procedimento infallibile, che può
essere descritto in modo non ambiguo fino ai dettagli, e
conduce sempre all'obiettivo desiderato in un tempo finito,
allora esistono le condizioni per affidare questo compito a
un computer, semplicemente introducendo l'algoritmo in
questione in un programma scritto in un opportuno
linguaggio comprensibile al calcolatore.
Linguaggi per descrivere algoritmi
Un algoritmo viene tipicamente descritto attraverso
diagramma di flusso (flowchart) o ricorrendo a uno
pseudocodice.
Il teorema di Böhm-Jacopini afferma che qualunque
algoritmo può essere implementato utilizzando tre
sole strutture:
- Sequenza
- Selezione o Struttura condizionale
- Ciclo o Iterazione
34
15/10/2015
Sequenza
La sequenza è la normale elencazione di
istruzioni perché vengano eseguite una di
seguito all'altra nell'ordine in cui sono state
scritte dal programmatore
Sequenza: esempio
Problema: Dato il valore di X letto da tastiera, calcolare: Y = 5 X + 3.
1.
2.
3.
4.
Ricevo da tastiera il valore di X
Moltiplico X per 5 (sia Z il risultato)
Sommo 3 a Z (sia Y il risultato)
Visualizzo su schermo Y
L’algoritmo è costituito da una sequenza di 4 istruzioni.
X, Y, Z sono le variabili: caselle di memoria dove memorizzo dati
temporaneamente.
Selezione o Struttura condizionale
Selezione (o Struttura condizionale):
struttura di controllo del flusso di esecuzione
di un programma che determina, in base alla
verifica di una condizione logica, quale fra
due sequenze o blocchi di istruzioni
eseguire
35
15/10/2015
Semplici esempi di algoritmi
Problema: Dato il valore di X, calcolare la radice quadrata di X+5.
1. Ricevo da tastiera il valore di X
2. Sommo 5 a X (sia Y il risultato)
3a. se Y è positivo o nullo, calcolo la sua radice quadrata e la visualizzo
3b. se Y è negativo, visualizzo il messaggio «è impossibile calcolare la
radice quadrata»
3a e 3b sono un esempio di selezione
Y≥ 0 ?
si
no
Ciclo o Iterazione
Ciclo (o iterazione): blocco di istruzioni che vengono
ripetutamente eseguite fino a che una certa condizione
cambia di stato.
Esempio: leggo da tastiera un numero, se è <0 ripeto la lettura, fino a
quando il numero letto diventa >0. Calcolo quindi la sua radice quadrata.
1.
do
2.
3.
Ricevo da tastiera il valore di X
while ( X > 0 );
calcola la radice quadrata di X (sia Y il risultato)
visualizza Y su schermo
Linguaggi di programmazione
• Nella fase di programmazione, un algoritmo verrà tradotto in
linguaggio di programmazione a opera di un programmatore
dando vita al programma che sarà eseguito dal calcolatore,
dopo un'ulteriore traduzione in linguaggio macchina.
• Per scrivere il programma che realizza un algoritmo, il
programmatore deve usare un linguaggio di
programmazione.
• Un algoritmo viene tradotto dal programmatore in un
linguaggio di programmazione costituito, informalmente, da
parole e simboli e da un insieme di regole per combinarli.
• A differenza dei linguaggi naturali, le regole dei linguaggi di
programmazione (linguaggi formali) sono rigide, per garantire
l’assenza di ambiguità.
36
15/10/2015
Linguaggi di programmazione
• Se il programma rispetta le regole del
linguaggio, può essere tradotto (compilato)
in linguaggio macchina, e quindi eseguito
dal computer.
• Il compilatore è il programma che traduce
una serie di istruzioni scritte in un linguaggio
di programmazione (codice sorgente) in
linguaggio macchina (codice oggetto).
• I linguaggi che seguono questo approccio si
dicono linguaggi compilati.
Linguaggi di programmazione
• Altro approccio: linguaggi interpretati.
• Un interprete è un programma che esegue altri programmi.
• Un linguaggio interpretato è un linguaggio di
programmazione le cui istruzioni vengono tradotte una per
una in linguaggo macchina ed eseguite da un interprete.
• L’esecuzione di programmi scritti in un linguaggio
interpretato è di solito meno efficiente rispetto ai linguaggi
compilati.
• Nei linguaggi compilati il programma viene tradotto in
linguaggio macchina una volta per tutte, nei linguaggi
interpretati ogni istruzione viene ad ogni esecuzione
tradotta in linguaggio macchina ed eseguita.
37