Informatica
Introduzione al Corso
Leonardo Vanneschi
1
1. Il corso di Informatica
Il corso ha una serie di obiettivi, per così dire, "particolari" più un solo obiettivo "generale", forse
più ambizioso dei precedenti.
Gli obiettivi particolari sono:
•
Apprendimento di alcuni concetti fondamentali dell'Informatica, come quelli di algoritmo,
problema, programma e sistema operativo.
•
Apprendimento di alcuni concetti fondamentali di programmazione e loro applicazione al
linguaggio Java.
L'obiettivo generale è quello, mediante i precedenti punti, di conferire allo studente con formazione
differente da quella informatica, la mentalità tipica di un informatico o, con termini diversi,
l'approccio con il quale un informatico risolve i problemi.
2
2. Algoritmo, Problema, Programma
Lo scopo fondamentale della programmazione è quello di risolvere tramite un computer problemi
che un essere umano non riuscirebbe a trattare (in tempi ragionevoli) "a mano".
Esempio:
ricerca di un elemento all'interno di una sequenza non ordinata. Si pensi al problema di cercare il
nome di una persona all'interno di un elenco non ordinato alfabeticamente. Si supponga che l'elenco
sia composto da diversi milioni di persone. Tramite un semplice programma, il problema può essere
risolto in un tempo molto ridotto!
Prima di poter scrivere un programma che risolve un problema, però, un informatico deve avere ben
chiaro nella propria testa il procedimento (o il modo) con cui il problema deve essere risolto. Nella
maggior parte dei casi, infatti, uno stesso problema può essere risolto in molti modi diversi, alcuni
più semplici, altri più complessi.
Esempio:
Si consideri il problema di dover cercare una persona che risponde a determinate caratteristiche
all'interno di una sequenza non ordinata alfabeticamente. Supponiamo che queste caratteristiche
siano le seguenti: la persona deve essere di sesso femminile, essere nata in Lombardia, avere una
Laurea in una disciplina scientifica e conoscere la lingua inglese. Esistono (almeno!) i seguenti
procedimenti per risolvere questo problema:
Procedimento 1:
•
Scandire tutta la sequenza persona per persona e, per ognuna delle persone, verificare se le
caratteristiche corrispondono con quelle richieste.
•
Scegliere la prima persona trovata con caratteristiche corrispondenti a quelle richieste.
Procedimento 2:
•
A partire dalla sequenza data, creare una nuova sotto-sequenza composta solo da persone di
sesso femminile.
•
A partire da questa nuova sequenza (ove essa non sia vuota), creare una ulteriore sottosequenza composta da tutte le persone residenti in Lombardia.
•
A partire da questa nuova sequenza (ove essa non sia vuota), creare una ulteriore sottosequenza composta da tutte le persone con una Laurea in una disciplina scientifica.
•
A partire da questa nuova sequenza (ove essa non sia vuota), creare una ulteriore sottosequenza composta da tutte le persone che conoscono l'inglese.
•
Scegliere una qualsiasi persona appartenente alla sequenza risultante.
3
Come abbiamo visto dal precedente esempio, esistono più procedimenti per risolvere lo stesso
problema. Nel gergo informatico, spesso si usa dire che uno stesso problema può essere risolto
tramite diversi algoritmi.
Intuitivamente, un algoritmo si può definire come un procedimento che consente di ottenere un
risultato atteso eseguendo, in un determinato ordine ed in modo non ambiguo, un insieme di passi
semplici corrispondenti ad azioni scelte solitamente da un insieme finito.
In termini leggermente più formali, un algoritmo è (definizione) un insieme di azioni o istruzioni
elementari (univocamente interpretabili) che, eseguite in un ordine stabilito, permettono la
soluzione di un problema in un numero finito di passi.
In base alla precedente definizione, evinciamo le quattro proprietà fondamentali di un algoritmo:
•
•
•
•
La sequenza di istruzioni deve essere finita.
Essa deve portare ad un risultato.
Le istruzioni devono essere eseguibili materialmente.
Le istruzioni non devono essere ambigue.
Affermando che i passi costituenti di un algoritmo debbano essere "semplici", si intende soprattutto
che essi siano specificati in modo non ambiguo, ovvero immediatamente evidenti a chi sarà
chiamato ad applicare l'algoritmo, cioè il suo esecutore.
Una volta stabilito un algoritmo, esso deve essere tradotto in un linguaggio di programmazione, in
modo da poter essere eseguito su un calcolatore. In altri termini:
un programma è la traduzione in un linguaggio di programmazione di un algoritmo
In gergo si dice che un programma implementa un algoritmo o ne costituisce la sua
implementazione.
Il concetto di algoritmo ha una grande rilevanza in matematica e in informatica, in cui esso viene
generalmente descritto come "procedimento di risoluzione di un problema". In questo contesto, i
"problemi" che si considerano sono quasi sempre caratterizzati da dati di ingresso variabili. Per
esempio, il calcolo del massimo comun divisore fra due numeri è un esempio di "problema", e i
suoi dati di ingresso, variabili di volta in volta, sono i due numeri in questione. A un non
matematico questa potrebbe apparire come una "famiglia di problemi" (il problema di calcolare il
massimo comun divisore fra 10 e 15, il problema di calcolarlo fra 40 e 60, fra 35 e 95, e così via). Il
matematico e l'informatico identificano con la parola "problema" l'intera famiglia e con "istanza" o
"caso particolare" ciascuno dei quesiti specifici ottenuti fissando due particolari valori.
Data questa premessa, un algoritmo risolve un problema se è costituito da una sequenza di passi
che, applicata indifferentemente a qualunque istanza del problema, produce in un tempo finito la
soluzione desiderata.
Se questa idea aveva una certa importanza per il calcolo matematico, l'avvento dell'informatica l'ha
arricchita di una nuova importanza (ed è infatti con l'informatica che il termine "algoritmo" ha
iniziato a diffondersi). Infatti, se per ottenere un certo risultato (risolvere un certo problema) esiste
un procedimento infallibile, che può essere descritto in modo non ambiguo fino ai dettagli, e
4
conduce sempre all'obiettivo desiderato in un tempo finito, allora esistono le condizioni per affidare
questo compito a un computer, semplicemente descrivendo l'algoritmo in questione in un
programma scritto in un opportuno linguaggio comprensibile alla macchina.
3. Hardware e Software
Hardware è un termine creato da due termini dalla lingua inglese,hard=duro,ware=merce,e
significa attrezzo o ferramenta. In particolare è la parte fisica di un personal computer, ovvero tutte
quelle parti magnetiche, ottiche, meccaniche ed elettroniche che gli consentono di funzionare (nel
qual caso è anche detto strumentario). Generalmente è anche riferito a qualsiasi componente
fisico di una periferica o di una apparecchiatura elettronica. Tipici componenti Hardware sono:
Mouse, Hard disk, Scheda madre, Monitor, Scheda video, Scheda audio, Scheda audio
professionale, Scheda di rete, CPU, Tastiera, Lettore CD, Masterizzatore, Modem, Scanner,
Stampante.
Il termine software indica un programma o l'insieme di essi in grado di funzionare su un
elaboratore. All'interno del software si possono distinguere tre grandi categorie:
•
•
•
i sistemi operativi
i driver
i programmi applicativi (cioè tutti quei software che vengono utilizzati per il lavoro
quotidiano: dai programmi per l'ufficio, ai videogiochi).
Un software viene normalmente realizzato utilizzando uno o più linguaggi di programmazione.
4. Macchina di Von Neumann
Con l'espressione architettura di von Neumann (o macchina di von Neumann) ci si riferisce a
uno schema di progettazione di calcolatori elettronici, sul quale sono basati molti dei moderni
elaboratori e che prende nome dal matematico John von Neumann (1903 - 1957).
Essa può essere schematizzata con la seguente figura:
5
Lo schema si basa su cinque componenti fondamentali:
1. CPU o unità di lavoro che si divide a sua volta in
1. Unità operativa, nella quale uno dei sottosistemi più rilevanti è l'ALU (Arithmetic
Logic Unit)
2. Unità di controllo
2. Unità di memoria, intesa come memoria di lavoro o memoria principale (RAM, Random
Access Memory)
3. Unità di input, tramite la quale i dati vengono inseriti nel calcolatore per essere elaborati
4. Unità di output, necessaria affinché i dati elaborati possano essere restituiti all'operatore
5. Bus, un canale che collega tutti i componenti fra loro.
La memoria (RAM) contiene le istruzione dei programmi in esecuzione e i dati necessari alla loro
esecuzione.
5. Sistema Operativo
Un sistema operativo (SO) è un insieme di programmi che agisce come intermediario tra l’utente e
l’hardware di un computer. Gli scopi di un SO sono: (1) fornire un ambiente nel quale un utente sia
in grado di eseguire i programmi rendendo conveniente l’utilizzo di un computer; (2) permettere di
utilizzare l’hardware del computer in maniera efficiente. Un sistema operativo è un elemento
importante di quasi tutti i sistemi di calcolo. Un sistema di calcolo può essere suddiviso in quattro
componenti: l’hardware, il sistema operativo, i programmi applicativi e gli utenti. Da un punto di
vista funzionale lo schema che riassume l’interazione fra utente e PC è il seguente:
L’hardware, composto dall’unità centrale di elaborazione (CPU), dalla memoria e dai dispositivi di
input/output (I/O), fornisce le risorse fondamentali di calcolo. I programmi applicativi (compilatori,
sistemi di database, programmi commerciali e giochi) definiscono il modo in cui queste risorse
vengono utilizzate per risolvere i problemi computazionali degli utenti. Esistono svariate categorie
di utenti (persone, macchine, altri computer) che necessitano di risolvere problemi di diversa natura;
di conseguenza, possono esserci molti programmi applicativi diversi. Il SO controlla e coordina
l’utilizzo dell’hardware da parte dei programmi applicativi per utenti. Oltre all’hardware risorse non
meno importanti sono il software e i dati, organizzati sotto forma di file. Il sistema operativo offre
gli strumenti per utilizzare e organizzare in modo corretto queste risorse; esso non compie alcuna
operazione utile di per sé, ma offre semplicemente un ambiente nel quale altri programmi possono
6
lavorare in modo utile. È quindi possibile considerare un SO come un allocatore di risorse: tempo
di CPU, spazio di memoria, spazio di memorizzazione file, utilizzo dei dispositivi di I/O e così via.
Il SO gestisce tali risorse allocandole, in base alle necessità definite dai loro compiti, a programmi e
utenti specifici. Poiché possono esserci molte richieste, anche conflittuali, delle varie risorse, il
sistema operativo deve decidere quali richieste soddisfare affinché il computer operi in modo equo
ed efficiente. Una visione leggermente diversa di un sistema operativo è quella incentrata sulla
necessità di controllare i dispositivi di I/O e i programmi utente. Un SO è in effetti anche un
programma di controllo che sorveglia, appunto, l’esecuzione di programmi utente in modo da
impedire che vengano commessi errori o che il computer venga utilizzato in modo non corretto,
soprattutto per quel che riguarda il funzionamento e la gestione dei dispositivi di I/O.
In conclusione il SO serve a:
1. Definire l’interazione con l’utente - dobbiamo avere una interfaccia di comandi che ci permetta
di specificare le azioni che, su nostra richiesta, vogliamo che il computer esegua.
2. Interpretare ed eseguire i comandi dell’utente - possono essere impartiti solo i comandi esistenti
e questi devono avere una ben specifica sintassi, il sistema si deve occupare dei messaggi di errore e
di informazione.
3. Controllare direttamente l’hardware - A noi interessano più che altro le funzioni del calcolatore
e non come vengono eseguite a livello di linguaggio macchina. Ciò da il vantaggio che il
calcolatore può essere usato da chiunque, basta avere un manuale dei comandi disponibili, e che la
programmazione è molto più veloce.
4. Gestire e coordinare le risorse del sistema - Il sistema operativo mentre esegue i comandi da noi
impartiti si occupa anche di gestire al meglio le risorse, soprattutto quelle preziose come la
memoria, i dischi, il video.
5. Semplificare la gestione del sistema hardware agli altri programmi - Quasi tutti i programmi
possiedono chiamate al sistema operativo che svincolano i primi da funzioni di base rendendoli più
efficienti e robusti ossia adattabili.
4.1 MS-DOS
L’MS-DOS è un sistema operativo nato nel 1981 per il PC IBM e adottato in seguito dai suoi
successori più evoluti nonché dai numerosissimi compatibili delle più diverse marche. Mentre
“MS” indica MicroSoft, “DOS” sta per Disk Operative System ossia sistema operativo a dischetti
(il nome deriva dal fatto che può essere contenuto in un numero esiguo di dischetti). L’MS-DOS è
stato lo standard di fatto dei sistemi operativi per microcomputer per più di quasi un ventennio.
Oggi ci troviamo in una situazione di transizione dato l’avvento di Windows ‘95 e successive
versioni, sempre della MicroSoft. In tali nuovi sistemi operativi viene mantenuto un ambiente MSDOS per consentire l’utilizzo di applicativi e comandi usuali del DOS.
L'utente interagisce con il sistema operativo MS-DOS tramite un terminale, che è un interfaccia
testuale che permette al sistema operativo di leggere i comandi inseriti da tastiera e interpretarli ed
eseguirli, provvedendo a soddisfare le richieste dell’utente.
Quando il terminale è pronto per la digitazione di comandi, viene visualizzato un prompt. Il prompt
è la riga su cui lampeggia il cursore. Tale riga è evidenziata da alcuni simboli, solitamente C:\>. Il
sistema ci ricorda su che unità disco ci troviamo (C:) oltre che sulla posizione all’interno di questa
unità (\). Il > ha soltanto lo scopo di separare la parte visibile del prompt dal cursore lampeggiante.
7
Tutti i comandi DOS e i programmi applicativi devono essere digitati sul terminale per essere
eseguiti dal sistema operativo. Ma come si accede ai programmi e ai dati? I dati e i programmi
contenuti in un disco sono organizzati in file, ognuno dei quali viene identificato con un nome. Il
nome di un file è composto da due parti chiamate rispettivamente nome di file ed estensione.
È necessario trovare un criterio logico per raggruppare i file. Il SO DOS ha realizzato ciò mediante
il concetto di directory:
• Una directory contiene un insieme di file.
• Ogni unità fisica è organizzata in directory.
• Una directory può contenere altre directory che si chiamano sottodirectory.
• Le directory sono strutturate ad albero.
Il disco, da un punto di vista gerarchico è organizzato in direttori e sottodirettori. La directory
principale di una unità a disco, ossia quella che contiene tutti gli altri direttori, è la directory radice
o root. La root è rappresentata con un nome simbolico ossia “\” anche detto barra rovescia o
backslash, proprio quel simbolo che abbiamo visto prima relativamente al prompt; ciò vuol dire che
quando il sistema si avvia si attiva sulla radice dell’unità a disco fisso C:. Un file, in generale, viene
identificato non solo dal suo nome ma anche dal suo percorso o pathname. Un pathname è la
sequenza di directory che permette di raggiungere un file. Ad esempio: C:\LINGUAGGI\PASCAL.
4.2. Principali comandi di MS-DOS
•
DIR: Visualizza l'elenco dei file e delle sottodirectory in una directory.
•
CD: Visualizza il nome della directory corrente (se usato senza argomenti), oppure cambia
la directory corrente, trasformandola nel suo argomento (se viene passato un argomento).
•
MD dir: Crea la directory dir (che diventa una sottodirectory della directory corrente).
•
RD dir: Rimuove (elimina) la directory dir.
•
COPY fileA fileB: Copia il contenuto di fileA in fileB. Se vengono copiati più file (tramite
l'uso del carattere *), MS-DOS visualizza il nome di ciascun file man mano che viene
copiato.
•
XCOPY A: B: : Copia tutti i file contenuti nell'unità disco A: all'interno dell'unità disco B:.
Copia file (ad eccezione dei file di sistema e nascosti) e directory, incluse le sottodirectory.
Con questo comando è possibile copiare tutti i file di una directory, compresi i file nelle
relative sottodirectory.
•
DEL nomefile: Elimina il file nomefile.
•
DELTREE dir: Elimina la directory dir con tutti i file e sottodirectory relative.
•
REN nomefile1 nomefile2: Cambia il nome del file nomefile1, trasformadolo in nomefile2.
E’ possibile assegnare un nuovo nome a tutti i file che corrispondono al nome specificato.
Non è possibile utilizzare questo comando per assegnare un nuovo nome a file di unità
diverse o per spostarli in nuove directory.
8
•
MOVE origine destinazione: Sposta il file origine nella directory destinazione oppure
rinomina il file o la directory origine, trasformando il nome in destinazione.
•
TYPE nomefile: Visualizza il contenuto del file di testo nomefile.
•
MORE: Visualizza le informazioni una schermata alla volta.
•
FORMAT unità: Formatta il disco nell’unità specificata. Tutti i file contenuti in quella
unità vengono rimossi permanentemente. Non usatelo mai se non siete assolutamente sicuri
di ciò che state facendo!
•
DISKCOPY unità1 unità2: Copia il contenuto del disco unità1 sul disco unità2. Effettua
una copia fisica, copiando byte per byte il primo disco sul secondo.
•
MEM: Visualizza la quantità di memoria utilizzata e la quantità di memoria libera nel
sistema. E’ possibile utilizzare il comando MEM per visualizzare le informazioni relative
alle aree di memoria utilizzate, alle aree di memoria libere ed ai programmi caricati in
memoria.
•
DATE: Visualizza la data o consente di reimpostarla se necessario.
•
TIME: Visualizza l’ora di sistema oppure imposta l’orologio interno del computer.
•
PATH: Visualizza (se usato senza parametri) o imposta (se usato con parametri) il percorso
di ricerca per i file eseguibili.
•
CLS: Cancella lo schermo.
•
EXIT: Chiude il terminale.
•
HELP comando: Visualizza il manuale in linea del comando comando.
9