...

Nessun titolo diapositiva

by user

on
Category: Documents
7

views

Report

Comments

Transcript

Nessun titolo diapositiva
fondamenti di informatica
parte 5
appunti per il D.U. in Ingegneria
Informatica, di Telecomunicazioni
e di Meccanica, a.a.1999-2000
di
anna maria carminelli gregori
fondamenti di informatica 1 parte
5 D.U.
1
E per emulare la memoria?
Le matrici non bastano: per i dati ci vorrebbe
un vettore a dimensione variabile di int
ove porre valori interi e poi un altro di float,
uno di char …; per gli indirizzi e le istruzioni
in linguaggio macchina un altro di unsigned...
insomma un contenitore (“a fisarmonica”) di
elementi di tipo diverso, non omogenei …
Un tipo di variabile strutturata che permette
di mantenere in memoria un insieme di
elementi non omogenei e’ la struct del C e
C++ simile al record
del Pascal.
fondamenti di informatica 1 parte
5 D.U.
2
Meo 2
Esempio di struct in C e C++
lez. 5 & seg.
struct studente
{char nome[20];
char cognome[25];
int eta;
float peso;
float altezza;
};
Concettualmente con la keyword
struct si definisce un tipo di tabella non
omogenea con elementi di vari tipi che in C e
C++ possono essere anche funzioni: cosi’
fatta la struct introduce la class del C++ …
ma questa e’ un’
altra storia !
fondamenti di informatica 1 parte
5 D.U.
3
Esempi di struct (e class)
si trovano nei prg. in program8: in strutt.c una
variabile di tipo struct e’ usata in C insieme ad
un file sequenziale di cui si dira’ +oltre;
si NOTI che le variabili di tipo struct sono
dichiarate dopo la definizione della struct che
fornisce il loro scheletro;
struct appare cosi’ come un costruttore di
tipi, comune ossia esterno a tutte le function,
(come accade per dichiarazioni di nuovi tipi fatte con la frase
typedef, e quindi estraibili e posizionabili in un file header).
L’ accostamento di struct e file e’ spesso usato
per costruire/gestire archivi nel senso indicato
fondamenti
di informatica
1 partesolo cenni.
in parte 1...… ma
questi
sono
5 D.U.
4
L’ emulazione della C.M.
riporterebbe all’ Hardware
ma prima di fare nuovi discorsi, occorrono precisazioni
sull’ uso di array e sulla sinteticita’ del C e C++. E’
bene ricordare le 2 versioni della procedura:
void strcp(char *s, char *t) /* strcp copia la
stringa puntata da t in quella puntata da s */
{ while ((*s=*t)!=‘\0’) /*fintantoche’ il contenuto di t
assegnato alla cella puntata da s e’ diverso da ‘\0’
(=fine stringa) fai*/ s++; t++}; // + sintetica ?!
while (*s++=*t++) // perche’ manca != ‘\0’ ??
fondamenti di informatica 1 parte
; }
5 D.U.
5
Frasi sintetiche
Questo tipo di sintesi e’ normale nei programmi
in C o in C++ ed e’ utile conoscerla ed
abituarcisi per poter leggere programmi C e C++
in circolazione;
si tratta di “compattare” alcuni tipi di frasi in una
sola.
Es. lettura e calcolo indicate nel progetto logico
posto in parte 4 diapo 59: fintantoche’ il
carattere letto non e’ il punto, aggiungi 1 all’
elemento che indica la frequenza del carattere
letto… ma comefondamenti
si scrive
in 1Cparteo C++ ?
di informatica
5 D.U.
6
Sinteticamente … ?
Non e’ in linea con la sintesi leggere la
sequenza di caratteri in un vettore di char e
poi analizzare il vettore ... Sarebbe comunque
corretto farlo se fosse necessario tenere
memoria della sequenza di caratteri per altri
scopi per es. per successive analisi. Se invece l’
analisi e’ solo quella indicata allora:
while( (cin >> ch) /* fintantoche’ c’e’ un ch
(carattere) da leggere*/ && ( ch != ‘.’) ) /* e
inoltre questo ch e’ diverso da punto: FAI */...
fondamenti di informatica 1 parte
5 D.U.
7
In definitiva
il significato di queste considerazioni
riguarda l’ utilizzo di matrici e/o vettori.
E’ bene usarli solo quando esiste la
necessita’ di tenere memoria dei valori
calcolati o letti: se tale necessita’ manca
allora usare il valore corrente (per es.
appena letto) per i calcoli ad esso relativi
e passare ad altro valore (per es. il
successivo).
fondamenti di informatica 1 parte
5 D.U.
8
Il ritorno all’ hardware
Mezzalama 2
lez. 18 & seg.
Vai a pag. 31
ha lo scopo di introdurre il linguaggio di E.E.
Si ricordi:
C.M. & CPU: indirizzo di ogni locazione di C.M.
=> in registri della CPU ( es. registro P =Puntatore, registro I.C.= Instruction Counter ...);
Contenuto di ogni locazione di C.M. => in altri
registri della CPU (per es. A = Accumulatore...);
C.M. (RAM): scandibile e rintracciabile per es.
col Registro P : IndirizziMemoria <=> Registro P;
CPU = Unita’ Centrale = Unita’ Elaborativa =
MicroProcessorefondamenti
per Personal
Computer
di informatica 1 parte
5 D.U.
9
… e la struttura funzionale di
EE gia’ presentata:
Temporizzator
e
Unita’ Centrale di Controllo
Registri
Unita’ di controllo di
I/O
Periferiche
UCP
Unita’ Aritmetico - Logica
Flag
Memoria Centrale
Memorie di massa
fondamenti di informatica 1 parte
5 D.U.
10
La CPU controlla tutte le
operazioni di E.E.
Le operazioni possono essere:
interne alla CPU (per es. Somma i contenuti
di 2 Registri);
esterne come trasferimenti di dati verso la
(o dalla) C.M. o verso le (o dalle) interfacce
(Controller Unit) dei dispositivi periferici.
Notare: la CPU non invia i dati al dispositivo,
ma alla sua interfaccia!
fondamenti di informatica 1 parte
5 D.U.
11
La CPU lavora
in stretto contatto con la C.M.
La CPU per svolgere i suoi compiti usa i registri,
i Flag (indicatori di stato) e inoltre le Unita’ di
Controllo e Aritmetico-Logica (A.L.U.). I registri
piu’ usati sono:
Registri P e I.C. (Istruction Counter) per tenere
gli Indirizzi,
Accumulatore (A) per i Dati,
Registro Istruzione (I.R.) per le Istruzioni del
linguaggio di macchina.
fondamenti di informatica 1 parte
5 D.U.
12
CPU: funzionamento ciclico
Ogni ciclo della CPU si compone di 3 fasi:
fase di fetch (=prelievo),
fase di decodifica,
fase di esecuzione dell’ istruzione.
In ogni fase sono usati alcuni Registri.
Le operazioni relative ad ogni fase sono:
fondamenti di informatica 1 parte
5 D.U.
13
Prelievo e decodifica
fase di fetch (=prelievo: uso dei Reg. IC e IR):
1) Esame del Reg. I.C.;
2) Accesso alla locazione di C.M. indirizzata da
I.C.;
3) Trasferimento del contenuto della
locazione di C.M. in I.R.;
fase di decodifica: (uso del Reg. IR):
4) Interpretazione del contenuto di I.R.;
5) SE non e’ un' istruzione ALLORA
segnalazione ERRORE e STATO DI ATTESA
fondamenti di informatica 1 parte
5 D.U.
14
Esecuzione istruzione
… altrimenti fase esecuzione:
SE si tratta di un’ istruzione di salto alla
locazione di memoria di indirizzo xxxx allora
I.C.= xxxx ed il controllo delle operazioni
passa a xxxx e da qui si prosegue in sequenza;
ALTRIMENTI: l' istruzione viene eseguita ed e’
incrementato I.C.= I.C.+(lunghezza istruz.)
per passare all’ istruzione successiva.
Si noti: in assenza di istruzioni di salto esiste un
ordinamento sequenziale
tra le istruzioni.
fondamenti di informatica 1 parte
5 D.U.
15
Accesso alla Memoria:
per estrarre info. = leggere dalla Memoria;
per deporre info. = scrivere in Memoria;
Operazioni realizzabili:
 a Hardware con codici propri della CPU
 a Software con istruzioni di un Linguaggio
