Fondamenti di informatica 1 parte 5 D.U.1 fondamenti di informatica parte 5 appunti per il D.U. in...

46
fondamenti di informatic a 1 parte 5 D.U. 1 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

Transcript of Fondamenti di informatica 1 parte 5 D.U.1 fondamenti di informatica parte 5 appunti per il D.U. in...

Page 1: Fondamenti di informatica 1 parte 5 D.U.1 fondamenti di informatica parte 5 appunti per il D.U. in Ingegneria Informatica, di Telecomunicazioni e di Meccanica,

fondamenti di informatica 1 parte 5 D.U.

1

fondamenti di informatica parte 5

appunti per il D.U. in Ingegneria Informatica, di Telecomunicazioni e di Meccanica, a.a.1999-2000dianna maria carminelli gregori

Page 2: Fondamenti di informatica 1 parte 5 D.U.1 fondamenti di informatica parte 5 appunti per il D.U. in Ingegneria Informatica, di Telecomunicazioni e di Meccanica,

fondamenti di informatica 1 parte 5 D.U.

2

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.

Page 3: Fondamenti di informatica 1 parte 5 D.U.1 fondamenti di informatica parte 5 appunti per il D.U. in Ingegneria Informatica, di Telecomunicazioni e di Meccanica,

fondamenti di informatica 1 parte 5 D.U.

3

Esempio di struct in C e C++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 !

Meo 2

lez. 5 & seg.

Meo 2

lez. 5 & seg.

Page 4: Fondamenti di informatica 1 parte 5 D.U.1 fondamenti di informatica parte 5 appunti per il D.U. in Ingegneria Informatica, di Telecomunicazioni e di Meccanica,

fondamenti di informatica 1 parte 5 D.U.

4

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 in parte 1...… ma questi sono solo cenni.

Page 5: Fondamenti di informatica 1 parte 5 D.U.1 fondamenti di informatica parte 5 appunti per il D.U. in Ingegneria Informatica, di Telecomunicazioni e di Meccanica,

fondamenti di informatica 1 parte 5 D.U.

5

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’ ??

; }

Page 6: Fondamenti di informatica 1 parte 5 D.U.1 fondamenti di informatica parte 5 appunti per il D.U. in Ingegneria Informatica, di Telecomunicazioni e di Meccanica,

fondamenti di informatica 1 parte 5 D.U.

6

Frasi sinteticheQuesto 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 come si scrive in C o C++ ?

Page 7: Fondamenti di informatica 1 parte 5 D.U.1 fondamenti di informatica parte 5 appunti per il D.U. in Ingegneria Informatica, di Telecomunicazioni e di Meccanica,

fondamenti di informatica 1 parte 5 D.U.

7

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 */...

Page 8: Fondamenti di informatica 1 parte 5 D.U.1 fondamenti di informatica parte 5 appunti per il D.U. in Ingegneria Informatica, di Telecomunicazioni e di Meccanica,

fondamenti di informatica 1 parte 5 D.U.

8

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).

Page 9: Fondamenti di informatica 1 parte 5 D.U.1 fondamenti di informatica parte 5 appunti per il D.U. in Ingegneria Informatica, di Telecomunicazioni e di Meccanica,

fondamenti di informatica 1 parte 5 D.U.

9

Il ritorno all’ hardware 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 =Punta- tore, 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 = MicroProcessore per Personal Computer

Mezzalama 2 lez. 18 & seg.

Vai a pag. 31

Mezzalama 2 lez. 18 & seg.

Vai a pag. 31

Page 10: Fondamenti di informatica 1 parte 5 D.U.1 fondamenti di informatica parte 5 appunti per il D.U. in Ingegneria Informatica, di Telecomunicazioni e di Meccanica,

fondamenti di informatica 1 parte 5 D.U.

10

… e la struttura funzionale di EE gia’ presentata:

Temporizzatore

Unita’ Centrale di Controllo Unita’ Aritmetico - Logica

Unita’ di controllo di I/O

Memoria Centrale

PerifericheMemorie di massa

CPU

Registri Flag

Page 11: Fondamenti di informatica 1 parte 5 D.U.1 fondamenti di informatica parte 5 appunti per il D.U. in Ingegneria Informatica, di Telecomunicazioni e di Meccanica,

