Guida informatica di base per principianti

Transcript

Guida informatica di base per principianti
Maxy Guida
2
__________________________________________________________________________________________
Indice
Introduzione……………………………………..…… Pag 3
CAP I
Struttura dell’Elaboratore…………………………... Pag 4
CAP II
Linguaggi e Sistemi Operativi ..……………………... Pag 23
CAP III
Sistemi di Numerazione……………………………… Pag 27
CAP IV
Logica delle Proposizioni…………………………….. Pag 36
CAP V
Struttura dei Dati…………………………………….. Pag 41
CAP VI
L’Arte di Programmare……………………………... Pag 49
CAP VII
Le Basi di Dati………………………………………... Pag 65
CAP VIII
Virus Informatici……………………………………
Pag 95
Appendice A
Basi di HTML.…………...…………………………… Pag 99
Appendice B
Installare MySQL……………………………………. Pag 126
Appendice C
Manuale del Dos…………………………...……….
Pag 128
Informatica di Base
3
__________________________________________________________________________________________
INTRODUZIONE
L’utilizzo del computer e i fondamenti dell’informatica sono diventati requisiti
indispensabili per chi vuole affrontare qualsiasi tipo di lavoro.
Le conoscenze di base dell’informatica sono ormai richieste in molti concorsi e
l’utilizzo del computer è praticamente obbligatorio in moltissimi ambiti di
lavoro o di studio.
“Maxy Guida: Informatica di Base” nasce quindi per rendere disponibile in
italiano una valida risorsa per chi vuole avvicinarsi a questo affascinante e
oscuro mondo. Nel libro è infatti possibile trovare capitoli dedicati ai vari aspetti
dell’informatica, dalle nozioni basilari come la struttura di un elaboratore fino
agli argomenti più complessi come le basi di dati.
Gli argomenti sono trattati in maniera semplice e concisa evitando lungaggini
che avrebbero appesantito troppo il testo. Quasi tutti i capitoli hanno inoltre una
serie di esercizi che consentono di mettere in pratica le nozioni apprese
Distribuzione:
Questo libro viene reso disponibile gratuitamente e può essere distribuito sotto
qualsiasi forma (anche cartacea) alle seguenti condizioni:
•
•
il materiale dovrà essere distribuito senza alcuna modifica ai suoi
contenuti;
niente sarà dovuto da chi lo acquisisce a colui che lo distribuisce, salvo
rimborso di eventuali spese per il supporto che lo contiene;
Potete spedire critiche, commenti, suggerimenti, segnalazione di errori o
mancanze direttamente all’autore contattabile all'indirizzo e-mail
[email protected].
2002 Copyright di Massimiliano Teso
Tutti i diritti riservati
Massimiliano Teso
Maxy Guida
4
__________________________________________________________________________________________
CAP I
STRUTTURA DELL’ELABORATORE
Introduzione
Quando andiamo in un negozio per comprare un computer, normalmente ci
viene presentato un foglio di questo tipo:
TIPO
CASE
M/B
CPU
MEMORIE
HD
SCHEDA VIDEO
CD-ROM
FLOPPY
MODEM
MULTIMEDIA
DESCRIZIONE
ATX MIDITOWER
ASUS CUV4X FCPGA
PENTIUM III 800
128 DIMM 133MHZ
SAMSUNG 30GB ULTRA66
RIVA TNT2 32MB
CREATIVE 52X
1,44 MB
56K INTERNO
SB CREATIVE 128 PCI
In fondo alla pagina del preventivo è presente di norma un prezzo che può
andare dai due ai quattro milioni. Naturalmente ognuno di noi vorrebbe sapere
per cosa sta spendendo quei soldi ma, per farlo, è necessario sapere che cosa è
un processore, un hard disk e che differenza c’è tra una marca e l’altra, tra un
modello e l’altro.
Scopo di questo corso è proprio quello di farvi entrare in quella scatola
misteriosa chiamata Personal Computer per poter capire meglio cosa
l’informatica moderna può offrire.
Informatica di Base
5
__________________________________________________________________________________________
Un po’ di storia
La storia del computer, come lo conosciamo oggi, è relativamente breve. Il
primo calcolatore venne infatti costruito durante la seconda guerra mondiale. Si
chiamava ENIAC (Electronic Numeric Integrator and Calculator).
Già molto tempo prima però l’uomo cercò di realizzare macchine in grado di
fare calcoli in maniera automatica. Il primo esempio di questo tipo lo abbiamo
con Leonardo Da Vinci il quale disegnò, ma non realizzò, un piccolo dispositivo
in grado di fare calcoli. Fu realizzata successivamente dal dottor Roberto
Guatelli dell’IBM nel 1968.
La prima macchina calcolatrice funzionante fu inventata e realizzata da Blaise
Pascal nel 1642 (all’età di 21 anni!) mentre la prima calcolatrice prodotta in
grandi quantità fu quella di Thomas de Colmar nel 1820. Nel 1832 viene
realizzato il Difference Engine, il primo calcolatore a programma memorizzato.
La prima persona a concepire una macchina capace di computazionalità
programmabile fu Ada Lovelace Byron che lavorò al progetto della Analytical
Machine. Questo calcolatore avrebbe dovuto sostituirsi alla Difference Engine
ma non venne mai realizzato praticamente.
Il grande stimolo a costruire macchine in grado di fare calcoli ad alta velocità fu
la guerra. Il primo computer, L’ENIAC, venne infatti realizzato in segreto
durante la seconda guerra mondiale. Il mondo seppe di questa straordinaria
macchina solamente nel 1946. Essa occupava un intero scantinato di un
dipartimento dell’Università della Pennsylvania.
La svolta decisiva alla struttura del computer moderno però venne con lo
scienziato John Von Neuman il quale nel 1944 si interessò al progetto ENIAC.
Egli elaborò lo schema teorico con le caratteristiche fondamentali e le modalità
di funzionamento del computer moderno.
Solo nel 1951 venne costruito il primo esemplare di computer commerciale, si
chiamava UNIVAC I e costava un milione di dollari. Ne vennero vendute 48
unità. Il primo calcolatore dell’IBM uscì nel 1952 e ne furono venduti 19
esemplari.
Naturalmente si trattava ancora di computer estremamente costosi, lenti e
ingombranti. Nel 1965 uscì il PDP-8 della DEC, la prima macchina a basso
costo (20.000 dollari!), detta minicalcolatore mentre solo nel 1971 la Intel
inventò e commercializzò il primo microprocessore, il 4004.
Nel 1977 l’Apple creò il primo personal computer ma solo nel 1981 l’IBM ebbe
grande successo mettendo sul mercato il suo personal computer basato sul
processore 80X86 della Intel. Iniziavano a crearsi i primi standard: i processori
Intel e il sistema operativo Microsoft Ms-DOS.
Da allora l’evoluzione dell’informatica è andata di pari passo con quella
dell’elettronica. Sono usciti nuovi microprocessori, sempre più potenti: 80X88,
80X286, 80X386, 80X486 e il Pentium della Intel mentre altre case si sono
tuffate in questo ricco business (come, ad esempio, l’AMD). Il software si è
evoluto sempre di più e, per mantenere alte le prestazioni anche l’hardware si è
Massimiliano Teso
Maxy Guida
6
__________________________________________________________________________________________
dovuto evolvere di conseguenza. Lo sviluppo dell’industria dei computer è stata
così rapida che se l’industria dei trasporti avesse tenuto lo stesso ritmo, oggi si
potrebbero attraversare gli Stati Uniti da costa a costa in trenta secondi
spendendo meno di mille lire.
Ferramenta
Tutti noi ormai viviamo in una società dominata dai computer e dai
microprocessori.
Vedremo più avanti che il microprocessore è solo una parte del computer, la
parte più importante, quella che esegue i calcoli.
I microprocessori però non si trovano solo nei computer. Li troviamo nei
telefonini, negli elettrodomestici di casa, in alcune tessere magnetiche, insomma
dappertutto.
E’ importante quindi conoscere un minimo come funzionano e quali cose
possono fare.
Veniamo ora ad alcune definizioni prima di passare allo schema generale di un
computer:
Hardware:
Letteralmente “ferramenta”. Insieme di dispositivi fisici, meccanici ed
elettronici di un computer: scheda madre, CPU, memorie, periferiche, schede di
rete.
Software:
Insieme di linguaggi di programmazione e di programmi che agevolano, a vari
livelli, l’utilizzo dell’hardware.
Computer:
Calcolatore ovvero dispositivo elettronico che consente di immettere,
memorizzare, elaborare, emettere e trasmettere informazioni. L’immissione
avviene attraverso una varietà di dispositivi di ingresso (Tastiera, Mouse), la
memorizzazione attraverso sistemi di memoria volatile e permanente (Ram,
Hard Disk), l’elaborazione attraverso l’unità centrale (CPU), l’emissione
attraverso dispositivi di output (monitor, Stampante) e la trasmissione attraverso
collegamenti in rete (Modem).
Insomma, in generale, cosa fa un computer?
•
•
•
•
•
Legge un programma
Esegue in ordine stabilito le istruzioni del programma
Legge i dati in ingresso
Elabora i dati
Scrive i risultati dell’elaborazione
Informatica di Base
7
__________________________________________________________________________________________
Per svolgere tutto questo un computer deve svolgere una serie di azioni:
Ricevere dall’esterno le istruzioni, cioè il programma e i dati iniziali
Memorizzare il programma
Momorizzare i dati
Elaborare i dati in base al programma
Comunicare all’esterno i risultati ottenuti
La Macchina di Von Neumann
Lo schema a blocchi del computer ipotizzato da Von Neumann, detto anche
macchina di Harvard, è questo:
Le linee grosse indicano il flusso dei dati, quelle tratteggiate i comandi di
controllo. I dati vengono prelevati dal dispositivo di ingresso (input) e mandati
all’unità di calcolo la quale preleva il programma dalla memoria di programma.
Per svolgere il proprio lavoro l’unità di calcolo deve poter leggere e scrivere
nella memoria dati ed è per questo che ci sono due frecce tra le due unità citate.
Infine, una volta terminato il programma, l’unità di calcolo manda i suoi risultati
al dispositivo di uscita (output).
Il tutto deve naturalmente essere fatto sotto il controllo di un’altra struttura
indipendente detta appunto unità di controllo.
L’unità di calcolo e quella di controllo formano la CPU, ovvero Central
Processing Unit (unità centrale di elaborazione).
Massimiliano Teso
Maxy Guida
8
__________________________________________________________________________________________
Il modello della macchina di Harvard risale al 1944. Da allora si sono fatti
enormi progressi nell’elettronica e nell’informatica ma la base del calcolatore è
fondamentalmente sempre la stessa.
Nel 1945 Von Neumann propose un modello più efficiente e generale quando si
rese conto che dati e programmi potevano risiedere nella stessa memoria
Principali componenti del computer
Mother Board (Scheda Madre):
Supporto che permette la comunicazione tra CPU, Ram, dispositivi di input e
output
CPU (spesso chiamata processore o microprocessore):
Rappresenta il vero cuore del computer. I suoi componenti principale sono tre: i
registri, l’unità aritmetico/logica (ALU) e l’unità di controllo. La CPU svolge
semplici azioni in maniera sequenziale. La sua potenza sta nello svolgerne tante
in modo molto veloce
Registri: Sono contenitori di valori utilizzati dalla CPU per memorizzare al suo
interno dei dati. Altri registri sono utilizzati dall’ALU per fare calcoli come la
somma o la comparazione. Ogni processore ne ha un certo numero e possono
contenere un numero fisso di bit (8, 16, 32). Sono molto pochi ma rappresentano
l’elemento di memorizzazione più veloce che ci sia in quanto integrato
all’interno del processore.
Informatica di Base
9
__________________________________________________________________________________________
ALU (Arithmetic Logic Unit, unità aritmetico logica): Circuito logico digitale in
grado di elaborare uno o due ingressi e di svolgere semplici operazioni
aritmetico/logiche
ROM (Read Only Memory):
Memoria integrata con la scheda madre in cui risiede il così detto BIOS (Basic
Input Output System =sistema di base di ingresso uscita), programma che serve
al computer per svolgere le azioni più semplici al momento dell’accensione.
Esso infatti gestisce le operazioni iniziali quali l’accensione, il controllo e
l’utilizzo dei dispositivi di input e output oltre che delle memorie di massa (Hard
Disk, CD Rom, Floppy Disk)
RAM (Random Access Memory)
Componente elettronico che il processore utilizza per memorizzare i dati. E’
costituita da un certo numero di “celle” (o locazioni) in grado di memorizzare
una cifra binaria (0 o 1, cifre conosciute anche con il termine bit) e ogni cella è
numerata tramite un indirizzo. La Ram è una memoria volatile in quanto il suo
contenuto va perduto allo spegnimento del computer.
Quando sentite che la RAM ha una capacità di 32 MegaByte, significa che è
costituita da circa 32.000.000 di celle e che ognuna di esse può ospitare 8 bit (8
bit sono detti 1 byte). La RAM è immaginabile quindi come un grosso archivio
cartaceo organizzato a “cassetti” in cui si può scrivere o leggere e ogni cassetto è
identificato da un indirizzo.
Quando, ad esempio, la CPU desidera sapere cosa c’è nel “cassetto” numero
“12345”, manda una richiesta alla memoria la quale risponde aprendo quel
cassetto e inviandone il contenuto al processore.
Come fa la CPU ad indicare questo indirizzo? Essa ha un certo numero di
piedini (il 386 della Intel ne ha 132). Quando vuole accedere ad una cella di
memoria manderà un impulso elettrico a un certo numero di piedini (32 nel
nostro esempio) per fare in modo che insieme formino un indirizzo binario della
cella a cui si vuole accedere. Nei piedini potrà passare o meno corrente; il
piedino in cui passa corrente indica un 1 mentre quello in cui non passa uno 0.
La combinazione di 0 e 1 forma l’indirizzo voluto.
Massimiliano Teso
Maxy Guida
10
__________________________________________________________________________________________
Dispositivi di Input e Output
Un computer senza periferiche non servirebbe a niente. Grazie ad esse è
possibile immettere i dati e vedere i risultati delle elaborazioni del computer.
Input
Tastiera
E’ il dispositivo di input più importante. Digitando su tasti è possibile scrivere
un programma o immettere dati all’interno del computer.
Mouse
Questo dispositivo di input è costituito da una sfera di gomma che fa muovere
due rotelline attraverso le quali il computer è in grado di sapere dove si trova
l’indicatore del mouse.
Informatica di Base
11
__________________________________________________________________________________________
Scanner
Grazie a un lettore ottico, questo dispositivo è in grado di immettere immagini
all’interno del computer
Output
Monitor
Questo dispositivo è basato su un tubo a raggi catodici che scrive l’immagine
una riga alla volta dalle 30 alle 60 volte al secondo. Tale frequenza di
rigenerazione o rinfresco (refresh) dell’immagine consente di vedere
un’immagine stabile senza tremolii. La superficie dello schermo è composta da
una matrice di elementi (detti pixel) che andranno a comporre la figura.
Un monitor a colori ha tre matrici per i tre colori base: rosso, verde e blu (RGB
con R=red, G=gree e B=Blue).
Stampante
In questo caso le informazioni, invece di apparire su uno schermo, vengono
stampate su fogli.
Memorie di Massa
Abbiamo visto che la RAM è una memoria volatile. E’ necessario quindi poter
memorizzare programmi e dati in maniera permanente e sicura. Per questo scopo
vengono utilizzate le memorie di massa che qui di seguito elenchiamo:
Hard Disk
E’ formato da un blocco di dischi di materiale ferromagnetico simile a quello
impiegato nelle audiocassette. Per leggere e scrivere dati si utilizzato delle
testine legate a un braccio mobile. L’impiego di parti meccaniche come il
braccio mobile e i motorini che fanno girare i dischi comporta tempi di accesso
superiori rispetto a quelli delle memorie elettroniche (RAM) di fattori superiori
a 100.000.
I vari dischi si chiamano piatti: ogni piatto è diviso in tracce e ogni traccia in
settori. La testina individua prima la traccia e poi deve aspettare che il settore
giusto le passi sotto (per questo l’accesso è detto semicasuale)
Massimiliano Teso
Maxy Guida
12
__________________________________________________________________________________________
Floppy Disk
Si chiamano floppy perché sono flessibili ma il funzionamento è pressoché
identico a quello degli hard disk. I floppy attualmente in circolazione sono da 3
pollici e ½ e hanno la capacità di circa 1,44 MegaByte.
CD Rom
Realizzati in materiale plastico, i CD Rom rappresentano l’ultima frontiera delle
memorie di massa. La loro capacità è di circa 700 MegaByte. Fino a qualche
tempo fa erano dispositivi di sola lettura ma oggi la diffusione dei masterizzatori
e dei CD riscrivibili ha reso questo prodotto un sistema molto comodo dove
poter archiviare i propri dati.
Schede Multimediali
Sotto questo nome vanno annoverate schede video, schede audio e tutto ciò che
permette al computer di far girare programmi multimediali.
Il Bus
Quando il processore deve effettuare una qualsiasi operazione sulla RAM o su
una periferica, deve poter “muovere” i dati da un punto all’altro dell’elaboratore.
Il Bus funziona da canale di comunicazione attraverso il quale i dati
“viaggiano”. Un dato che caratterizza il BUS è la sua “ampiezza” in termini di
bit. Un bus a 32 bit, ad esempio, può “trasportare” 32 bit alla volta.
Nei computer esistono diversi tipi di Bus. Normalmente c’è un Bus degli
indirizzi (dove viaggiano solo le informazioni relative a gli indirizzi della RAM
e delle periferiche) e un Bus dei dati (dove viaggiano dati veri e propri).
Informatica di Base
13
__________________________________________________________________________________________
Approfondimento sulla RAM
Abbiamo visto che la Ram può essere schematizzata come un insieme di
elementi, ciascuno dei quali contiene un bit di informazione. Questi elementi di
memoria sono organizzati in una rete di collegamento a matrice bidimensionale
che permette di individuare, tramite due decodificatori, la posizione di ciascuna
cella e di scambiare il contenuto con l’esterno nelle operazioni di lettura e
scrittura.
Dalla figura si vede come l’indirizzo, in questo caso di 12 bit, viene decodificato
dai decodificatori di riga e di colonna sei bit alla volta, attivando quindi una sola
delle 26=64 linee e, conseguentemente, una sola delle 64X64=4096 celle di
memoria.
Poiché per rappresentare un numero o altro ente significativo sono necessari
gruppi ordinati di più bit, le “celle di memoria” sono organizzate in
configurazioni multiple, dette parole, la cui lunghezza è fissata una volta per
tutte all’atto della costruzione della macchina (di solito 8, 16, 32 bit per parola).
Massimiliano Teso
Maxy Guida
14
__________________________________________________________________________________________
La parola è dunque l’unità minima di informazione che ha significato per la
macchina: ogni dato o istruzione viene tradotto (“codificato”) usando una o più
parole.
All’interno della RAM le parole sono disposte sequenzialmente l’una all’altra e
sono individuate in modo univoco da un “indirizzo”. Gli indirizzi sono
organizzati in modo che, scelta una qualunque parola (“a caso”), il tempo di
accesso sia sempre lo stesso, indipendentemente dalla posizione della parola.
Proprio per questo la RAM è detta ad accesso casuale.
L’unità base di misura della quantità di memoria è il byte (pari a 8 bit), un
blocco di memoria capace di contenere al massimo 256 elementi differenti.
Nella tabella sottostante sono indicati i multipli del byte usati per indicare la
dimensione della RAM e delle altre memorie.
Simbolo
Kb
Mb
Gb
Nome
Khilo byte
Mega byte
Giga byte
Quantità
1.024 byte
1.048.576 byte
1.073.741.824 byte
Gerarchia di Memoria e Memoria Virtuale
Abbiamo visto che il computer memorizza nella RAM le informazioni che gli
servono per poter eseguire i vari programmi. La RAM è però una memoria
relativamente piccola ma, soprattutto, è volatile. E’ necessario quindi mantenere
memorizzati dati e programmi in un luogo sicuro e capiente come le memorie di
massa (Hard Disk, Floppy Disk, CD Rom).
Quando accendiamo il computer, il primo programma che viene eseguito è il
BIOS attraverso il quale la macchina gestisce gli elementi hardware
fondamentali. Subito dopo viene caricato il sistema operativo (DOS, Linux,
Windows), un programma che, come vedremo, gestisce le risorse del computer
permettendo all’utente di utilizzare altri programmi (programmi applicativi).
Questi programmi (come Word, Acces, etc.) vengono prelevati dall’hard disk e
messi nella RAM per essere utilizzati dal processore.
Per poter velocizzare gli accessi ai dati in memoria si utilizza un altro elemento,
normalmente posto tra CPU e RAM, detto cache. La cache altro non è che una
memoria molto piccola rispetto alla RAM ma estremamente veloce. In essa
vengono memorizzati i dati che, secondo il sistema operativo, verranno utilizzati
più frequentemente.
Esiste quindi all’interno del computer una vera e propria gerarchia di memoria
come mostrato in figura:
Informatica di Base
15
__________________________________________________________________________________________
Come si vede dalla figura, man mano che ci allontaniamo dal processore la
capacità di memorizzazione aumenta mentre la velocità di accesso ai dati
diminuisce.
Il processore va a leggere il dato che gli serve prima nella cache, se non lo trova
allora lo prende dalla RAM e lo mette nella cache. Accedere ad una memoria
più piccola e veloce è molto più agevole che non accedere ad una più grande e
lenta.
Un altro problema è la limitata quantità di memoria disponibile nella RAM. I
moderni sistemi oprativi permettono di lanciare più programmi
contemporaneamente (multitasking) e questi devono naturalmente andare nella
RAM per poter essere processati dalla CPU. Molto spesso la quantità di
memoria che questi programmi occupano è maggiore della RAM disponibile e
questo potrebbe causare diversi problemi. Per ovviare a questo inconveniente è
stata inventato il concetto di Memoria Virtuale. Con questo termine si intende la
possibilità di avere una memoria virtualmente molto grande. Come elemento di
memorizzazione virtuale viene utilizzato l’hard disk che è molto lento ma anche
molto capiente.
Supponiamo che il processore richieda un dato non presente nella RAM e che
quest’ultima sia tutta occupata da altri programmi. Il sistema operativo allora
cerca nella RAM dei dati che non sono momentaneamente indispensabili e li
memorizza sull’hard disk (in questo modo libera memoria), recupera poi
dall’hard disk il dato richiesto e lo mette nella RAM. La memoria virtuale
permette quindi una condivisione efficiente della memoria da parte di più
programmi oltre a esonerare il programmatore dal preoccuparsi di gestire
direttamente la memorizzazione del programma.
Massimiliano Teso
Maxy Guida
16
__________________________________________________________________________________________
Reti di Computer
Prima che il concetto di rete fosse introdotto nell’informatica, lo scambio di dati
fra due computer presentava diverse difficoltà, soprattutto se questi erano
distanti.
Diverso era il discorso nel caso in cui gli utenti, ad esempio, erano tutti nello
stesso palazzo. Esisteva infatti il così detto centro di calcolo dove risiedeva un
computer grande e potente collegato a diversi terminali. Più utenti , quindi,
condividevano le stesse risorse (processore, hard disk, etc.) e avevano la
possibilità di scambiarsi dati. Questo modello aveva però diversi problemi. In
primo luogo la condivisione delle risorse portava a rallentamenti dovuti al fatto
che, ad esempio, se un utente stava accedendo all’hard disk, un altro utente
doveva attendere. Inoltre, nel caso in cui il centro di calcolo si fosse guastato,
l’intera struttura era inutilizzabile. Quando poi l’azienda voleva aggiornare il
sistema o aggiungere nuovi utenti, avrebbe dovuto cambiare l’intera struttura.
Questi e altri problemi, oltre allo sviluppo dei sistemi di comunicazione,
portarono a un diverso concetto di collegamento tra computer: la rete di
computer.
Invece di un unico, grande computer, si pensò di collegare tra loro computer più
piccoli, economici e indipendenti. Questo permetteva di condividere risorse solo
quando era strettamente necessario. Inoltre un sistema di questo tipo era
estremamente affidabile in quanto, se un computer si fosse guastato, il resto
della rete avrebbe continuato a funzionare. Era poi possibile aggiungere utenti e
aggiornare il sistema mantenendo la stessa architettura della rete.
Analizziamo ora la struttura di una rete partendo dai concetti fondamentali:
In figura è rappresentato un computer che si collega a un altro mediante un
qualsiasi tipo di collegamento (telefonico, fibre ottiche, satellitare, etc.). Il così
detto client è colui che chiede un servizio all’altro computer, detto server. In
questo modello la comunicazione generalmente ha la forma di un messaggio di
richiesta che parte dal client e arriva al server. Il server esegue il compito
richiesto e spedisce al client la risposta. Naturalmente un computer può svolgere
entrambi i ruoli, sia quello di client che quello di server.
Informatica di Base
17
__________________________________________________________________________________________
Lo sviluppo delle reti ha consentito la realizzazione della più grande e
complessa rete di computer al mondo: Internet. Grazie ad essa non solo grandi
aziende ma anche singoli cittadini hanno la possibilità di accedere a servizi e
risorse completamente inimmaginabili fino a qualche anno fa.
Alcuni di quest servizi sono: la posta elettronica, il World Wide Web, le
videoconferenze, le chat, etc…
Vediamo ora di approfondire meglio gli aspetti hardware delle reti.
Esistono due tipi di tecnologie per la trasmissione:
• Reti a diffusione globale (broadcast)
• Reti punto-a-punto (point-to-point)
Le reti broadcast hanno un unico canale di comunicazione che è condiviso da
tutte le macchine della rete. Brevi messaggi, detti pacchetti, inviati da una
qualsiasi macchina vengono ricevuti da tutte le altre. Un campo indirizzo
all’interno del pacchetto indica il computer a cui è diretto. Dopo la ricezione del
pacchetto, un computer controlla il campo indirizzo; se coincide con il suo allora
lo elabora, altrimenti lo ignora.
Al contrario, le reti point to point consistono di molte connessioni fra coppie
individuali di macchine. Per andare dal mittente al destinatario, un pacchetto su
questo tipo di rete potrebbe dover visitare una o più macchine intermedie.
Un altro criterio utilizzato per classificare le reti è legato alla loro scala:
Massimiliano Teso
Maxy Guida
18
__________________________________________________________________________________________
Reti Locali
Le reti locali, generalmente chiamate LAN (Local Area Network), sono reti
private all’interno di un singolo edificio o università, di dimensioni al più di
qualche chilometro. Le LAN spesso usano una tecnologia di trasmissione a un
solo cavo al quale tutte le macchine sono collegate.
Sono possibili differenti tipologie per tali reti:
a) a bus
b) ad anello
La rete a bus più diffusa è quella chiamata Ethernet e permette trasmissioni da
10 a 100 Mbps (Megabit per secondo, indicando con Megabit 1.000.000 di bit).
Reti metropolitane
Una rete metropolitana o MAN (Metropolitan Area Network) è sostanzialmente
una versione ingrandita della LAN e, normalmente, usa tecnologie simili. Può
coprire un gruppo di edifici vicini della medesima azienda oppure gli edifici di
un’intera città.
Reti geografiche
Una rete geografica o WAN (Wide Area Network), copre una grande area
geografica, spesso una nazione o un continente. In una WAN ci sono una serie
di computer chiamati host (ospiti) collegati tra loro in una LAN a sua volta
collegate a sottoreti. Nella maggior parte delle reti geografiche, la sottorete è
costituita da due componenti distinte: le linee di trasmissione e gli elementi di
commutazione.
Le linee di trasmissione (dette anche circuiti o canali) spostano bit fra le varie
macchine, mentre gli elementi di commutazione sono calcolatori specializzati
usati per collegare due o più linee di trasmissione. Quando i dati arrivano su una
linea di ingresso, l’elemento di commutazione, in base all’indirizzo dei singoli
pacchetti, deve scegliere una linea di uscita per farli proseguire. Il termine usato
per definire questi calcolatori è Router.
Informatica di Base
19
__________________________________________________________________________________________
Se due Router che non condividono un cavo desiderano comunicare, devono
farlo in modo indiretto attraverso altri Router intermedi.
In questi computer il pacchetto viene ricevuto interamente, memorizzato fino a
che la linea di uscita richiesta non risulti libera e quindi viene fatto proseguire.
Una sottorete che utilizza questo principio è detta point-to-poit store-andforward (memorizza e fai proseguire) o sottorete packet switched
(commutazione di pacchetto). Quasi tutte le reti geografiche utilizzano sistemi di
questo tipo.
Quando si utilizza una rete point-to-point, un aspetto importante del progetto
riguarda la topologia di interconnessione dei Router. La figura sottostante
mostra diversi tipi di topologia:
a)
b)
c)
d)
e)
f)
Stella
Anello
Albero
Completa
Anelli secanti
Irregolare
Massimiliano Teso
Maxy Guida
20
__________________________________________________________________________________________
Internetwork
Esistono molte reti con hardware e software differenti. Chi si collega a una rete
desidera spesso comunicare con persone collegate ad altre reti. Questo necessita
di collegare insieme reti diverse e spesso incompatibili, qualche volta usando
macchine chiamate gateway per realizzare la connessione e provvedere alle
necessarie traduzioni tra i diversi sistemi. Una collezione di reti collegate viene
detta internet (con la lettera minuscola). La rete Internet (con la lettera
maiuscola) è l’internetwork più grande e complessa del mondo.
Una forma comune di internetwork è una collezione di LAN collegate da una
WAN.
Per poter comunicare tra di loro i computer devono utilizzare delle regole
comuni per evitare ambiguità ed errori. Queste regole vanno sotto il nome di
protocollo grazie al quale si possono spedire e ricevere dati attraverso la rete.
Fondamentalmente un protocollo è un accordo fra i partecipanti a una
comunicazione su come essa deve procedere.
In una rete è molto importante il concetto di indirizzo. Ogni computer in rete è
infatti individuato da un indirizzo univoco. In questo modo un qualsiasi altro
computer potrà contattarlo per lo scambio di dati. Vedremo in maniera più
approfondita quali protocolli vengono utilizzati in Internet e come viene
assegnato l’indirizzo a un computer in rete.
La rete mondiale Internet
All'inizio degli anni '70 il Dipartimento della Difesa americano creò una rete di
collegamento chiamata ARPANET che metteva in connessione centri militari e
centri di ricerca. Essa era strutturata in modo insolito e finalizzata, tra l'altro, a
mantenere i collegamenti anche in caso di attacco atomico. Arpanet funzionava
con un criterio di trasmissione dei dati che si chiama TCP/IP (Trasmission
Control Protocol/Internet Protocol). La novità tecnologica rispetto alla
trasmissione telefonica delle informazioni era che i segnali non erano analogici
ma digitali, e che venivano spezzettati in "pacchetti" di segnali ognuno dei quali
conteneva l'indicazione del mittente e del destinatario, attraverso opportune
sigle.
Successivamente iniziarono a collegarsi a questa rete anche le Università e
grandi aziende. Stava nascendo la rete globale Internet oggi diffusissima anche
tra i singoli cittadini. Internet è quindi sostanzialmente una grande rete di reti
che sta crescendo a dismisura e che offre tanti e tali servizi da divenire quasi
indispensabile per aziende e per alcune categorie di privati cittadini (liberi
professionisti, giornalisti, etc.).
Fin’ora abbiamo parlato di pacchetti invece che di dati ma non abbiamo
specificato di cosa si tratta. Quando fu inventata Internet ci si rese subito conto
che mandare i dati così come erano non era vantaggioso per diversi motivi. In
primo luogo in termini di velocità: ogni nodo intermedio avrebbe dovuto
Informatica di Base
21
__________________________________________________________________________________________
ricevere l’intero file che si voleva trasferire e poi rimandarlo al successivo nodo.
Questo avrebbe generato molti tempi morti. Inoltre se ad un certo punto il file
veniva perso, il mittente avrebbe dovuto rimandarlo nella sua interezza. Ci si
rese conto quindi che il metodo migliore per trasferire i dati era quello di
dividerli in tanti pacchetti autonomi. Una volta arrivati a destinazione sarebbero
stati riuniti per formare il dato originale.
Questo sistema si chiama Packet Switching e permette inoltre la comunicazione
di più host contemporaneamente.
Tra la sorgente e la destinazione ci sono i così detti Router che provvedono a
spedire i pacchetti nella giusta direzione. Il pacchetto, una volta arrivato al
Router, viene inserito in un input buffer, processato e infine messo in un output
buffer. Questo naturalmente crea un ritardo. Se il Router è occupato a processare
altri pacchetti, il pacchetto appena arrivato viene messo in coda. Alcune volte
però la coda è piena e quindi il nuovo pacchetto viene eliminato e perso. Il
mittente dovrà quindi rispedire esclusivamente il pacchetto perso e non l’intero
messaggio o file. Ogni pacchetto, per poter essere spedito dal mittente al
destinatario, deve contenere delle informazioni aggiuntive (oltre al dato
originale). Queste vengono inserite nel così detto Header (intestazione) e
contengono fondamentalmente le informazioni relative all’indirizzo del mittente
e del destinatario e un numero che indica la posizione del pacchetto
relativamente al dato originale. Grazie a questo Header il pacchetto può arrivare
a destinazione ed essere assemblato con gli altri pacchetti ricreando il dato
spedito dal mittente.
I Protocolli di Internet
Internet offre diversi servizi ognuno dei quali utilizza uno specifico protocollo
(ovvero un insieme di regole per la comunicazione). I servizi più utilizzati sono
il World Wide Web e la Posta Elettronica (o Email). Con il primo possiamo
visitare accattivanti pagine informative con testo, immagini e animazioni mentre
con l’Email possiamo comunicare in tempo quasi reale con qualsiasi parte del
mondo a bassissimo costo. Vediamo quindi un po’ meglio i protocolli che sono
alla base di questi importanti servizi.
TCP/IP
E' il protocollo base di rete per le comunicazioni su Internet, colui che organizza
la spedizione dei file, scompattandoli in pacchetti di bit spedibili in rete.
All’inizio e alla fine del pacchetto da mandare vengono messi dei segni di
riconoscimento relativi al mittente e al ricevente. Il pacchetto viene "instradato"
da apparecchi che si chiamano Router e fatto rimbalzare da nodo a nodo fino a
quando non arriva a destinazione.
Massimiliano Teso
Maxy Guida
22
__________________________________________________________________________________________
HTTP
Hyper Text Transfer Protocol è il protocollo che permette all’utente di
visualizzare sullo schermo le informazioni in formato testo e grafico che
risiedono sul Web. Quando si digita un indirizzo con la sigla "http://" prima del
"www" si vuole indicare l’utilizzo del protocollo http.
FTP
File Transfer Protocol consente di trasferire file da un PC ad un altro accedendo
a centinaia di biblioteche di file di ogni tipo: software, giochi, documenti storici,
testi di canzoni, etc.
SMTP
Simple Mail Transfer Protocol è il protocollo che serve per spedire messaggi di
posta elettronica dal computer al mail server.
POP3
Post Office Protocoll-versione 3 è il protocollo utilizzato per scaricare la posta
dal mail server al computer.
Gli Indirizzi in Internet
Abbiamo più volte detto che quando un computer in rete vuole comunicare con
un altro computer, anch’esso collegato, deve specificare il suo indirizzo. Questo
significa che ad ogni computer collegato viene attribuito un indirizzo univoco in
modo che possa essere contattato senza ambiguità. Ogni computer ha quindi
associato quello che si chiama indirizzo IP, identificato da quattro campi di 8 bit
divisi da un punto (ad esempio 124.234.111.65). Se si vuole spedire un
messaggio al computer 124.234.111.65 tutti i pacchetti ad esso destinati
dovranno riportare questo indirizzo. Mentre per i computer è agevole lavorare
con i numeri, noi umani preferiamo qualcosa di più esplicativo e quindi
preferiamo indicare l’indirizzo di un computer attraverso un nome mnemonico
(www.yahoo.com). Esistono quindi in rete dei computer che mediante un
database distribuito (DNS ovvero Domain Name System) traducono gli indirizzi
mnemonici in indirizzi IP.
Collegandoci quindi a www.yahoo.com il DNS lo trasforma nell’indirizzo IP
relativo e quindi i Router (che leggono solo gli indirizzi IP) possono instradare
correttamente i pacchetti a destinazione.
Informatica di Base
23
__________________________________________________________________________________________
CAP II
LINGUAGGI E SISTEMI OPERATIVI
Introduzione
La comunicazione tra due individui è possibile soltanto quando essi parlano la
stessa lingua. Se un italiano e un francese si incontrano essi riescono a
comunicare solo nei casi in cui:
- l’italiano conosce il francese
- il francese conosce l’italiano
- entrambi conoscono una terza lingua, ad esempio l’inglese.
Lo stesso vale nella comunicazione tra uomo e computer. Il computer conosce
solo il così detto “Linguaggio Macchina” costituito da una successione di 0 e 1.
Storicamente i primi computer erano programmabili solo in linguaggio
macchina. Ben presto però si sentì la necessità di avere dei linguaggi più
comprensibili all’utente e quindi maggiormente orientati alla soluzione dei
problemi. Nascono quindi i così detti linguaggi ad alto livello come il Fortran
(1954), il Cobol (1959) e il C (1972). Da allora il numero dei linguaggi evoluti è
notevolmente aumentato fino ad arrivare ai giorni nostri in cui si utilizza molto
la programmazione orientata agli oggetti mediante l’utilizzo di linguaggi come il
C++ e Java.
E’ necessario subito porre in evidenza alcune caratteristiche sostanziali dei
linguaggi di programmazione che li distinguono dai linguaggi comuni. Questi
ultimi sono spesso ambigui e, in molte occasioni, il significato di una frase
dipende dal contesto in cui è inserita.
La frase “Ho visto Maria con un amico” è ambigua in quanto potrebbe assumere
i due significati: “mentre ero con un amico ho visto Maria” oppure “ho visto
Maria che si trovava con un amico” Consideriamo poi le due frasi “il conto è
salato” e “il pollo è salato”. La parola “salato” assume un diverso significato a
seconda del contesto.
Nei linguaggi di programmazione questo non può avvenire: non è infatti
ammessa alcun tipo di ambiguità e ogni parola ha in genera un'unico significato
non dipendente dal contesto. Queste regole servono ad evitare incomprensioni
tra il programmatore e il computer e quindi a generare programmi corretti.
Massimiliano Teso
Maxy Guida
24
__________________________________________________________________________________________
Dal Linguaggio Macchina all’Assembler
Abbiamo già detto che il computer comprende esclusivamente un linguaggio di
due simboli (0 e 1) chiamato linguaggio macchina. Ogni tipo di processore ha un
linguaggio macchina differente ed è quindi necessario conoscerne la struttura
interna per poter programmare direttamente con questo tipo di linguaggio.
Si può capire quanto sia difficile per un programmatore comunicare con il
computer tramite il linguaggio macchina. Fin dagli inizi dell’informatica si è
quindi cercato di creare un linguaggio “più familiare” rispetto all’utente, il
linguaggio Assembler, avente un carattere simbolico anche se ancora molto
vicino alla struttura hardware della macchina.
Il linguaggio Assembler, in quanto simbolico, ha la necessità di essere tradotto
in linguaggio macchina e per questo scopo viene utilizzato un particolare
programma detto Assemblatore. Grazie all’Assembler il programmatore non ha
a che fare con infinite sequenze di 0 e 1 ma con strutture di questo tipo:
MOVW R5, R0
ADD R1, R2
Che verranno poi tradotte dall’Assemblatore nelle relative sequenze binarie.
Linguaggi ad alto livello
Malgrado l’Assembler sia di tipo simbolico esso è ancora molto legato alla
struttura hardware del processore e inoltre necessita di un numero molto grande
di istruzioni per svolgere un compito banale.
Si è quindi cercato di creare linguaggi di programmazione più semplici e veloci
da utilizzare ma soprattutto più vicini al nostro modo di ragionare. I linguaggi di
questo tipo prendono il nome di linguaggi ad alto livello. In essi una singola
istruzione può eseguire compiti anche molto complessi che richiederebbero
molte istruzioni assembler.
I programmi scritti con questi linguaggi devono naturalmente essere tradotti in
linguaggio macchina per poter essere compresi dal computer. Per ogni
processore, la casa costruttrice commissiona la produzione di programmi
software in grado di eseguire questa operazione. Questi programmi, a seconda
del loro modo di funzionare, sono chiamati compilatori o interpreti.
Informatica di Base
25
__________________________________________________________________________________________
Un compilatore ha come dato in ingresso un programma in linguaggio ad alto
livello scritto dall’utente (detto programma sorgente), esegue su di esso le
conversioni necessarie e ottiene come prodotto finale in uscita un programma
scritto in linguaggio macchina (detto programma oggetto).
Se il programma sorgente è corretto dal punto di vista sintattico il compilatore
esegue la traduzione nel programma oggetto che potrà poi essere eseguito Nel
caso in cui ci sia un errore il compilatore lo segnala senza creare il programma
oggetto.
Un interprete invece agisce in maniera differente schematizzabile nei seguenti
passi:
- viene presa in esame la prima riga e su di essa si esegue l’analisi sintattica
per verificare se è ammessa dal linguaggio
- se la risposta alla domanda precedente è positiva, allora la riga viene
tradotta in linguaggio macchina e immediatamente eseguita
- altrimenti si ha l’interruzione del programma e la segnalazione dell’errore
Questo ciclo viene ripetuto per ogni istruzione del programma.
A questo punto ci si potrebbe chiedere se sia meglio compilare o interpretare un
programma.
La compilazione richiede più tempo rispetto all’interpretazione ma una volta
creato il programma oggetto questo è naturalmente più veloce del programma
interpretato. Si preferisce quindi utilizzare un programma interprete in fase di
debbugging in cui si cercano eventuali errori (detti bugs, ovvero “insetti”). In
questo modo si evita di compilare ogni volta l’intero programma. In un secondo
tempo, quando si è sicuri della correttezza del programma, si ricorre alla
compilazione per produrre l’eseguibile definitivo.
I Sistemi Operativi
I primi computer potevano svolgere solamente un programma alla volta. Un
operatore era incaricato di inserire le schede perforate all’interno della macchina
la quale, in base alle istruzioni, eseguiva le operazioni richieste. Questa forma di
elaborazione è detta elaborazione batch monoutente. Questo metodo, oltre a
richiedere operatori umani specializzati, prevedeva dei tempi di elaborazione
molto lunghi e l’inevitabile presenza di tempi morti quando si dovevano inserire
nuove schede. Si sentì quindi la necessità di creare un programma che sostituisse
l’operatore umano. Nacquero i così detti sistemi operativi allo scopo di rendere
più agevole l’uso del computer. I primi sistemi gestivano una serie di compiti in
sequenza cercando di sfruttare al meglio le risorse. In questo modo aumentava il
carico di lavoro che i computer potevano sostenere.
Man mano che aumentava la potenza dei computer si capì che l’elaborazione
batch monoutente non permetteva di sfruttare a pieno le loro potenzialità. Si
pensò quindi che i computer potevano elaborare più programmi
Massimiliano Teso
Maxy Guida
26
__________________________________________________________________________________________
contemporaneamente per permettere a più utenti di utilizzare simultaneamente
lo stesso elaboratore. Negli anni ’60 nacquero quindi i primi sistemi operativi
timesharing ( in inglese “condivisione di tempo”). Grazie a sistemi operativi di
questo tipo diversi utenti possono accedere allo stesso elaboratore e
condividerne le risorse. Il computer in realtà non soddisfa simultaneamente tutte
le richieste degli utenti, ma esegue una piccola parte del compito di un utente,
quindi passa ad eseguire una piccola parte del compito di un altro utente e così
via. Poiché queste azioni vengono svolte molto velocemente, il computer può
tornare sulla richiesta di un singolo utente diverse volte al secondo e si ha quindi
l’impressione che tutti i compiti siano eseguiti simultaneamente. Quindi mentre
nei primi sistemi operativi un utente doveva attendere che il programma
dell’utente precedente fosse concluso prima di poter eseguire il suo, con i
sistemi timesharing si possono eseguire i due programmi contemporaneamente
sfruttando al meglio le potenzialità del computer.
Informatica di Base
27
__________________________________________________________________________________________
CAP III
I SISTEMI DI NUMERAZIONE
Sistema di numerazione decimale
Il sistema di numerazione decimale posizionale (detto anche in base 10), ormai
comunemente usato in tutto il mondo, fu introdotto per la prima volta dagli
Indiani e si diffuse in Europa intorno al 1200, per merito del matematico italiano
Leonardo Fibonacci che l’aveva appreso dagli arabi in uno dei suoi viaggi.
Si basa sull’uso di dieci simboli:
0123456789
i quali, combinati opportunamente, danno luogo a tutti i numeri.
I numeri superiori a 9 vengono rappresentati con più di una cifra, ciascuna delle
quali acquista valore particolare a seconda della posizione in cui si trova.
Ciò che importa è la posizione della cifra e quindi possiamo considerare la
seguente notazione posizionale:
9402210=9*104+4*103+0*102+2*101+2*100
Il pedice 10 sta ad indicare che ci troviamo in base 10.
Con lo stesso significato possiamo introdurre le cifre
0,1= 1/10=10-1
0,01=1/100=10-2
0,001=1/1000=10-3
e quindi il numero
820,031 = 8*102 + 2*101 + 0*100 + 0*10-1 + 3*10-2 + 1*10-3
viceversa avendo il numero in notazione esponenziale è possibile passare alla
notazione decimale eseguendo le operazioni proposte
8*102 + 2*101 + 3*100 + 2*10-1
diventa uguale a
800 + 20 + 3 + 0,2 = 823,2
Massimiliano Teso
Maxy Guida
28
__________________________________________________________________________________________
Sistemi di numerazione diversi dal decimale
Oltre al decimale esistono tantissimi altri sistemi di numerazione posizionali.
I sistemi di cui noi ci occuperemo sono:
binario (in base 2)
2 elementi
[0, 1]
ottale (in base 8)
8 elementi
[0, 2, 3, 4, 5, 6, 7]
esadecimale (in base 16)
16 elementi
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F]
Si potrebbero però concepire sistemi di numerazioni in base 5, 7 o 15.
Conversione da base N a base 10
Dato un numero N=(dndn-1….d2d1d0)N in base N, per convertilo in base 10
occorre effettuare la somma dei singoli termini pesati opportunamente in base
alla loro posizione:
dn *Nn + dn-1*Nn-1 + …+ d2 *N2 + d1*N1 +d0 *N0
Esempio
11012 = 1*23 + 1*22 + 0*21 + 1*20 = 8 + 4 + 0 + 1= 1310
Informatica di Base
29
__________________________________________________________________________________________
Conversione da base 10 a base N
Supponiamo di avere un numero decimale, ad esempio, 109, e di volerlo portare
in notazione N-aria. Quello che si deve fare è dividere 109 per N, scrivere il
risultato e calcolare il resto. A sua volta il resto verrà nuovamente diviso per N e
così via fino a che il dividendo non risulti pari a zero. I resti ottenuti, letti al
contrario, danno il valore nella base N.
Esempio
Volgiamo portare 109 dalla base 10 alla base 5
109 : 5 = 21 con resto 4
21 : 5 = 4 con resto 1
4 : 5 = 0 con resto 4
quindi
10910 = 4145
Sistema di numerazione binario
E’ sicuramente il più semplice tra tutti i sistemi di numerazione con base diversa
da 10. E’ dotato di due soli simboli 0 e 1, comunemente detti bit, ed è per questo
che viene chiamato a base due. Anche in questo caso siamo di fronte a un
sistema posizionale e, quindi, ogni cifra assume un diverso valore a seconda
della sua posizione.
Si ha che:
1102 = 1*22 + 1*21 + 0*20
e la lettura suonerebbe come “1 quartina, 1duina e 0 unità”.
Vediamo quindi come possiamo passare dal sistema binario a quello decimale.
101,1101 = 1*22 + 0*21 + 1*20 + 1*2-1 + 1*2-2 + 0*2-3 + 1*2-4 =
= 4 + 0 + 1 + 0,5 + 0,25 + 0 + 0,065 = 5,8125
Mentre abbiamo visto precedentemente come sia possibile passare dalla
notazione decimale a quella binaria.
Massimiliano Teso
Maxy Guida
30
__________________________________________________________________________________________
Sistema di numerazione ottale
Il sistema di numerazione ottale, ovvero in base otto, si avvale di otto cifre per
rappresentare i valori
01234567
La tecnica di conversione di un numero ottale in un numero decimale è la stessa
mostrata a titolo esemplificativo per il sistema decimale, con la differenza che la
base di numerazione è otto.
Per esempio, per convertire il numero ottale
123458
si procede come segue:
1*84 + 2*83 + 3*82 + 4*81 + 5*80 = 4096 +1024 + 192 + 32 + 5 = 5349
Per passare dal sistema decimale a quello ottale si procede nel modo usuale:
5349 / 8 = 668 con il resto di 5
668 / 8 = 83 con il resto di 4
83 / 8 = 10 con il resto di 3
10 / 8 = 1 con il resto di 2
1 / 8 = 0 con il resto di 1
Ecco che così si riottiene il numero ottale 123458.
Sistema di numerazione esadecimale
La numerazione esadecimale, ovvero in base 16, funziona in modo analogo a
quella ottale, con la differenza che si avvale di 16 cifre per rappresentare i
valori. Si usano le cifre numeriche da zero e nove, più le lettere da «A» a «F»
per i valori successivi. In pratica, la lettera «A» nelle unità corrisponde al
numero 10 e la lettera «F» nelle unità corrisponde al numero 15. La tecnica di
conversione è la stessa già vista per il sistema ottale, tenendo conto della
difficoltà ulteriore introdotta dalle lettere aggiuntive. Per esempio, per convertire
il numero esadecimale
19ADF16,
si procede come segue:
1*164 + 9*163 + 10*162 + 13*161 + 15*160 = 105.183
Per passare dalla base 10 alla base 16 si procede nel medesimo modo illustrato
per il sistema binario e ottale.
Aritmetica binaria
Vediamo ora come si eseguono le operazioni tra i numeri binari.
Fondamentalmente si seguono le stesse regole della notazione decimale riferite
però alla nuova base considerata.
Informatica di Base
31
__________________________________________________________________________________________
Addizione
0+0=0
0+1=1
1+0=1
1+1=0 con riporto di 1
Esempio
1111
1101+
111=
----------10100
Moltiplicazione
0*0=0
1*0=0
0*1=0
1*1=1
Esempio
1101*
11=
-----------1101
1101----------100111
Massimiliano Teso
Maxy Guida
32
__________________________________________________________________________________________
Divisione
Si usa lo stesso algoritmo dei decimali riferito però alla base due
____
1111101 |1011
-----1
11111101 |1011
1011
---------1
100
--
1111101 |1011
1011
---------10
1001
--
1111101 |1011
1011
---------101
10010
1011
--------111
-1111101 |1011
1011
---------1011
10010
1011
--------1111
1011
----------100
Il risultato è quindi 1011 con resto 100
Informatica di Base
33
__________________________________________________________________________________________
Sistemi di numerazione in programmazione
Risulta evidente l’importanza in informatica della rappresentazione binaria. A
che cosa servono allora le rappresentazioni ottale e esadecimale?
Esaminiamo questa tabella:
decimale
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
binario
0
1
10
11
100
101
110
111
1000
1001
1010
1011
1100
1101
1110
1111
ottale
0
1
2
3
4
5
6
7
10
11
12
13
14
15
16
17
esadecimale
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
Si può notare che con tre bit posso rappresentare tutti e soli i numeri che vanno
da 0 a 7 mentre, con 4 bit, tutti e soli i numeri che vanno da 0 a 15.
Quindi 3 e 4 bit rappresentano rispettivamente tutti e soli i simboli dei sistemi
ottale e esadecimale.
Questo facilita molto la conversione da un sistema ottale/esadecimale a quello
binario e viceversa.
Ottale -> Binario
Ogni cifra può essere rappresentata da tre bit quindi la conversione veloce si
svolge in questo modo.
Se, ad esempio, vogliamo convertire il numero 6738
6 diventa 110
7 diventa 111
3 diventa 011
quindi
6738 = 1101110112
Massimiliano Teso
Maxy Guida
34
__________________________________________________________________________________________
Binario-> Ottale
In questo caso si divide il numero binario in blocchi di tre bit che verranno
convertiti singolarmente in base 8.
1101110112
viene diviso in
110 111 011 = 6738
Esadecimale -> Binario
Il metodo è identico a quello per il sistema ottale.
7E16 = 0111 1110 = 011111102
Binario -> Esadecimale
Anche in questo caso il sistema è il medesimo.
1010 1011 0101 = A B 5
Come si vede, il sistema esadecimale è in grado di rappresentare un
raggruppamento di 8 bit (1 byte) con due soli simboli e questa sua sinteticità è
sicuramente di più rapida memorizzazione da parte di un utente. E’ questa
ultima caratteristica che determina il largo impiego quando si vuole, ad esempio,
fare riferimento a un indirizzo di memoria. E’ infatti più agevole scrivere 8
caratteri esadecimali piuttosto che 32 caratteri binari per indicare un indirizzo di
memoria.
Informatica di Base
35
__________________________________________________________________________________________
Esercizi
1. Di quanti simboli è dotato il sistema di numerazione in base 4
2. Quanti numeri con due cifre si possono ottenere con un sistema binario, se
ciascuna di esse non può essere ripetuta?
3. Quanti numeri diversi di 3 cifre si possono ottenere con le cifre binarie?
4. Qual è il massimo numero decimale rappresentabile da un numero binario
costituito di 16 bit?
5. Scrivere i seguenti numeri in base 10 secondo la notazione esponenziale
(6835; 381; 408; 9875,324)
6. Trovare la rappresentazione binaria dei seguenti numeri decimali (34,
159, 512, 255, 254)
7. Eseguire le seguenti somme: (1101 + 1101); (11011 + 101); (1110111 +
111); (101101 + 110 + 11101); (11111 + 11)
8. Eseguire le seguenti moltiplicazioni: (111011 * 11); (10011*10);
(111011*1001)
9. Eseguire le seguenti sottrazioni: (1011 – 101); (10101 – 11); (11011 –
111); (11000 - 101)
10. Eseguire le seguenti divisioni: (1101/10); (100110/101); (11010/111)
11. Convertire in binario i seguenti numeri ottali: (37; 121, 7032; 976)
12. Convertire in binario i seguenti numeri esadecimali: (37; 7032; 976;
5A7B)
13. Convertire in ottale i seguenti numeri binari (101111100; 1001000;
11011110)
14. Convertire in esadecimale i seguenti numeri binari (10111100;
111110101010000; 101101110111)
Massimiliano Teso
Maxy Guida
36
__________________________________________________________________________________________
CAP IV
LOGICA DELLE PROPOSIZIONI
Introduzione
La logica, come scienza autonoma, nasce con la filosofia greca; il primo a
trattare l’argomento fu Aristotele (385-322 a.C.) il quale si propose di indagare
sulla correttezza formale del ragionamento concentrando la sua attenzione sulla
forma del “sillogismo”, ovvero su una forma specifica di deduzione del
ragionamento filosofico. E’ merito però di Gorge Boole (1815-1864) se la logica
ha assunto le caratteristiche di uno strumento di calcolo potente per indagare le
proposizioni elementari e le regole formali della loro composizione. Questa
algebra ha assunto notevole importanza sia nel campo della matematica pura che
in quella della teoria dei calcolatori.
Definiamo proposizioni semplici le espressioni in forma orale o scritta per le
quali si possa dire se sono vere o false (ad esempio “20 è un numero pari”)
Definiamo proposizione composta la combinazione di più proposizioni
semplici.
D’ora in avanti faremo uso di variabili del tipo a, e, r… per indicare una
generica proposizione semplice, con l’ovvia convenzione che due proposizioni
diverse saranno indicate con variabili diverse.
Negazione (NOT)
Data la proposizione “20 è un numero pari” (che è vera) posso creare la sua
negata “20 NON è un numero pari” (che è falsa). La negazione si indica con i
simboli ~ o b. Si ha quindi la seguente “tavola delle verità”
a
V
F
b
F
V
Si ha naturalmente che
~(~a) = a
Congiunzione (AND)
Supponiamo di avere le proposizioni “il sole splende”, “è una bella giornata” e
indichiamo la prima con a e la seconda con e. La proposizione composta
dall’affermazione contemporanea delle due risulta “il sole splende ed è una bella
giornata” e verrà scritta con il simbolo a r (oppure a*r) e si legge <<a “ed” r>> .
La congiunzione ha la seguente “tavola di verità”
Informatica di Base
37
__________________________________________________________________________________________
a
V
V
F
F
r
V
F
V
F
a r
V
F
F
F
La congiunzione gode delle seguenti proprietà:
• associativa, cioè (a e) r a (e r)
• commutativa, cioè a e e a
• idempotenza a a a
Disgiunzione non esclusiva (OR)
Abbiamo le proposizioni a: ”leggo il giornale”, r: “mangio una mela”. La
proposizione composta “leggo il giornale o mangio una mela” viene indicata con
il simbolo a r (oppure a+r) e si legge <<a “o” r>>. Essa esprime il fatto che
possono essere eseguite contemporaneamente due azioni oppure una soltanto.
Questa è la “tavola delle verità”
a
V
V
F
F
r
V
F
V
F
a r
V
V
V
F
La congiunzione gode delle seguenti proprietà:
• associativa, cioè (a e) r a (e r)
• commutativa, cioè a e e a
• idempotenza a a a
Regole di composizione delle proposizioni logiche
I connettivi introdotti, da soli o combinati in vario modo, formano proposizioni
composte a volte anche di notevole complessità.
Per definire la tavola delle verità di una proposizione composta è opportuno
definire uno schema di procedimento utilizzabile nella generalità dei casi e di
facile comprensione.
Massimiliano Teso
Maxy Guida
38
__________________________________________________________________________________________
Esempio 1
Analizziamo la proposizione ~(a r).
Si tratta di costruire una tabella che presenti nella testata tutte le proposizioni
elementari e le operazioni logiche presenti nella proposizione da analizzare. Le
colonne relative alle due proposizioni elementari a ed r saranno completate da
tutte le possibili combinazioni dei valori di verità.
~
F
F
F
V
(2)
a
V
V
F
F
V
V
V
F
(1)
r
V
F
V
F
I numeri ai piedi della tabella indicano l’ordine di esecuzione delle operazioni. Il
numero maggiore, nell’esempio (2), rappresenta la colonna dei valori di verità
della proposizione composta ~(a r).
Esempio 2
Analizziamo la proposizione (e ~a) r
e
V
V
V
F
V
F
F
F
F
F
V
F
V
F
F
F
(2)
~a
F
F
V
F
V
F
V
V
(1)
a
V
V
F
V
F
V
F
F
V
F
V
V
V
F
V
F
(3)
r
V
F
V
V
F
F
V
F
Informatica di Base
39
__________________________________________________________________________________________
Proprietà aggiuntive
Esistono ulteriori proprietà fondamentali che legano la congiunzione alla
disgiunzione non esclusiva:
• Proprietà distributiva della congiunzione e disgiunzione l’una rispetto
all’altra:
o (a e) r (a r) (e r)
o (a e) r (a r) (e r)
• Leggi di De Morgan
o ~(a e) ~a
o ~(a e) ~a
~e
~e
Disgiunzione esclusiva (XOR)
La frase composta “vado in macchina o a piedi” implica una scelta indiscutibile
e alternativa tra due possibilità, poiché non possono verificarsi
contemporaneamente entrambe. La disgiunzione esclusiva si indica con il
simbolo a r e si legge << a “xor” b>>.
La “tavola delle verità” è la seguente:
a
V
V
F
F
Si ha che:
a r ~[(a r)
r
V
F
V
F
a r
F
V
V
F
(~a ~r)]
Massimiliano Teso
Maxy Guida
40
__________________________________________________________________________________________
Esercizi
1. Se a è la proposizione “Anna parla francese” e r la proposizione “Anna
parla inglese”, si traduca la forma simbolica delle seguenti proposizioni
nel linguaggio naturale: a r ; a r; ~a r; ~a ~r; ~(~a ~r)
2. Usando De Morgan, scrivere gli enunciati seguenti: non è vero che
conosce l’inglese o il francese; non è vero che le vendite aumentano e i
prezzi calano; non mango e non bevo
3. Scrivere la tavola delle verità delle seguenti proposizioni: (a r) (~a r);
[a (~a r)] ~a
4. Risolvere le seguenti funzioni (a= Vero, r= Falso, q= Falso, p=Vero):
[a (~a r)] [~a (q p) ~(a r)]
;
~{~[(a ~p) ~(q p)]
[(a ~p) ~(q p)]}
Informatica di Base
41
__________________________________________________________________________________________
CAP V
STRUTTURA DEI DATI
Introduzione
Lo scopo del capitolo è quello di precisare quali sono i tipi di dato computabili e
come essi vengono rappresentati fisicamente a livello della macchina, ben
sapendo che, pur essendoci delle convenzioni comunemente accettate dai
costruttori di hardware, esistono delle varianti nei diversi sistemi.
Prima di entrare nel dettaglio ricordiamo che all’interno del computer le
informazioni sono memorizzate in binario, cioè utilizzando solamente due
simboli: 0 e 1.
L’unità minima di memorizzazione è una sequenza di 8 bit detto byte e la
memoria del computer si misura in multipli di questa quantità.
Variabili di tipo boolean
Questo tipo di dato permette di rappresentare due valori di verità: true (vero) e
false (falso). Nei computer è normalmente convertito automaticamente nei valori
interi 1 e 0.
Dal punto di vista della rappresentazione fisica delle variabili booleane ciascuna
di esse esigerebbe teoricamente un solo bit per memorizzare i due valori. In
pratica, poiché l’unità minima indirizzabile è il byte si avrà che il valore true è
uguale alla combinazione 00000001 mentre false a 00000000.
Tipo degli Interi
Consideriamo l’insieme dei numeri Interi
Z={- , ..., -1, 0, +1,... + }
Vogliamo rappresentare gli elementi di questo insieme in forma binaria.
Avendo a che fare con multipli di byte, non possiamo naturalmente
rappresentare l’intero insieme ma solamente una parte di esso.. Questa
restrizione limita naturalmente l’esecuzione delle operazioni. Se prendiamo ad
esempio la somma, bisogna fare attenzione alla grandezza dei singoli addendi
poiché, qualora i valori siano prossimi ai limiti dell’intervallo, il risultato
potrebbe cadere fuori dall’intervallo rappresentabile (overflow ovvero
straripamento). L’unica operazione non soggetta a rischi di overflow è la
divisione di due interi mentre la più esposta è chiaramente l’elevamento a
potenza.
Massimiliano Teso
Maxy Guida
42
__________________________________________________________________________________________
Una possibile rappresentazione è quella con modulo e segno in cui l’ottavo bit
viene utilizzato per rappresentare il segno del numero mentre gli altri sette bit il
suo modulo. Per un numero rappresentato con 8 bit avremo questo intervallo di
rappresentazione:
-127 N
127
Si noti che lo zero è rappresentato sia da 10000000 che da 00000000.
Questa rappresentazione presenta però problemi quando si devono eseguire le
operazioni aritmetiche elementari. Si vedano questi due esempi:
3+ 00000011+
2= 00000010 =
___ __________
5
00000101
5+ 00000101+
-2= 10000010 =
___ _________
3 10000111 (= -7)
Subentrano quindi dei problemi quando si sommano due numeri negativi o uno
negativo e l’altro positivo.
Per uscire da questa difficoltà si introduce la rappresentazione in complemento a
due. Per rappresentare un numero negativo (ad esempio –2) si prende la
rappresentazione del numero positivo ( 2: 00000010) e si complementa bit a bit,
mettendo cioè al posto di zero l’uno e al posto di uno lo zero (-2: 11111101).
In questo caso lo zero ha un’unica rappresentazione, 00000000, mentre
10000000 rappresenta il numero –128. Quindi nella rappresentazione in
complemento a due si ha il seguente intervallo.
-128 N
127
Proviamo a ripetere la somma proposta precedentemente.
5+ 00000101+
-2= 11111101 =
___ _________
3 00000010
L’ultimo riporto di 1 non viene naturalmente preso in considerazione dovendo il
numero rientrare negli 8 bit previsti.
Informatica di Base
43
__________________________________________________________________________________________
Tipo dei Reali
Consideriamo l’insieme dei numeri reali R. Come per gli interi non possiamo
rappresentarli tutti ma solo un sottoinsieme finito. Oltre a un limite inferiore e
superiore, inoltre, abbiamo il problema dell’arrotondamento.
Ogni elemento di R, in generale, può essere espresso come somma di un intero
con un numero frazionario.In pratica, un numero reale è individuato
univocamente da:
• una parte intera I
• una parte frazionaria F
Rappresentazione dei reali in virgola fissa:
In questa rappresentazione un numero prefissato di cifre viene dedicato alla
parte intera ed a quella frazionaria (rappresentazione in virgola fissa).
<+,-> <rappresentazione I> . <rappresentazione F>
ad esempio:
331,697510= 00101001011,10110
(riservando 11 bit per la parte intera e 5 per quella frazionaria).
Rappresentazione dei numeri reali in virgola mobile:
In questa rappresentazione ad un numero reale r vengono associati due numeri:
• m = mantissa
• n = esponente (o caratteristica)
La mantissa è un numero frazionario con segno. Il suo valore è quindi compreso
nell’intervallo ]-1, +1[ ,mentre l’esponente è un intero con segno.
la mantissa e l’esponente sono legati dalla relazione:
r = m * bn
dove b e' un numero intero che indica una base utilizzata per la notazione
esponenziale (normalmente b= 10 oppure b= 2 in binario)
Per portare un numero reale in base dieci nella notazione in virgola mobile in
base due si passa attraverso due passi:
• il numero viene prima convertito in base due
(123,45)10= (1111011.01110011)2
• Il punto decimale viene spostato in modo che tutti i bit si trovino alla sua
destra (0.111101101110011*27)
Per ogni numero reale vengono quindi utilizzati n bit:
Massimiliano Teso
Maxy Guida
44
__________________________________________________________________________________________
mantissa (cifre a
destra della virgola)
segno esponente
n n-1 n-2
segno
numero
1
l
valore assoluto esponente
In una rappresentazione a 32/64 bit si ha:
• 1 bit per il segno della mantissa;
• 1 bit per il segno dell'esponente;
• 7/10 bit per il valore assoluto dell'esponente;
• 23/52 bit per la mantissa.
Spesso invece di utilizzare il bit di segno l’esponente è rappresentato in
complemento a due.
L’esponente per una rappresentazione a 32 bit potrà quindi andare da –128 a
127. La mantissa di 23 bit consente di rappresentare 23 cifre binarie che
corrispondono a un numero decimale con un massimo di sette cifre (223-1=
8.388.607).
Quindi l’intervallo numerico rappresentabile è:
-0.8388608* 2-128 N +0,8388607*2127
Poiché 2127 è approssimabile con il valore 1,7*1038 e la mantissa assume valori
nell’intervallo ] –1, +1 [ possiamo approssimativamente dire che un numero
reale rappresentato con 32 bit varia nell’intervallo
-1,7*10-38 N
1,7*1038
Abbiamo detto che si presentano degli errori dovuti all’arrotondamento. Si può,
in generale, osservare che:
• Quanto maggiore è il numero di bit riservati alla mantissa tanto maggiore è il
numero di cifre significative che possono essere memorizzate (precisione=
data dal numero di cifre in base 10 rappresentabili con la mantissa). Le cifre
meno significative della mantissa che non possono essere rappresentate nel
numero di bit a disposizione vengono eliminate mediante troncamento od
arrotondamento.
• Quanto maggiore è il numero di bit riservati all’esponente tanto maggiore è
l’ordine di grandezza della cifra che può essere rappresentata.
Informatica di Base
45
__________________________________________________________________________________________
Tipo dei Caratteri
Esistono molti problemi in cui è necessario confrontare o eseguire operazioni su
variabili non numeriche ma costituite da sequenze di caratteri, alfabetici e non.
Per poter costruire programmi che operano su caratteri è necessario definire un
nuovo tipo di dati che chiameremo “char” (abbreviazione della parola carattere
in inglese).
Il tipo char è costituito da un insieme di elementi quali i caratteri alfabetici, le
cifre numeriche, simboli speciali e di punteggiatura, di ciascuno dei quali dovrà
essere data una codifica univoca per rappresentarlo simbolicamente sulla
macchina.
Il sistema di codifica più usato e' il codice ASCII (American Standard Code for
Information Interchange). Esso utilizza 8 bit per rappresentare 256 caratteri.
Tabella del codice ASCII
dec hex char binario
dec hex char binario
1
0
00
00000000
129 128 80
10000000
2
1
01
00000001
130 129 81
10000001
3
2
02
00000010
131 130 82 ‚
10000010
4
3
03
00000011
132 131 83 ƒ
10000011
5
4
04
00000100
133 132 84 „
10000100
6
5
05
00000101
134 133 85 …
10000101
7
6
06
00000110
135 134 86 †
10000110
8
7
07
00000111
136 135 87 ‡
10000111
9
8
08
00001000
137 136 88 ˆ
10001000
10 9
09
00001001
138 137 89 ‰
10001001
11 10 0A
00001010
139 138 8A &
10001010
12 11 0B
00001011
140 139 8B ‹
10001011
13 12 0C
00001100
141 140 8C Œ
10001100
14 13 0D
00001101
142 141 8D
10001101
15 14 0E
00001110
143 142 8E Ä
10001110
16 15 0F
00001111
144 143 8F ˜
10001111
17 16 10
00010000
145 144 90
10010000
18 17 11
00010001
146 145 91 ‘
10010001
19 18 12
00010010
147 146 92 ’
10010010
20 19 13
00010011
148 147 93 “
10010011
21 20 14
00010100
149 148 94 ”
10010100
22 21 15
00010101
150 149 95 •
10010101
23 22 16
00010110
151 150 96 –
10010110
Massimiliano Teso
Maxy Guida
46
__________________________________________________________________________________________
24 23 17
00010111
152 151 97 —
10010111
25 24 18
00011000
153 152 98 ˜
10011000
26 25 19
00011001
154 153 99 ™
10011001
27 26 1A
00011010
155 154 9A š
10011010
28 27 1B
00011011
156 155 9B ›
10011011
29 28 1C
00011100
157 156 9C œ
10011100
30 29 1D
00011101
158 157 9D
10011101
31 30 1E
00011110
159 158 9E h
10011110
32 31 1F
00011111
160 159 9F Ÿ
10011111
00100000
161 160 A0
10100000
34 33 21 !
00100001
162 161 A1 ¡
10100001
35 34 22 "
00100010
163 162 A2 ¢
10100010
36 35 23 #
00100011
164 163 A3 £
10100011
37 36 24 $
00100100
165 164 A4 ¤
10100100
38 37 25 %
00100101
166 165 A5 ¥
10100101
39 38 26 &
00100110
167 166 A6 ¦
10100110
40 39 27 '
00100111
168 167 A7 §
10100111
41 40 28 (
00101000
169 168 A8 ¨
10101000
42 41 29 )
00101001
170 169 A9 ©
10101001
43 42 2A *
00101010
171 170 AA ª
10101010
44 43 2B +
00101011
172 171 AB «
10101011
45 44 2C ,
00101100
173 172 AC ¬
10101100
46 45 2D -
00101101
174 173 AD
10101101
47 46 2E .
00101110
175 174 AE ®
10101110
48 47 2F /
00101111
176 175 AF w
10101111
49 48 30 0
00110000
177 176 B0 °
10110000
50 49 31 1
00110001
178 177 B1 ±
10110001
51 50 32 2
00110010
179 178 B2 ²
10110010
52 51 33 3
00110011
180 179 B3 ³
10110011
53 52 34 4
00110100
181 180 B4 ´
10110100
54 53 35 5
00110101
182 181 B5 }
10110101
55 54 36 6
00110110
183 182 B6 ¶
10110110
56 55 37 7
00110111
184 183 B7 ·
10110111
57 56 38 8
00111000
185 184 B8 ¸
10111000
58 57 39 9
00111001
186 185 B9 ¹
10111001
59 58 3A :
00111010
187 186 BA º
10111010
60 59 3B ;
00111011
188 187 BB »
10111011
61 60 3C <
00111100
189 188 BC ¼
10111100
33 32 20
SPAZIO
Informatica di Base
47
__________________________________________________________________________________________
62 61 3D =
00111101
190 189 BD ½
10111101
63 62 3E >
00111110
191 190 BE ¾
10111110
64 63 3F ?
00111111
192 191 BF ¿
10111111
65 64 40 @
01000000
193 192 C0 À
11000000
66 65 41 A
01000001
194 193 C1 Á
11000001
67 66 42 B
01000010
195 194 C2 Â
11000010
68 67 43 C
01000011
196 195 C3 Ã
11000011
69 68 44 D
01000100
197 196 C4 Ä
11000100
70 69 45 E
01000101
198 197 C5 Å
11000101
71 70 46 F
01000110
199 198 C6 Æ
11000110
72 71 47 G
01000111
200 199 C7 Ç
11000111
73 72 48 H
01001000
201 200 C8 È
11001000
74 73 49 I
01001001
202 201 C9 È
11001001
75 74 4A J
01001010
203 202 CA Ê
11001010
76 75 4B K
01001011
204 203 CB Ë
11001011
77 76 4C L
01001100
205 204 CC Ì
11001100
78 77 4D M
01001101
206 205 CD Í
11001101
79 78 4E N
01001110
207 206 CE Î
11001110
80 79 4F O
01001111
208 207 CF Ï
11001111
81 80 50 P
01010000
209 208 D0 Ð
11010000
82 81 51 Q
01010001
210 209 D1 Ñ
11010001
83 82 52 R
01010010
211 210 D2 Ò
11010010
84 83 53 S
01010011
212 211 D3 Ó
11010011
85 84 54 T
01010100
213 212 D4 Ô
11010100
86 85 55 U
01010101
214 213 D5 Õ
11010101
87 86 56 V
01010110
215 214 D6 Ö
11010110
88 87 57 W
01010111
216 215 D7 ×
11010111
89 88 58 X
01011000
217 216 D8 Ø
11011000
90 89 59 Y
01011001
218 217 D9 Ù
11011001
91 90 5A Z
01011010
219 218 DA Ú
11011010
92 91 5B [
01011011
220 219 DB Û
11011011
93 92 5C \
01011100
221 220 DC Ü
11011100
94 93 5D ]
01011101
222 221 DD Ý
11011101
95 94 5E ^
01011110
223 222 DE Þ
11011110
96 95 5F _
01011111
224 223 DF ß
11011111
97 96 60 `
01100000
225 224 E0 à
11100000
98 97 61 a
01100001
226 225 E1 á
11100001
99 98 62 b
01100010
227 226 E2 â
11100010
Massimiliano Teso
Maxy Guida
48
__________________________________________________________________________________________
100 99 63 c
01100011
228 227 E3 ã
11100011
101 100 64 d
01100100
229 228 E4 ä
11100100
102 101 65 e
01100101
230 229 E5 å
11100101
103 102 66 f
01100110
231 230 E6 æ
11100110
104 103 67 g
01100111
232 231 E7 ç
11100111
105 104 68 h
01101000
233 232 E8 è
11101000
106 105 69 i
01101001
234 233 E9 è
11101001
107 106 6A j
01101010
235 234 EA ê
11101010
108 107 6B k
01101011
236 235 EB ë
11101011
109 108 6C l
01101100
237 236 EC ì
11101100
110 109 6D m
01101101
238 237 ED í
11101101
111 110 6E n
01101110
239 238 EE î
11101110
112 111 6F o
01101111
240 239 EF ï
11101111
113 112 70 p
01110000
241 240 F0 ð
11110000
114 113 71 q
01110001
242 241 F1 ñ
11110001
115 114 72 r
01110010
243 242 F2 ò
11110010
116 115 73 s
01110011
244 243 F3 ó
11110011
117 116 74 t
01110100
245 244 F4 ô
11110100
118 117 75 u
01110101
246 245 F5 õ
11110101
119 118 76 v
01110110
247 246 F6 ö
11110110
120 119 77 w
01110111
248 247 F7 ÷
11110111
121 120 78 x
01111000
249 248 F8 ø
11111000
122 121 79 y
01111001
250 249 F9 ù
11111001
123 122 7A z
01111010
251 250 FA ú
11111010
124 123 7B {
01111011
252 251 FB û
11111011
125 124 7C |
01111100
253 252 FC ü
11111100
126 125 7D }
01111101
254 253 FD ý
11111101
127 126 7E ~
01111110
255 254 FE þ
11111110
128 127 7F
01111111
256 255 FF ÿ
11111111
Informatica di Base
49
__________________________________________________________________________________________
CAP VI
L’ARTE DELLA PROGRAMMAZIONE
Il concetto di algoritmo
Spesso sentiamo dire che i computer si “programmano” ma non abbiamo
un’idea precisa di cosa voglia dire.
I computer si chiamano anche elaboratori elettronici e sono strumenti utili per
risolvere una vasta gamma di problemi in maniera rapida e corretta. Questo
deriva dal fatto che sono macchine programmabili, cioè accettano istruzioni e
comandi secondo modalità ben precise. Un computer infatti svolge le azioni
indicate in un programma il quale è scritto in un linguaggio che occupa una
posizione intermedia tra quello naturale (l’inglese) e quello binario (composto
da cifre 0 e 1).
Ciò che il programmatore deve fare quindi è analizzare un problema, dividerlo
in istruzioni semplici e tradurre queste istruzioni secondo determinate regole in
modo che il computer possa interpretarle.
Vediamo un esempio
Problema: Determinare l’area del cerchio circoscritto ad un quadrato avente il
lato di misura L.
La prima cosa da fare è individuare le grandezze che ci interessano anche se non
esplicitamente riportate nel testo del problema e determinare il procedimento
attraverso il quale si giunge alla soluzione:
AC = L *
R = AC/2
Area = 3,14 * R2
Avendo indixcato con AC la diagonale del quadrato inscritto al cerchio.
Il metodo utilizzato può essere schematizzato nei seguanti passi:
1) Individuazione dei dati e dei risultati
2) Ricerca del procedimento
3) Scomposizione del procedimento con l’indicazione delle operazioni
necessarie per il calcolo di eventuali risultati intermedi
Massimiliano Teso
Maxy Guida
50
__________________________________________________________________________________________
Prima di programmare dobbiamo quindi definire il progetto dell’algoritmo che,
in linea di massima, rispetta i seguenti punti:
Passo 1) Definire eventuali dati iniziali
Passo 2) Richiedere eventuali dati che l’utente deve immettere (input)
Passo 3) Effettuare eventuali controlli sui dati immessi dall’utente
Passo 4) Svolgere le operazioni necessarie per la risoluzione del problema
utilizzando i dati a disposizione
Passo 5) Scrivere l’output
Questa fase non deve rispettare particolari regole formali
ma l’importante è che sia chiara ed esaustiva. Vediamo ad esempio il progetto
dell’algoritmo del problema che abbiamo visto precedentemente:
1)
2)
3)
4)
5)
Chiedi all’utente di inserire il lato del quadrato
Calcola la diagonale del quadrato (AC = L *
)
Calcola il raggio del cerchio circoscritto al quadrato (R = AC/2)
Calcola l’area del cerchio (Area = 3,14 * R2)
Stampa l’area del Cerchio
Con l’elencazione dei passi da svolgere per risolvere il problema, abbiamo dato
origine a un algoritmo, termine che deriva dal matematico arabo Al Khwarismi.
Eccone la definizione:
a) E’ una successione finita di azioni, o passi, che determinano la risoluzione
di un problema. Si intuisce che, dati due algoritmi che risolvono lo stesso
problema, viene preferito quello col minor numero di passi.
b) Le azioni specificate devono essere univocamente interpretabili ovvero
devono essere comprensibili senza ambiguità da colui che le esegue
(solitamente un computer)
c) Se la successione di azioni viene ripetuta in momenti diversi ma con gli
stessi dati iniziali, allora deve essere restituito sempre lo stesso risultato;
si dice che l’algoritmo deve essere non casuale.
d) In ogni istante, l’azione successiva da interpretare deve essere
univocamente determinabile a partire dall’analisi del valore di particolari
dati.
Informatica di Base
51
__________________________________________________________________________________________
Struttura dei Flow-Chart
Il secondo passo da fare è disegnare il così detto diagramma di flusso o flowchart. Il diagramma di flusso del problema precedente è questo:
Ogni diagramma contiene un blocco iniziale e uno finale, almeno un blocco
intermedio che indica un’azione da svolgere e può contenere uno o più blocchi
di controllo o schemi condizionali. Tutti i blocchi sono collegati da linee nelle
quali è contrassegnata, mediante una freccia, la direzione di percorrenza del
flusso. I simboli sono rispettivamente:
Per ogni blocco che indica un’azione si ha una sola linea di ingresso e di uscita;
per ogni blocco di esame condizione si ha una sola linea di ingresso e due linee
di uscita.
Per indicare le operazioni di input useremo il simbolo di azione nel quale verrà
indicato l’elenco dei dati da immettere seguiti dal punto interrogativo, dalla
parola “immissione” o dalla parola “input”.
Massimiliano Teso
Maxy Guida
52
__________________________________________________________________________________________
Per indicare le operazioni di output useremo sempre lo stesso simbolo di azione
con l’indicazione delle variabili precedute dalla parola “stampa”, “mostra” o
“output”.
In altri testi sono usati simboli diversi per le azioni di input e output ma qui
abbiamo preferito utilizzare sempre il simbolo di azione per non sovraccaricare
il diagramma di flusso con simboli non strettamente necessari.
Rappresentazione con Pseudo-Codice
L’ultimo passo prima della programmazione vera e propria è la traduzione
dell’algoritmo in pseudo-codice, un codice che assomiglia più ad un linguaggio
di programmazione che a quello umano (si avvicina molto al PASCAL). Ciò che
si ottiene è una descrizione discorsiva soggetta però a regole ben precise (in
gergo informatico si dice che sono soggette ad una precisa sintassi).
Se la progettazione dell’algoritmo e il diagramma di flusso sono abbastanza
esplicativi e ben fatti, questa fase si può anche saltare passando direttamente alla
programmazione su computer.
Lo pseudo-codice del problema precedente è questo:
program Area
begin
{
Input L
AC:= L*
R:=AC/2
Area:=3,14*R2
Output Area
}
end
Analizziamone la struttura
• Viene dato un nome al programma
• Si definisce la struttura begin..end
• Si scrive il corpo principale del programma con le operazioni di input e
output.
Vediamo ora le principali istruzioni di programmazione.
Informatica di Base
53
__________________________________________________________________________________________
Istruzione IF-ELSE
Il comando IF-ELSE permette la selezione tra due possibili alternative in base
al valore di verità di una espressione iniziale.
IF (condizione)
{istruzioni_1}
ELSE
{istruzione_2}
Le istruzioni_1 vengono eseguite se la condizione è vera altrimenti
vengono eseguite le istruzioni_2. Nel caso in cui ci sia una sola istruzione
le parentesi graffe possono essere omesse.
Vediamo meglio come funziona analizzando un esempio.
Problema: Dati due numeri A e B appartenenti all’insieme dei numeri naturali,
eseguire la differenza in N.
Il diagramma di flusso del problema è il seguente
Massimiliano Teso
Maxy Guida
54
__________________________________________________________________________________________
Che tradotto in pseudo-codice diventa:
program Differenza
begin
{
Input A, B
IF (A>B)
DIF:= A–B
ELSE
DIF:= B–A
Output DIFF
}
end
Istruzione SWITCH
Quando si devono eseguire tanti IF uno dopo l’altro, è preferibile usare
l’istruzione SWITCH:
SWITCH (espressione)
{
Valore 1:
istruzioni_1
Valore 2:
istruzioni_2
…..
Valore n:
istruzioni_n
}
In questo caso viene valutato il valore dell’espressione e confrontato con i
Valori elencati. Verranno svolte esclusivamente le istruzioni il cui
Valore coincide con il risultato dell’espressione.
Problema: Il prezzo di un abbonamento tranviario mensile è di 30.000 lire. Su
tale prezzo vengono fatte le seguenti riduzioni:
• il 50% per i bambini sotto i 10 anni;
• il 40% per gli studenti;
• l’80% per i militari;
• il 30% per i pensionati
Determinare le diverse tariffe di abbonamento ogni volta che l’utente lo
richiede
Informatica di Base
55
__________________________________________________________________________________________
Il diagramma di flusso del problema è il seguente
Che tradotto in pseudo-codice diventa:
program Sconti
begin
{
PREZZO= 30.000
SBAM= 0.5 //sconto bambini
SSTU=0.4
//sconto studenti
SMIL= 0.8 //sconto militari
SPEN= 0.3 //sconto pensionati
SORD= 0
//nessuno sconto
Input UTENTE;
SWITCH (UTENTE)
{
“BAMBINO”
: SCONTO:=SBAM
“STUDENTE” : SCONTO:=SSTU
“MILITARE” : SCONTO:=SMIL
“PENSIONATO”: SCONTO:=SPEN
“NORMALE”
: SCONTO:=SORD
}
Massimiliano Teso
Maxy Guida
56
__________________________________________________________________________________________
}
end
TARIFFA:= PREZZO–PREZZO*SCONTO
Output TARIFFA
Istruzione WHILE
E’ una struttura iterativa che esegue un determinato numero di istruzioni fino a
quando la condizione valutata ad ogni ciclo non diventa falsa. In questo caso il
programma esce dal ciclo while.
WHILE (condizione)
{istruzioni}
Le istruzioni vengono eseguite in maniera iterativa fino a che la
condizione rimane vera. Quando la condizione diventa falsa il
programma esce dal ciclo WHILE. Nel caso in cui ci sia una sola istruzione le
parentesi graffe possono essere omesse.
Problema: Dato il numero intero N determinare se è primo
Il diagramma di flusso del problema è il seguente
Informatica di Base
57
__________________________________________________________________________________________
Che tradotto in pseudo-codice diventa:
program Numero Primo
begin
{
Input N
PRIMO:= TRUE
DIV:= N-1
WHILE (DIV
1)
{
Q:= N/DIV
IF (Q= INT(Q))
{
PRIMO:= FALSE
DIV:= DIV-1
}
IF (PRIMO)
Output (“N è primo”)
ELSE
Output (“N non è primo”)
}
}
end
Istruzione DO-WHILE
L’istruzione viene eseguita in maniera iterativa fino a che la condizione rimane
vera. Quando la condizione diventa falsa il programma esce dal ciclo.
DO
{
Istruzioni
}WHILE(condizione)
La struttura DO-WHILE esegue almeno una volta il gruppo delle istruzioni al
suo interno anche se la condizione è falsa, mentre nella struttura WHILE se la
condizione iniziale è falsa non viene eseguita alcuna istruzione al suo interno.
Massimiliano Teso
Maxy Guida
58
__________________________________________________________________________________________
Problema: Determinare il massimo comun divisore (MCD) tra due
numeri A e B
Il diagramma di flusso del problema è il seguente
Che tradotto in pseudo-codice diventa:
program Massimo Comun Divisore
begin
{
Input A, B
IF (A<B)
{
C:= A
A:= B
B:= C
}
DO
{
Q:= INT(A/B)
R:= A-B*Q
A:= B
B:= R
}WHILE(R= 0)
Informatica di Base
59
__________________________________________________________________________________________
}
end
MCD:= A
Output MCD;
Istruzione FOR
L’istruzione esegue un blocco di istruzioni per un determinato numero di volte.
FOR (valore iniziale) TO (valore finale)
{Istruzioni}
Il blocco di istruzioni viene ripetuto un numero di volte pari all’intervallo
tra il valore iniziale e il valore finale.
Problema: Determinare la somma degli interi compresi tra N1 e N2
Il diagramma di flusso del problema è il seguente
Massimiliano Teso
Maxy Guida
60
__________________________________________________________________________________________
Che tradotto in pseudo-codice diventa:
program Somma;
begin
{
Input N1, N2
FOR (I:= N1) TO (N2) DO
{
SOMMA:= SOMMA+1
}
Output SOMMA
}
end
Istruzioni BREAK e CONTINUE
Queste due istruzioni si utilizzano in presenza di cicli.
Quando il programma incontra l’istruzione BREAK esce immediatamente dal
ciclo corrente senza eseguire il resto delle istruzioni. Quando invece incontra
CONTINUE salta al ciclo successivo.
Sottoprogrammi e Procedure
Abbiamo visto come sia possibile scomporre un problema e come creare i
relativi flow-chart e pseudo-codice. I problemi complessi però richiedono di
norma l’uso di una tecnica specifica per realizzare una scomposizione modulare
del programma in sottoproblemi. Ciascun sottoproblema costituisce ora un
programma di più facile soluzione che verrà quindi affrontato secondo gli
schemi visti precedentemente. Per eseguire la scomposizione modulare è
necessario:
• individuare sottoprogrammi il più possibile autonomi e indipendenti tra loro;
• definire dei caratteri per collegare tra loro i singoli moduli in un insieme
organizzato, o programma principale, che indichi l’ordine di esecuzione dei
vari sottoprogrammi
Problema: Per i numeri da 1 a 100, stampare una tavola che contenga in ogni
riga il numero, il quadrato, il cubo e la radice dello stesso. Dare una veste
grafica soddisfacente alle singole pagine stampate.
Scomponiamo il problema:
• se sei all’inizio della pagina allora stampa la testata del foglio;
Informatica di Base
61
__________________________________________________________________________________________
• calcola il valore dei dati richiesti (quadrato, cubo e radice);
• stampa la riga di dettaglio;
• se hai scritto 20 righe allora volta pagina;
Queste istruzioni devono essere ripetute cento volte.
Le quattro righe in cui è stato scomposto il problema possono essere pensate
come piccoli sottoproblemi ciascuno dei quali deve essere ripetuto più volte.
Nello pseudo-codice ciascuno di questi sottoproblemi prende il nome di
funzione; per distinguere le une dalle altre a ciascuna deve essere assegnato un
nome convenzionale e ciascuna deve essere sviluppata indipendentemente dalle
restanti.
Anche per le singole funzioni si può disegnare il diagramma di flusso con
l’unica accortezza di inserire il nome della funzione stessa nel blocco inizio del
diagramma. Saltiamo questa fase e presentiamo esclusivamente lo pseudocodice delle funzioni:
FUNZIONE Stampa Testata
begin
{
Output (“
TAVOLA NUMERICA
”)
Output (“________________________”)
Output (“| N | QUA | CUBO | RAD |”)
Output (“________________________”)
INIZIO:= FALSE
}
end
FUNZIONE Calcolo
begin
{
Q:= N*N
C:= Q*N
R:= SQR(N)
}
end
FUNZIONE Stampa Dettaglio;
begin
{
Output (“|”,N,“|”,Q,“|”,C,“|”,R,“|”);
}
end
Massimiliano Teso
Maxy Guida
62
__________________________________________________________________________________________
FUNZIONE Volta Pagina
begin
{
NewPage
INIZIO:= TRUE
RIGA:= 0
}
end
Abbiamo visto che le procedure vanno poi richiamate da un programma
principale il cui diagramma di flusso è il seguente
Informatica di Base
63
__________________________________________________________________________________________
Che tradotto in pseduo-codice diventa:
program Tabella
begin
{
TOT= 100
RIGA:= 0
INIZIO:= TRUE
FOR N:= 1 TO TOT DO
{
IF (INIZIO)
{
Stampa Testata
}
Calcolo
Stampa Dettaglio
RIGA:= RIGA + 1
IF (RIGA= 20)
{
Volta Pagina
INIZIO = TRUE
}
}
end
}
Nel blocco variabili del programma principale sono inseriti tutti gli identificatori
necessari per l’esecuzione, non solo del programma, ma anche di tutte le
procedure che vanno scritte prima del programma principale. Tutte le variabili
definite quindi sono comuni al programma e ai sottoprogrammi che ne fanno
uso. Variabili di questo tipo si chiamano globali.
Variabili definite all’interno di una singola procedura non sono utilizzabili dal
programma principale né tantomeno da altre procedure. Variabili di questo tipo
si chiamano locali.
Massimiliano Teso
Maxy Guida
64
__________________________________________________________________________________________
Esercizi
1. Data una misura di tempo espresso in H (ore), M (minuti), S (secondi),
determinare la misura equivalente in secondi.
2. Costruire un convertitore lire/euro e viceversa secondo una scelta iniziale
dell’utente.
3. Dati tre numeri A, B, C, trovarne il minimo e il massimo.
4. Dati due numeri naturali A e B, verificare se uno è multiplo dell’altro.
5. Suddividendo gli individui in 4 classi di età: 0-12 bambini, 13-18
adolescenti, 19-60 adulti, da 61 in poi anziani, costruire un programma
che dopo aver immesso l’età di un individuo risponda indicando la classe
di età di appartenenza, rispettivamente bambino, adolescente, adulto,
anziano. Inserire inoltre un menù di scelta con cui l’utente può decidere o
meno di interrompere il programma oppure continuare con l’inserimento
di un nuovo dato.
6. Esegui il prodotto di due numeri interi positivi utilizzando al meglio
esclusivamente l’addizione.
7. Scrivere un programma in cui l’utente inserisce un numero N
rappresentate il numero di valori che vuole inserire in input.
Successivamente inserisce gli N valori e come uscita deve ottenere la
media dei valori immessi.
8. Scrivere un programma che consenta il seguente gioco interattivo: il
computer genera un numero casuale da 1 a 100, senza mostrarlo,
utilizzando la funzione Number(100). Il giocatore deve indovinare per
tentativi il numero immettendo le prove da tastiera (per un massimo di 20
tentativi); ad ogni tentativo la macchina risponderà a seconda dei casi: “è
troppo grande”, “è troppo piccolo”, “hai esaurito i tentativi, gioco
concluso”, “hai indovinato”. In questo ultimo caso dovrà scrivere anche
quanti sono stati i tentativi necessari e se è stato migliorato il risultato
della sessione di gioco, producendo il messaggio “questa è la migliore
prestazione ottenuta in ... tentativi, la precedente era di ... tentativi”.
Risolvere il problema con l’uso dei sottoprogrammi.
Informatica di Base
65
__________________________________________________________________________________________
CAP VII
LE BASI DI DATI
Introduzione
Un sistema informativo è sistema che permette la disponibilità e la gestione
delle informazione. L’esistenza di un sistema informativo è indipendente dalla
sua automazione; lo dimostra il fatto archivi e servizi anagrafici esistono da vari
secoli. Per indicarne la porzione automatizzata viene utilizzato il termine
sistema informatico. La diffusione dell’informatica ha fatto si che la quasi
totalità dei sistemi informativi siano anche sistemi informatici.
Le informazioni vengono rappresentate e scambiate in varie forme, quali la
lingua, i disegni, le figure e i numeri. In alcuni casi può anche non esistere una
rappresentazione esplicita delle informazioni, come nel caso di informazioni
trasmesse oralmente e ricordate a memoria. Col progredire delle attività umane,
tuttavia, è nata l’esigenza di individuare opportune codifiche per la
memorizzazione dei dati.
Nei sistemi informatici il concetto di rappresentazione e codifica viene portato
all’estremo: le informazioni vengono rappresentate per mezzo di dati, che hanno
bisogno di essere interpretati per fornire informazioni.
Basi di dati, la definizione
La più generale definizione di una base di dati è: “collezione di dati utilizzati
per rappresentare le informazioni di interesse per un sistema informativo”.
Tale definizione è molto semplicistica e troppo generale. Più avanti si cercherà
di definire il termine in maniera più precisa.
Occorre tuttavia trarre una prima considerazione sulle basi di dati. Se prendiamo
come esempio i dati relativi alle applicazioni bancarie noteremo che essi hanno
una struttura sostanzialmente invariata da decenni, mentre le procedure che
agiscono su di essi variano con una certa frequenza. Inoltre, quando viene
introdotta una nuova procedura, occorre prima di tutto “ereditare” (cioè
importare) i dati da quella vecchia, se pur con le necessarie trasformazioni.
Questa caratteristica di stabilità porta ad affermare che i dati costituiscono una
“risorsa” per l’organizzazione che li gestisce, un patrimonio significativo da
sfruttare e proteggere.
L’approccio “convenzionale” alla gestione dei dati sfrutta la presenza di archivi
(o file) per memorizzare i dati in modo persistente sulla memoria di massa. Tale
approccio presenta delle macroscopiche deficienze per quanto riguarda la ricerca
e la condivisione dei dati. Con una simile metodologia di lavoro, infatti, ogni
utente lavora con la propria copia “locale”, con i relativi problemi ridondanza e
possibilità di incoerenze.
Massimiliano Teso
Maxy Guida
66
__________________________________________________________________________________________
Le basi di dati sono state concepite in buona parte per ovviare ad inconvenienti
di questo tipo.
Un sistema di gestione di basi di dati, detto DBMS (Data Base Management
System) è un sistema software in grado di gestire collezioni di dati che siano
grandi, condivise e persistenti assicurando la loro affidabilità e privatezza.
Inoltre, in quanto prodotto informatico, deve essere efficiente e efficace. Una
base di dati è quindi una collezione di dati gestita da un DBMS.
Alcuni dei più famosi DBMS sono Access, Db2 dell' Ibm, Oracle e MySQL che,
oltretutto, è OpenSource..
Riassumendo, un DBMS si occupa di basi di dati con le seguenti caratteristiche:
Grandi: nel senso che possono avere anche dimensioni enormi e quindi
oltre le capacita della memoria centrale di un elaboratore. Di conseguenza
un DBMS deve essere in grado di gestire memorie secondarie.
Condivise: perché un DBMS deve permettere a più utenti di accedere
contemporaneamente ai dati comuni. In tal modo viene anche ridotta la
ridondanza e inconsistenza dei dati, dato che esiste una sola copia dei
dati. Per controllare l’accesso condiviso di più utenti il DBMS dispone di
un meccanismo apposito, detto controllo di concorrenza .
Affidabilità: dato che un DBMS deve garantire l’integrità dei dati anche
in caso di malfunzionamento hardware e software, prevedendo per lo
meno procedure di recupero dei dati. I DBMS forniscono, per tali scopi,
procedure di salvataggio e ripristino della base di dati (backup e
recovery).
Privatezza: i DBMS gestiscono un sistema di autorizzazioni che definisce
i diritti di ciascun utente ( lettura, scrittura ecc.).
Nell’appendice B sono riportate le istruzioni per installare MySQL, un potente
DBMS scaricabile gratuitamente all’indirizzo www. mysql.com.
Basi di dati relazionali
La maggior parte dei sistemi di basi di dati oggi sul mercato si basa sul modello
relazionale, proposto in una pubblicazione scientifica nel 1970 al fine di
superare le limitazioni logiche dei modelli allora utilizzati, che non
permettevano di realizzare efficacemente la proprietà di indipendenza dei dati,
già riconosciuta come fondamentale. Sebbene i primi prototipi di basi di dati
basati sul modello relazionale risalgano ai primi anni settanta bisognerà
aspettare la metà degli anni ottanta perché tale modello acquisisca una frazione
significativa di mercato.
Il modello relazionale si basa su due concetti fondamentali : relazione e tabella.
Mentre il concetto di tabella è facilmente intuibile, quello di relazione proviene
dalla matematica, ed in particolare dalla teoria degli insiemi. E’ opinione diffusa
Informatica di Base
67
__________________________________________________________________________________________
che parte del successo del modello relazionale derivi dalla presenza
contemporanea di questi due concetti, uno intuitivo ed uno formale. Infatti,
mentre le tabelle risultano naturali e facilmente comprensibili, le relazioni
garantiscono una formalizzazione semplice e chiara che ha permesso uno
sviluppo teorico del modello finalizzato al raggiungimento di risultati di
interesse concreto.
Il modello relazionale risponde al requisito dell’indipendenza dei dati e,
pertanto, prevede un livello fisico ed un livello logico. Utenti e programmatori
interagiscono solo col livello logico e quindi non è necessario che essi
conoscano le strutture fisiche della base di dati. Anche questo aspetto è
responsabile del suo successo dato che i suoi principali concorrenti (reticolare e
gerarchico) obbligavano gli utilizzatori a conoscerne, almeno a grandi linee, la
struttura realizzativa.
Il concetto di relazione è legato al concetto puramente matematico di prodotto
cartesiano tra due insiemi. Avendo due insiemi D1 e D2 il prodotto cartesiano
(D1 x D2) è l’insieme delle coppie ordinate (v1 e v2) tale che v1 è un elemento di
D1 e v2 è un elemento di D2. Quindi il prodotto cartesiano è l’insieme di tutti le
combinazioni tra gli insiemi dati.
La relazione è un sottoinsieme prodotto cartesiano tra due insiemi ed è
rappresentata da un insieme di tuple omogenee, dove per tuple si intende un
elemento definito tramite i suoi attributi.
Ad esempio dati due insiemi A e B dove A= {1,2,3} e B={h,k} il prodotto
cartesiano è uguale all’insieme A x B={(1,h),(2,h),(3,h),(1,k),(2,k),(3,k)} mentre
una relazione possibile è {(1,h),(1,k),(3,h)}.
Generalizzando la relazione ad un numero di insiemi n>0 avremmo D1,D2,…,Dn,
il prodotto D1 x D2 x … x Dn e un sottoinsieme che descriverà la relazione. Il
numero n delle componenti dell’insieme è detto grado del prodotto cartesiano e
della relazione. Il numero degli elementi che della relazione è detta cardinalità
della relazione.
Le tabelle nascono dall’esigenza di rappresentare graficamente le relazioni
presentandole in una forma più facilmente comprensibile. In questo caso le righe
della tabella saranno rappresentate dalle tuple mentre le colonne ne
rappresentano i campi (detti anche attributi).
E’ importante chiarire che in una relazione, in quanto insieme, non vi è alcun
ordinamento fra le tuple che la compongono; nelle tabelle che la rappresentano
l’ordine c’è per necessità, ma è occasionale in quanto due tabelle con le stesse
righe, ma in ordine diverso, rappresentano la stessa relazione. Inoltre le tuple di
una relazione sono distinte l’una dall’altra, in quanto tra gli elementi di un
insieme non possono essere presenti due elementi uguali; da cui si deduce che
una tabella può rappresentare una relazione solo se le righe che la formano sono
diverse l’una dall’altra.
Una base di dati è quindi costituita da più relazioni, le cui tuple contengono
valori comuni, ove necessario per stabilire corrispondenze.
Consideriamo ad esempio la seguente base di dati:
Massimiliano Teso
Maxy Guida
68
__________________________________________________________________________________________
Matricola
276545
485784
569885
452587
125847
STUDENTE
Cognome
Nome
Rossi
Maria
Neri
Anna
Verdi
Fabio
Rossi
Luca
Bruni
Mario
Anno_Iscrizione
1990
2000
1997
1995
2000
ESAME
Corso
Data_Esame
MtrStudente
276545
Analisi
14/04/2001
485784
Chimica II 21/07/2001
125847
Chimica I 13/04/2001
125847
Analisi
08/05/2001
Voto
28
27
25
24
CORSO
Anno_di_ Corso
Nome
Analisi
Primo
Chimica I
Primo
Chimica II
Terzo
In essa abbiamo che:
• la prima relazione contiene informazioni relative a un insieme di studenti,
con numero di matricola, cognome, nome e data di nascita
• la terza relazione contiene informazioni su alcuni corsi con codice, titolo e
docente
• la seconda relazione contiene informazioni relative agli esami: il numero di
matricola dello studente, il codice del corso e il voto; questa relazione fa
riferimento ai dati contenuti nelle altre due.
Nei sistemi relazionali è ammissibile la presenza del valore null che viene
utilizzato per indicare una serie di situazioni che è possibile trovare in un campo
di una tabella. Ad esempio ci si può trovare di fronte ad una tabella del tipo:
Città
Roma
Firenze
Tivoli
Prato
Indirizzo_prefettura
Via Quattro Novembre
Null
Null
Null
Informatica di Base
69
__________________________________________________________________________________________
In questo esempio il valore null indica tre diverse situazioni:
Valore sconosciuto : nel primo caso dato che Firenze è un capoluogo di
provincia e avrà sicuramente una prefettura; significa che il DBMS non
dispone del suo indirizzo.
Valore inesistente : nel caso di Tivoli, dato che questa città non ha di
Prefettura.
Senza informazione : siccome la provincia di Prato è di recente
istituzione significa che non sappiamo se la mancanza di un indirizzo
dipenda dal fatto che essa ancora non esista, oppure da un deficit del
DBMS.
Le strutture del modello relazionale ci permettono di organizzare le informazioni
di interesse per le nostre applicazioni. In molti casi però non è vero che qualsiasi
insieme di tuple sullo schema rappresenti informazioni corrette per
l’applicazione. Ad esempio nella base di dati dell’esempio precedente i voti
devono essere compresi tra 18 e 30 e si deve imporre che due studenti differenti
abbiano matricole differenti.
I vincoli di un DBMS si dividono in intrarelazionali, se riguardano l'interno
nella relazioni, ed extrarelazionali, più pesanti perché riguardano i legami fra le
relazioni e quindi la natura stessa di un DBMS relazionale.
Il più caratterizzante esempio di violazione di un vincolo extrarelazionale si ha
qualora non vi sia corrispondenza tra le istanze di due tabelle che, per ragioni
intrinseche allo schema della base di dati, sono legate tra loro da un vincolo
detto di integrità referenziale, il quale impone che per ogni valore di una tabella
vi sia un corrispondente nell'altra. Nell’esempio precedente c’è un vincolo di
integrità referenziale tra il campo Matricola della tabella STUDENTI e il campo
Studente della tabella ESAMI.
Un vincolo intrarelazionale, al contrario, trova il suo soddisfacimento rispetto
alle singole relazioni del DBMS; esso può essere :
• vincolo su valori, o vincolo di dominio : quando si impone a certi valori del
database di rientrare in determinate caratteristiche (ad esempio il voto di un
esame universitario deve obbligatoriamente rientrare tra il 18 ed il 30, ed un
DBMS incaricato raccogliere tali dati deve prevederlo).
• vincolo di tupla: che esprime delle condizioni sui valori di ciascuna tupla,
indipendentemente dalle altre tuple.
Consideriamo l'esempio dei voti degli esami universitari e ipotizziamo di avere
un DBMS che debba memorizzarli; poniamo, inoltre, di destinare un campo
all'eventuale lode (campo di tipo booleano, vero/falso). In questo caso avremmo
che l'attributo "lode" potrà essere vero solo se il voto di quella tupla è uguale a
trenta. Cercando di dare una forma a tale vicolo potremmo scrivere che:
Massimiliano Teso
Maxy Guida
70
__________________________________________________________________________________________
( not ( lode =vero ) ) or ( voto = 30 )
mentre in questo caso il vincolo di dominio (visto precedentemente) potrebbe
essere espresso con la formula:
( voto >= 18 ) and ( voto <= 30 )
Il più importante vincolo del modello relazionale è il così detto vincolo di
chiave utilizzato per identificare in maniera univoca le tuple di una relazione.
Nell’esempio precedente il campo Matricola della tabella STUDENTI identifica
univocamente ogni studente.
Ciascuna relazione deve quindi avere una chiave rappresentata da uno o più
attributi detta chiave primaria. Gli attributi che fanno parte della chiave
primaria vengono spesso evidenziati attraverso la sottolineatura e su di essi si
vieta la presenza di valori nulli.
Progettazione di una base di dati
Il primo passo per la realizzazione di una base di dati è la progettazione che
prevede i seguenti passaggi:
Definizione dei processi: in questa fase si acquisiscono le conoscenze dei
processi aziendali tramite interviste per avere un’idea chiara di come
dovrà funzionare la base di dati.
Definizione degli oggetti aziendali: in questa fase si dovranno
individuare gli elementi che costituiscono il processo come ad esempio il
cliende e la videocassetta nel caso di una videoteca. Per ogni oggetto
vanno poi definite le cratteristiche che lo descrivono (come nome,
cognome, data di nascita etc per il cliente).
Definizione delle regole aziendali: in questa fase si identificano i vincoli
che la base di dati deve rispettare. In una videoteca, ad esempio, il cliente
potrebbe non poter affittare più di due videocassette alla volta.
Realizzazione del modello di database: in questa fase finale della
progettazione si realizza uno schema (detto schema ER) che rappresenti in
maniera chiara è completa l’intero progetto.
Informatica di Base
71
__________________________________________________________________________________________
Un semplice schema ER di un possibile progetto per la gestione degli esami
universitari è il seguente:
Una delle fasi più importanti è la realizzazione delle relazioni tra le varie entità.
Esistono tre tipi di relazioni:
Relazione uno a uno: in cui un record di una tabella corrisponde a un
record di un’altra tabella. Ad esempio è la relazione che potrebbe
intercorrere tra la tabella “Ordine” e la tabella “Bolla di accompagno” in
quanto un ordine fa rifermento a una sola bolla e viceversa.
Relazione uno a molti: in cui un record di una tabella può corrispondere
a più record di una seconda tabella mentre non vale il viceversa. Tale
relazione potrebbe intercorrere tra la tabella “Studente” ed “Esame” in
quanto uno studnete può fare più esami ma un esame può essere sostenuto
da un solo studente.
Massimiliano Teso
Maxy Guida
72
__________________________________________________________________________________________
Relazione molti a molti: in cui un record di una tabella può
corrispondere a più record d una seconda tabella e viceversa. Tale
relazione potrebbe intercorrere tra le tabelle “Impiegato” e “Progetto” in
quanto un impiegato può partecipare a più progetti e ogni progetto può
essere realizzato da più impiegati.
Le relazioni molti a molti possono creare diversi problemi se lasciate così
come sono in fase di progettazione ed è quindi utile inserire una tabella
intermedia che colleghi le altre due.
Una volta finita la fase di progettazione è possibile creare le tabelle vere e
proprie consideranzo il fatto che ogni relazione diventa una tabella con i campi
specificati più le chiavi delle tabelle a essa collegate.
La base di dati dello schema ER per la gestione degli esami universitari è
l’insieme delle seguenti tabelle:
Matricola
STUDENTE
Cognome
Nome
MtrStudente
Anno_Iscrizione
ESAME
Corso
Data_Esame
CORSO
Anno_di_ Corso
Nome
Voto
Informatica di Base
73
__________________________________________________________________________________________
Cenni di algebra e calcolo relazionale
L’algebra relazionale è un linguaggio procedurale basato su concetti di tipo
algebrico che deriva da quella parte della matematica che si occupa degli
insiemi.
I concetti trattati sono molto astratti, poco legati al pratico utilizzo dei DBMS.
In questo paragrafo ci limiteremo a descrivere i concetti generali senza entrare
nel dettaglio delle formule e delle dimostrazioni. Di seguito descriveremo gli
operatori fondamentali dell’algebra relazionale, lo stretto necessario per
comprendere da cosa deriva l’SQL, il linguaggio di interrogazione delle basi di
dati.
L'algebra relazionale definisce una serie di operatori e regole per la creazione e
la modifica delle relazioni. Di seguito vengono trattati i più comuni.
• Unione: Appurato che le relazioni sono insiemi, ha senso intervenire sulle
relazioni con gli operatori dell’algebra insiemistica, quali l’unione la
differenza e l’intersezione. Tuttavia, dato che una relazione è un insieme di
tuple omogenee (ovvero definite dagli stessi attributi), questi operatori
potranno essere usati solo con relazioni aventi gli stessi attributi, o almeno
degli attributi comuni. Detto questo è possibile dire che l'unione tra due
relazioni r1 ed r2, definite sullo stesso insieme di attributi X ( si scrive r1(X)
e r2(X) ), è indicata con r1 U r2 ed è una relazione ancora su X contenente
le tuple che appartengono ad r1 oppure ad r2, oppure ad entrambe.
Nella fattispecie delle basi di dati l'unione di due tabelle è l'insieme delle
righe che appartengono alle tabelle ( alla prima, alla seconda o a entrambe).
• Intersezione: L'intersezione di r1(X) ed r2(X) è indicata con r1
r2 ed è
una relazione su X contenente le tuple che appartengono sia ad r1 che ad r2.
Riferito alle tabelle l'intersezione di due di queste è l'insieme delle righe che
appartengono a entrambe.
• Differenza: La differenza di r1(X) ed r2(x) è indicata con r1 - r2 ed è una
relazione su X contenente le tuple che appartengono a r1 e non appartengono
ad r2. Quindi la differenza tra due tabelle è l'insieme delle righe che
appartengono alla prima tabella e non alla seconda.
• Ridenominazione: Per risolvere il problema derivante dal fatto che gli
operatori sopra citati possono essere usati solo con attributi uguali, l'algebra
relazionale ci mette a disposizione l'operatore di ridenominazione.
Questo operatore ci permette di ridefinire il nome dell'attributo in modo da
poter usare le operazioni di unione, differenza ed intersezioni anche su
relazioni con diversi attributi (sempre ammesso che ciò possa avere un
senso).
Massimiliano Teso
Maxy Guida
74
__________________________________________________________________________________________
• Selezione: La selezione produce un sottoinsieme di tuple su tutti gli attributi.
La selezione introduce un concetto fondamentale dell'algebra relazionale e,
di conseguenza, delle basi di dati: il concetto di condizione. Infatti la
discriminante che permette di stabilire quali tuple andranno a formare il
risultato della selezione è il fatto che esse rispondano o meno a una
determinata condizione.
•
Proiezione: La proiezione è un concetto simile a quello della selezione.
Essa produce, alla pari della selezione, un sottoinsieme della relazione
genitrice ma, a differenza della selezione, il sottoinsieme prodotto contiene
tutte le tuple originali ma con un numero inferiore di attributi.
• Join: L'operatore di join è il più caratteristico dell'algebra relazionale. Il join
naturale è un operatore che correla i dati di due relazioni sulla base di valori
uguali in attributi con lo stesso nome. Esistono diversi tipi di join, a seconda
delle diverse situazione di relazioni, che sono tuttavia riconducibili al
modello del join naturale. Un'analisi più approfondita esula dai compiti di
questo lavoro volto all'aspetto pratico delle basi di dati. Ulteriori
informazioni circa il join si possono trovare nel paragrafo successivo, che
mostra l’implementazione di tale operatore nel linguaggio SQL.
Data la seguente base di dati vediamo degli esempi pratici degli operatori
appena visti:
Cognome
Rossi
Neri
Verdi
Cognome
Verdi
Bruni
IMPIEGATI
Agenzia
Stipendio
Roma
45
Milano
53
Latina
33
OPERAI
Fabbrica
Latina
Monza
Salario
33
32
Prima di poter utilizzare gli operatori di unione, intersezione e differenza è
necessario rinominare alcuni attributi della tabella OPERAI (Fabbrica in
Agenzia e Salario in Stipendio). A questo punto sia ha che:
Informatica di Base
75
__________________________________________________________________________________________
IMPIEGATI
Cognome
Rossi
Neri
Verdi
Bruni
Agenzia
Roma
Milano
Latina
Monza
IMPIEGATI
Cognome
Verdi
Agenzia
Latina
OPERAI
Stipendio
45
53
33
32
OPERAI
Stipendio
33
IMPIEGATI - OPERAI
Cognome
Rossi
Neri
Agenzia
Roma
Milano
Stipendio
45
53
SELEZIONE (Stipendio > 40) [IMPIEGATI]
Cognome
Rossi
Neri
Agenzia
Roma
Milano
Stipendio
45
53
PROIEZIONE (Cognome,Stipendio) [IMPEGATI]
Cognome
Stipendio
Rossi
45
Neri
53
Verdi
33
Massimiliano Teso
Maxy Guida
76
__________________________________________________________________________________________
Data la seguente base di dati:
IMPIEGO
Impiegato
Reparto
Rossi
vendite
Neri
produzione
Verdi
produzione
DIREZIONE
Reparto
Capo
produzione
Mori
vendite
Bruni
IMPIEGO JOIN DIREZIONE
Impiegato
Rossi
Neri
Verdi
Reparto
vendite
produzione
produzione
Capo
Bruni
Mori
Mori
Informatica di Base
77
__________________________________________________________________________________________
Il linguaggio SQL
SQL è l’acronimo di Structured Query Language, ed è un linguaggio di
interrogazione delle basi di dati sviluppato dall’IBM nella seconda metà degli
anni settanta. L’SQL è largamente diffuso e riveste una notevole importanza nel
mondo delle applicazioni per basi di dati. Tale diffusione nasce principalmente
dalla sua standardizzazione che lo pone come il linguaggio "universale" di
accesso ai database. Infatti quasi tutti i DBMS, nonostante abbiano delle
caratteristiche proprietarie, riconoscono i comandi SQL in modo che ci si possa
interfacciare con essi in modo univoco.
Per definiere la sintassi dei comandi SQL utilizeremo le parentesi quadre per
indicare che il termine è opzionale, quelle graffe che il termine racchiuso può
non comparire o essere ripetuto un numero arbitrario di volte mentre le barre
verticali per indicare che deve essere scelto uno tra i termini proposti (l’elenco
dei termini può essere racchiuso tra parentesi angolate).
Le parentesi tonde dovranno essere sempre intese come termini del linguaggio
SQL.
SQL può gestire diversi tipi di dato tra cui i seguenti
• Carattere : singoli caratteri oppure stringhe
o Varchar [ ( lunghezza ) ]
• Tipi numerici esatti : per i valori interi o per valori decimali a virgola
fissa.
o Numeric [ ( Precizione [ , Scala ] ) ]
o Decimal [ ( Precizione [ , Scala ] ) ]
o Int
• Tipi numerici approssimativi :
o Float [ ( Precisione ) ]
o Double precision
o Real
• Data e ora
o Date con i campi year, month, day
o Time [ ( Precisione ) ] i campi hour, minute, second
Per prima cosa è necessario creare una base di dat con il comando
Create DataBase Nome;
Massimiliano Teso
Maxy Guida
78
__________________________________________________________________________________________
Una volta creato lo schema occorre inserire il comando
Use Nome;
per indicare il database in uso.
A qusto punto occorre inserire le tabelle che andranno a creare la base di dati.
Successivamente le tabelle verranno popolate mendiante l’inserimento delle
tuple che costituiranno la vera risorsa della base di dati.
Definizione delle tabelle:
Una tabella SQL è costituita da una collezione di attributi e da un insieme
(eventualmente vuoto) di vincoli.
La sintassi è :
CREATE TABLE NomeTabella
(
NomeAttributo Dominio [ valore di default ] [ vincoli ]
{ , NomeAttributo Dominio [ valore di default ] [ vincoli ] }
);
quindi una tabella viene definita associandole un nome ed elencandone gli
attributi che ne compongono lo schema.
Ecco un esempio:
CREATE TABLE Studente
(
Matricola INT PRIMARY KEY NOT NULL,
Cognome VARCHAR(20) NOT NULL,
Nome VARCHAR(20),
Anno_Iscrizione DATE,
);
I valori di default sono i valori che deve assumere l’attributo quando viene
inserita una riga nella tabella senza che venga specificato il valore dell’attributo
stesso. La parola chiave primari key indica che la Matricola è una chiave
primaria.
Possiamo naturalmente definire dei vincoli, cioè delle proprietà che devono
essere verificate da ogni istanza della base di dati.
Esistono vincoli intrarelazionali, ovvero interni alla tabella, e vincoli
interelazionali, che rappresentano i vincoli di integrità referenziale (detti anche
vincoli di riferimento).
Informatica di Base
79
__________________________________________________________________________________________
Vincoli intrarelazionali:
In SQL i vincoli intrarelazionali che possono essere definiti sugli attributi di una
tabella sono i vincoli di not null, unique e primary key.
• Not null: significa che l'attributo deve essere sempre specificato.
• Unique: si applica a uno o più attributi imponendo che righe differenti
abbiano valori differenti. Viene fatta eccezione solo per il valore null.
• Primary Key: specifica quali attributi rappresentano la chiave
primaria. Gli attributi che fanno parte della chiave primaria devono
essere indicati come “Not Null”.
Mentre i vincoli not null e unique possono essere definiti più volte, la primary
key può essere definita una volta sola (sia che sia specificata a livello di attributo
che in calce per indicare una serie di attributi).
Esempio:
CREATE TABLE Persona
(
Nome
VARCHAR(20) NOT NULL,
Cognome VARCHAR(20) NOT NULL,
Indirizzo
VARCHAR(20),
Città
VARCHAR(20),
PRIMARY KEY (Nome, Cognome)
);
crea una tabella in cui la chiave primaria è rappresentata dall'insieme del nome e
del cognome.
CREATE TABLE Persona
(
Matricola VARCHAR (6) PRIMARY KEY NOT NULL,
Nome
VARCHAR(20) NOT NULL,
Cognome VARCHAR(20) NOT NULL,
Indirizzo VARCHAR(20),
Città
VARCHAR(20),
UNIQUE (Nome, Cognome)
);
crea una tabella in cui la chiave primaria è il codice di matricola e gli attributi
nome e cognome devono essere obbligatoriamente specificati (per via del not
null) ed in cui non possono comparire due righe aventi stesso nome e cognome.
Massimiliano Teso
Maxy Guida
80
__________________________________________________________________________________________
Vincoli interelazionali:
In SQL tali vincoli si definisco tramite l'apposito costrutto della chiave esterna
(vincolo di foreign key).
L’attuale versione di MySQL non supporta questo tipo di vincoli che quindi, per
ora, devono essere realizzati a livello di applicazione.
Questo vincolo impone che ogni valore dell'attributo di una tabella (se diverso
da null) sia presente tra i valori di un attributo delle righe appartenenti ad
un'altra tabella (detta tabella esterna).
I vincoli interelazionali possono essere definiti in due modi: con l'uso del
costrutto sintattico references, con il quale si specificano la tabella esterna con
il quale l'attributo deve essere legato, oppure con l'uso del costrutto foreign key.
Di seguito compare un esempio con la definizione di un vicolo di integrità
referenziale con un'altra tabella ("Dipartimento"). Il vincolo è specificato tramite
l'uso di references per fare in modo che nella tabella Persona l'attributo Dipart
sia obbligatoriamente un valore contenuto nella tabella esterna nell'attributo
NomeDipart.
CREATE TABLE Persona
(
Matricola VARCHAR(6) PRIMARY KEY NOT NULL,
Nome
VARCHAR(20) NOT NULL,
Cognome VARCHAR(20) NOT NULL,
Indirizzo VARCHAR(50),
Dipart
VARCHAR(15)
REFERENCES Dipartimento(NomeDip),
Città
VARCHAR(20),
UNIQUE (Nome, Cognome)
);
Invece il costrutto foreign key (posto non a livello di attributo ma in calce e
seguito da references) offre delle possibilità maggiori. Innanzitutto permette di
definire dei vincoli per un'insieme di attributi; inoltre permette di definire la
reazione del DBMS ad eventuali forzature dei vincoli di integrità referenziale.
Infatti, trovandosi di fronte ad una relazione tra tabelle, occorre prendere in
considerazione quale sarà la reazione della tabella interna (o master) all'atto
della modifica di una riga della tabella esterna (detta slave). Le operazioni che
possono mettere in crisi il nostro sistema di vincoli sono, ovviamente, le
operazioni di cancellazione e modifica sulla tabella esterna, operazioni alle quali
la tabella interna dovrà adeguarsi.
SQL ci permette di definire, come opzioni del costrutto foreign key, quattro
reazioni del DBMS del caso di modifica (update) e cancellazione (delete):
Informatica di Base
81
__________________________________________________________________________________________
Cascade
Set null
Set default
No action
On update
Il nuovo valore viene
riportato su tutte le relative
righe della tabella master
Nella tabella master viene
inserito null al posto dei
valori relativi all'attributo
modificato
Nella tabella master viene
inserito il valore di default
al posto dei valori relativi
all'attributo modificato
Non viene eseguita alcuna
operazione. Il DBMS
respinge la richiesta di
update.
On delete
Tutte le relative righe della
tabella master vengono
cancellate
Nella tabella master viene
inserito null al posto dei
valori relativi all'attributo
modificato
Nella tabella master viene
inserito il valore di default
al posto dei valori relativi
all'attributo modificato
Non viene eseguita alcuna
operazione. Il DBMS
respinge la richiesta di
cancellazione.
Esempio di utilizzo del foreign key:
CREATE TABLE Persona
(
Matricola VARCHAR(6) PRIMARY KEY NOT NULL,
Nome
VARCHAR(20) NOT NULL,
Cognome VARCHAR(20) NOT NULL,
Indirizzo VARCHAR(50),
Dipart
VARCHAR(15)
REFERENCES Dipartimento(NomeDip),
Città
VARCHAR(20),
FOREIGNKEY(Dipart)
REFERENCES Dipartimento(NomeDip)
ON DELETE SET NULL,
ON UPDATE CASCADE,
UNIQUE (Nome, Cognome)
);
Massimiliano Teso
Maxy Guida
82
__________________________________________________________________________________________
Modifica delle tabelle:
Il linguaggio implementa anche delle istruzioni dedicate alla modifica delle
strutture esistenti. Tali comando sono alter, che permette di modificare domini e
schemi di tabelle, e drop , che permette di rimuovere dei componenti siano essi
schemi, domini o tabelle.
Ecco un esempio che aggiunge un attributo alla tabella Dipartimenti.
ALTER TABLE Dipartimenti ADD COLUMN NroUffici INT;
in questo modo la tabella ha una colonna in più che rappresenta, ad esempio, il
numero degli uffici.
Invece il comando :
DROP TABLE Dipartimenti;
cancella la colonna appena creata.
Interrogazioni:
La parte di SQL dedicata all'interrogazione del DBMS è probabilmente la parte
più importante ed utilizzata del linguaggio.
Per essere eseguita, l'interrogazione deve essere analizzata dall'interprete SQL
(che è un componente del DBMS) per essere tradotta in un'interrogazione
equivalente in linguaggio procedurale.
Le interrogazioni in SQL sono specificate tramite l'uso dell'istruzione select la
cui struttura essenziale è la seguente :
SELECT ListaAttributi
FROM ListaTabelle
[ WHERE Condizione ]
L'interrogazione SQL seleziona, tra le righe che appartengono al prodotto
cartesiano delle tabelle elencate nella clausola from, quelle che soddisfano la
clausola where (se è assente vengono selezionate tutte le righe).
Se al posto della ListaAttributi c’è un asterisco (*) vengono selezionati tutti gli
attributi del prodotto cartesiano.
Nella ListaAttributi possono essere definiti degli alias, ovvero dei nomi che
possono essere usati, successivamente, per richiamare il campo.
Ad esempio, data la base di dati:
Informatica di Base
83
__________________________________________________________________________________________
DIPARTIMENTO
NomeDip
Indirizzo
Amministrazione
Via Milano 7
Produzione
Via Torino 4
Ricerca
Via Roma 10
Direzione
Via Morone 6
Nome
Mario
Carlo
Maria
Marco
Paola
Citta
Roma
Milano
Firenze
Aosta
IMPIEGATO
Cognome
Dipart
Rossi
Amministrazione
Neri
Direzione
Meli
Richerca
Bruni
Sviluppo
Bruni
Direzione
Stipendio
500
800
650
950
900
L’interrogazione
SELECT Stipendio AS Salario
FROM Impiegato
WHERE Cognome = "Rossi";
prende il valore dello stipendio di "Rossi" dalla tabella Impiegato ridefinendolo
come Salario.
Nella ListaAttributi possono essere inserite anche espressioni generiche
(addizione, sottrazione, moltiplicazione ecc.). Ad esempio :
SELECT Stipendio AS Salario, Stipendio/12 AS SalarioMensile
FROM Impiegato
WHERE Cognome = "Rossi";
Per quanto riguarda la clausola from essa rappresenta l'insieme delle tabelle a
cui si vuole accedere e delle quali verrà eseguito il prodotto cartesiano.
Considerando l'esempio del paragrafo precedente (tabelle Impiegato e
Dipartimento) e volendo prendere valori da entrambe le tabelle:
SELECT Impiegato.Nome, Impiegato.Cognome, Dipartimento.Citta
FROM Impiegato, Dipartimento
WHERE Impiegato.Dipart = Dipartimento.NomeDip;
Rispetto agli esempi precedenti si nota l'uso del punto per indicare a quali a
quale tabella si riferisce l'attributo.
La clausola where ammette una serie di espressioni booleane; è possibile,
all'interno della clausola, combinare predicati semplici con gli operatori logici
Massimiliano Teso
Maxy Guida
84
__________________________________________________________________________________________
and, or e not. Ciascun predicato semplice confronta (con gli operatori
=,<>,<,>,<= e >=) una espressione costruita a partire dai valori degli attributi
per la riga o con un valore costante o con il risultato della valutazione di un'altra
espressione.
Ad esempio:
SELECT Nome
FROM Impiegato
WHERE Cognome = “Rossi” and
(Dipart = “Amministrazione” OR Dipart = “Produzione”);
seleziona l'impiegato di nome "Rossi" appartenente al dipartimento
“Amministrazione” o “Produzione”.
Oltre agli operatori standard già citati SQL mette a disposizione l'operatore like
per il confronto di stringhe. Tale operatore si comporta come l'operatore di
uguaglianza ma, a differenza di quest'ultimo, supporta anche i caratteri "%"
(percentuale) e "_" (trattino sottolineato). Il primo rappresenta una sringa
arbitraria (anche vuota) mentre il secondo un carattere arbitrario.
Ad esempio:
SELECT *
FROM Impiegato
WHERE Cognome like “_o%i”;
seleziona tutti gli impiegati il cui cognome termina con la lettera "i" e la cui
seconda lettera è una "o".
Di particolare importanza la gestione dei valori nulli nella valutazione dei
predicati. Infatti nell'algebra booleana convenzionale si prendono in
considerazione unicamente due valori (vero o falso) mentre abbiamo visto che
avendo a che fare con delle basi di dati, possiamo avere anche il valore null
(cioè sconosciuto). Le ultime versioni di SQL gestiscono i campi null
considerandoli nella valutazione di relazioni complesse, estendendo a tre valori,
vero | falso | null, il possibile risultato.
Quindi avremmo invece delle classe tabelle di verità le nuove tabelle
comprensive del valore null.
Not
Falso
Null
Vero
Vero
Null
Falso
Informatica di Base
85
__________________________________________________________________________________________
And
Vero
Null
Falso
Vero
Vero
Null
Falso
Null
Null
Null
Falso
Falso
Falso
Falso
Falso
Or
Vero
Null
Falso
Vero
Vero
Vero
Vero
Null
Vero
Null
Null
Falso
Vero
Null
Falso
Diciamo inoltre che la selezione dei campi null si effettua tramite la sintassi:
Attributo IS [NOT] NULL
Tale predicato risulta vero solo se il valore è null. Il predicato not null è il suo
contrario. Si potrebbero ad esempio selezionare tutte le righe con il campo
stipendio non nullo mediante la condizione
WHERE Stipendio IS NOT NULL
Inserimento nelle tabelle:
Il comando di inserimento di righe nella base di dati presenta due sintassi
alternative:
INSERT INTO NomeTabella [( ListaAttributi) ]
< VALUES ( ListaDiValori ) | SelectSQL >;
Questa sintassi permette di inserire una riga specificandone i valori dei suoi
attributi.
Ad esempio:
INSERT INTO Dipartimento(NomeDip, Citta)
VALUES(“Produzione”, “Torino”);
Una seconda sintassi, meno usata ma più consona all'impostazione SQL che ha
come oggetto le tabelle e non le singole righe, permette di aggiungere degli
insiemi di righe mediante il comando SELECT.
La sua sintassi è:
INSERT INTO NomeTabellaDestinazione [( ListaAttributi) ]
SELECT ListaAttributi
FROM NomeTabellaOrigine
WHERE Condizione;
Massimiliano Teso
Maxy Guida
86
__________________________________________________________________________________________
Ad esempio il seguente comando:
INSERT INTO ProdottiMilanesi (codice, descrizione)
SELECT codice, descrizione
FROM Prodotto
WHERE LuogoProd=”Milano”;
Inserisce nei campi codice e selezione della tabella ProdottiMilanesi il
risultato della selezione della relazione Prodotto di tutte le righe aventi
“Milano” come valore dell’attributo LuogoProd.
Cancellazione delle righe:
Il comando SQL delete permette di eliminare delle righe dalle tabelle di una
base di dati.
La sintassi è:
DELETE FROM NomeTabella [ WHERE Condizione ];
Quando la condizione della clausola where non viene specificata, il comando
cancella tutte le righe della tabella, altrimenti vengono rimosse solo le righe che
soddisfano la condizione.
La condizione rispetta la sintassi SQL, per cui potremmo avere al suo interno
delle interrogazioni nidificate che fanno riferimento ad altre tabelle. Un
semplice esempio che elimina i dipartimenti con sede a Roma:
DELETE FROM Dipartimento WHERE Citta= “Roma”
E' da notare la differenza tra il comando delete ed il comando drop. Ad esempio
il comando:
DELETE FROM Dipartimento;
elimina tutte le righe della tabella dipartimento, ma lo schema rimane immutato;
il comando, infatti, cancellerà solo le istanze della tabella.
Mentre il comando:
DROP TABLE Dipartimento;
elimina tutte le istanze della tabella, nonché lo schema.
Informatica di Base
87
__________________________________________________________________________________________
Modifica delle righe:
In SQL la modifica delle righe avviene mediante l'utilizzo del comando update,
seguendo la sintassi:
UPDATE NomeTabella
SET Attributo = < Espressione | SelectSQL | Null | default >
{ , Set Attributo = < Espressione | SelectSQL Null | default> }
[ WHERE Condizione ];
Questo comando permette di aggiornare uno o più attributi delle righe di
NomeTabella che soddisfano l'eventuale condizione. Se la condizione non
compare ovviamente si suppone di default il valore vero e si esegue la modifica
su tutte le righe della tabella.
Ecco un esempio che aumenta del 20% lo stipendio degli impiegati che si
chiamano "Mario":
UPDATE Impiegato SET Stipendio = Stipendio * 1.2
WHERE Nome = 'Mario'
Uso del join:
Supponiamo di voler sapere i nomi di tutti gli studenti che hanno sostenuto un
esame in base alle tabelle riportate a pagina 68. Per farlo dobbiamo realizzare un
join confrontando l’attributo Matricola della tabella Studente e l’attributo
MtrStudente della tabella Esame.
Si deve quindi scrivere:
SELECT S.Nome
FROM Studente AS S, Esame AS E
WHERE S.Matricola = E.MtrMatricola;
L'ultima versione di SQL (SQL-2) ha introdotto una sintassi alternativa per
l'espressione di join che permette di distinguere tra le condizioni che
rappresentano le selezioni di join e quelle che rappresentano di selezioni di riga.
Inoltre il linguaggio è stato arricchito di nuove espressioni di join.
La sintassi è la seguente:
SELECT AttrExpr [ [AS] Alias ] {, AttrExpr [ [AS] Alias ] }
FROM Tabella [ [AS] Alias ]
{, TIPOJOIN Tabella [ [AS] Alias ] ON CondizioneDiJoin }
[ WHERE AltraCondizione ]
Massimiliano Teso
Maxy Guida
88
__________________________________________________________________________________________
Mediante questa sintassi la condizione di join non compare come argomento
della clausola where, ma viene invece spostata nell'ambito della clausola from,
associata alle tabella che vengono coinvolte nel join.
Il parametro TipoJoin specifica quale è il tipo di join da usare, e ad esso si
possono sostituire i termini INNER, RIGHT OUTER, LEFT OUTER o FULL.
L'operatore inner join è il più comune e prorio per questo la parola chiave
INNER può essere omessa.
Ad esempio l'interrogazione realizza precedentemente con l'utilizzo del where
ora può essere riscritta:
SELECT S.Nome
FROM Studente AS S
JOIN Esame AS E D ON S.Matricola = E.MtrStudente;
Questo è il caso di un join interno, perché le righe che vengono coinvolte nel
join sono in un sottoinsieme delle righe di ciascuna colonna. Può infatti capitare
che alcune righe non vengano considerate in quanto non esiste una
corrispondente riga nell'altra tabella per cui la condizione sia soddisfatta. Questo
comportamento molto spesso non rispetta le esigenze delle applicazioni, le quali,
alla eliminazione delle righe operata dal join, possono preferire di mantenere le
righe, ponendo eventualmente opportuni valori null. Il join esterno (outer join)
ha proprio questo compito.
Esistono tre diversi tipi di join esterno: left, right e full.
Il left join fornisce come risultato il join interno con le righe della relazione che
compare a sinistra nel join per le quali non esiste una corrispondente riga nella
tabella di destra; il right join restituisce invece, oltre al join interno, le righe
escluse della relazione di destra; infine il full join restituisce il join interno
esteso con le righe eslcuse di entrambe le relazioni.
Ad esempio, sulla base delle tabelle riportate a pagina 83, la selezione:
SELECT *
FROM Dipartimento
LEFT JOIN Impiegato
ON (Dipartimento.NomeDip=Impiegato.Dipart);
fornisce la seguente tabella
NomeDip
Indirizzo
Amministrazione Via Milano 7
Produzione
Via Torino 4
Ricerca
Via Roma 10
Direzione
Via Morone 6
Direzione
Via Morone 6
Citta
Roma
Milano
Firenze
Aosta
Aosta
Nome
Mario
NULL
Maria
Carlo
Paola
Cognome Stipendio
Rossi
500
NULL
NULL
Meli
650
Neri
800
Bruni
900
Informatica di Base
89
__________________________________________________________________________________________
SELECT *
FROM Impiegato
FULL JOIN Dipartimento
ON (Impiegato.Dipart= Dipatimento.NomeDip)
fornisce la seguente tabella
Nome
Mario
Carlo
Paola
Maria
Marco
NULL
Cognome
Rossi
Neri
Bruni
Meli
Bruni
NULL
Stipendio
500
800
900
650
950
NULL
Dipart
Amministrazione
Direzione
Direzione
Richerca
Sviluppo
Produzione
Indirizzo
Via Milano 7
Via Morone 6
Via Morone 6
Via Roma 10
NULL
Via Torino 4
Citta
Roma
Aosta
Aosta
Firenze
NULL
Milano
Talvolta è necessario convolgere più tabelle in una selezione. Supponiamo
infatti di voler conoscere oltre al nome di tutti gli studenti che hanno sostenuto
un esame, anche il nome dell’esame e l’anno di corso. Queste informazioni sono
riportate su tre tabelle differenti e quindi l’interrogazione sarà la seguente:
SELECT S.Nome, C.Nome, C.Anno_di_Corso
FROM Studente AS S, Esame AS E, Corso AS C
WHERE S.Matricola = E.MtrMatricola
AND E.Corso = C.Nome;
Ordinamento:
Abbiamo visto che una relazione è costituita da un insieme non ordinato di
tuple. Spesso però nell'uso reale delle basi di dati sorge il bisogno di costruire un
ordine sulle righe delle tabelle. SQL permette di costituire un ordine con
l'istruzione order by posta dopo la clausola where. La sintassi è :
ORDER BY AttrDiOrdinamento [ ASC | DESC ]
{ , AttrDiOrdinamento [ ASC | DESC ] }
In questo modo si specificano gli attributi che devono essere presi in
considerazione per realizzare l'ordinamento (crescente o decrescente). Se
l’operatore è omesso si assume un ordine ascendente.
Ad esempio:
SELECT *
FROM Impiegato
ORDER BY Nome DESC, Cognome;
Massimiliano Teso
Maxy Guida
90
__________________________________________________________________________________________
Ordina la tabella degli Impiegato in maniera discendente per nome e in maniera
ascendente per i cognomi nel caso ci siano nomi uguali.
Operatori aggregati:
Tali operatori sono una serie di parole chiave del linguaggio SQL dedicate
all'aggregazione dei dati, grazie ai quali è possibile definire interrogazioni di
notevoli interesse applicativo. E' necessario ricorrere a questi operatori ogni qual
volta occorra valutare delle proprietà che dipendono da insiemi di righe.
Lo standard SQL prevede cinque operatori aggregati, divisibili in due gruppi:
count da una parte e sum, max, min, avg dall'altra.
L'operatore count permette di determinare il numero di righe di una
interrogazione; la sintassi è la seguente:
COUNT ( * | [ DISTINCT ] | [ ALL ] ListaAttributi );
L'opzione * restituisce il numero delle righe; l'opzione distinct, invece,
restituisce il numero dei diversi valori degli attributi mentre l'opzione all
restituisce il numero dei valori diversi da null.
Ad esempio:
SELECT COUNT(DISTINCT Stipendio)
FROM Impiegato;
restituisce il numero dei diversi valori dell'attributo Stipendio fra tutte le righe
della tabella Impiegato.
Oppure:
SELECT COUNT(ALL Nome, Cognome)
FROM Impiegato;
restituisce il numero delle righe che possiedono un valore diverso da null sia per
l'attributo Nome che per l'attributo Cognome.
Gli altri operatori di aggregazione richiedono invece solo un attributo o
un'espressione, eventualmente preceduta dalle parole chiave distinct o all. Le
funzioni sum ed avg ammettono come argomento solo espressione numeriche
mentre max e min accettano anche intervalli di tempo e stringhe.
Gli operatori hanno il seguente significato:
• sum: restituisce la somma dei valori posseduti dall'attributo su tutte le
righe;
• max e min: restituiscono il massimo ed il minimo valore tra quelli di
ciascuna riga (su questi operatori distinct o all non hanno alcun effetto)
• avg: restituisce il valore medio tra quelli dell'attributo;
Informatica di Base
91
__________________________________________________________________________________________
Ad esempio:
SELECT SUM(Stipendio)
FROM Impiegato
WHERE Dipart= “Ricerca”;
restituisce la somma degi stipendi del dipartimento “Ricerca”
SELECT MAX(Stipendio)
FROM Impiegato, Dipartimento
WHERE Dipart= NomeDip
AND Citta=“Milano”;
restituisce il massimo stipendio tra quelli degli impiegati che lavorano in un
dipartimento con sede a “Milano”.
Interrogazioni con raggruppamento:
Qualora occorra produrre delle aggregazioni occorre fare ricorso alla clausola
group by. Questa istruzione può essere utilizzata con un operatore aggregato e
permette di creare dei raggruppamenti parziali, mostrando una sola riga per ogni
insieme che ha uno stesso valore nell'attributo passato come parametro.
Ad esempio:
SELECT Dipart, SUM(Stipendio)
FROM Impiegato
GROUP BY Dipart;
Esegue in sequenza i seguenti passi:
• per prima cosa viene eseguita la clausola where come se il group by non
esistesse
• Il risultato viene proiettato su tutti gli attributi che compaiono o come
argomento della group by o all’interno dell’espressione argomento
dell’operatore aggregato
Dipart
Amministrazione
Direzione
Richerca
Sviluppo
Direzione
Stipendio
500
800
650
950
900
Massimiliano Teso
Maxy Guida
92
__________________________________________________________________________________________
• La tabella viene poi raggruppata secondo le indicazioni del group by
Dipart
Amministrazione
Direzione
Direzione
Richerca
Sviluppo
Stipendio
500
800
900
650
950
• Infine viene applicato l’operatore aggregato
Dipart
Amministrazione
Direzione
Richerca
Sviluppo
Stipendio
500
1700
650
950
Una volta eseguito un raggruppamento in sottoinsiemi con la clausola group by
è possibile selezionare solo alcuni gruppi usando la clausola Having.
La clausola having è il corrispondente per i gruppi della clausola where per gli
attributi. Essa descrive le condizioni che si devono applicare al termine
dell'esecuzione di una interrogazione che fa uso della clausola group by.
Ad esempio:
SELECT Dipart, SUM(Stipendio) AS SommaStipendi
FROM Impiegato
GROUP BY Dipart
HAVING SommaStipendi>800
fornisce la seguente tabella:
Dipart
Direzione
Sviluppo
Stipendio
1700
950
Volendo riassumere la sintassi SQL dell'istruzione select con tutte le clausole
analizzate avremmo che:
SELECT ListaAttributiOEspressioni
FROM ListaTabelle
[ WHERE CondizioniSemplici ]
[ GROUP BY ListaAttributiDiRaggruppamento ]
[ HAVING CondizioniAggregate ]
[ ORDER BY ListaAttributiDiOrdinamento ]
Informatica di Base
93
__________________________________________________________________________________________
Interrogazioni nidificate:
Nella clausola where l’SQL ammette anche l’uso di predicati con una struttura
più complessa rispetto a quelli visti. In questo caso si confronta un valore
(ottenuto come risultato di una espressione valutata sulla singola riga) con il
risultato dell’esecuzione di un’interrogazione SQL. L’interrogazione che viene
usata per il confronto viene definita direttamente nel predicato interno alla
clausola where. Si parla in questo caso di interrogazioni nidificate.
Se in un predicato si confrontano un attributo con il risultato di una
interrogazione sorge il problema di disomogeneità dei termini del confronto.
Infatti, da una parte abbiamo il risultato dell’esecuzione di un’interrogazione
SQL, in genere un insieme di valori, mentre dall’altra abbiamo il valore
dell’attributo per la particolare riga. La soluzione consiste nell’estendere, con le
parole all e any, i normali operatori di confronto relazionale (=, <>, <, >, <= e
>=). La parola chiave any specifica che la riga soddisfa la condizione se risulta
vero il confronto tra il valore dell’attributo per la riga e almeno uno degli
elementi restituiti dall’interrogazione. La parola chiave all invece specifica che
la riga soddisfa la condizione solo se tutti gli elementi restituiti
dall’interrogazione nidificata rendono vero il confronto.
Ecco un esempio di interrogazione nidificata:
SELECT *
FROM Impiegato
WHERE Dipart = ANY
(
SELECT Nome
FROM Dipartimento
WHERE Citta=”Firenze”
);
L’attuale versione di MySQL non supporta le query nidificate.
Massimiliano Teso
Maxy Guida
94
__________________________________________________________________________________________
Esercizi
1. Data la seguente base di dati
CLIENTE
Cliente_ID
Nome
Cognome
Anno_Nascita
Telefono
LIBRO
Libro_ID Nome_Autore Cognome_Autore Titolo Pagine Genere Anno Prezzo
ORDINE
Ordine_ID
Cliente_ID
Libro_ID
Data
Realizzare le sequenti query in SQL
a) Trovare i Titoli dei libri pubblicati dopo il 1980
b) Trovare i Titoli dei libri ordinati da Mario Rossi
c) Trovare i titoli di tutti i libri ordinati con i relativi acquirenti
d) Raddoppia il prezzo a tutti i libri pubblicati prima del 1960
e) Calcolare il prezzo medio dei libri
f) Contare i numero di clienti che hanno effettuato un ordine
g) Trovare Nome e Cognome di tutti i clienti che hanno fatto un
ordine e indicare per ognuno di essi il numero di libri acquistati.
Ordina i dati in maniera decrescente relativamente al nome e al
cognome.Trovare il peso medio degli articoli di colore rosso
h) Trovare Titolo e numero di copie vendute di tutti i libri pubblicati
dopo il 1980
2. Creare e popolare la base di dati precedente in MySQL. Realizzare in
codice SQL le query proposte.
3. Progettare e realizzare una base di dati per la gestione dei noleggi di una
videoteca. Creare le tabelle e definire le interrogazioni necessarie per la
corretta gestione dell’attività.
Informatica di Base
95
__________________________________________________________________________________________
CAP VIII
VIRUS INFORMATICI
Introduzione
Al giorno d’oggi quasi tutti i possessori di PC hanno avuto la brutta esperienza
di contrarre un virus informatico. Pochi sanno però cosa sia in realtà, come
agisca e come sia possibile debellarlo.
Un virus non è altro che un programma scritto con lo scopo di creare un danno
sul computer che lo ospita o, nella migliore delle ipotesi, procurare dei disagi
all’utente. A differenza dei programmi tradizionali, un virus fa di tutto per non
rendere visibile la sua presenza fino a quando non entra in azione provocando
danni al computer che ha infettato.
La prima persona che parlò di virus informatico pubblicamente, fu il dr. F.
Cohen nel 1983 che definì il virus come << un programma che può “infettare”
altri programmi, trasformandoli in modo da aggiungervi una copia (in alcuni
casi evoluta) di se stesso>>. Quindi la caratteristica principale di questi
programmi sta nell’autoreplicazione, come avviene per i virus biologici.
Cosa fanno e cosa non fanno
I virus possono creare danni di diversa entità ai programmi residenti sul
computer. In particolare possono:
- infettare programmi, fogli di calcolo, documenti di testi e alcune parti del
sistema operativo
- infettare floppy disk e hard disk modificando i programmi di avvio del
sistema operativo memorizzati in particolari aree del disco chiamate Dos
Boot Sector (per i floppy) e Master Boot Record (per gli hard disk)
Ci sono però cose che, malgrado si senti dire il contrario, i virus non possono
assolutamente fare:
- danneggiare elementi hardware del sistema
- danneggiare fisicamente i dischi
- infettare dischi protetti da scrittura
- infettare le e-mail in quanto semplice testo. Il virus può però risiedere
nell’eventuale file allegato all’e-mail.
E importante infine ricordare che il codice di un virus per essere pericoloso deve
essere eseguito, non è sufficiente che sia consultato o letto.
Si può tranquillamente affermare che non esiste sistema operativo inattaccabile
dai virus. Poiché l’autore di un virus vuole ottenere la massima visibilità del suo
Massimiliano Teso
Maxy Guida
96
__________________________________________________________________________________________
prodotto, gli ambienti maggiormente colpiti sono i sistemi più diffusi come
l’MS-DOS prima e Microsoft Windows adesso.
Tipi di Virus
In base alla definizione di Cohen, solo i programmi in grado di replicarsi sono
virus. Esistono molti altri tipi di programmi dannosi, che assieme ai virus in
senso stretto, costituiscono il cosiddetto malware, neologismo dato dalla fusione
dei termini MALicious e softWARE (software dannoso).
Virus in senso stretto:
I virus possono essere a loro volta divisi in diverse categorie:
Program virus:
Si tratta di virus che infettano applicazioni e sistemi operativi. Attaccano
file con estensioni COM, EXE, SYS, DLL, OVL o SCR.
Il virus si attiva caricandosi in memoria per poi attaccare altri programmi.
Esso può inserire il proprio codice nel file infettato oppure può sostituire
completamente il file. In ogni caso il file attaccato risulta modificato ed è
anche su questo che si basa l’azione di ricerca ed eliminazione degli
antivirus.
System o Boot-Sector Virus:
Il primo settore di un floppy disk, chiamato Dos Boot Sector, contiene il
codice di avvio del sistema operativo mentre il primo settore di un hard
disk, detto Master Boot Sector, contiene la tabella delle partizioni,
indicazioni su come è suddiviso il disco e altre informazioni importanti.
Entrambi i settori sono fondamentali per l’avvio del sistema operativo e
proprio per questo vengono attaccati dai virus che generalmente infettano
prima il Master Boot Sector dei dischi fissi e poi il Dos Boot Sector dei
dischetti. In questo modo il virus si può trasferire da un computer all’altro.
Macro Virus:
Con l’avvento di Word Processor, capaci di supportare le così dette
macro, si sono diffusi anche questo genere di virus. Le macro sono una
serie di istruzioni da poter inserire in programmi come ad esempio
Microsoft Word. La loro potenza è aumentata a tal punto da permettere ai
virus di replicarsi e danneggiare il contenuto del documento.
Polimorfici:
Sono virus in grado di mutare il proprio codice mediante algoritmi
particolari che li rendono diversi ad ogni generazione. In questo modo
diventano più difficili da individuare. Questa caratteristica permette loro
Informatica di Base
97
__________________________________________________________________________________________
di mimetizzarsi all’interno dei programmi infettati rendendo difficile
all’antivirus il compito di rivelarne la presenza.
Esaminiamo ora alcuni tipi di malware:
Worm:
Il Worm (dall’inglese verme) non è un vero e proprio virus ma un programma
progettato per replicarsi e diffondersi attraverso sistemi di elaborazione connessi
in rete. Il Worm non cerca di danneggiare il sistema che lo ospita. Esso si limita
ad autoreplicarsi in memoria sprecando tutte le risorse del sistema che
inevitabilmente diventa inutilizzabile. L’esempio più famoso è probabilmente
l’Internet Worm che nel 1988 si diffuse su oltre 6.000 sistemi di reti collegati in
tutto il mondo
Troijan:
Questi programmi devono il loro nome al famoso espediente escogitato da
Ulisse per conquistare la città greca. Come il famoso cavallo di legno offerto in
dono agli abitanti di Troia nascondeva al suo interno soldati armati così i
programmi di questa categoria sembrano all’apparenza software normali, ma in
realtà svolgono funzioni tutt’altro che utili. I Troijan infatti installano
silenziosamente un virus vero e proprio mentre il programma apparentemente
innocuo è in esecuzione. Questo genere di virus è individuabile solo quando si
carica in memoria e inizia a spargersi, quando quindi è troppo tardi per
un’azione preventiva.
Backdoor:
Una backdoor, permette al nostro computer di diventare un server della rete. Chi
ha diffuso il programma è quindi in grado di prendere possesso della nostra
macchina da qualsiasi parte del mondo. Affinché sia possibile questo però il
nostro computer deve essere collegato in rete.
Le backdoor più diffuse sono BO (Back Orifice, Il nome è tutto un programma)
e NetBus. Esse sfruttano i malfunzionamenti costruttivi di Windows,
permettendo l’accesso al PC tramite alcune porte che questo sistema operativo
lascia aperte.
Gli Antivirus
L’enorme diffusione di questi programmi dannosi ci fa comprendere quanto sia
necessario avere installato un buon antivirus sul proprio computer. Ne esistono
di diverso tipo, sia gratuiti che commerciali. Generalmente le due tecniche
utilizzate dagli antivirus sono le seguenti:
- A confronto di pattern: l’antivirus ha una lista con le stringhe che
identificano i vari virus e la usa per individuare l’infezione nei file
Massimiliano Teso
Maxy Guida
98
__________________________________________________________________________________________
sottoposti a scansione. Se in un file viene rilevata una stringa nota viene
eliminata e il file ripristinato.
- A ricerca euristica: l’antivirus ricerca all’intero del programma il codice
che “potrebbe” essere utilizzato da un virus.
Entrambi i metodi sono buoni ma hanno dei limiti. Il primo ha la necessità di
essere aggiornato frequentemente per rinnovare la lista delle stringhe mentre il
secondo potrebbe indicare infetti dei file che in realtà non lo sono.
Per essere efficace un antivirus dovrebbe utilizzare entrambi i metodi di
scansione e per maggiore sicurezza sarebbe utile avere a disposizione due
antivirus diversi. E’ fondamentale poi aggiornare frequentemente l’antivirus
visto che vengono scoperti circa 300 virus nuovi ogni mese.
Un buon antivirus gratuito è l’AVG, scaricabile all’indirizzo www.grisoft.com.
Informatica di Base
99
__________________________________________________________________________________________
APPENDICE A
BASI DI HTML
Il linguaggio utilizzato dalle pagine World Wide Web, l’HyperText Markup
Language (HTML), non è un linguaggio di programmazione ma un Markup
Language, una serie di istruzioni che definiscono le caratteristiche di un
documento e ne guidano la composizione sullo schermo. In questo paragrafo
vengono descritti sinteticamente tutti i principali comandi dei quali vengono
proposte le opzioni più utili.
I comandi principali vengono scritti con font Courier New grassetto
mentre le relative opzioni in semplice Courier New. Gli elementi da inserire
che non fanno parte del linguaggio (come “immagine”, “colore”, etc..) sono
scritti in font Times New Roman. Nel testo sono riportati alcuni esempi di
pagine web per chiarire meglio l’utilizzo dei comandi HTML.
Alla fine di questo paragrafo trovate inoltre le tabelle con i codici dei colori e
dei caratteri speciali.
Struttura di base della pagina
La struttura elementare di una pagina HTML è la seguente:
<HTML>
<HEAD>
<TITLE>
Titolo della Pagina
</TITLE>
</HEAD>
<BODY>
Corpo del documento
</BODY>
</HTML>
<HTML>
...
</HTML>
<HEAD>
...
</HEAD>
Apre e chiude una pagina Html.
<TITLE>
Titolo della Pagina
</TITLE>
Assegna un titolo alla pagina che viene
visualizzato nella barra superiore del browser.
Apre e chiude la parte relativa all’intestazione
della pagina. Quanto riportato nell’intestazione
non viene visualizzato nella pagina ma serve
per fornire informazioni sul documento..
Massimiliano Teso
Maxy Guida
100
__________________________________________________________________________________________
<BODY>
...
</BODY>
Racchiude il corpo del documento HTML.
BGCOLOR=“colore”
Colore dello sfondo della pagina.
BACKGROUND=“immagine”
Nome o URL dell’immagine da disporre come
sfondo della pagina.
BGPROPIERTIES=“FIXED” Fissa lo sfondo della pagina.
TEXT=”colore”
Colore di default del testo della pagina.
<META>
Inserisce alcune informazioni sul documento
utili ad esempio ai motori di ricerca per creare
riferimenti corretti alla pagina in questione.
NAME=“nome”
Tipo di informazione. Due dei valori possibili
sono DESCRIPTION e KEYWORDS.
CONTENT=“contenuto”
Contenuto dell’informazione. Se NAME è di tipo
DESCRIPTION allora CONTENT sarà una
stringa che descrive sommariamente il
contenuto del documento, se invece è di tipo
KEYWORDS sarà una serie di parole chiave
separate da virgole.
Suoni
<BGSOUND SRC=“percorso/suono.est”> Riproduce il file audio specificato
non appena viene visualizzata la
pagina.
LOOP=”volte”
Numero di volte per cui riprodurre il
file (-1 o INFINITE indica di
riprodurre a ciclo continuo).
Informatica di Base
101
__________________________________________________________________________________________
Titoli e Paragrafi
<H1>...</H1>
<H2>...</H2>
<H3>...</H3>
<H4>...</H4>
<H5>...</H5>
<H6>...</H6>
Il testo diventa un titolo e quindi viene
rappresentato in grassetto e viene
lasciata una riga di spazio rispetto al
resto del testo. Più alto è il numero
minore è la dimensione del carattere.
<P>
...
</P>
Definisce un paragrafo normale. Il tag
</P> è opzionale.
ALIGN=“[LEFT/CENTER/RIGHT]” Allinea il contenuto del paragrafo a
sinistra, centro o destra.
<DIV>
Definisce un’area di testo da
...
formattare..
</DIV>
ALIGN=“[LEFT/CENTER/RIGHT]” Allinea il contenuto dell’area di testo a
sinistra, centro o destra.
Attributi del Testo e Altri Elementi
<EM>...</EM>
<I>...</I>
Testo in corsivo.
<STRONG>...</STRONG>
<B>...</B>
Testo in Grassetto.
<KBD>...</KBD>
<CODE>...</CODE>
Font di testo inserito da tastiera
(solitamente Courier).
<BASEFONT SIZE=”grandezza”>
Si inserisce all’inizio di ogni pagina e
definisce la grandezza di default del
testo.
<FONT >
...
</FONT>
Definisce il carattere del testo con la
grandezza e il colore indicati.
Massimiliano Teso
Maxy Guida
102
__________________________________________________________________________________________
SIZE=“grandezza”
Dimesione del carattere. Più il valore
è grande più il carattere è grande.
La grandezza del carattere può anche
essere relativa a quella definita in
BASEFONT inserendo numeri con
segno positivo o negativo.
COLOR=“colore”
Colore del carattere.
<BR>
Interruzione di riga.
<HR>
Linea orizzontale.
<BLINK>
...
</BLINK>
<CENTER>
...
</CENTER>
<!-- Commento -->
Fa lampeggiare il testo.
Centra testo e immagini.
Crea un commento che non viene
visualizzato nella pagina.
Con i comandi precedenti è già possibile creare una semplice pagina web.
Editare il testo che segue con un qualsiasi editor di testo e salvarlo con il nome
“esempio1.htm”. Per visionare il file è necessario aprirlo con un browser come
Netscape o Internet Explorer.
<HTML>
<HEAD>
<TITLE>La mia prima pagina</TITLE>
<META NAME=”DESCRIPTION” CONTENT=”pagina web con alcuni
elementi tipografici”>
<META NAME=”KEYWORDS” CONTENT=”internet, pagina, web, corsivo,
grassetto, titoli, font, colori”>
</HEAD>
<BODY BGCOLOR="gray" BACKGROUND="sfondo.gif" TEXT="blue">
<BGSOUND SRC=“base.mid” LOOP=”INFINITE”>
<BASEFONT SIZE=4> <!-- Font di defalut pari a 4 -->
<CENTER><H1>Corsivo e Grassetto</H1></CENTER>
<P> Pagina di prova per testare le potenzialità
del linguaggio HTML4.
<P><I> Scritta in corsivo</I>
<P><B> Scritta in grassetto<B>
<P><I><B> Scritta in grassetto corsivo</B></I>
Informatica di Base
103
__________________________________________________________________________________________
<BR>
<BR>
<HR>
<CENTER><H1>Font e Colori</H1></CENTER>
<P><FONT SIZE=-1 COLOR="red">
Scritta rossa con font più piccolo
</FONT>
<P><FONT SIZE=+1 COLOR="green">
Scritta verde con font più grande
</FONT>
<BR>
<BR>
<HR>
</BODY>
</HTML>
Massimiliano Teso
Maxy Guida
104
__________________________________________________________________________________________
Liste:
<UL>
<LI>
...
</LI>
Lista non ordinata in cui ogni elemento
della lista, inserito tra i due tag
<LI>...</LI>, è individuato da un
pallino.
<LI>
...
</LI>
Lista ordinata in cui ogni elemento
della lista, inserito tra i due tag
<LI>...</LI>, è individuato da un
numero crescente.
...
</UL>
<OL>
...
</OL>
<DL>
<DT>
...
</DT>
<DD>
...
</DD>
Elenco di definizioni in cui il termine
della definizione è tra i due tag
<DT>...</DT> mentre la definizione
tra i due tag <DD>...</DD>.
...
</DL>
Ecco una pagina che utilizza i comandi appena definiti.
<HTML>
<HEAD>
<TITLE>
Pagina con liste
</TITLE>
</HEAD>
<BODY >
<CENTER><H1>Pagina con liste</H1></CENTER>
<P>Lista non ordinata
<UL>
<LI>Primo elemento</LI>
<LI>Secondo elemento</LI>
<LI>Terzo elemento</LI>
<LI>Quarto elemento</LI>
</UL>
<BR>
<P>Lista ordinata
Informatica di Base
105
__________________________________________________________________________________________
<OL>
</OL>
<LI>Primo elemento</LI>
<LI>Secondo elemento</LI>
<LI>Terzo elemento</LI>
<LI>Quarto elemento</LI>
<BR>
<P>Elenco di definizioni
<DL>
<DT>Definizione
<DD>Spiegazione
<DT>Definizione
<DD>Spiegazione
<DT>Definizione
<DD>Spiegazione
</DL>
1</DT>
della prima definizione</DD>
2</DT>
della seconda definizione</DD>
3</DT>
della terza definizione</DD>
</BODY>
</HTML>
Massimiliano Teso
Maxy Guida
106
__________________________________________________________________________________________
Link
<A HREF=“indirizzo”>
...
</A>
Tutto ciò che viene compreso da
questo comando diventa un link
all’indirizzo specificato che può essere
un indirizzo esterno
(http://www.nomesito.com), un
indirizzo di posta elettronica
(mailto:[email protected]) o un
indirizzo interno (vedi sotto)
TARGET=”nome_frame”
Nome del frame in cui deve apparire il
documento collegato.
<A HREF=“#Marc”>...</A>
Tutto ciò che viene compreso dal
primo comando diventa un link interno
alla pagina stessa collegandosi con il
punto della pagina dove compare il
secondo comando (chiamato ancora).
<A NAME=“Marc”>...</A>
Immagini
<IMG SRC=“percorso/nome.est”>
Inserisce l’immagine specificata.
ALT=“testo alternativo”
Testo alternativo che verrà
visualizzato se l’immagine per
diversi motivi non viene caricata.
ALIGN=“[LEFT/RIGHT/
Con LEFT o RIGHT l’immagine
TOP/MIDDLE/BOTTOM]” viene allineata a destra o sinistra e il
testo che segue scorre ai lati.
TOP, MIDDLE e BOTTOM
determinano l’allineamento verticale
dell’immagine con altri elementi
sulla stessa riga.
VSPACE=“spazio verticale”
Spazio tra l’immagine e il testo
sopra e sotto di essa.
HSPACE=“spazio orizzontale”
Spazio tra l’immagine e il testo ai
lati.
Informatica di Base
107
__________________________________________________________________________________________
BORDER=“bordo”
Disegna un bordo dello spessore
specificato in pixel attorno
all’immagine.
Vediamo meglo cosa succede al testo e alle immagini quando si inserisce
l’opzione ALIGN.
ALIGN=LEFT: Allinea l'immagine sul bordo sinistro della finestra di
visualizzazione del browser, il testo che segue circonda la parte destra
dell'immagine.
Allineamento di tipo
left, il contorno
immagine e stato
riempito volutamente
per meglio risaltare questo tipo di
allineamento. Provate a variare le
dimensioni della finestra del browser
per meglio capirne l'allineamento.
ALIGN=RIGHT: Allinea l'immagine sul bordo destro della finestra di
visualizzazione del browser, il testo che segue circonda la parte sinistra
dell'immagine.
Allineamento di tipo
right, il contorno
immagine e stato
riempito volutamente
per meglio risaltare questo tipo di
allineamento. Provate a variare le
dimensioni della finestra del browser
per meglio capire l'allineamento.
Massimiliano Teso
Maxy Guida
108
__________________________________________________________________________________________
ALIGN=TOP: Allinea il testo che segue l'immagine con la parte superiore
dell'elemento più alto nella riga.
Allineamento di tipo
top, il contorno immagine e stato
riempito volutamente per meglio
risaltare questo tipo di allineamento.
Provate a variare le dimensioni della
finestra del browser per meglio capire
l'allineamento.
ALIGN=MIDDLE: Allinea la linea di base della riga corrente con la parte
centrale dell'immagine.
Allineamento di tipo
middle, il contorno immagine e stato
riempito volutamente per meglio
risaltare questo tipo di allineamento.
Provate a variare le dimensioni della
finestra del browser per meglio capire
l'allineamento.
ALIGN=BOTTOM: Allinea il testo che segue l'immagine con la parte inferiore
dell'elemento più basso nella riga di testo.
Allineamento di tipo
bottom, il contorno immagine e stato
riempito volutamente per meglio
risaltare questo tipo di allineamento.
Provate a variare le dimensioni della
finestra del browser per meglio capire
l'allineamento.
Informatica di Base
109
__________________________________________________________________________________________
Ecco un esempio di pagina che utilizza i link e le immagini:
<HTML>
<HEAD>
<TITLE>
Link e immagini
</TITLE>
</HEAD>
<BODY >
<CENTER><H1>Pagina con link e immagini</H1></CENTER>
<BR>
<P ALIGN="CENTER"><B>Link a elementi di questa pagina</B>
<P>
<A HREF="#ancora1">Collegamento a Immagine 1</A><BR>
<A HREF="#ancora2">Collegamento a Immagine 2</A><BR>
<A HREF="#ancora3">Collegamento a Immagine 3</A><BR>
<A HREF="#ancora4">Collegamento a Immagine 4</A><BR>
<A HREF="#ancora5">Collegamento a Immagine 5</A><BR>
<A HREF="#ancora6">Collegamento a Immagine 6</A><BR>
<BR>
<BR>
<HR>
<P ALIGN="CENTER">
<B>Link a pagine esterne e a indirizzi e-mail</B>
<P>
<A HREF="http://www.yahoo.com">Link a Yahoo</A><BR>
<A HREF="mailto:[email protected]">
Link a indirizzo e-mail</A>
<BR>
<BR>
<HR>
<P ALIGN="CENTER"><B>Immagini</B>
<P><FONT COLOR="red">
<A NAME="ancora1">Immagine 1</A></FONT>
<P> Immagine con link
<P ALIGN="CENTER">
<A HREF="http://www.astavista.com">
<IMG SRC="tarta.jpg"></A>
<BR>
<P><HR>
<P><FONT COLOR="red">
<A NAME="ancora2">Immagine 2</A></FONT>
<P><IMG SRC="tarta.jpg" ALIGN="LEFT">
Allineamento di tipo left,il contorno immagine e stato
riempito volutamente per megliorisaltare questo tipo di
allineamento. Provate a variare le dimensioni della
finestra del browser per meglio capirne l'allineamento.
Massimiliano Teso
Maxy Guida
110
__________________________________________________________________________________________
<BR>
<P><HR>
<P><FONT COLOR="red">
<A NAME="ancora3">Immagine 3</A></FONT>
<P><IMG SRC="tarta.jpg" ALIGN="RIGHT">
Allineamento di tipo right,il contorno immagine e stato
riempito volutamente per megliorisaltare questo tipo di
allineamento. Provate a variare le dimensioni della
finestra del browser per meglio capirne l'allineamento.
<BR>
<P><HR>
<P><FONT COLOR="red">
<A NAME="ancora4">Immagine 4</A></FONT>
<P><IMG SRC="tarta.jpg" ALIGN="TOP">
Allineamento di tipo top,il contorno immagine e stato
riempito volutamente per megliorisaltare questo tipo di
allineamento. Provate a variare le dimensioni della
finestra del browser per meglio capirne l'allineamento.
<BR>
<P><HR>
<P><FONT COLOR="red">
<A NAME="ancora5">Immagine 5</A></FONT>
<P><IMG SRC="tarta.jpg" ALIGN="MIDDLE">
Allineamento di tipo middle,il contorno immagine e stato
riempito volutamente per megliorisaltare questo tipo di
allineamento. Provate a variare le dimensioni della
finestra del browser per meglio capirne l'allineamento.
<BR>
<P><HR>
<P><FONT COLOR="red">
<A NAME="ancora6">Immagine 6</A></FONT>
<P><IMG SRC="tarta.jpg" ALIGN="BOTTOM">
Allineamento di tipo left,il contorno immagine e stato
riempito volutamente per megliorisaltare questo tipo di
allineamento. Provate a variare le dimensioni della
finestra del browser per meglio capirne l'allineamento.
<BR>
<P><HR>
</BODY>
</HTML>
Informatica di Base
111
__________________________________________________________________________________________
Tabelle
<TABLE>
...
</TABLE>
Crea una tabella.
BORDER=“bordo”
Inserisce un bordo esterno del
numero di pixel indicati.
WIDTH=”grandezza”
Indica la grandezza della tabella
espressa in pixel (ad esempio 100)
oppure come percentuale dell’intera
pagina (ad esempio 80%).
CELLSPACING=“bordo tra celle”
Indica il numero di pixel che c’è tra
due celle.
CELLPADDING=“bordo nelle celle”
Indica il numero di pixel che c’è tra
la cella è il suo contenuto.
ALIGN=“[LEFT/CENTER/RIGHT]”
Allinea la tabella come indicato.
BGCOLOR=“colore”
Colore di sfondo dell’intera tabella.
Per inserire righe e colonne nella tabella si utilizzano i seguenti comandi:
<TR>
...
</TR>
Definisce una riga della tabella.
ALIGN=“[LEFT/CENTER/RIGHT]”
Allineamento orizzontale del
contenuto della cella nella riga.
VALIGN=“[TOP/MIDDLE/BOTTOM]” Allineamento verticale del contenuto
delle celle nella riga.
BGCOLOR=“colore”
Colore di sfondo di tutte le celle
nella riga.
Massimiliano Teso
Maxy Guida
112
__________________________________________________________________________________________
<TH>
...
</TH>
<TD>
...
</TD>
Definisce una cella di intestazione
della quale possiamo definire
l’allineamento (orizzontale e
verticale) e il colore di sfondo
utilizzando le stesse opzioni viste per
<TR></TR>.
Indica una cella della quale
possiamo definire l’allineamento
(orizzontale e verticale) e il colore di
sfondo utilizzando le stesse opzioni
viste per <TR></TR>. Se questi
elementi non sono definiti si fa
riferimento a quelli definiti per la
riga.
Ecco un esempio di pagina con una tabella:
<HTML>
<HEAD>
<TITLE>Le Tabelle</TITLE>
</HEAD>
<BODY>
<CENTER><H1>Pagina con Tabelle</H1></CENTER>
<P><TABLE BORDER=2 WIDTH=100%
CELLSPACING=3 CELLPADDING=3 BGCOLOR="yellow">
<CAPTION>commento della tabella</CAPTION>
<TR>
<TH> Lista </TH>
<TH> Foto </TH>
</TR>
<TR ALIGN="CENTER" VALIGN="CENTER">
<TD WIDTH=20%>
<P>Lista non ordinata
<UL>
<LI>Primo elemento</LI>
<LI>Secondo elemento</LI>
<LI>Terzo elemento</LI>
<LI>Quarto elemento</LI>
</UL>
</TD>
<TD BGCOLOR="white">
<H1>Titolo della Pagina</H1>
<IMG SRC="foto.gif">
</TD>
</TR>
<TR ALIGN="LEFT" VALIGN="TOP">
<TD>
Informatica di Base
113
__________________________________________________________________________________________
</BODY>
</HTML>
<P>Lista non ordinata
<UL>
<LI>Primo elemento</LI>
<LI>Secondo elemento</LI>
<LI>Terzo elemento</LI>
<LI>Quarto elemento</LI>
</UL>
<TD BGCOLOR="white">
<H1>Titolo della Pagina</H1>
<IMG SRC="foto.gif">
</TD>
</TR>
Massimiliano Teso
Maxy Guida
114
__________________________________________________________________________________________
Moduli
<FORM>
...
</FORM>
Indica un modulo di input.
ACTION=“URL”
URL dove il modulo verrà inviato. Se
inviato per posta si scrive ad esempio:
mailto:[email protected]
METHOD=“metodo”
Indica il modo con cui vengono inviati
i dati. I valori possibili sono GET e
POST.
<INPUT>
Elemento di input per un modulo.
TYPE=“tipo”
Tipo dell’elemento di input. I valori
possibili sono: TEXT (area di testo),
SUBMIT (pulsante di spedizione),
RESET (pulsate di reset dei campi),
RADIO (caselle a scelta esclusiva),
CHECKBOX (caselle a scelta multipla),
HIDDEN (elemento nascosto).
NAME=“nome”
Nome dell’elemento.
VALUE=“valore”
Per un elemento di testo o nascosto, il
valore di default. Per una casella di
controllo o un pulsante di opzione, il
valore da inviare. Per pulsanti di reset
o invio, l’etichetta del pulsante.
CHECKED
Per caselle di controllo e pulsanti di
opzione, indica che il controllo è
attivato.
Informatica di Base
115
__________________________________________________________________________________________
<TEXTAREA>
...
</TEXTAREA>
Elemento per l’input di testo su più
righe.
NAME=”nome”
Nome dell’elemento.
ROWS=”righe”
Numero di righe visualizzate dall’area
di testo .
COLS=”colonne”
Numero di colonne(caratteri)
visualizzate dall’area di testo.
WRAP
Permette di andare a capo
automaticamente nell’area di testo.
<SELECT>
...
</SELECT>
Crea un menù o elenco a discesa di
elementi.
NAME=”nome”
Nome dell’elemento.
SIZE=”dimensione”
Numero di elementi da visualizzare.
Se è specificato diventa un menù a
scorrimento altrimenti diventa un
menù a discesa.
MULTIPLE
Consente di selezionare più elementi
dall’elenco.
<OPTION>
Indica un possibile elemento
all’interno di una SELECT
SELECTED
L’elemento viene selezionato per
default.
VALUE=”valore”
Valore da inviare se questa OPTION
viene selezionata.
Massimiliano Teso
Maxy Guida
116
__________________________________________________________________________________________
Ecco un esempio di pagina con un modulo:
<HTML>
<HEAD>
<TITLE>I Moduli</TITLE>
</HEAD>
<BODY>
<CENTER><H1>Pagina con un Modulo</H1></CENTER>
<P>Questo testo non fa parte del modulo
<HR>
<FORM METHOD=POST ACTION="mailto:[email protected]">
<P>Nome e Cognome <INPUT TYPE="TEXT" NAME="Nome" SIZE=30>
<P>Quanti anni hai?<BR>
<INPUT TYPE="RADIO" NAME="eta"
10-20<BR>
<INPUT TYPE="RADIO" NAME="eta"
20-50<BR>
<INPUT TYPE="RADIO" NAME="eta"
50-70<BR>
<INPUT TYPE="RADIO" NAME="eta"
>70<BR>
VALUE="10-20">
VALUE="20-50" CHECKED>
VALUE="50-70">
VALUE=">70">
<P>Quanto sei alto?<BR>
<SELECT NAME="altezza">
<OPTION> Meno di 1 metro</OPTION>
<OPTION> tra 1 metro e 1 metro e 20</OPTION>
<OPTION SELECTED>
tra 1 metro e 20 e 1 mentro e 50</OPTION>
<OPTION> tra 1 metro e 50 e 1 mentro e 80</OPTION>
<OPTION> Più di 1 metro e 80</OPTION>
</SELECT>
<P>Cosa acquisti normalmente?<BR>
<SELECT NAME="acquisti" SIZE=4 MULTIPLE>
<OPTION> Quotidiano</OPTION>
<OPTION> Riviste di Computer</OPTION>
<OPTION> Riviste Scientifiche</OPTION>
<OPTION> CD Musicali</OPTION>
<OPTION> Videocassette</OPTION>
<OPTION> DVD</OPTION>
</SELECT>
<P>Quali sono i tuoi interessi?<BR>
<INPUT TYPE="CHECKBOX" NAME="musica"> Musica<BR>
<INPUT TYPE="CHECKBOX" NAME="cinema"> Cinema<BR>
<INPUT TYPE="CHECKBOX" NAME="internet"> Internet<BR>
<INPUT TYPE="CHECKBOX" NAME="sport"> Sport<BR>
<P>Hai commenti o suggerimenti da proporre?<BR>
<TEXTAREA NAME="consigli" ROWS=7 COLS=25 WRAP>
</TEXTAREA>
<HR>
Informatica di Base
117
__________________________________________________________________________________________
<CENTER>
<INPUT TYPE="RESET" VALUE="Resetta Tutto">
</CENTER><BR>
<CENTER>
<INPUT TYPE="SUBMIT" VALUE="Spedisci i dati">
</CENTER>
</FORM>
</BODY>
</HTML>
Massimiliano Teso
Maxy Guida
118
__________________________________________________________________________________________
Applet
<APPLET>
...
</APPLET>
Inserisce un applet Java a esecuzione
automatica.
CLASS=”nome.class”
Nome dell’applet.
SRC=”percorso”
URL della directory dove si trova
l’applet compilato. Non si deve
includere il nome dell’applet
specificato con l’attriuto CLASS.
ALIGN=“[TOP/MIDDLE/BOTTOM]” Indica come allineare l’applet rispetto
al testo che lo segue.
WIDTH=“larghezza”
Larghezza dell’area di output
dell’applet, in pixel.
HEIGHT=“altezza”
Altezza dell’area di output dell’applet,
in pixel.
<PARAM>
Parametri specifici del programma.
NAME=“tipo”
Tipo di informazioni fornite all’applet.
VALUE=“valori”
Informazioni da fornire all’applet.
Ecco un esempio di pagina con un applet:
<HTML>
<HEAD>
<TITLE>
Pagina con Applet
</TITLE>
</HEAD>
<BODY >
<CENTER><H1>Pagina con Applet</H1></CENTER>
<P ALIGN="CENTER">
<APPLET CODE="FadesInOut2b.class" WIDTH=510 HEIGHT=32>
<PARAM NAME="TextToDisplay"
VALUE="
Questo Applet;
Visualizza una scritta che sfuma;
passando il testo da visualizzare;
come parametro;">
Informatica di Base
119
__________________________________________________________________________________________
<PARAM NAME="FontSize" VALUE="30">
<PARAM NAME="FontName" VALUE="TimesRoman">
<PARAM NAME="FontStyle" VALUE="BOLD">
<PARAM NAME="Steps" VALUE=10>
<PARAM NAME="Delay" VALUE=120>
<PARAM NAME="bgCOLOR" VALUE=255,255,255>
<PARAM NAME="textCOLOR" VALUE="255,0,0">
<PARAM NAME="Author" VALUE="George Eleftheriou">
<PARAM NAME="Email" VALUE="[email protected]">
</APPLET>
</BODY>
</HTML>
Massimiliano Teso
Maxy Guida
120
__________________________________________________________________________________________
Frame
<FRAMESET>
...
</FRAMESET>
Suddivide la finestra principale in una
serie di frame che possono
visualizzare ciascuno un documento
separato
ROWS=“righe”
Suddivide verticalmente la finestra o i
frame in un numero di righe
specificato come numero (esempio 7),
come percentuale della larghezza
totale della finestra (esempio 25%) o
come asterisco (*) per indicare che il
frame deve occupare tutto lo spazio
rimanente o che tale spazio va
suddiviso tra i frame (se sono
specificati più frame con l’asterisco).
COLS=“colonne”
Funziona in modo simile a ROWS
eccetto per il fatto che la finestra o i
frame sono suddivisi orizzontalmente
in colonne.
FRAMEBORDER=“[YES/NO]”
Visualizza o meno i bordi dei frame.
FRAMESPACING=“spessore”
Spazio tra i frame in pixel.
<FRAME>
Definisce un singolo frame.
SRC=“sorgente”
URL del documento da visualizzare.
NAME=“nome”
Nome da utilizzare per assegnare un
target al frame. Ad esso si farà
riferimento nell’attributo TARGET
presente in collegamenti <A HREF>.
SCROLLING=“[YES/NO/AUTO]”
Determina se un frame presenta o
meno barre di scorrimento. Nel caso
di AUTO verranno inserite solo se
necessario.
Informatica di Base
121
__________________________________________________________________________________________
NORESIZE
Impedisce all’utente di ridimensionare
il frame con il mouse.
<BASE TARGET=”NomeFrame”>
Da inserire in una pagina se tutti i
documenti a cui fa riferimento devono
essere necessariamente visualizzati nel
frame indicato.
Per creare un sito con frame è necessario realizzare una prima pagina che
contenga la suddivisione in righe e colonne. In questa pagina al posto del tag
<BODY> ci sarà il tag <FRAMESET>.
Ecco un esempio di pagina con tre frame (due righe di cui la prima occupa il
20% dell’intera pagina e due colonne di cui la prima occupa il 15% dell’intera
pagina):
index.html
<HTML>
<HEAD>
<TITLE>
Pagina con Frame
</TITLE>
</HEAD>
<FRAMESET ROWS="15%,*">
<FRAME SRC="testa.html" NAME="Testa" SCROLLING="NO">
<FRAMESET COLS="20%,*">
<FRAME SRC="menu.html" NAME="Menu" SCROLLING="AUTO">
<FRAME SRC="pagina1.html" NAME="Corpo" SCROLLING="AUTO">
</FRAMESET>
</FRAMESET>
</HTML>
Ed ecco i codici delle singole pagine che vengono richiamate all’interno dei
frame:
testa.html
<HTML>
<HEAD>
<TITLE>
Testa
</TITLE>
</HEAD>
<BODY >
<P ALIGN="CENTER">
<APPLET CODE="FadesInOut2b.class" WIDTH=680 HEIGHT=32>
<PARAM NAME="TextToDisplay"
Massimiliano Teso
Maxy Guida
122
__________________________________________________________________________________________
VALUE="
Pagina di presentazione con Frame;
La pagina è divisa in tre frame;
un'intestazione, un menù e il corpo della pagina;">
<PARAM NAME="FontSize" VALUE="30">
<PARAM NAME="FontName" VALUE="TimesRoman">
<PARAM NAME="FontStyle" VALUE="BOLD">
<PARAM NAME="Steps" VALUE=10>
<PARAM NAME="Delay" VALUE=120>
<PARAM NAME="bgCOLOR" VALUE=255,255,255>
<PARAM NAME="textCOLOR" VALUE="255,0,0">
<PARAM NAME="Author" VALUE="George Eleftheriou">
<PARAM NAME="Email" VALUE="[email protected]">
</APPLET>
</BODY>
</HTML>
menu.html
<HTML>
<HEAD>
<TITLE>
Menu
</TITLE>
</HEAD>
<BODY >
<BASE TARGET="Corpo">
<P ALIGN="CENTER"><IMG SRC="toto.gif">
<P><H3>Menù</H3>
<P><A HREF="pagina1.html">Pagina 1</A><BR>
<P><A HREF="pagina2.html">Pagina 2</A><BR>
<P><A HREF="pagina3.html">Pagina 3</A><BR>
</BODY>
</HTML>
pagina1.html
<HTML>
<HEAD>
<TITLE>
Menu
</TITLE>
</HEAD>
<BODY >
<BASE TARGET="Corpo">
<CENTER><H1>Pagina 1</H1></CENTER><BR>
<P ALIGN="CENTER"><IMG SRC="programm.jpg"><BR>
<HR>
</BODY>
</HTML>
Informatica di Base
123
__________________________________________________________________________________________
pagina2.html
<HTML>
<HEAD>
<TITLE>
Menu
</TITLE>
</HEAD>
<BODY >
<BASE TARGET="Corpo">
<CENTER><H1>Pagina 2</H1></CENTER><BR>
<P ALIGN="CENTER"><IMG SRC="sciacqua.jpg"><BR><BR>
<HR>
</BODY>
</HTML>
pagina3.html
<HTML>
<HEAD>
<TITLE>
Menu
</TITLE>
</HEAD>
<BODY >
<BASE TARGET="Corpo">
<CENTER><H1>Pagina 3</H1></CENTER><BR>
<P ALIGN="CENTER"><IMG SRC="bunny.gif"><BR><BR>
<P ALIGN="CENTER"><IMG SRC="astro.gif"><BR><BR>
<P ALIGN="CENTER"><IMG SRC="drago.gif"><BR><BR>
<P ALIGN="CENTER"><IMG SRC="tuoni.gif"><BR><BR>
<HR>
</BODY>
</HTML>
Massimiliano Teso
Maxy Guida
124
__________________________________________________________________________________________
Caratteri Speciali
Per inserire nelle pagine caratteri o simboli particolari è necessario fare ricorso al
loro codice numerico o nominale (è preferibile utilizzare sempre il primo).
Ecco dunque un elenco non esaustivo dei codici da inserire in un listato HTML
per ottenere determinati caratteri.
Carattere
Codice Numerico
Codice Nominale
à
&#224;
&agrave;
À
&#192;
&Agrave;
á
&#225;
&aacute;
Á
&#193;
&Aacute;
è
&#232;
&egrave;
È
&#200;
&Egrave;
é
&#233;
&eacute;
È
&#201;
&Eacute;
ì
&#236;
&igrave;
Ì
&#204;
&Igrave;
í
&#237;
&iacute
Í
&#205;
&Iacute;
ò
&#242;
&ograve;
Ò
&#210;
&Ograve;
ó
&#243;
&oacute;
Ó
&#211;
&Oacute;
ù
&#249;
&ugrave;
Ù
&#217;
&Ugrave;
ú
&#250;
&uacute;
Ú
&#218;
&Uacute;
ñ
&#241;
&Utilde;
Ñ
&#209;
&Ntilde;
<
&#60;
&lt;
>
&#62;
&gt;
«
&#171;
nessuna
»
&#171;
nessuna
®
&#174;
&reg;
&
&#38;
&amp;
©
&#169;
&copy;
"
&#34;
&quot;
Informatica di Base
125
__________________________________________________________________________________________
Tabella dei Colori
Per alcuni dei colori più diffusi è possibile utilizzare il loro nome inglese. Questi
i sedici valori standard: green (verde), silver (argento), lime (cedro), gray
(grigio), olive (verde oliva), white (bianco), yellow (giallo), maroon( castano),
navy (blue), red (rosso), blue (azzurro), purple (porpora), teal (verde scuro),
fucsia (fucsia) e acqua (acquamarina). Per gli altri colori è necessario utilizzare
un codice esadecimale.
Ecco un elenco non esaustivo:
Colore
Codice
NERO
#000000
BIANCO
#FFFFFF
ROSSO
#FF0000
CICLAMINO
#FF3296
ARANCIONE
#F19600
GIALLO
#FAFA50
GIALLO CANARINO
#EBFF64
OCRA
#FAC878
VERDE
#00FF00
VERDE SCURO
#00641E
VERDE CHIARO
#00FF96
VIOLA
#6432C8
LILLA
#BE6EFA
AZZURRO
#0096C8
AZZURRO SCURO
#3C5AC8
BLU CHIARO
#3232C8
BLU
#0000FF
Massimiliano Teso
Maxy Guida
126
__________________________________________________________________________________________
APPENDICE B
INSTALLARE MYSQL
MySQL è nato per sistemi Unix ed è uno dei più diffusi database utilizzati su
Internet. Veloce, affidabile, disponibile pressoché per tutti i sistemi operativi e
privo di bugs, è la soluzione ideale per siti Web di qualsiasi dimensione e
traffico. Gratuito nelle versioni per Linux e recentemente anche per Windows.
Prima di tutto è necessario prelevare i file necessari all’indirizzo internet
http://www.mysql.com/. Una volta entrati nella pagina si vada nella sezione
downloads per scaricare l’ultima versione stabile del programma.
Sempre da questo sito consiglio di scaricare il manuale completo (in inglese)
dove si possono trovare maggiori dettagli sulle varie funzionalità supportate.
Nella pagina dedicata alle utilities troviamo anche moltissimi strumenti che
facilitano il nostro lavoro di gestione e manutenzione del database.
Ora possiamo installare MySQL sul nostro computer Windows.
Installazione è quanto di più semplice si possa desiderare: è sufficiente
decomprimere il file zip e lanciare il file setup.exe. Il programma verrà
installato nella directory c:\mysql.
A questo punto dobbiamo portarci nella directroy
c:\mysql\bin\
e avviare prima di tutto il server con il comando:
mysqld
Possiamo controllare in ogni momento se il server è attivato con il comando
mysqladmin ping
E’ poi necessario lanciare il client SQL richiamabile con il comando:
mysql
A questo punto MySQL è stato avviato. Nella shell possiamo inviare
direttamente i comandi per creare, modificare, cancellare e visualizzare i
database.
In MySQL tutti i comandi devono terminare con un punto e virgola. Si tratta di
una misura resa necessaria dalla possibilità di distribuire una medesima
istruzione su più righe.
Informatica di Base
127
__________________________________________________________________________________________
E’ necessario ora creare un database con il comando:
mysql>CREATE DATABASE nomeDatabase;
ad esempio creiamo il database di nome agenda
mysql>CREATE DATABASE agenda;
Per usare il database appena creato si scrive
mysql>USE agenda;
A questo punto è possibile utilizzare il lingaggio SQL per creare la struttura
della propria base di dati e per popolarla.
Per semplificare il lavoro è possibile creare con un editor di testo un file con
tutti i comandi per la creazione della base di dati che può essere poi importato in
mysql con il comando
mysql>source NomeFile.txt;
Per chiudere il client si deve digitare il comando
mysql> QUIT;
mentre per disattivare il server è necessario digitare il comando
mysqladmin –u root shutdown;
Massimiliano Teso
Maxy Guida
128
__________________________________________________________________________________________
APPENDICE A
MANUALE DEL DOS
Indice
Introduzione al DOS
Il comando help
Il comando dir
Il comando cls
Il comando cd
Il comando del
Il comando ren
Il comando md
Il comando rd
Il comando copy
Il comando xcopy
Il comando move
Il comando mem
I Comandi date e time
Il comando attrib
I comandi label e vol
Il comando chkdsk
Il comando diskcopy
Il comando sys
Il comando edit
Il comando type
Il comando find
Pag 129
Pag 129
Pag 130
Pag 131
Pag 131
Pag 132
Pag 132
Pag 133
Pag 133
Pag 133
Pag 134
Pag 134
Pag 135
Pag 136
Pag 137
Pag 138
Pag 139
Pag 139
Pag 140
Pag 140
Pag 141
Pag 141
Informatica di Base
129
__________________________________________________________________________________________
Introduzione al DOS
Il DOS è uno dei primi sistemi operativi scritti per i computer ed è
l’abbreviazione di Disk Operative System (MSDOS sta per Microsoft DOS, dal
nome dell’azienda che lo ha implementato). In queste dispense vengono
presentati dei comandi che potrebbero non essere supportati dalle ultime
versioni di DOS presenti nei sistemi operativi Microsoft Windows.
Una volta acceso il computer il DOS ci appare con una linea di testo di questo
tipo:
C:\> (detta root principale)
La lettera C: indica l’hard disk mentre il simbolo > è il così detto prompt e
indica che il computer si aspetta dei dati in ingresso immessi attraverso la
tastiera.
All’interno dell’Hard Disk i fle sono organizzati in Directory che potrebbero
essere paragonate alle cartelle presenti nel sistema operativo Windows. Per
accedere a questi file DOS non supporta un’interfaccia grafica come Windows e
quindi tutte le operazioni si svolgono in maniera testuale immettendo comandi
attraverso la tastiera.
Il DOS non è Case Sensitive cioè non distingue le maiuscole dalle minuscole
come invece fanno altri sistemi operativi (ad esempio Linux).
Per accedere a un nuovo disco basta digitare la lettera relativa al disco seguita
dai due punti. Ad esempio, per accedere al Floppy Disk basta digitare
C:\> a:
e premere invio. Il computer si posizionerà sul prompt di A
A:\>
Il comando help
Mostra sul monitor una spiegazione di ciascun comando DOS, la sua sintassi e il
significato delle opzioni utilizzabili.
sintassi: help comando
il comando è uno qualsiasi dei comandi DOS.
Esempio:
C:\> help dir
Massimiliano Teso
Maxy Guida
130
__________________________________________________________________________________________
mostra il significato del comando “DIR”, la sua sintassi e le opzioni a
disposizione.
Parlando della sintassi dei comandi DOS, abbiamo visto che sono presenti delle
opzioni, cioè dei parametri che modificano l’effetto del comando al seguito del
quale sono stati digitati.
Il DOS 5 ha introdotto una opzione valida per tutti i comandi.
Digitando
C> dir /?
otteniamo lo stesso effetto del comando “help”: appare sul monitor una
spiegazione del comando, la sua sintassi, e il significato delle opzioni
utilizzabili.
Questo parametro è a disposizione di qualunque comando DOS e deve essere
usato da solo, senza alcuna indicazione di drive, path, nomefile o altre opzioni.
Quando, nel corso di queste dispense, indichiamo i parametri a disposizione di
ciascun comando, non indicheremo mai l’opzione “/?”, ma è utile tenere
presente che in caso di dubbio sulla esatta sintassi di un comando è sempre
possibile utilizzarla.
Il comando dir
Uno dei comandi più utilizzati è dir il quale elenca tutti i file di una determinata
directory. Il DOS permette di inserire, dopo un comando, una serie di parametri
che permettono di rendere più specifico il comando stesso. Vediamo un elenco
di parametri relativi al comando dir:
Comando
C:\>dir /p
C:\>dir /s
C:\>dir
C:\>dir
C:\>dir
C:\>dir
C:\>dir
C:\>dir
C:\>dir
/ah
/ad
/as
/w
/on
/os
/?
Azione
Lista i file e le sotto cartelle e aspetta che si prema un tasto
per accedere alle altre schermate
Lista tutti i file nella cartella corrente e in tutte le sotto
cartelle
Lista solo i file nascosti
Lista solo le sottocartelle
Lista solo i file di sistema
Mette i file in quattro colonne
Lista i file ordinati per nome
Lista i file ordinati per grandezza
elenca tutte le opzioni...
Informatica di Base
131
__________________________________________________________________________________________
Si può usare il carattere asterisco "*" come una specie di accumulatore di nomi.
Se, ad esempio, si vogliono elencare tutti i files con estenzione "txt" basta
digitare
dir *.txt
Se si vogliono elencare tutti i file che iniziano per marco (ad esempio
marcopeppe.txt, marco2.doc, marcone.exe), basta digitare
dir marco.*
Il comando cls
Digitando
C:\> cls
che sta per Clear Screen si cancella lo schermo da tutte le scritte presenti.
Il comando cd
Per potersi spostare nelle varie directory si usa il comando cd che sta per
Change Directory. Se quindi si è nella directory
C:\WINDOWS>
e si vuole andare in
C:\WINDOWS\SYSTEM>
basta digitare il comando
cd system
Per tornare indietro si deve digitare il comando
cd..
mentre se si vuole tornare direttamente alla root principale si deve digitare il
comando
cd\
Massimiliano Teso
Maxy Guida
132
__________________________________________________________________________________________
Se si vuole raggiungere una determinata directory da un qualunque punto
dell’hard disk è necessario indicare tutto il percorso.
Se, ad esempio, ci si trova nella cartella C:\GIOCHI\ e e sio vuole accedere
alla cartella C:\WINDOWS\SYSTEM\ si possono fare i seguenti passi:
C:\GIOCHI\> cd\
C:\>cd windows
C:\WINDOWS\>cd system
Ma è preferibile accedere direttamete scrivendo il percorso assoluto:
C:\GIOCHI\> cd\windows\system
oppure
C:\GIOCHI\>cd c:\windows\system
Il comando del
Per cancellare un file si usa il comando del (abbreviazione di delete da to
delete che in inglese significa appunto cancellare ).
Anche in questo caso è possibile utilizzare l’asterisco come accumulatore.
Se volgiamo cancellare da una directory tutti i file con estensione txt basta
scrivere il comando
del *.txt
Se invece volgiamo eliminare tutti i file della directory è necessario inserire il
comando
del *.*
Il comando ren
Per cambiare nome ad un file ad un file si usa il comando
C:\> ren nome1.estensione1 nome2.estensione2
Il file nome1.estensione1 non esiste più e al suo posto è apparso il file
nome2.estensione2 che ha lo steso contenuto.
Anche in questo comando si può usare il carattere asterisco.
Informatica di Base
133
__________________________________________________________________________________________
Comando ren:
Rinomina i file.
sintassi: ren [drive:] [path] nomefile1 nomefile2
il drive è quello in cui si trova il disco con il file da rinominare
la path è quella in cui si trova il file da rinominare
il nomefile1 è il nome del file da rinominare. E’ possibile usare i caratteri “?”
e “*”. Si usa “?” per sostituire un carattere, e “*” per un gruppo imprecisato di
caratteri
il nomefile2 è il nuovo nome del file. E’ possibile usare i caratteri “?” e “*”.
Si usa “?” per sostituire un carattere, e “*” per un gruppo imprecisato di
caratteri.
Il comando md
Per creare una nuova directory si utilizza il comando md che sta per Make
Directory seguito dal nome della directory che si vuole creare.
Se, ad esempio, siamo nella root principale e volgiamo creare una directory di
nome temp, basta digitare il comando
md temp
Il comando rd
Per rimuovere una directory si usa il comando rd che sta per Remove
Directory. La directory deve essere completamente vuota altrimenti il DOS
visualizza un messaggio di errore.
Per rimuovere la directory temp basta digitare il comando
rd temp
Il comando copy
Per copiare un file da una parte all’altra dell’Hard Disk o dall’Hard Disk a un
dischetto si utilizza il comando copy con la seguente sintassi:
copy [drive1:][path1]nomefile1
[drive2:][path2]nomefile2 [Opzioni]
drive1 è quello in cui si trova il disco con il file originale,
path1 è quella della subdirectory in cui si trova il disco con il file originale,
Massimiliano Teso
Maxy Guida
134
__________________________________________________________________________________________
nomefile1 è il nome del file che si vuole copiare. E’ possibile usare i caratteri
“?” e “*”. Si usa “?” per sostituire un carattere, e “*” per un gruppo imprecisato
di caratteri
drive2 è quello in cui si trova il disco in cui si vuole copiare il file
path2 è quella della subdirectory in cui si vuole copiare il file
nomefile2 è l’eventuale nome finale del file copiato. Se si omette, il DOS gli
attribuisce lo stesso nome di quello originale.
L’opzione principale è:
/v per verificare la corretta duplicazione del file
Il comando xcopy
Questo comando permette di copiare oltre ai file anche le sottodirectory di una
determinata directory. La sintassi è la seguente:
xcopy [drive1:] path1 [drive2:] [path2] [opzioni]
drive1 è quello in cui si trova il disco la subdirectory originale
path1 è quella della directory originale
drive2 è quello in cui si trova il disco dove si vuole registrare la directory
path2 è quella della directory in cui si vuole registrare.
le opzioni principali sono:
/s espande l’esecuzione della copia a tutte le subdirectory contenute in quella
originale, tranne quelle vuote
/e aggiunge, all’opzione precedente, anche le subdirectory vuote
/d date effettua la copia solo dei file modificati dalla data indicata in poi
/v per verificare la corretta duplicazione
Il comando move
Per spostare un file da una directory all’altra si usa il comando move.
Ad esempio il comando
C:\TEMP\>move a:*.exe
Sposta tutti i files exe dal floppy alla cartella corrente TEMP.
Informatica di Base
135
__________________________________________________________________________________________
Il comando mem
Questo comando serve per visualizzare la quantità di memoria disponibile e
utilizzata dal computer.
Digitando
C:\> mem
Avrete come risposta un elenco dettagliato dello stato della memoria nel vostro
PC.
Si ottiene normalmente una risposta di questo tipo:
656384 bytes total conventional memory
655360 bytes available to MS-DOS
608640 largest executable program size
3145728 bytes total contiguos extended memory
MS-DOS resident in High Memory Area
nella quale possono variare con molta probabilità sia le cifre che le frasi che le
accompagnano, in quanto entrambi corrispondenti alle diverse configurazioni di
memoria e di sistema.
Lo schema che il computer ci ha appena mostrato, ci da le seguenti indicazioni:
- la memoria convenzionale è di 656384 bytes (pari a 640Kb);
- di questa, il DOS può lavorare con 655360 bytes;
- di questi, 608640 bytes sono ancora liberi a disposizione dei programmi e
dei dati da caricare in memoria, mentre il resto è occupato dal DOS
stesso;
- inoltre sono presenti 3145728 bytes (pari a 3Mb) utilizzati come memoria
estesa per quei programmi che la possono utilizzare;
- il DOS si è installato nella parte alta di memoria, cioè nei primi 64Kb
della memoria estesa, per lasciare libera la maggiore quantità possibile di
memoria convenzionale per i programmi ed i dati.
Tirando le somme, la RAM presente nel computer è dei classici 640Kb più una
espansione di 3Mb per la memoria estesa. Ma se esiste la memoria estesa, vuol
dire che esistono anche 384Kb di memoria (chiamata upper memory area)
utilizzata, ad esempio per la gestione del monitor, e non disponibile per il DOS
ed i programmi.
Il totale della memoria installata è quindi di 4Mb:
Massimiliano Teso
Maxy Guida
136
__________________________________________________________________________________________
- 1Mb costituita da 640Kb di memoria convenzionale e da 384Kb di upper
memory area (non utilizzabile)
- 3Mb memoria estesa.
le opzioni del comando mem sono:
/program mostra anche i programmi caricati in memoria
/debug mostra informazioni utili ai programmatori sullo stato della memoria
/classify mostra i programmi caricati nella memoria convenzionale e nella
upper memory area con informazioni utili ai programmatori
Si può usare solo una opzione per ciascuna volta che si introduce il comando.
I comandi time e date
Per visualizzare l’ora digitate
C:\> time
il computer vi chiederà inoltre se volete cambiarla. Per cambiarla immettete
l’ora esatta nella forma
15:21:00
Altrimenti premete invio
Per visualizzare la data digitate
C:\> date
Anche in questo caso vi viene chiesto se volete cambiarla. Se volete farlo
immettete la giusta data nella forma:
21/11/92
Comando date:
Mostra la data corrente o resetta il calendario del computer.
sintassi: date [giorno/mese/anno]
L’espressione giorno/mese/anno deve essere immessa nella forma
XX/XX/XXXX di due cifre per il giorno, due per il mese e quattro per l’anno.
Se il comando DATE viene usato senza alcuna indicazione, il DOS mostra la
data registrata nel calendario del computer.
Informatica di Base
137
__________________________________________________________________________________________
Comando time:
Mostra l’ora attuale o resetta l’orologio del computer.
sintassi: time [ore:minuti:secondi]
L’espressione ore:minuti:secondi deve essere immessa nella forma XX:XX:XX
di due cifre per l’ora, due per i minuti e due per i secondi.
Se il comando TIME viene usato senza alcuna indicazione, il DOS mostra l’ora
registrata nell’orologio del computer.
Il comando attrib
I file possono avere vari attributi che ne specificano alcune caratteristiche, come
ad esempio se un file è nascosto oppure se è un file di sistema e via dicendo.
Attrib
A
H
R
S
Significato
Archivio, ossia normalmente un file ha questo attributo
nascosto, i file con questo attributo non vengono listati con un
comando dir standard
Lettura, i file con questo attributo possono essere solo letti
Sistema, ossia i file di sistema come MSDOS.SYS e IO.SYS
Le lettere che contrassegnano gli attributi sono le iniziali delle rispettive voci in
lingua inglese, ossia, Archive, Hidden, Read Only, System.
Per modificare gli attributi di un file esiste il comando attrib, che ha la
seguente sintassi:
attrib nomedelfile.estenzione + Attributo (per attivarlo) oppure –
Attributo (per disattivarlo)
Dove attributo è specificato dalla lettera corrispondente nella tabella sopra.
Ad esempio per rendere un file di sola lettura è sufficiente scrivere:
(supponiamo che vogliamo rendere di sola lettura il file leggimi.txt che si trova
in C:\DOC)
C:\DOC\> attrib leggimi.txt +R
Gli attributi possono essere messi in cascata quindi ad esempio:
C:\DOC\> attrib leggimi.txt +R +H –A
è un comando legittimo.
Massimiliano Teso
Maxy Guida
138
__________________________________________________________________________________________
I comandi label e vol
Se non avete attribuito un’etichetta ad un dischetto, o se volete modificare quella
esistente, è possibile dare un nome a un disco anche dopo la preparazione. Il
comando è
C:\> label A:nuovo_nome
che attribuisce al disco presente nel drive A il nome di nuovo_nome.
L’etichetta deve essere al massimo di 11 lettere.
Il comando label senza alcuna opzione
C:\> label a:
ci mostra sul video il nome attuale del disco presente nel drive A, il suo numero
di serie, e ci propone di inserire una nuova etichetta. Premendo solo il tasto
“Invio” il DOS chiede se si vuole cancellare il nome attuale del disco o se si
vuole lasciarlo inalterato.
Il numero di serie non può essere modificato.
Se si vuole solo conoscere l’etichetta attuale di un disco, senza volerla
modificare, basta il comando
C:\> vol a:
che mostra nome e numero di serie del disco nel drive A senza altra possibilità.
Comando label:
Modifica, cambia o cancella l’etichetta di un disco
sintassi: label [drive:] [nomedisco]
il drive: è quello nel quale si trova il disco
il nomedisco è l’etichetta da attribuire al disco; può essere lungo fino a 11
caratteri.
Se nel comando non viene specificato un nomedisco il DOS mostra l’etichetta
attuale e chiede se si vuole modificarla, confermarla o cancellarla.
Comando vol:
Visualizza nome e numero di serie di un disco
sintassi: vol [drive:]
il drive: è quello nel quale si trova il disco di cui si vuole conoscere
l’identificazione
Informatica di Base
139
__________________________________________________________________________________________
il comando chkdsk
Se un dischetto provoca errori di scrittura o lettura, è bene dare il comando
C:\> chkdsk a:
che effettua un controllo approfondito dello stato del dischetto e cerca eventuali
errori. Vengono inoltre testati tutti i settori del disco ed eventuali blocchi
difettosi vengono segnati come inutilizzabili. Alla fine viene mostrata sullo
schermo una sintesi dello stato del disco: capacità, numero dei file invisibili,
numero delle subdirectory, dei file ordinari, dei settori difettosi, e lo spazio
ancora libero.
Comando chkdsk:
Controlla un disco e ne visualizza lo stato.
sintassi: chkdks [drive:] [path] [opzioni]
il drive: è quello nel quale si trova il disco da controllare
la path è l’eventuale subdirectory che si vuole controllare
le opzioni sono:
/f ripara automaticamente gli errori incontrati nella verifica
/v visualizza il nome dei documenti mentre vengono controllati
Se non viene utilizzata l’opzione /f il DOS chiede conferma della riparazione
ad ogni errore incontrato.
Il comando diskcopy
Di tanto in tanto sarà necessario fare la copia di un dischetto per darlo a un
collega o un amico.
Il comando
C:\> diskcopy a: a:
serve a copiare un dischetto da 3,5 pollici utilizzando lo stesso drive. Il DOS
avvertirà prima di inserire il dischetto originale, e quindi di estrarlo per inserire
quello di destinazione. Questo scambio sarà ripetuto più volte.
Se il dischetto di destinazione non è formattato, il DOS provvederà a farlo con
lo stesso numero di tracce, settori e capacità del dischetto originale.
Prima dell’operazione di copiatura al dischetto di destinazione verrà attribuito
un numero di serie diverso da quello dell’originale, di modo che il DOS possa
distinguere i due dischetti durante i vari scambi nel drive.
Massimiliano Teso
Maxy Guida
140
__________________________________________________________________________________________
Comando diskcopy:
Effettua la copia di un disco
sintassi: diskcopy [drive1:] [drive2:] [opzione]
il drive1: è il drive nel quale si trova il dischetto originale
il drive2: è il drive nel quale si trova il dischetto destinazione
l’opzione principale è:
/v verifica la corretta copiatura del disco
Se drive1: e drive2: sono uguali il DOS provvede a richiedere
l’inserimento alternato del disco originale e di quello di destinazione.
I dischi indicati nel drive1: e nel drive2: devono avere lo stesso formato e
la stessa formattazione.
Il comando sys
Se si vuole creare un disco di sistema è sufficiente digitare
C:\> sys a:
che registra i file di sistema nel dischetto del drive A, rendendo possibile
caricare da questo disco, all’accensione del computer, il sistema operativo.
Comando sys:
Rende di sistema un disco di dati
sintassi: sys drive:
il drive: è quello nel quale si trova il disco da rendere di sistema
Il comando edit
Per creare un file nel quale scrivere del testo o dei comandi è necessario digitare
il comando
C:\> edit nomefile.estensione
Se il file già esiste verrà aperto e visualizzato dall’editor altrimenti l’editor sarà
vuoto e potrete creare un nuovo file salvando prima di uscire dal programma.
Informatica di Base
141
__________________________________________________________________________________________
Il comando type
Se vogliamo vedere il contenuto di un file è possibile digitare
C:\> type command.com
Il DOS legge il file indicato e ne visualizza il contenuto sullo schermo.
Naturalmente si avrà un risultato comprensibile solamente se il file è formato da
testo, negli altri casi verranno visualizzati un insieme di simboli incomprensibili.
Un risultato incomprensibile, ad esempio, si ottiene con
C:\> type c:\dos\fdisk.exe
Comando type:
Visualizza su schermo il contenuto di un file.
sintassi: type [drive:] [path] nomefile
il drive: è quello in cui si trova il disco con il file da visualizzare
la path è quella in cui si trova il file da visualizzare
il nomefile è il nome del file da visualizzare.
Il comando find
E’ possibile cercare un testo all’interno di un file, con il comando FIND.
C:\> find “Caro amico” C:\lettere\giovanni.doc
cerca le parole “Caro amico” nel file giovanni.doc contenuto nella
subdirectory C:\lettere e mostra il risultato negativo o positivo della
ricerca.
Comando find:
Esamina il contenuto di un file alla ricerca di un testo.
sintassi: find [opzioni] “testo” [drive:] [path] nomefile
il “testo” è il testo da cercare, va compreso fra virgolette
il drive: è quello in cui si trova il disco con il file da esaminare
la path è quella in cui si trova il file da esaminare
il nomefile è il nome del file da esaminare
le opzioni principali sono:
/v mostra le righe del file che non contengono il testo cercato
/c mostra il numero di righe che contengono il testo da cercare
/n mostra numerate le righe del file
/i cerca il testo senza differenza fra maiuscolo e minuscolo
Massimiliano Teso
Maxy Guida
142
__________________________________________________________________________________________