Artificiale, tradotte nei codici della CPU (ossia
nelle Istruzioni del linguaggio della macchina)
dal programma traduttore.
Esempio fase di esecuzione con uso del reg.
P
Sia: Istruzione =fondamenti
Leggi
un dato
dal disco e
di informatica
1 parte
5 D.U.
16
ponilo in C.M. all' indirizzo
00116
Registro P di 4 bit =>16 byte
indirizzabili (qui la freccia sintetizza il contenuto
di P)
 CPU = “Ragnetto”
Central Memory
0000
00
REG. P .
01
Accumulat.
Registro P.= Pointer
fondamenti di informatica 1 parte
5 D.U.
1111
17
Esempio: continua
C.P.U. pone 00116 nel Registro P ossia P= 00116
(cfr. grafico precedente) e passa il controllo all’
Unita’ di Controllo della Periferica disco.
Questa, attivato il lettore che legge il dato (per
es. 3.14), lo pone in un proprio registro: da qui
e’ poi trasferito nell’ Accumulatore ossia
A = 3.14
Infine C.P.U. trasferisce il contenuto di A nella
Memoria indirizzata da P ossia Mem(P)=A (cfr.
grafico seguente)
fondamenti di informatica 1 parte
5 D.U.
18

Registro P di 4 bit => 16 byte
indirizzabili
 CPU = “Ragnetto”