fondamenti di informatica 1 parte 5 D.U.

11

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!

Page 12: Fondamenti di informatica 1 parte 5 D.U.1 fondamenti di informatica parte 5 appunti per il D.U. in Ingegneria Informatica, di Telecomunicazioni e di Meccanica,

fondamenti di informatica 1 parte 5 D.U.

12

La CPU lavorain 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.

Page 13: Fondamenti di informatica 1 parte 5 D.U.1 fondamenti di informatica parte 5 appunti per il D.U. in Ingegneria Informatica, di Telecomunicazioni e di Meccanica,

fondamenti di informatica 1 parte 5 D.U.

13

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:

Page 14: Fondamenti di informatica 1 parte 5 D.U.1 fondamenti di informatica parte 5 appunti per il D.U. in Ingegneria Informatica, di Telecomunicazioni e di Meccanica,

fondamenti di informatica 1 parte 5 D.U.

14

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

Page 15: Fondamenti di informatica 1 parte 5 D.U.1 fondamenti di informatica parte 5 appunti per il D.U. in Ingegneria Informatica, di Telecomunicazioni e di Meccanica,

fondamenti di informatica 1 parte 5 D.U.

15

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.

Page 16: Fondamenti di informatica 1 parte 5 D.U.1 fondamenti di informatica parte 5 appunti per il D.U. in Ingegneria Informatica, di Telecomunicazioni e di Meccanica,

fondamenti di informatica 1 parte 5 D.U.

16

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. PSia: Istruzione = Leggi un dato dal disco e

ponilo in C.M. all' indirizzo 00116

Page 17: Fondamenti di informatica 1 parte 5 D.U.1 fondamenti di informatica parte 5 appunti per il D.U. in Ingegneria Informatica, di Telecomunicazioni e di Meccanica,

fondamenti di informatica 1 parte 5 D.U.

17

Registro P di 4 bit =>16 byte indirizzabili (qui la freccia sintetizza il contenuto di P)

CPU = “Ragnetto”

REG. P .

Central Memory 00

00

00

01

111

1

Registro P.= Pointer

Accumulat.

Page 18: Fondamenti di informatica 1 parte 5 D.U.1 fondamenti di informatica parte 5 appunti per il D.U. in Ingegneria Informatica, di Telecomunicazioni e di Meccanica,

fondamenti di informatica 1 parte 5 D.U.

18

Esempio: continuaC.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)

Page 19: Fondamenti di informatica 1 parte 5 D.U.1 fondamenti di informatica parte 5 appunti per il D.U. in Ingegneria Informatica, di Telecomunicazioni e di Meccanica,

fondamenti di informatica 1 parte 5 D.U.

19

Registro P di 4 bit => 16 byte indirizzabili

CPU = “Ragnetto”

REG. P.

Central Memory 00

00

00

01

111

1

Registro P.= Pointer

Accumulat.3.14

3.14

Page 20: Fondamenti di informatica 1 parte 5 D.U.1 fondamenti di informatica parte 5 appunti per il D.U. in Ingegneria Informatica, di Telecomunicazioni e di Meccanica,

fondamenti di informatica 1 parte 5 D.U.

20

Ancora esempiAnalogo comportamento se Istruzione = Visua-

lizza 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 => PA+Mem(P) => A (per es. 891710+8910 => A)66616 => PA => Mem(P)

Page 21: Fondamenti di informatica 1 parte 5 D.U.1 fondamenti di informatica parte 5 appunti per il D.U. in Ingegneria Informatica, di Telecomunicazioni e di Meccanica,

fondamenti di informatica 1 parte 5 D.U.

21

Deduzioni logicheCosa 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!

Page 22: Fondamenti di informatica 1 parte 5 D.U.1 fondamenti di informatica parte 5 appunti per il D.U. in Ingegneria Informatica, di Telecomunicazioni e di Meccanica,

fondamenti di informatica 1 parte 5 D.U.

22

Le istruzionidel 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) “ “ “ Bsalta e torna indietro(back)“ “ “ BBconfronta (compare) avra’ il codice CMPetc.

