720 likes | 882 Views
fondamenti di informatica parte 5. appunti per Nettuno a.a. 2005-2006 di anna maria carminelli gregori approfondimenti. Tema del 17.10.2000. Scrivere in C++ un programma, strutturato in sottoprogrammi, che letti da tastiera 3 dati numerici, positivi e ciascuno <1
E N D
fondamenti di informatica parte 5 appunti per Nettuno a.a. 2005-2006 di anna maria carminelli gregori approfondimenti fond. di informatica1 parte 5
Tema del 17.10.2000 • Scrivere in C++ un programma, strutturato in sottoprogrammi, che letti da tastiera 3 dati numerici, positivi e ciascuno <1 • _ ne valuti il minimo e il massimo; • _ se il minimo e’ inferiore a 0.25 proceda a moltiplicare per 1.1 i dati e a rivalutarne il minimo e il massimo, ripetendo tali operazioni fintantoche’ il minimo risulti maggiore o uguale a 0.25; • (segue) fond. di informatica1 parte 5
Tema ... • _ visualizzi sul video o i dati modificati, • o la stringa ”Non occorre modificare i valori letti”; • _ (memorizzi in una tabella in Memoria Centrale e) visualizzi sul video i dati originali. • N.B. E' SCONSIGLIATO L' USO DI VARIABILI GLOBALI. • L’ uso delle tabelle ormai è noto e quindi nell’ ultima domanda va considerata la richiesta di visualizzazionee di memorizzazione in array. fond. di informatica1 parte 5
Considerazioni e ... • I 3 dati numerici, sono positivi e ciascuno <1: per memorizzarli occorreranno 3 variabili di tipo ….Di questi 3 dati si deve valutare il minimo e il massimo, NON l’ ordinamento ! • Per valutare il minimo occorre considerare una variabile dello stesso tipo dei dati e chiamarla per esempio min. Per il massimo la variabile dello stesso tipo sara’ max. • La rivalutazione del minimo implica un procedimento iterativo che si puo’ realizzare con una funzione contenente la frase while. fond. di informatica1 parte 5
… svolgimento: • Il main deve leggere i 3 valori, attivare una funzione che calcoli il minimo, un’ altra che calcoli il massimo, se il minimo e’ inferiore a 0.25 deve attivare una funzione che rivaluti minimo e massimo,e poi c’e la memorizzazione e la visualizzione: • main() • {/* Inizio Modulo principale */float a, b, c, min, max; • /*Parte esecutiva*/clrscr();cout <“\n dammi i 3 float: “; • cin >> a >> b >> c; • min = minimo(a, b, c); // passaggio per valore • max = massimo(a, b, c); // “ “ “ • if(min<0.25){max=rivaluta(&min, &a, &b, &c); // indirizzi ! • visual(a,b,c);} else memovis (a,b,c); cin >> " "; • return 0;} fond. di informatica1 parte 5
… e la funzione minimo ? • Eccola … (e analoga sara’ la funzione massimo:) • float minimo(float x, float y, float z) • {float mi; // si puo’ usare min ?!? • cout<<“\nCon i dati: ”<<x<<“ “<<y<<“ “<<z; • if (x<y && x< z) mi=x; • else if (y<x && y<<z) mi=y; • else mi = z; • cout <<“\n il minimo e’:”<< mi; <<endl; • return mi; //la funz. ha in piu’ le visualizzazioni... • } fond. di informatica1 parte 5
Alla funzione rivaluta i parametri sono passati per indirizzo quindi: • float rivaluta (float *m, float *x1, float *y1, float *z1) // m, x1, y1, z1 sono puntatori a float: per lavorare sui valori puntati occorre usare l’ operatore * • {floatma=0;//var. locale usata per restituire il massimo • while (*m < 0.25) • {*x1= unoeun*(*x1); *y1= unoeun*(*y1); • *z1=unoeun*(*z1); *m=minimo(*x1,*y1,*z1);} • ma=massimo(*x1, *y1, *z1); // *x1,… valori !!! • return ma;} fond. di informatica1 parte 5
CAPIRE BENE E completare • il programma con le direttive al precompilatore (per es. • #define unoeun 1.1), ed • i prototipi dei sottoprogrammi, la funzione massimo, la procedura visual che mancano, le costanti … • farlo girare; • con l’ introduzione delle tabelle realizzare anche la procedura memovis. fond. di informatica1 parte 5
E per emulare la memoria? • prima di fare nuovi discorsi, occorrono precisazioni sull’ uso di array, sulla sinteticita’ del C e C++, su errori comuni …. e altro! 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’ ?? • } fond. di informatica1 parte 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 73: 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++ sintetic … ? fond. di informatica1 parte 5
Sinteticamente … ? • Non e’ in linea con la sintesi leggere la sequenza di caratteri in un array 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. In tal caso occorre dimensionare l’ array con il numero di caratteri +1 per salvare un posto dove posizionare ‘\0’. 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 */... fond. di informatica1 parte 5
In definitiva • il significato di queste considerazioni riguarda l’ utilizzo di matrici e/o vettori. • E’ bene usarli quando richiesto e/o esiste la necessita’ di tenere memoria dei valori calcolati o letti: se tali condizioni sono false, allora usare il valore corrente (per es. appena letto) per i calcoli ad esso relativi e passare ad altro valore (per es. il successivo). • E poi bisogna essere attenti ad errori ed a esigenze comuni come indicato qui di seguito. fond. di informatica1 parte 5
Attenzione al fallimento dell’ input ! • In iostream.h del C++ esiste una funzione collegata al flusso cin ossia cin.fail() che restituisce il valore true se l’ input fallisce, per es. se si ha: • int x,y, elabora(int); • while(true) • {cin>>x; if ( cin.fail() ) break • else {y=elabora (x); • …. } • Il fallimento dell’ input può avvenire per esempio per un errore di battitura attribuendo ad x un carattere fond. di informatica1 parte 5
Attenzione alla fine file ! • In iostream.h delC++ esiste una funzione collegata al flusso cin ossia cin.eof() che restituisce il valore true se si incontra EOF. Nell’ es. precedente si analizzerà la fine file solodopo il fallimento dell’ input: • int x,y, elabora(int); • while(true) • {cin>>x; if ( cin.fail() ) {if ( cin.eof()) cout <<“ EOF”; • else cout “ dati sbagliati”; cin>>” “; break } • else {y=elabora (x); …. } fond. di informatica1 parte 5
Attenzione alle condizioni di confronto! • Ricordarsi le codifiche Fixed e Floating point(!!!) quando si devono confrontare i numeri in virgola mobile che hanno precisione limitata. • Per es. avendo: • double r= sqrt(2.0); • if (r*r == 2.0) cout << “il quadrato di sqrt(2) è2\n”; • else {cout<< “il quadrato di sqrt(2) NON è 2, ma “<< r*r<<endl; } • La visualizzazione sarà: il quadrato di sqrt(2) NON è 2, ma 2 !!!? • Ponendo {cout<< “il quadrato di sqrt(2) NON è 2, ma “<< setprecision(16)<< r*r<<endl; } • la visualizzazione sarà: il quadrato di sqrt(2) NON è 2, ma 2.000000000000004 fond. di informatica1 parte 5
E…per tornare al problema del SORT • Si riprende il project26 che ordina un vettore di interi con l’algoritmo di selezione o scelta diretta con il quale l‘ ordinamento di una tabella di n elementi si ottiene in n-1 passi come indicato nella diapo seguente. fond. di informatica1 parte 5
SORT & Algoritmo di Scelta diretta. • Con questo metodo l'ordinamento di una tabella di n elementi si ottiene in n-1 passi. • Al passo 1 si ricerca il minimo tra gli N elementi con N confronti (il CONFRONTO è l’ operazione dominante!) e trovatolo si scambia (di posto) col primo elemento; • al passo 2 si ricerca il minimo tra gli n-1 elementi (dal secondo all'ennesimo con N-1 confronti) e trovatolo si scambia (di posto) col secondo elemento ; • cosi' di seguito fino al passo N-1 quando si potranno scambiare di posto l' elemento N-1 con l'elemento N. • Ad ogni passo #confronti N • #passi N • #operazioni effettuate dall'algoritmo è dell' ordine di N*N ... QUINDI da usare se N <10. fond. di informatica1 parte 5
void ordina(int x[], int n) // x è “orlata” ! /* Effettua l' ordinamento di x (tabella di n elementi) con Scelta Diretta Parametri in ingresso: n,x; per es. n=3, x=3,4,1 Parametri che escono definiti: x; x=1,3,4 Variabili locali usate: i,j,k,min; */ { int i,j; /* var. di controllo cicli */ int k; /* indice del minimo */ int min; /* var. contenente il minimo */ /* Inizio parte esecutive di ordina */ for (i = 1; i <= n-1; i++) { min = x[i]; k = i; // se i=1 allora min = 3 e k =1; for (j = i+1; j <= n; j++) /* ciclo di ricerca del minimo */ { if (x[j] < min) //solo per j=3 questa condizione è vera (1<3) { k= j; min = x[j]; /* salvati indice del min. e min*/ } }// fine del for su j x[k] = x[i]; /* scambio tra x[3] e x[1] ottenendo 1, 4, 3 */ x[i] = min; /* x[1] = 1 per ricerche del min. senza successo queste due frasi non hanno effetto */ } //fine del for su i }/* fine di ordina */ fond. di informatica1 parte 5
E… vedere fondinf5 • …cercare altri algoritmi di SORT per esempio da pag. 503 del testo di Franco Crivellari: “Elementi di programmazione con il C++”, Franco Angeli; (primo riferimento in Bibliografia) dove sono descritti • METODI (Algoritmi) DI ORDINAMENTO come: • 1) selezione (per minimi successivi) • complessita’ = O(n2) • 2) scambi (bubble sort) • complessita’ = O(n2) • 3) inserzione • complessita’ = O(n2) • 4) ad albero: doppio indice (quicksort) • heap-sort • 5) distribuzione e fusione o MergeSort • Per la Complessità diapo seguente • complessita’ = • O(n log(n)) fond. di informatica1 parte 5
La complessità computazionale • di un ALGORITMO A ne indica il COSTO come numero di operazioni eseguite per arrivare al risultato desiderato: fornisce una misura del “running time” t del Programma realizzato con A; • il COSTO é funzione del tipo di elaborazione ( scansione lineare ? doppio ciclo o ciclo al quadrato ? è una funzione logaritmica ?…), e del tipo e dimensione n dei dati di ingresso: COSTO= f(n). • Interessa soprattutto il Costo per n ELEVATO COSTO ASINTOTICO lim f(n) • n • e NEL CASO PEGGIORE (meno spesso nei casi migliore e medio!) • Quindi il Costo si indica con la notazione O(f(n)) fond. di informatica1 parte 5
Altro metodo di ORDINAMENTO CON DOPPIO INDICE (quicksort) se N 10 1) algoritmo di separazione:scelto nell’ array un elemento X come perno (o elemento di separazione), si effettuano spostamenti nell’ array in modo da ripartirlo in due parti: sinistra (ps) e destra (ds) che, rispetto a X (elemento di separazione), siano: elementi ps X elementi ds 2) Si ripete “ricorsivamente” l’algoritmo di separazioneper ps e ds fino all'ordinamento completo fond. di informatica1 parte 5
ALGORITMO DI SEPARAZIONE • _ si sceglie un valore dell’ array (p.e. il mediano) come elemento di separazione X • _ si cerca da sinistra il primo elemen. > X e lo si sposta a destra di X se c' e’ un elem. • _ si cerca da destra il primo elemen. < X e lo si sposta a sinistra di X se c' e’ un elem. • _ si prosegue da sinistra e da destra per gli elementi successivi finche’‚ la ricerca di sinistra non si "incrocia" con quella di destra • Si ottiene: • elementi ps X elementi ds fond. di informatica1 parte 5
ESEMPIO ALGORITMO SEPARAZIONE con N=10 LISTA SIN. X LIS. DESTRA 9 1 6 4 5 8 2 7 3 0 s d 1ø riordinamento 0 1 6 4 5 8 2 7 3 9 s d 2ø riordinamento 0 1 6 4 5 3 2 7 8 9 d s s e d si "incrociano": separaz. Finita #operaz. fatte <= n; #passi da fare log2 n se le liste sono sempre divise a metà altrimenti n fond. di informatica1 parte 5
COMPLESSITA' QUICKSORT • Caso peggiore: n2 • Caso medio: n log2 n • non richiede extra memoria • si realizza facilmente con una procedura ricorsiva … (II corso!)! fond. di informatica1 parte 5
E per emulare la memoria? • Le matrici non bastano: per i dati occorrerebbe un vettore adimensione variabile (che si puo’ ottenere con l’uso di funzioni come malloc o new) di int ove porre valori interi e poi un altro di float, uno di char …; per gli indirizzi e le istruzioni in linguaggio macchina poi, occorrerebbe un altro vett… di unsigned, etc. • insomma un contenitore di elementi di tipodiverso, non omogenei ed anche a dimensione variabile. Un tipo di variabile strutturata chepermette di mantenere in memoria un insieme di elementi non omogenei e’ la struct del C e C++ simile al record del Pascal. fond. di informatica1 parte 5
Meo 2 lez. 5 & seg. 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 puo’ servire a introdurre la class del C++…ma questa e’ un’ altra storia (II corso!) fond. di informatica1 parte 5
Con l’ emulazione della memoria si ritorna all’ hardware • con 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 fond. di informatica1 parte 5
… e la struttura funzionale di EE gia’ presentata: • Temporizzatore • Unita’ Centrale di Controllo Unita’ Aritmetico - Logica • CPU • RegistriFlag • Unita’ di controllo di I/O • Memoria Centrale • Memorie di massa • Periferiche fond. di informatica1 parte 5
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! fond. di informatica1 parte 5
La CPU lavora • in stretto contatto con la C.M. e 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, • Registri tipo Accumulatore (A, B, C … ed anche Reg.1, Reg.2 ...) per tenere i Dati , • Registro Istruzione (I.R.) per tenere le Istruzioni del linguaggio di macchina. fond. di informatica1 parte 5
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: fond. di informatica1 parte 5
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 fond. di informatica1 parte 5
Esecuzione istruzione • … altrimenti fase di esecuzione: • SE si tratta di un’ istruzione di salto alla locazione di memoria di indirizzo xyzv allora I.C.= xyzv ed il controllo delle operazioni passa a xyzv 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. fond. di informatica1 parte 5
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 esecuzionecon uso del reg.P (e non I.C. per brevità di scrittura) • Sia: Istruzione = Leggi un dato dal disco e 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 • 0001 • REG. P . Accumulat. • Registro P.= Pointer • 1111 fond. di informatica1 parte 5
Esempio: continua • C.P.U. pone 00116 nel Registro P cioe’ 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 C.P.U. lo preleva e lo trasferisce 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) fond. di informatica1 parte 5
Registro P di 4 bit => 16 byte indirizzabili • CPU = “Ragnetto” • Central Memory • 0000 • 0001 3.14 • REG. P. 3.14 Accumulat. • Registro P.= Pointer • 1111 fond. di informatica1 parte 5
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 e il registro B A) • 55516 => P • Mem(P) => A (per es. 891710 => A) • 12316 => P Mem(P) => B (per es. 7910 => B) • A+B => A (per es. 891710+7910 => A) • 66616 => P • A => Mem(P) fond. di informatica1 parte 5
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! fond. di informatica1 parte 5
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 • etc. fond. di informatica1 parte 5
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 16 bit per indirizzare la memoria o altro. • Segue un esempio in un ipotetico linguaggio macchina. fond. di informatica1 parte 5
Come fare la somma S=S i=0-75 in linguaggio macchina ? • In C++ o C {int S = 0, i; • for ( i=0; i<8; i=++) S+ = 5;} • In ling.macchina le addizioni si fanno in A=Acc. e per gli indici si usano i Reg.i 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 5 • Incrementa Reg.1 di 1 • Salta a COME • VIA Memorizza A in S (A => MemS) fond. di informatica1 parte 5
E quindi: • CLEAR A • LOAD R1 #0 (#indica dato immediato) • COME CMP R1 #8 (se il compare da’ 0 FlagZero=1) • BZ VIA (salta a VIA se FlagZero=1) • ADD A #5 • INC R1 (incrementa di 1 R1) • B COME • VIA STORE A ADDRS (--> ADDRS => P e inoltre A => Mem(P)) fond. di informatica1 parte 5
o anche e meglio (con 1 giro ed 1 istruzione in meno): • CLEAR A • LOAD R1 #7 • COME ADD A #5 • DEC R1 (decrementa di 1 R1 :quando R1= 0 . FlagZero=1) • BZ VIA (salta a VIA se FlagZero=1) • B COME • VIA STORE A ADDRS fond. di informatica1 parte 5
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 16 a 20 bit e • BUS dati => n da 16 a 64 ” • Attualmente si usano 2-3 livelli di BUS per accellerare i trasferimenti. fond. di informatica1 parte 5
Unita’ periferiche: sistemavideo • E’ costituito da un display e da una scheda grafica ed ha 2 modalita’ di funzionamento: alfanumerica (p.e. 25righe x 80colonne di testo) e 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. fond. di informatica1 parte 5
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 (per es. “schede di rete”) e protocolli (regole) di comunicazione; • si puo’ anche usare la rete telefonica con l’ uso del “modem” dispositivo +comunemente usato che permette di convertire il segnale analogico (voce) a segnale digitale (bit) e viceversa. fond. di informatica1 parte 5
Memoria di massa : • Funzione: uguale a quella della C.M. (memorizzare !!!), ma tecnologia di tipo magnetico ... • Caratteristica: permanenza delle informazioni (come la ROM !!!), ma il Tempo di accesso che dipende dal tipo, 10-100msec. Enorme divario con la C.M. !!! Questo divario deve essere “compensato” con operazioni di input/output che scambino un notevole numero di informazioni in ogni accesso (vedere tra 5 diapo) • Supporto: disco fisso, floppy, nastro, C.D. ... • Lettura/scrittura: Unita’ di Lettura/scrittura dotata di una testina apposita o di raggio laser. fond. di informatica1 parte 5
Tipo di accesso: • sequenziale e, per dischi (hard e floppy), diretto o casuale (= random) tramite gli indirizzi di settore e traccia creati (cfr.parte 2) con la formattazione 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: da 1200 Kbyte in su • Capacita’ dei dischi: da 10 Gigabyte “ “ • Capacita’ dei C.D.: oltre 700 Mbyte; • Capacita’ dei nastri: variabile secondo il tipo di unita’ fond. di informatica1 parte 5
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 ASCII (in altri file, quelli 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. fond. di informatica1 parte 5