Central Memory
3.14
REG. P.
0000
00
01
3.14
Accumulat.
Registro P.= Pointer
fondamenti di informatica 1 parte
5 D.U.
1111
19
Ancora esempi
Analogo comportamento se Istruzione = Visualizza un dato su video … Se poi Istruzione =
Somma i dati delle locazioni di indirizzo 55516
e 12316 e metti il risultato in C.M. all' indirizzo
66616 allora C.P.U. effettua le operazioni
seguenti dove => significa sposta:
55516 => P
Mem(P) => A
(per es. 891710 => A)
12316 => P
A+Mem(P) => A (per es. 891710+8910 => A)
66616 => P
1 parte
A => Mem(P) fondamenti di5informatica
D.U.
20
Deduzioni logiche
Cosa vogliono evidenziare i precedenti esempi?
1) ogni accesso in C.M. avviene con il deposito
in un registro di CPU (I.C., P, …) dell’ indirizzo
della locazione (cella, byte, voce …) di C.M;
2) ogni insieme di istruzioni (ossia ogni
programma) per essere eseguito deve risiedere
in C.M.
3) se un salto rimanda ad un indirizzo dove non
c’e’ un’ istruzione, ma un dato: ERRORE!
fondamenti di informatica 1 parte
5 D.U.
21
Le istruzioni
del linguaggio macchina sono praticamente
comandi in codice. Il codice e’ quello
capito dalla CPU di E.E. con comandi indicati
con sigle, da immaginare in binario.
Per es. somma
avra’ il codice ADD

poni in memoria “
“ “
STORE
 carica in un registro “
“ “
LOAD
 salta (branch)
“
“ “
B
salta e torna indietro(back)“ “ “
BB
confronta (compare) avra’ il codice CMP
fondamenti di informatica 1 parte
etc.
5 D.U.
22
Il formato delle istruzioni
del linguaggio della macchina varia da C.P.U. a
C.P.U. col vincolo che ogni istruzione deve poter
stare nel registro I.R. della C.P.U. per essere
decodificata e poi eseguita. Il numero dei bit di
I.R. varia da C.P.U. a C.P.U….
Se per es. IR ha 32 bit allora si potrebbero
usare: 8 bit per il codice operativo (leggi, scrivi,
somma …), 4 bit indicare il supporto, 4 bit il
tipo di indirizzamento (immediato, diretto, indiretto) e
20 bit per indirizzare la memoria o altro.
Segue un esempio in un ipotetico linguaggio
fondamenti di informatica 1 parte
macchina.
5 D.U.
23
Come fare la somma S=S
in linguaggio macchina ?
i=0-7
3
In C++ : { int somma =0;
for (int i=0; i<8; i=++) somma = somma+3;}
In ling.macchina le addizioni si fanno in A=Acc.
per gli indici si usano i Registri e cosi’ a parole:

Azzera A e Carica in Reg.1 0
COME Confronta Reg.1 con 8

Se sono uguali salta a VIA

(se no) Aggiungi ad A 3

Incrementa Reg.1 di 1

Salta a COME
VIA
Memorizza A in S (A => Mem(S)) 24
E quindi:


COME




VIA
&&
CLEAR A
LOAD R1 #0
CMP R1 #8 (se il compare da’ 0 FlagZero=1)
BZ
VIA (salta a VIA se FlagZero=1)
ADD A #3
INC
R1 (incrementa di 1 R1)
B
COME
STORE A ADDRS (--> ADDRS => P
A => Mem(P))
fondamenti di informatica 1 parte
5 D.U.
25
o anche e meglio (con 1 istr.
in meno):


COME

.


VIA
CLEAR A
LOAD R1 #7
ADD A #3
DEC
R1 (decrementa di 1 R1 : quando R1 = 0
FlagZero=1)
BZ
VIA (salta a VIA se FlagZero=1)
B
COME
STORE A ADDRS
fondamenti di informatica 1 parte
5 D.U.
26
BUS
Tra le unita’ di E.E. viaggiano dati e indirizzi …
 DOVE? Nei BUS !
BUS = l' insieme dei collegamenti (cavi e
connettori) tra C.P.U. e le altre componenti su
cui sono trasferiti le informazioni in parallelo a
pacchetti di n bit
BUS indirizzi => n da 8 a 20 bit e
BUS dati
=> n da 8 a 64 "
fondamenti di informatica 1 parte
5 D.U.
27
Memoria di massa :
Funzione: uguale, ma Tecnologia di tipo
magnetico ...
Caratteristica: permanenza
Tempo di accesso: (dipende dal tipo)
10-100msec. (enorme divario con la C.M. !!!)
Supporto: disco fisso, dischetto, nastro, C.D. ...
Lettura/scrittura: Unita’ di Lettura/scrittura
dotata di una testina apposita.
fondamenti di informatica 1 parte
5 D.U.
28
Tipo di accesso:
sequenziale e, per dischi, diretto o casuale
(random) tramite gli indirizzi di settore e traccia
creati con l' operazione di formattazione
(cfr.parte 2) che divide il disco in tracce ed ogni
traccia in settori a partire da punti di
riferimento. RICORDARE che la Formattazione
annulla il contenuto preesistente! PERICOLO!
Capacita’ dei dischetti: 360, 780, 1200 Kbyte e oltre
Capacita’ dei dischi: da 10 Mbyte a 10 Gigabyte “ “
Capacita’ dei nastri: da 100 Kbyte a 200 Mbyte “ “
fondamenti di informatica 1 parte
5 D.U.
29
Sistema video (periferiche):
costituito da un display e da una scheda
grafica ha 2 modalita’ di funzionamento:
alfanumerica (p.e. 25righe x 80colonne di
testo) grafica con necessita’ di un software
pilota (=driver) della scheda grafica posto in
un file con estensione .BGI che permette
diverse modalita’, risoluzioni … num. di colori;
elemento base: PIXEL (PIcture ELement) in un
raster o matrice (griglia) di PIXEL (1280x1024;
…) usabili singolarmente in alta risoluzione, a
gruppi in bassafondamenti
risoluzione.
di informatica 1 parte
5 D.U.
30
Comunicazioni tra
elaboratori
Si basano su strumenti Hard./Soft. che
permettono di collegare elaboratori di vari tipi
in reti locali (LAN) e geografiche (WAN);
occorrono dispositivi di interfaccia tra
elaboratori (p.e. “schede di rete”) e protocolli
(regole) di comunicazione;
si puo’ anche usare la rete telefonica con l’ uso
del “modem” dispositivo che permette di
convertire il segnale analogico (voce) a segnale
digitale (bit) e viceversa.
fondamenti di informatica 1 parte
5 D.U.
31
E inoltre …
parlando di comunicazioni, il mezzo piu’
semplice per trasferire qualunque informazione
sia da C.M. a memoria di massa sia tra
Elaboratori di tipo diverso resta il file tipo testo
sequenziale memorizzato su memoria di massa.
Nel file tipo testo i byte sono interpretati come
caratteri (in altri file binari ogni byte e’
considerato come 8 bit di un dato binario, per
es. float);
I file tipo testo possono essere usati in lettura,
scrittura e aggiornamento.
fondamenti di informatica 1 parte
5 D.U.
32
Come si costruisce un file
tipo testo in C, C++ ?
Occorre usare le librerie e le funzioni giuste …
ma comunque sempre le informazioni al / dal
file sequenz. sono trasferite a blocchi, 1 blocco
per volta, da / a una zona di C.M. che funge da
tampone o buffer (= interfaccia tra i 2 tipi di
memoria) e da qui smistate (Cfr. parte2, file & C.M.)
Il C e C++ considerano un file sequenziale
come un flusso (stream) o successione
continua di byte proveniente da/inviata a
memoria di massa (analogia con cin e cout).
Per gestirlo pero’ usano procedure diverse.
fondamenti di informatica 1 parte
5 D.U.
33
Tipi di File
I file si distinguono in sequenziali e ad accesso
diretto o casuale (random qui non trattati).
La differenza sta nella struttura del file:
concettualmente il file sequenziale si puo’
assimilare ad una successione di informazioni
dove per raggiungere l’ informazione i-esima
occorre leggere le precedenti i-1;
il file ad accesso diretto si puo’ assimilare ad
una tabella dove per mezzo di un indice si puo’
raggiungere qualunque informazione
1 parte
direttamente. fondamenti di5informatica
D.U.
34
Gestione di file sequenziali
Il C usa le funzioni i cui prototipi sono dichiarati
in stdio.h e una struttura FILE anche definita
in stdio.h e accessibile con puntatori definiti nel
programma-utente. (La struttura FILE contiene al suo
interno anche puntatori al buffer.) Il collegamento con il
file fisico si ottiene con la funzione fopen che
associa il nome del file al puntatore a FILE
dichiarato nel programma utente: lo definisce.
I nomi delle altre funzioni utilizzate sono:
fscanf, fprintf (analoghe a scanf e printf) per
leggere informazioni
e registrarle. Dove ?
fondamenti di informatica 1 parte
5 D.U.
35
…dove ?
Lettura e registrazione avvengono sul file
aperto e identificato tramite il puntatore a FILE
definito con la fopen che fa il collegamento con
il file fisico. Tale collegamento e’ terminato dalla
fclose che lo chiude quando il file non serve
piu’.
Vedere i programmi in C che usano le funz.
prototipate in stdio.h per costruire un file (mat2
e strutt) ed i programmi per leggerlo (fileper,
filequa) tutti in program8.
fondamenti di informatica 1 parte
5 D.U.
36
Uso di header file fstream.h
Il C++ usa le funzioni con prototipi dichiarati
in fstream.h dove sono anche definiti nuovi
tipi di dati (classe fstream con sottoclassi)
come per es. il flusso di input e il flusso di
output (ifstream, ofstream) da/a un file.
Incluso fstream.h nel programma si deve
definire una variabile flusso e poi collegarla
con un file fisico presente su disco (quindi
da leggere) o col file da creare (registrare)
su disco o da aggiornare.
fondamenti di informatica 1 parte
5 D.U.
37
apertura del file
Questa operazione di collegamento si
chiama apertura del file e richiede l’
indicazione sul tipo di gestione del file:
lettura, scrittura, aggiornamento ?
Il C++ fornisce ifstream come tipo di flusso
di input e ofstream come tipo di flusso di
output (seguono esempi); per l’
aggiornamento si usa invece un’ altra
specifica qui non trattata.
fondamenti di informatica 1 parte
5 D.U.
38
Lettura file sequenziale in C++
Per leggere il file numeri.txt si puo’ scrivere:
… int n, elabora(int);
ifstream fi; // fi=var. tipo flusso input
fi.open(“numeri.txt”); /* si richiede di aprire il file
numeri.txt e di collegarlo a fi */
if (!fi) // se fi = 0 l’ apertura e’ fallita
{ cout<< “non trovo il file”<<endl; exit(1); }
else while (!fi.eof) { fi >> n; /*finche’ non trovi
EOF, leggi, poni in n e visualizza n e il risultato*/
cout <<“\nN=“;<<n<<“ Ris=“<< elabora(n);}
fi.close //si richiede
di chiudere il file numeri.txt
fondamenti di informatica 1 parte
5 D.U.
39
...
Costruzione file sequenziale
Per registrare nel file risult.ati una sequenza di
interi in C++ si puo’ per esempio scrivere :
… int i, elabora(int), n [100]; /*si pensi ad
inizializzare il vettore n con un for... */
ofstream fa; // fa=var. tipo flusso output
fa.open(“risult.ati”); /* si richiede di aprire il file
risult.ati e di collegarlo a fa */
if (fa) // se fa = 1 il file gia’ esiste
cout<<“il file gia’ esiste: lo copro”<<endl;
for (i =0; i<99; i++) fa << n[i]<<endl; /* con
endl si registra un numero per linea (=record !) */
fa.close //si richiede
diinformatica
chiudere
il file
fondamenti di
1 parte
5 D.U.
...
40
Altri esempi
Vedere il programma (filepe) in C++ che usa le
funzioni con i prototipi in fstream.h per leggere
un file ed i programmi (fileper, strutt) in C per
costruire invece altri file, tutti in program8.
Il programma strutt usa una tabella di struct
definita (in questa “anteprima”) come variabile
globale per semplicita’ nell’ attivazione di
sottoprogrammi.
Per strutture locali il passaggio da sottopr.
chiamante a chiamato avviene per indirizzo
usando un puntatore alla struct da passare.
fondamenti di informatica 1 parte
5 D.U.
41
Argomenti del main
Per trasmettere ad un programma C o C++
informazioni (per es. il nome del file di lavoro)
si usano i parametri della main function che
finora era sempre scritta main(). La main
function ha 2 forme di intestazione:
int main()
int main(int argc, char* argv[])
dalle quali si nota che il valore di ritorno e’ int
(come quello indicato nella frase return (0) !!).
fondamenti di informatica 1 parte
5 D.U.
42
main
Nella seconda forma si notano: int argc che e’
il numero di parametri trasmessi, char* argv[]
che e’ un vettore di puntatori a stringhe= nomi
dei parametri trasmessi.
In argv[0] c’ e’ il puntatore al nome del
programma, primo argomento presente sulla
linea di attivazione del programma stesso; nei
successivi ci sono puntatori alle stringhe che
sono gli altri argomenti presenti sulla linea di
attivazione del programma stesso. Es. linea di
attivazione: fileper.exe
dati.per
fondamenti di informatica 1 parte
5 D.U.
43
Grafica
Capitolo importante della programmazione,
ma qui solo un accenno indicativo: vedere e
capire il programma fileper che disegna 2
rettangoli uno col solo perimetro, l’ altro
colorandolo dopo aver letto le lunghezze dei
lati da un file.
NOTA: per far funzionare il prg. assicurarsi
che nel direttorio di lavoro dove e’ il file EXE
ci sia il software pilota (=driver) della
scheda grafica (file con estensione .BGI)
fondamenti di informatica 1 parte
5 D.U.
44
Fileper & Filepe
sono esempi di programmi con uso della grafica
ed un file di dati da leggere con le librerie il
primo del C, il secondo del C++. Il file-name
(per es. dati.per) e’ fornito in argv[1]:
analizzare, far funzionare, modificare … FARE !
Ultimo esempio e’ contator.cpp, contator.h,
conta.cpp con uso delle classi … come indicato.
Per imparare occorre FARE e poi provare e
riprovare …
fine.
fondamenti di informatica 1 parte
5 D.U.
45
Appendice: perplessita’
RICORDARSI: l’ operatore >> preleva un dato
dal un flusso di input: che tipo di dato? Il tipo
che e’ stato dichiarato: char, int, float, ...
2) RICORDARSI: non abusare di matrici e/o
vettori; usarli solo quando esiste la necessita’ di
tenere memoria dei valori calcolati o letti: se
tale necessita’ manca allora usare il valore letto
per i calcoli necessari e passare al successivo.
3) RICORDARE: il pilota (=driver) della scheda
grafica posto in un file con estensione .BGI
deve stare nel direttorio di lavoro ove sono i file
fondamenti di informatica 1 parte
EXE.
5 D.U.
46
Fly UP