Page 23: Fondamenti di informatica 1 parte 5 D.U.1 fondamenti di informatica parte 5 appunti per il D.U. in Ingegneria Informatica, di Telecomunicazioni e di Meccanica,

fondamenti di informatica 1 parte 5 D.U.

23

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 macchina.

Page 24: Fondamenti di informatica 1 parte 5 D.U.1 fondamenti di informatica parte 5 appunti per il D.U. in Ingegneria Informatica, di Telecomunicazioni e di Meccanica,

fondamenti di informatica 1 parte 5 D.U.

24

Come fare la somma S=i= 3 in linguaggio macchina ?

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 0COME Confronta Reg.1 con 8 Se sono uguali salta a VIA (se no) Aggiungi ad A 3 Incrementa Reg.1 di 1 Salta a COMEVIA Memorizza A in S (A => Mem(S))

Page 25: Fondamenti di informatica 1 parte 5 D.U.1 fondamenti di informatica parte 5 appunti per il D.U. in Ingegneria Informatica, di Telecomunicazioni e di Meccanica,

fondamenti di informatica 1 parte 5 D.U.

25

E quindi: CLEAR A LOAD R1 #0COME 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 COMEVIA STORE A ADDRS (--> ADDRS => P

&& A => Mem(P))

Page 26: Fondamenti di informatica 1 parte 5 D.U.1 fondamenti di informatica parte 5 appunti per il D.U. in Ingegneria Informatica, di Telecomunicazioni e di Meccanica,

fondamenti di informatica 1 parte 5 D.U.

26

o anche e meglio (con 1 istr. in meno):

CLEAR A LOAD R1 #7COME ADD A #3 DEC R1 (decrementa di 1 R1 : quando R1 = 0

. FlagZero=1)

BZ VIA (salta a VIA se FlagZero=1)

B COMEVIA STORE A ADDRS

Page 27: Fondamenti di informatica 1 parte 5 D.U.1 fondamenti di informatica parte 5 appunti per il D.U. in Ingegneria Informatica, di Telecomunicazioni e di Meccanica,

fondamenti di informatica 1 parte 5 D.U.

27

BUSTra 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 "

Page 28: Fondamenti di informatica 1 parte 5 D.U.1 fondamenti di informatica parte 5 appunti per il D.U. in Ingegneria Informatica, di Telecomunicazioni e di Meccanica,

fondamenti di informatica 1 parte 5 D.U.

28

Memoria di massa :Funzione: uguale, ma Tecnologia di tipo

magnetico ... Caratteristica: permanenzaTempo 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.

Page 29: Fondamenti di informatica 1 parte 5 D.U.1 fondamenti di informatica parte 5 appunti per il D.U. in Ingegneria Informatica, di Telecomunicazioni e di Meccanica,

fondamenti di informatica 1 parte 5 D.U.

29

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 oltreCapacita’ dei dischi: da 10 Mbyte a 10 Gigabyte “ “Capacita’ dei nastri: da 100 Kbyte a 200 Mbyte “ “

Page 30: Fondamenti di informatica 1 parte 5 D.U.1 fondamenti di informatica parte 5 appunti per il D.U. in Ingegneria Informatica, di Telecomunicazioni e di Meccanica,

fondamenti di informatica 1 parte 5 D.U.

30

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 bassa risoluzione.

Page 31: Fondamenti di informatica 1 parte 5 D.U.1 fondamenti di informatica parte 5 appunti per il D.U. in Ingegneria Informatica, di Telecomunicazioni e di Meccanica,

fondamenti di informatica 1 parte 5 D.U.

31

Comunicazioni tra elaboratoriSi 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.

Page 32: Fondamenti di informatica 1 parte 5 D.U.1 fondamenti di informatica parte 5 appunti per il D.U. in Ingegneria Informatica, di Telecomunicazioni e di Meccanica,

fondamenti di informatica 1 parte 5 D.U.

32

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.

Page 33: Fondamenti di informatica 1 parte 5 D.U.1 fondamenti di informatica parte 5 appunti per il D.U. in Ingegneria Informatica, di Telecomunicazioni e di Meccanica,

fondamenti di informatica 1 parte 5 D.U.

33

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.

Page 34: Fondamenti di informatica 1 parte 5 D.U.1 fondamenti di informatica parte 5 appunti per il D.U. in Ingegneria Informatica, di Telecomunicazioni e di Meccanica,

fondamenti di informatica 1 parte 5 D.U.

34

Tipi di FileI 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 direttamente.

Page 35: Fondamenti di informatica 1 parte 5 D.U.1 fondamenti di informatica parte 5 appunti per il D.U. in Ingegneria Informatica, di Telecomunicazioni e di Meccanica,

fondamenti di informatica 1 parte 5 D.U.

35

Gestione di file sequenzialiIl 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 ?

Page 36: Fondamenti di informatica 1 parte 5 D.U.1 fondamenti di informatica parte 5 appunti per il D.U. in Ingegneria Informatica, di Telecomunicazioni e di Meccanica,

fondamenti di informatica 1 parte 5 D.U.

36

…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.

Page 37: Fondamenti di informatica 1 parte 5 D.U.1 fondamenti di informatica parte 5 appunti per il D.U. in Ingegneria Informatica, di Telecomunicazioni e di Meccanica,

fondamenti di informatica 1 parte 5 D.U.

37

Uso di header file fstream.hIl 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.

Page 38: Fondamenti di informatica 1 parte 5 D.U.1 fondamenti di informatica parte 5 appunti per il D.U. in Ingegneria Informatica, di Telecomunicazioni e di Meccanica,

fondamenti di informatica 1 parte 5 D.U.

38

apertura del fileQuesta 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.

Page 39: Fondamenti di informatica 1 parte 5 D.U.1 fondamenti di informatica parte 5 appunti per il D.U. in Ingegneria Informatica, di Telecomunicazioni e di Meccanica,

fondamenti di informatica 1 parte 5 D.U.

39

Lettura file sequenziale in C++

Per leggere il file numeri.txt si puo’ scrivere:… int n, elabora(int); ifstream fi; // fi=var. tipo flusso inputfi.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 ...

Page 40: Fondamenti di informatica 1 parte 5 D.U.1 fondamenti di informatica parte 5 appunti per il D.U. in Ingegneria Informatica, di Telecomunicazioni e di Meccanica,

fondamenti di informatica 1 parte 5 D.U.

40

Costruzione file sequenzialePer 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 outputfa.open(“risult.ati”); /* si richiede di aprire il file

risult.ati e di collegarlo a fa */if (fa) // se fa = 1 il file gia’ esistecout<<“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 di chiudere il file...

Page 41: Fondamenti di informatica 1 parte 5 D.U.1 fondamenti di informatica parte 5 appunti per il D.U. in Ingegneria Informatica, di Telecomunicazioni e di Meccanica,

fondamenti di informatica 1 parte 5 D.U.

41

Altri esempiVedere 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.

Page 42: Fondamenti di informatica 1 parte 5 D.U.1 fondamenti di informatica parte 5 appunti per il D.U. in Ingegneria Informatica, di Telecomunicazioni e di Meccanica,

fondamenti di informatica 1 parte 5 D.U.

42

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) !!).

Page 43: Fondamenti di informatica 1 parte 5 D.U.1 fondamenti di informatica parte 5 appunti per il D.U. in Ingegneria Informatica, di Telecomunicazioni e di Meccanica,

fondamenti di informatica 1 parte 5 D.U.

43

mainNella 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

Page 44: Fondamenti di informatica 1 parte 5 D.U.1 fondamenti di informatica parte 5 appunti per il D.U. in Ingegneria Informatica, di Telecomunicazioni e di Meccanica,

fondamenti di informatica 1 parte 5 D.U.

44

GraficaCapitolo 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)

Page 45: Fondamenti di informatica 1 parte 5 D.U.1 fondamenti di informatica parte 5 appunti per il D.U. in Ingegneria Informatica, di Telecomunicazioni e di Meccanica,

fondamenti di informatica 1 parte 5 D.U.

45

Fileper & Filepesono 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.

Page 46: Fondamenti di informatica 1 parte 5 D.U.1 fondamenti di informatica parte 5 appunti per il D.U. in Ingegneria Informatica, di Telecomunicazioni e di Meccanica,

fondamenti di informatica 1 parte 5 D.U.

46

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 EXE.