Accesso ai File. 1 I dati e la memoria centrale. R. Gallo ITIS A. Volta. Mar, 2010

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Accesso ai File. 1 I dati e la memoria centrale. R. Gallo ITIS A. Volta. Mar, 2010"

Transcript

1 Accesso ai File R. Gallo ITIS A. Volta Mar, 2010 La variabile File é fondamentale per la comprensione di un linguaggio di programmazione. Dal punto di vista informatico una variabile le é una struttura dati che permette la gestione di dati su memoria di massa. La trattazione in questo artcicolo é tutt'altro che esaustiva. Vi sono tantissime fonti bibliograche e link su internet dove reperire altro materiale. Convenzioni tipograche 1 1 I dati e la memoria centrale Quando scriviamo un programma in un linguaggio di programmazione, sappiamo che questo é l'ultima fase di una procedura che comporta una serie di passi quali 1. l'analisi del problema 2. la stesura di una bozza di soluzione che mostra per sommi capi quali sono i passi da seguire 3. la rappresetnazione graca, per chi vuole farlo, tramite un diagramma a blocchi che da una idea piú dettagliata e precisa del problema 4. inne, la traduzione in codice di programmazione Durante il lavoro di programmazione, bisogna introdurre le variabili sulle quali il programma esegue i calcoli. Un linguaggio di programmazione di alto livello mette a disposizione un insieme di tipi con i quali cominciare a lavorare, come ad esempio int, char, oat, double. Per problemi piú complessi possiamo dichiarare delle strutture dati derivate composte da tipi primitivi (vettori, stringhe, strutture etc). E molto importante capire approfonditamente come gestire le variabili, perché queste andranno a nire 1 L'articolo è stato scritto con dimensione caratteri superiore alla norma e gli esercizi si è cercato di concentrarli in una sola pagina, per dare l'ooportunità di vederne per intero lo svolgimento e lasciare spazio all'alunno di apporre le proprie note 1

2 2 in memoria centrale cioé in RAM. La RAM in un computer é una risorsa sempre scarsa. Una delle caratteristiche principali della RAM é la sua velocitá. Per un programma poter caricare in RAM tutte le variabili di cui ha bisogno, sarebbe la soluzione migliore. Purtroppo, ci sono applicazioni cosí complesse dove questo non é possibile. 1.1 Le variabili Le variabili sono delle locazioni di memoria che contengono un valore. Questo valore per tipi predeniti come int e double sono dei numeri. Un computer tuttavia, non capisce il sistema decimale e si deve convertire il valore decimale (intero o reale) in sistema binario (esadecimale). Una locazione di memoria cioé una variabile, non é altro che una sequenza di bit. All'interno della RAM si trovano una sequenza di tante variabili una dietro l'altra. Per leggere o scrivere una variabile c'é bisogno di conoscere la sua posizione nella RAM, cioé il suo indirizzo, che in C/C + + sappiamo essere un puntatore. La RAM é una struttura lineare e con questo intendiamo che si sviluppa in una sola dimensione. La RAM é costruita con transistor e condensatori. Le diverse tecnologie costruttive portano a RAM di tipo diverso che sono impiegate in dispositivi diversi (PC desktop, Notebook, tel cellulari, game-station) utilizzano RAM diverse Come si legge/scrive in RAM Le operazioni di lettura/scrittura in RAM sono cosí semplici che oramai nessuno presta piú attenzione. Eppure bisogna interpretarne bene il signicato. L'operazione di lettura/scrittura avviene tramite l'assegnazione, ovvero usando l'operatore =. Tuttavia il simbolo = non va trattato come in una equazione algebrica dove l'ugualianza sta a signicare che si devono eseguire calcoli opportuni perché il termine destro sia uguale al termine sinistro. L'operatore di assegnazione sarebbe piú corretto scriverlo in questo modo. Con questa operazione intendiamo che il valore della variabile che sta alla destra del simbolo, nisce nella variabile di sinistra e il valore che questa conteneva viene perso. Questa operazione praticamente é immediata e non ha senso misurarne il tempo, a meno di casi particolari che coinvolgono lo spostamento di grossi blocchi di dati da una zona all'altra della memoria. 2 I dati e le memorie di massa Le memorie di massa hanno il grosso vantaggio di essere molto grandi. Viceversa hanno una velocitá d'uso molto inferiore alla RAM. Esiste una relazione inversamente proporzionale tra velocitá e dimensione: la RAM é molto veloce, ma piccola; la memoria di massa é molto capiente, ma lenta. Questo gap di velocitá, da sempre, é stato oggetto di studio e sperimentazione da

3 Gestione File 3 parte dei tecnici hardware/software. La lentezza dei dispositivi di massa é dovuta alla loro tecnologia costruttiva. Una memoria di massa é formata da una parte meccanica e dalla elettronica di controllo che si interfaccia col PC. La parte meccanica é costituita da dischi o, no ad alcuni anni fa da nastri, il cui movimento é regolato dal principio di inerzia. Ci vuole molto tempo per metterli in moto e altrettanto per fermarli. Bisogna intenderci su cosa si intende per molto tempo. La lentezza delle memorie di massa é da rapportare alla velocitá delle RAM. Anche se un hard-disk ha una velocitá in media di 7-10ms (milli sec), non potrá mai competere con la velocitá della RAM che é dell'ordine di 10-20ns (nano sec). Per fare un esempio, durante un accesso a disco che dura 10ms, nello stesso tempo la RAM avrá fatto 10 7 operazioni 2.1 Anatomia di un Hard-Disk Concentriamo la nostra attenzione sulla periferica piú diusa come memoria di massa e cioé l'hard Disk. Un disco rigido é formato da uno o piú dischi, chiamati piatti, ricoperti da materiale ferro-magnetico. I piatti possono essere di una lega di alluminio oppure di materiale vetro-resinoso. A causa del riscaldamento a cui sono sottoposti i piatti, l'alluminio é stato abbandonato in quanto ad alte temperature puó deformarsi. Sul disco é possible scrivere su entrambe le facce. La lettura/scrittura avviene tramite delle testine magneto-resistive che volano sul piatto senza mai toccare la supercie. Questo é possibile grazie all'alta velocitá di rotazione dei dischi che crea un cuscinetto d'aria sul quale poggiano le testine. Se il disco é formato da piú piatti allora sono presenti piú testine, 2 per ciasun piatto. Le testine sono collegate a un braccio che si sposta a seconda del punto dove deve leggere/scrivere sui piatti. Il braccio con le testine formano il cosiddetto pettine. Il pettine si sposta rispetto ai piatti in modo tangenziale e non perpendicolare, questo per diminuire la dimensione di tutto il disco. L'informazione elementare che memorizza il disco é il bit. Una porzione della supercie ferro-magentica chiamata cella del bit, viene orientata in un verso o in un altro a seconda del verso della corrente che scorre nelle testine. L'orientamento della cella del bit corrisponde a memorizzare uno 0 o un Struttura logica di un Hard-Disk Terminata per sommi capi, la descrizione di come é composto un hard-disk veniamo alla parte che ci interessa di piú: il suo funzionamento logico, ovvero come il software congura e utilizza un hard-disk. La gura 1 mostra la struttura logica dell'hd dopo una formattazione. La supercie di ogni piatto viene suddivisa in cerchi concentrici chiamate tracce, ogni traccia é a sua volta suddivisa in settori; la dimensione di un settore puó variare.

4 4 La posizione di una testina rispetto ai piatti, e quindi di tutte le altre del pettine, determina il cilindo. Nel paragrafo 1.1, abbiamo descritto i passi per leggere/scrivere una variabile in RAM. La struttura lineare della RAM rende questo processo molto semplice. Allo stesso modo se vogliamo leggere/scrivere i dati su un hard-disk, ci accorgiamo subito della complessitá del procedimento. Un hard-disk possiede una struttura a tre dimensioni. Per poter indirizzare un dato su un hard-disk dobbiamo fornire tre valori: cilindro-traccia-settore: il cilindro indica la testina in uso, quindi il piatto e la relativa faccia, dopo di che la traccia e il settore individuano il dato sul piatto scelto. E' importante capire la dierenza tecnologica che esiste fra RAM e HD perché questa ha notevole inuenza sull'uso dei le in un programma Come si legge/scrive su HD Quando si deve leggere/scrivere su un dispositivo é necessario fornire un indirizzo per recuperare la posizione dove sono presenti i dati. Per una struttura lineare a una sola dimensione come la RAM, costruire questo indirizzo é molto semplice e ci consente inoltre di puntare direttamente il singolo byte. La dimensione minima della cella indirizzabile in RAM é il byte. Se volessimo riprodurre lo stesso procedimento per un HD, le cose si complicano notevolmente. Nel paragrafo abbiamo visto che i dati sono distribuiti sul disco, secondo una struttura a tre dimensioni cilindro-tracciasettore. Tutti i dati su disco sono memorizzati su unitá minime che sono i settori. Mentre per la RAM l'unitá minima di memorizzazione é il byte, per un HD l'unitá minima é il settore e la dimesione di un settore, purtroppo non é il byte. Quando si fanno operazioni di lettura/scrittura da disco viene letto/scritto un intero settore. La dimensione di un settore é fornita come parametro nel comando di formattazione e ha molta inuenza sulle performance dell'hd e della gestione dei le. La dimensione di un settore puó essere 512, 1024, 2048, 4096 byte o piú alta e dipende dal le system implementato nel sistema operativo. Proprio per questo motivo, storicamente un HD viene chiamato anche unitá a blocchi Inuenza della dimensione del settore sulle performance Un programma ben scritto che usa i le deve fare il minor numero di accessi al disco. Questa regola, seguita da tutti i programmatori, ha portato alla scrittura di una serie di algoritmi che minimizzano l'uso del disco. Alcuni di questi algoritmi sono cosí importanti da essere incorporati nel le system del sistema operativo. In alcuni casi queste tecniche sono addirittura implementate in hardware. Una variabile che inuisce sulla performance del disco é la dimensione del settore, che puó essere modicata dal programmatore. La scelta della dimensione di un settore é estremamente im-

5 Gestione File 5 Figura 1: Struttura logica HD portante per le performance dell'unitá disco nel sistema. Di seguito faremo alcuni esempi dove si evidenzierá come il valore di 512 byte non é il migliore da usare, come facilmente si potrebbe pensare.

6 6 File Generici Per cominciare, consideriamo la lettura/scrittura di un le qualsiasi. La dimensione di un le non coincide quasi mai con la dimensione di un settore o un multiplo di questo. Il le é presente in RAM prima di essere scaricato su disco. Per scrivere il le, il sistema operativo si occupa di eettuare la conversione da una struttura lineare a una dimensione come la RAM, in coordinate disco a tre dimensioni. Il le viene quindi suddiviso nella unitá minima di memorizzazione cioé il settore e sará distribuito su disco occupando i settori necessari. Per esempio un le di byte (pari a 11524/1024 = kbyte) scritto su un disco formattato con un settore di 1024 byte occuperá 11 settori e una parte del dodicesimo. Se il disco é formattato con settori da 4096 byte occuperá 11534/4096 = 2.8 settori. Il sistema registra il le nello spazio disponibile che trova, se possibile scrivendo in settori contigui. Se non esiste spazio contiguo, il le viene distribuito in settori non vicini. In ogni caso il disco presenterá una frammentazione che alla ne inuenza notevolmente le prestazioni File di grandi dimensioni Un altro caso interessante riguarda i le di grosse dimensioni, questi le si incontrano molto spesso in computer graca o applicazioni multimediali. Quando si usano le di questo tipo, la performance del disco diventano prioritarie rispetto a quelle delle altre periferiche. Poiché si é detto che l'accesso a disco avviene leggendo/scrivendo un intero settore, per questi casi la dimensione del settore conviene assegnarla a un valore molto alto (8/16kbyte). Questi le non sorono del problema della contiguitá mentre permane quello della frammentazione Partizionamento del disco Se si é sicuri del tipo di le che si usa, la prima operazione da fare consiste nel formattare il disco con la dimensione del settore corretta. Se invece come succede nella maggior parte dei casi, ci sono le grandi e piccoli, il sistema operativo consente anche di partizionare un disco in modo da creare dei dischi con dimensione piú piccola. Le partizioni sono trattate come se fossero dei dischi indipendenti. Ogni partizione puó essere formattata con le system e dimensione dei settori diversi.

7 Gestione File Misure di performance Rispetto a una operazione di lettura/scrittura eseguita in RAM (si veda 1.1.1), un accesso a disco comporta dei costi in termini di tempo. Per avere idea di quanto la nostra periferica si comporti ecientemente, ci sono alcuni parametri da misurare per calcolare la velocitá del disco. Questi parametri sono legati, ovviamente, alla presenza di parti meccaniche che come detto in 2.1, sottostanno al principio di inerzia quando si muovono. Ci sono tre parametri importanti di cui tener conto 1. tempo di ricerca: tempo che impiega la testina (pettine) a spostarsi sul piatto e trovare la traccia 2. tempo di latenza: tempo che intercore tra il posizionamento della testina sulla traccia e il passaggio del settore sotto la testina, mentre il disco ruota 3. tempo di read/write: tempo imiegato a leggere scrivere settore La somma di questi valori ci da un'idea del tempo di accesso a disco. Come si vede questi parametri non sono inuenzati, se non in minima parte, dal software scritto dal programmatore, in quanto sono valori legati alla tecnologia costruttiva. Esistono oggi in commercio periferiche con velocitá di rotazione dei dischi attorno ai 15000giri/min e bracci delle testine molto leggeri per spostarsi con piú facilitá sui piatti. Dove si puó agire invece, é sulla corretta organizzazione dei le sui disco, secondo le indicazioni date in Conclusioni Al termine di questa esposizione del funzionamento di un hard-disk ci si pone la domanda: come usare queste informazioni per scrivere un programma corretto e soprattutto eciente? A questa domanda risponderemo man mano che saranno sviluppati gli esempi. 3 La variabile File Nella pratica comune di tutti i giorni, un le é un termine che usiamo per identicare un elemento che sta su un dispositivo chiamato memoria di massa e che contiene dei dati utili al nostro lavoro. Questi dati sono persistenti nché qualcuno non cancella il le. Per quanto riguarda la denizione che si da in informatica, le cose cambiano in modo sostanziale, perché, per chi scrive un programma in un qualunque linguaggio di programmazione, la gestione di un le comporta la conoscenza, come abbiamo visto, di vari argomenti non solo legati al linguaggio, ma anche al sistema operativo e all'hardware del disco. Questo articolo illustra l'uso di un le a prescindere dal linguaggio e

8 8 dal sistema operativo. Gli esempi di codice presenti sono scritti in C perché il linguaggio ore maggiore essibilitá e permette di comprendere alcuni aspetti dell'argomento in maggiore dettaglio. 3.1 Strutture dati La scrittura di un programma in un linguaggio di programmazione imperativo, richiede che in testa del codice vengano dichiarate le variabile sulle quali il programma dovrá lavorare. L'obbligo della scrittura delle variabili non é una scelta dei progettisti del linguaggio che impongono di scrivere l'elenco delle variabili da usare prima del codice, ma una necessitá imposta dall'hardware. Un programma é un oggetto che quando va in esecusione, consuma delle risorse hardware che sono assegante al programma dal sistema operativo. Queste risorse sono, almeno per programmi semplici, la CPU e la RAM. Altri programmi piú complessi, hanno bisogno di accedere alle periferiche come i dischi rigidi, il monitor e la stampante, tanto per citarne alcune. Il codice di un programma deve essere compilato e linkato per arrivare nella forma di eseguibile. Nella fase di compilazione il codice sorgente viene tradotto in linguaggio oggetto. Questa forma intermedia rappresenta il codice sorgente tradotto in una forma numerica non ancora eseguibile. Il codice compilato contiene le informazioni relative all'occupazione della memoria, cioé quanta memoria il programma occuperá quando entra nello stato di esecuzione e diventa un processo. Quando si scrive un programma siamo abituati a elencare le variabili necessarie per risolvere il problema e quindi possiamo cancolare quanti byte occupano le variabili quando saranno allocate in memoria centrale Esempi allocazione memoria 1. Se vogliamo risolvere il problema del calcolo della media delle temperature delle cittá dei capoluoghi di regione in Italia, dichiariamo un vettore di 20 elementi di tipo double, un valore per ciascun capoluogo. Lo spazio di memoria occupato sará di 80 byte ovvero 280 = 20*8 byte, visto che un double é grande 8 byte. 2. Consideriamo il problema di registrare i voti in matematica di tutti gli alunni di una scuola come L'ITIS Volta. La popolazione della scuola é composta da circa 450 alunni, dichiareremo allora un vettore di 450 elementi di tipo unsigned int per una occupazione di memroia di 1800=450*4 byte. 3. La registrazione dei valori di temperatura all'interno di un forno effettuata ogni secondo durante una giornata, porta a dover dichiarare un vettore di 86400=60(sec)*60(min)*24(ore) posizioni che occupano =86400*8byte se esprimiamo la temperatura in double.

9 Gestione File 9 4. Altro problema interessante consiste nel ripetere la procedura del problema precedente per 30gg Come si vede negli esempi precedenti, la dimensione della struttura dati per contenere i valori, aumenta sempre di piú, sino ad arrivare al punto che l'esempio 3 e 4 non possono essere risolti con l'uso di un vettore. Non é possibile usare un vettore in quanto ci sono vincoli hardware: un vettore non puó essere allocato in ram se supera una certa dimensione. In particolare per l'esempio 4 non si puó usare neanche la ram, ma scrivere i dati su altro dispositivo. 3.2 Variabile File Nella paragrafo 3.1, abbiamo fatto alcuni esempi dove, in generale, é possibile conoscere quanti byte occupano le strutture dati in memoria centrale, allocate per un dato programma. La quantitá di memoria l'abbiamo calcolata prima di mandare in esecuzione il programma. In questo caso stiamo parlando di allocazione statica della memoria a tempo di compilazione. Il caso dell'esempio 4 peró non é del tutto risolto. Cosa succederebbe se la registrazione delle temperature deve proseguire per 2,3,4 o piú mesi. Non sappiamo di quanta ram abbiamo bisogno per registrare tutti i valori, ovvero il programma non conosce prima di andare in esecuzione di quanta memoria avrá bisogno per fare i calcoli. Siamo in presenza di un programma che alloca lo spazio di memoria solo a run-time ovvero di allocazione dinamica della memoria. E se la memoria presente nel PC non fosse suciente, a tempo di esecuzione, per registrare tutti i dati, dove potremmo scriverli? Per risolvere questi problemi si deve ricorrere all'uso di un'altra periferica, oltre la RAM, e cioé di un dispositivo di memoria di massa. Nel nostro caso faremo riferimento per semplicitá al disco rigido. In un linguaggio di programmazione quando parliamo di le usiamo una de- nizione piuttosto strana. Una variabile le é una variabile con un tempo di vita superiore a quella del programma. Torneremo in seguito su questa denizione. Per il momento cominciamo ad analizzare esempi di codice. Il linguaggio usato come detto é il C/C + +

10 File di numeri - Scrittura In questo esempio si crea un le di numeri. La classe del C/C + + che tratta i le si chiama fstream che si suddivide in ifstream se trattiamo solo le in input e ofstream se trattiamo solo le in output int main(int argc, char* argv[]) { ofstream ofs; // stream in sola scrittura int num; char str[1]; long int position; // attributo ios::out della classe ofstream indica file in scrittura ofs.open("c:\\scuola1.dat", ios::out); if (!(ofs)) // se il sistema operativo non riesce a aprire/creare file cout << "errore su apertura file in ingresso"; else { // altrimenti crea il file e restituisce un puntatore in ofs do { // l'operatore << e' polimorfico, // ora scrive su monitor che è un file con nome cout cout << "Numero... "; // l'operatore >> e' polimorfico, // ora legge dalla tasitera che è un file con nome cin cin >> num; // ora scrive sul file ofs num ofs << num << '\n'; cout << "Hai finito [s/n]?"; cin >> str; while ((strcmp(str,"s"))); // continua se l'espressione e' vera ofs.close(); // i file vanno sempre chiusi return 0; Il programma scrive su uno stream di output tanti numeri nché non premo il tasto 's'. Il nome del le viene dato nel metodo open. Il nome del le é formato dal path e dal nome vero e proprio. In questo caso si scrive nel directory c: ma un utente normale che si logga in windows o linux, non ha l'accesso alla cartella principale, quindi il path va sostituito con la cartella /documenti (in windows) o /home (in linux).

11 Gestione File File di numeri - Lettura Il codice seguente legge un le di numeri cosí come scritto in int main(int argc, char* argv[]) { ifstream ifs; int num; long int position; ifs.open("c:\\scuola1.dat", ios::in); if (!(ifs)) cout << "Errore apertura file in uscita"; else { // mentre non siamo arrivati alla fine file EOF?? while (ifs.good()) { // legge il numero dal file e lo stampa ifs >> num; cout << "Numero... " << num; // stampa anche la posizione del num nel file position = ifs.tellg(); cout << " alla posizione -> " << position << endl; getch(); // chiude il file ifs.close(); return 0;

12 File di stringhe - Scrittura In questo esempio si scrive un le di stringhe int main(int argc, char* argv[]) { ofstream ofs; char s[1], str[100]; ofs.open("c:\\scuola2.dat", ios::out); if (!(ofs)) cout << "Errore apertura fiel in uscita"; else { do { cout << "Stringa... "; cin >> str; ofs << str << '\n'; cout << "Hai finito [s/n]?"; cin >> s; while (strcmp(s, "s")); ofs.close(); return 0;

13 Gestione File File di stringhe - Lettura In questo esempio si legge il le scritto in int main(int argc, char* argv[]) { ifstream ifs; char str[100]; ifs.open("c:\\scuola2.dat", ios::in); if (!(ifs)) cout << "Errore apertura file in uscita"; else { while (ifs.good()) { // getline legge massio 100 char oppure quando torva fine stringa ifs.getline(str,100); cout << "Stringa... " << str << endl; cout << "-> Premi un tasto per finire " << endl; getch(); ifs.close(); return 0; 3.3 Osservazioni Polimorsmo Negli esempi dei paragra precedenti abbiamo fatto uso delle proprietá della programmazione orientata agli oggetti OOP. La scrittura/lettura dei dati avviene con operatore polimorco. Il polimorsmo consente di eseguire una operazione senza preoccuparci del tipo di dato impiegato. Fermiamoci un attimo. Finora non abbiamo accennato al fatto che scrivere su un le un numero o una carattere non é la stessa cosa. Se avessimo scritto gli esempi in C avremmo avuto problemi. In C esiste la funzione read/write per leggere/scrivere, ma ha bisogno di conoscere il tipo di dato che si legge/scrive Istanza di un oggetto Per usare un le si deve istanziare un oggetto dalla classe fstream (ifstream, ofstream) che sta nel le include fstream.h. Il metodo open dell'oggetto istanziato apre/crea un le a seconda del valore dell'attributo ios. Il metodo open riceve un parametro che é il nome del le

14 14 4 Lettura/Scrittura le generici Negli esempi precedenti abbiamo trattato le esclusivamente di numeri, o esclusivamente di caratteri. Chiediamoci ora cosa fare quando usiamo le di struct. Un le di strutture é la condizione piú frequente che si ritrova nel lavoro quotidiano. Viste le considerazioni dei paragra precedenti, il problema che sorge é quello di trasferire i dati da una struttura lineare come la RAM, su una memoria di massa con una tecnologia hardware diversa, le cui variabile sono accessibili tramite 3 variabili: cilindro, traccia, settore. 4.1 File Binari Negli esempi e 3.2.3, la variabile da scrivere occupa in RAM sempre lo stesso spazio, o un multiplo di questo. Per un intero 4 byte, per un vettore di interi n*4 byte se il vettore é formato da n elementi. Trasferire questa struttura su le risulta semplice. Un rapido calcolo ci dice quanti settori su disco occuprará la nostra variabile. Di seguito alcuni esempi per un vettore di 1000 elementi di interi pari a 4000 byte, lo spazio occupato su disco sará di 1 settore, se come dimensione del settore si é scelta, durante la formattazione, un valore di Numero di accessi per recuparare tutto il vettore é 1 per lo stesso vettore, i settori occupatio saranno 4, di cui uno occuapto parzialmente, se la dimensione del settore scelta é pari a 1024 byte. Si corre il rischio di avere un le frammentato con notevole diminuizione del tempo di accesso da parte delle testine su disco, in quanto queste si spostano sulla supercie per recuperare tutto il vettore Una variabile struct ci pone davanti un problema, se vogliamo piú complesso. La struct contiene var di tipo diverso e dimensione diversa: lo spazio occupato dalla variabile in RAM é la somma dei byte di ogni singola variabile della struttura. La stessa variabile su disco occuperá un numero di settori in base alla dimensione scelta in fase di formattazione, ma in fase di lettura/scrittura un ulteriore passaggio é necessario, anché i dati vengano recuperati in memoria secondo la loro dimensione e anche rispettando la stessa posizione occupata nella struttura. Piú avanti si vedrá l'esempio di una struttura particolare, trasformata secondo il meccanismo del cast che porta risultati molto interessanti. Quest'ultimo esempio é possibile grazie alla essibilitá del linguaggio C.

15 Gestione File Scrittura le binario Viene presentato il brano di codice che si occupa della scrittura di un le binario, ossia di una struttura generica struct blocco { char nome[100]; char cognome[100]; char indirizzo[100]; unsigned int stipendio; unsigned short int eta; bl; int main (int arcg, char *argv[]) { char *pbl; // crea e apre il file binario ofstream ofs("c:\\blocco.dat"); do { cout << "Nome... "; cin.getline(bl.nome,100); cout << "Cognome... "; cin.getline(bl.cognome,100); cout << "Indirizzo... "; cin.getline(bl.indirizzo,100); cout << "Stipendio... "; cin >> bl.stipendio; cout << "Eta... "; cin >> bl.eta; cout << endl << "Hai finito [s/n]??"; cin >> s; // scrive il blocco COMPOSTO DA STRINGHE E DA NUMERI pbl = (char *)&bl; ofs.write(pbl, sizeof(bl)); while (s!="s"); ofs.close(); return 0; Nel brano di codice precedente, nel pieno rispetto dello stile C, il le viene creato e successivamente riempito con i dati della struttura. A dierenza degli esempi che scrivono/leggono numeri o stringhe, non é stato creato un operatore polimorco come o. Invece si usa il metodo write che scrive una sequenza di byte. Prima dell'istruzione write viene eettuato un cast

16 16 che va letto in questo modo: preso il puntatore al blocco bl lo si trasforma in un puntatore a char, ovvero un puntatore a una sequenza di byte. Poiché la struttura é composta da tipi dierenti, risulta dicile trattare la scrittura/lettura su le con operatore polimorco, si decide allora di trasformare tutto in una sequenza di byte: come se la struttura passasse attraverso un tritacarne che scompone in pezzi piú piccoli le varie parti di cui é composta. In ultimo, per ottenere la massima essibilitá si usano i puntatori. Il metodo write richiede un altro parametro cioé la dimensione della stringa da scrivere. Lascio al lettore spiegarne il motivo Lettura le binario Il codice seguente mostra come fare la lettura di un le binario usando sempre la stessa struttura int main (int arcg, char *argv[]) { // crea e apre il file binario ifstream ifs("c:\\blocco.dat"); while (ifs.good()) { ifs.read((char*)&bl, sizeof(bl)); cout << bl.cognome << endl; cout << bl.nome << endl; cout << bl.indirizzo << endl; cout << bl.stipendio << endl; cout << bl.eta << endl; ifs.close(); return 0; dove il metodo read carica in mmemoria i dati da inserire nella struttura. Il metodo si aspetta di trovare una struttura in memoria centrale, che corrisponda sia in dimensione sia in posizione. Il rischio é quello di usare una struttura dati che corrisponde in grandezza a quella presente su disco ma con campi disposti in modo diverso o di tipo dierente ma che hanno la stessa dimensione. Il metodo eettua il cast sui campi letti, con le conseguenze che possiamo immaginare.

17 Gestione File Esercizio Si considerino le due struttura seguenti struct ST1 int n; char c[4]; float f; st1; struct ST2 { char c[4]; float f; int n; Si scriva un programma che crei/sriva/legga da le creando il le prima con la ST1 e leggendo con ST2. Quali sono i risultati? Proprietà sequenziale di un le Una variabile le indirizza un'insieme di elementi di tipo sequenziale. Un insieme possiede questa proprietá quando tra gli stessi elementi si stabilisce una relazione d'ordine. Per esempio l'insieme dei numeri Interi é sequenziale. Un elemento dell'insieme é preceduto e seguito da un altro elemento in relazione d'ordine di essere il maggiore e il minore dell'elemento precedente e dell'elemento successivo. Oltre a questa proprietá ne sono denite altre. La relazione d'ordine ci dice che un solo elemento per volta puó essere trattato. La posizione corrente dell'elemento viene espressa come se l'insieme fosse composto da due parti: la parte sinistra e la parte destra dell'elemento considerato. Nel caso specico dell'insieme le, l'elemento generico prende il nome di registrazione. La gura 1 suggerisce che é possibile recuperare una registrazione del le secondo le proprietá che abbiamo prima enunciato, ovvero accedere alla registrazione, senza scorrere le registrazioni precedenti presenti nel le. Il recupero diretto della registrazione in una struttura lineare (RAM) é una operazione molto semplice. Viceversa, la stessa operazione su memoria di massa comporta una operazione di traduzione di indirizzi, delle quali si occupa il driver del sistema operativo che comanda il controller della periferica. Queste operazioni sono trasparenti al programmatore, che opera a livello di astrazione del linguaggio di programmazione. Il C/C + +, come altri linguaggi, fornisce una serie di istruzioni, per il recupero della posizione della registrazione.

18 Accesso a File Lo stream standard di accesso alle periferiche, possiede le istruzioni tellp[ut] seekp[ut] tellg[et] seekg[et] per recuperare e accedere alla posizione della registrazione. Il susso p sta per put nel caso il usso sia aperto in scrittura, mentre il susso g sta per get se il usso é aperto in lettura. I metodi tell/seek possiedono a loro volta i seguenti attributi ::beg ::cur ::end per indicare che il recupero della posizione cercata della registrazione, va calcolata a partire dall'inizio del le, dalla ne del le e dalla posizione corrente del le

19 Gestione File Esempi uso tell/seek Recupera la registrazione x del le Si ipotizza la dichiarazione della struttura BLOCCO in le header o altra parte int main (int arcg, char *argv[]) { long int x; char *pbl; BLOCCO bl; // crea e apre il file binario ifstream ifs("c:\\blocco.dat"); cout << ``Quale registrazione recuperare dal file... ``; cin >> x; // il valore di x va moltiplicato per la dimensione in byte // del blocco che compone la registrazione, altrimenti // si recupera il byte che occupa la posizione x // recupera la posizione cercata dall'inizio del file ifs.seekg(x*sizeof(bl), ios::beg); ifs.read((char*)&bl, sizeof(bl)); cout << bl.cognome << endl; cout << bl.nome << endl; cout << bl.indirizzo << endl; cout << bl.stipendio << endl; cout << bl.eta << endl; ifs.close(); return 0;

20 20 Funzione FileSize In questo esempio si scrive sotto forma di funzione, l'istruzione FileSize che in C/C + + non é presente, mentre é fornita in altri linguaggi. Nell'esempio il le é binario long int FileSize (ofstream &file) { long int start, end, sizefile; unsigned int uiblocchi; BLOCCO bl; // crea e apre il file binario ifstream ifs("c:\\blocco.dat"); ifs.seekg (0, ios::beg); // porta il puntatore del file all'inizio start = ifs.tellg(); // recupera la prima posizione ifs.seekg (0, ios::end); // porta il puntatore del file alla fine end = ifs.tellg(); // recupera l'ultima posizione sizefile = (end - start); // dimensione file in byte uiblocchi = (end - start) / sizeof(blocco); // num di blocchi ifs.close(); return sizefile;

Le variabili. Olga Scotti

Le variabili. Olga Scotti Le variabili Olga Scotti Cos è una variabile Le variabili, in un linguaggio di programmazione, sono dei contenitori. Possono essere riempiti con un valore che poi può essere riletto oppure sostituito.

Dettagli

Fondamenti di Informatica T. Linguaggio C: File

Fondamenti di Informatica T. Linguaggio C: File Linguaggio C: File I File Il file e` l'unita` logica di memorizzazione dei dati su memoria di massa, che consente una memorizzazione persistente dei dati, non limitata dalle dimensioni della memoria centrale.

Dettagli

Gestione dei File in C

Gestione dei File in C Gestione dei File in C Maurizio Palesi DIIT Università di Catania Viale Andrea Doria 6, 95125 Catania mpalesi@diit.unict.it http://www.diit.unict.it/users/mpalesi Sommario In questo documento saranno introdotte

Dettagli

Sistemi Operativi. Interfaccia del File System FILE SYSTEM : INTERFACCIA. Concetto di File. Metodi di Accesso. Struttura delle Directory

Sistemi Operativi. Interfaccia del File System FILE SYSTEM : INTERFACCIA. Concetto di File. Metodi di Accesso. Struttura delle Directory FILE SYSTEM : INTERFACCIA 8.1 Interfaccia del File System Concetto di File Metodi di Accesso Struttura delle Directory Montaggio del File System Condivisione di File Protezione 8.2 Concetto di File File

Dettagli

Le funzioni. Funzioni. Funzioni. Funzioni. Funzioni. Funzioni

Le funzioni. Funzioni. Funzioni. Funzioni. Funzioni. Funzioni Funzioni Le funzioni Con il termine funzione si intende, in generale, un operatore che, applicato a un insieme di operandi, consente di calcolare un risultato, come avviene anche per una funzione matematica

Dettagli

I file di dati. Unità didattica D1 1

I file di dati. Unità didattica D1 1 I file di dati Unità didattica D1 1 1) I file sequenziali Utili per la memorizzazione di informazioni testuali Si tratta di strutture organizzate per righe e non per record Non sono adatte per grandi quantità

Dettagli

Background (sfondo): Finestra: Una finestra serve a mostrare il contenuto di un disco o di una cartella -, chiamata anche directory.

Background (sfondo): Finestra: Una finestra serve a mostrare il contenuto di un disco o di una cartella -, chiamata anche directory. @ PC (Personal computer): Questa sigla identificò il primo personal IBM del 1981 a cura di R.Mangini Archiviazione: Il sistema operativo si occupa di archiviare i file. Background (sfondo): Cursore: Nei

Dettagli

Appunti di Sistemi Operativi. Enzo Mumolo e-mail address :mumolo@units.it web address :www.units.it/mumolo

Appunti di Sistemi Operativi. Enzo Mumolo e-mail address :mumolo@units.it web address :www.units.it/mumolo Appunti di Sistemi Operativi Enzo Mumolo e-mail address :mumolo@units.it web address :www.units.it/mumolo Indice 1 Cenni su alcuni algoritmi del Kernel di Unix 1 1.1 Elementi di Unix Internals.................................

Dettagli

Corso di Fondamenti di Informatica

Corso di Fondamenti di Informatica Corso di Fondamenti di Informatica L uso delle funzioni in C++ Claudio De Stefano - Corso di Fondamenti di Informatica 1 Funzioni Nel C++ è possibile scomporre problemi complessi in moduli più semplici

Dettagli

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a. 2009-10. prof.

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a. 2009-10. prof. Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a. 009-10 prof. Viviana Bono Blocco 9 Metodi statici: passaggio parametri, variabili locali, record

Dettagli

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori Gli array Array e puntatori Laboratorio di Informatica I un array è un insieme di elementi (valori) avente le seguenti caratteristiche: - un array è ordinato: agli elementi dell array è assegnato un ordine

Dettagli

Universita' di Ferrara Dipartimento di Matematica e Informatica. Algoritmi e Strutture Dati. Rappresentazione concreta di insiemi e Hash table

Universita' di Ferrara Dipartimento di Matematica e Informatica. Algoritmi e Strutture Dati. Rappresentazione concreta di insiemi e Hash table Universita' di Ferrara Dipartimento di Matematica e Informatica Algoritmi e Strutture Dati Rappresentazione concreta di insiemi e Hash table Copyright 2006-2015 by Claudio Salati. Lez. 9a 1 Rappresentazione

Dettagli

Introduzione ai Device Drivers in Linux. E.Mumolo, DEEI mumolo@units.it

Introduzione ai Device Drivers in Linux. E.Mumolo, DEEI mumolo@units.it Introduzione ai Device Drivers in Linux E.Mumolo, DEEI mumolo@units.it 1 Device Drivers Moduli software che gestiscono le periferiche attraverso il file system Tutte le periferiche sono viste come file

Dettagli

Le Liste. Elisa Marengo. Università degli Studi di Torino Dipartimento di Informatica. Elisa Marengo (UNITO) Le Liste 1 / 31

Le Liste. Elisa Marengo. Università degli Studi di Torino Dipartimento di Informatica. Elisa Marengo (UNITO) Le Liste 1 / 31 Le Liste Elisa Marengo Università degli Studi di Torino Dipartimento di Informatica Elisa Marengo (UNITO) Le Liste 1 / 31 Cos è una Lista Una lista è una collezione di elementi omogenei che: potrebbero

Dettagli

Bloodshed Dev-C++ è l IDE usato durante le esercitazioni/laboratorio. IDE = Integrated Development Environment

Bloodshed Dev-C++ è l IDE usato durante le esercitazioni/laboratorio. IDE = Integrated Development Environment Bloodshed Dev-C++ Bloodshed Dev-C++ è l IDE usato durante le esercitazioni/laboratorio IDE = Integrated Development Environment Gerardo Pelosi 01 Ottobre 2014 Pagina 1 di 8 Dev-C++ - Installazione Potete

Dettagli

Introduzione agli algoritmi e alla programmazione in VisualBasic.Net

Introduzione agli algoritmi e alla programmazione in VisualBasic.Net Lezione 1 Introduzione agli algoritmi e alla programmazione in VisualBasic.Net Definizione di utente e di programmatore L utente è qualsiasi persona che usa il computer anche se non è in grado di programmarlo

Dettagli

Informatica Applicata

Informatica Applicata Ing. Irina Trubitsyna Concetti Introduttivi Programma del corso Obiettivi: Il corso di illustra i principi fondamentali della programmazione con riferimento al linguaggio C. In particolare privilegia gli

Dettagli

Dev C++ Prerequisiti. Note di utilizzo. Utilizzo di Windows Effettuare il download da Internet Compilazione di un programma

Dev C++ Prerequisiti. Note di utilizzo. Utilizzo di Windows Effettuare il download da Internet Compilazione di un programma Dev C++ Note di utilizzo 1 Prerequisiti Utilizzo di Windows Effettuare il download da Internet Compilazione di un programma 2 1 Introduzione Lo scopo di queste note è quello di diffondere la conoscenza

Dettagli

Concetto di Funzione e Procedura METODI in Java

Concetto di Funzione e Procedura METODI in Java Fondamenti di Informatica Concetto di Funzione e Procedura METODI in Java Fondamenti di Informatica - D. Talia - UNICAL 1 Metodi e Sottoprogrammi Mentre in Java tramite le classi e gli oggetti è possibile

Dettagli

Chiamate di sistema per la Inter Process Communication (IPC) in POSIX. E.Mumolo, DEEI mumolo@units.it

Chiamate di sistema per la Inter Process Communication (IPC) in POSIX. E.Mumolo, DEEI mumolo@units.it Chiamate di sistema per la Inter Process Communication (IPC) in POSIX E.Mumolo, DEEI mumolo@units.it Pipe Cos'è un pipe? E' un canale di comunicazione che unisce due processi Caratteristiche: La più vecchia

Dettagli

Architettura dei Calcolatori

Architettura dei Calcolatori Architettura dei Calcolatori Sistema di memoria parte prima Ing. dell Automazione A.A. 2011/12 Gabriele Cecchetti Sistema di memoria parte prima Sommario: Banco di registri Generalità sulla memoria Tecnologie

Dettagli

Le funzioni di shell La bash supporta la programmazione procedurale e prevede la possibilità di definire funzioni utilizzando le sintassi

Le funzioni di shell La bash supporta la programmazione procedurale e prevede la possibilità di definire funzioni utilizzando le sintassi Le funzioni di shell La bash supporta la programmazione procedurale e prevede la possibilità di definire funzioni utilizzando le sintassi alternative: function nome { lista-comandi } oppure nome ( ) {

Dettagli

Cos è una stringa (1) Stringhe. Leggere e scrivere stringhe (1) Cos è una stringa (2) DD Cap. 8 pp. 305-341 KP Cap. 6 pp. 241-247

Cos è una stringa (1) Stringhe. Leggere e scrivere stringhe (1) Cos è una stringa (2) DD Cap. 8 pp. 305-341 KP Cap. 6 pp. 241-247 Cos è una stringa (1) Stringhe DD Cap. 8 pp. 305-341 KP Cap. 6 pp. 241-247 Una stringa è una serie di caratteri trattati come una singola unità. Essa potrà includere lettere, cifre, simboli e caratteri

Dettagli

HORIZON SQL CONFIGURAZIONE DI RETE

HORIZON SQL CONFIGURAZIONE DI RETE 1-1/9 HORIZON SQL CONFIGURAZIONE DI RETE 1 CARATTERISTICHE DI UN DATABASE SQL...1-2 Considerazioni generali... 1-2 Concetto di Server... 1-2 Concetto di Client... 1-2 Concetto di database SQL... 1-2 Vantaggi...

Dettagli

Semantica operazionale dei linguaggi di Programmazione

Semantica operazionale dei linguaggi di Programmazione Semantica operazionale dei linguaggi di Programmazione Oggetti sintattici e oggetti semantici Rosario Culmone, Luca Tesei Lucidi tratti dalla dispensa Elementi di Semantica Operazionale R. Barbuti, P.

Dettagli

---------------------------------------------------------------- Puntatori a funzione. In C è possibile utilizzare dei puntatori a funzioni, ovvero

---------------------------------------------------------------- Puntatori a funzione. In C è possibile utilizzare dei puntatori a funzioni, ovvero ---------------------------------------------------------------- Puntatori a funzione. In C è possibile utilizzare dei puntatori a funzioni, ovvero delle variabili a cui possono essere assegnati gli indirizzi

Dettagli

Ricerca sequenziale di un elemento in un vettore

Ricerca sequenziale di un elemento in un vettore Ricerca sequenziale di un elemento in un vettore La ricerca sequenziale o lineare è utilizzata per ricercare i dati in un vettore NON ordinato. L algoritmo di ricerca sequenziale utilizza quan non ha alcuna

Dettagli

Ambienti di sviluppo integrato

Ambienti di sviluppo integrato Ambienti di sviluppo integrato Un ambiente di sviluppo integrato (IDE - Integrated Development Environment) è un ambiente software che assiste i programmatori nello sviluppo di programmi Esso è normalmente

Dettagli

IL LINGUAGGIO C++ Configurazione di Dev-C++

IL LINGUAGGIO C++ Configurazione di Dev-C++ IL LINGUAGGIO C++ Note sull'uso di DevC++ Requisiti di sistema per Dev-C++ - Sistema operativo Microsoft Windows 95, 98, Millenium Edition, NT 4, 2000 o XP - RAM: 8 Mb (consigliati almeno 32 Mb) - CPU:

Dettagli

MODBUS-RTU per. Specifiche protocollo di comunicazione MODBUS-RTU per controllo in rete dispositivi serie. Expert NANO 2ZN

MODBUS-RTU per. Specifiche protocollo di comunicazione MODBUS-RTU per controllo in rete dispositivi serie. Expert NANO 2ZN per Expert NANO 2ZN Specifiche protocollo di comunicazione MODBUS-RTU per controllo in rete dispositivi serie Expert NANO 2ZN Nome documento: MODBUS-RTU_NANO_2ZN_01-12_ITA Software installato: NANO_2ZN.hex

Dettagli

PROBLEMA DELLA RICERCA DI UN ELEMENTO IN UN ARRAY E ALGORITMI RISOLUTIVI

PROBLEMA DELLA RICERCA DI UN ELEMENTO IN UN ARRAY E ALGORITMI RISOLUTIVI PROBLEMA DELLA RICERCA DI UN ELEMENTO IN UN ARRAY E ALGORITMI RISOLUTIVI PROBLEMA DELLA RICERCA in termini generali: Dati in input un insieme S di elementi (numeri, caratteri, stringhe, ) e un elemento

Dettagli

INTRODUZIONE, LINGUAGGIO, HANDS ON. Giuseppe Cirillo g.cirillo@unina.it

INTRODUZIONE, LINGUAGGIO, HANDS ON. Giuseppe Cirillo g.cirillo@unina.it INTRODUZIONE, LINGUAGGIO, HANDS ON Giuseppe Cirillo g.cirillo@unina.it Il linguaggio C 1972-Dennis Ritchie 1978-Definizione 1990-ANSI C 1966 Martin Richars (MIT) Semplificando CPL usato per sviluppare

Dettagli

Linguaggio C: introduzione

Linguaggio C: introduzione Linguaggio C: introduzione Il linguaggio C è un linguaggio general purpose sviluppato nel 1972 da Dennis Ritchie per scrivere il sistema operativo UNIX ed alcune applicazioni per un PDP-11. Il linguaggio

Dettagli

Fondamenti di Informatica e Laboratorio T-AB Ingengeria dell Automazione a.a. 2008/2009. Lab 02 Tipi semplici in C

Fondamenti di Informatica e Laboratorio T-AB Ingengeria dell Automazione a.a. 2008/2009. Lab 02 Tipi semplici in C Fondamenti di Informatica e Laboratorio T-AB Ingengeria dell Automazione a.a. 2008/2009 Lab 02 Tipi semplici in C Obiettivo dell esercitazione Acquistare familiarità con i tipi di dato semplici supportati

Dettagli

Un ripasso di aritmetica: Conversione dalla base 10 alla base 16

Un ripasso di aritmetica: Conversione dalla base 10 alla base 16 Un ripasso di aritmetica: Conversione dalla base 1 alla base 16 Dato un numero N rappresentato in base dieci, la sua rappresentazione in base sedici sarà del tipo: c m c m-1... c 1 c (le c i sono cifre

Dettagli

Installazione LINUX 10.0

Installazione LINUX 10.0 Installazione LINUX 10.0 1 Principali passi Prima di iniziare con l'installazione è necessario entrare nel menu di configurazione del PC (F2 durante lo start-up) e selezionare nel menu di set-up il boot

Dettagli

Le Stringhe. Un introduzione operativa. Luigi Palopoli

Le Stringhe. Un introduzione operativa. Luigi Palopoli Le Stringhe p.1/19 Le Stringhe Un introduzione operativa Luigi Palopoli ReTiS Lab - Scuola Superiore S. Anna Viale Rinaldo Piaggio 34 Pontedera - Pisa Tel. 050-883444 Email: palopoli@sssup.it URL: http://feanor.sssup.it/

Dettagli

Flops. Ad esempio nel caso del prodotto classico tra matrici, vengono eseguite 2*N 3 operazioni, quindi ad esempio:

Flops. Ad esempio nel caso del prodotto classico tra matrici, vengono eseguite 2*N 3 operazioni, quindi ad esempio: Flops FLOPS e' un'abbreviazione di Floating Point Operations Per Second e indica il numero di operazioni in virgola mobile eseguite in un secondo dalla CPU. (Top500 e il BlueGene) Ad esempio nel caso del

Dettagli

MANUALE DOS INTRODUZIONE

MANUALE DOS INTRODUZIONE MANUALE DOS INTRODUZIONE Il DOS è il vecchio sistema operativo, che fino a qualche anno fa era il più diffuso sui PC, prima dell avvento di Windows 95 e successori. Le caratteristiche principali di questo

Dettagli

Verifica che una grammatica sia Context Free nel GrammaReader

Verifica che una grammatica sia Context Free nel GrammaReader Verifica che una grammatica sia Context Free nel GrammaReader Sommario Dispensa di Linguaggi di Programmazione Corrado Mencar Pasquale Lops In questa dispensa si descrivono alcune soluzioni per verificare

Dettagli

Le funzionalità di un DBMS

Le funzionalità di un DBMS Le funzionalità di un DBMS Sistemi Informativi L-A Home Page del corso: http://www-db.deis.unibo.it/courses/sil-a/ Versione elettronica: DBMS.pdf Sistemi Informativi L-A DBMS: principali funzionalità Le

Dettagli

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1) Strutture Strutture e Unioni DD cap.10 pp.379-391, 405-406 KP cap. 9 pp.361-379 Strutture Collezioni di variabili correlate (aggregati) sotto un unico nome Possono contenere variabili con diversi nomi

Dettagli

Laboratorio di Sistemi Operativi

Laboratorio di Sistemi Operativi II Semestre - Marzo/Giugno 2008 Matricole congr. 0 mod 3 File & Directory #include #include stat,fstat e lstat int stat (const char *pathname, struct stat *buf); int fstat (int

Dettagli

Definizione. File di dati. Insieme di record omogenei memorizzati in memoria di massa. Record. Bianchi. Anna Roma 1980. Verdi. Luca Milano 1960.

Definizione. File di dati. Insieme di record omogenei memorizzati in memoria di massa. Record. Bianchi. Anna Roma 1980. Verdi. Luca Milano 1960. File di dati Definizione File di dati Insieme di record omogenei memorizzati in memoria di massa Bianchi Verdi Neri Verdi Anna Roma 1980 Luca Milano 1960 Andrea Torino 1976 Paola Bari 1954 Record Operazioni

Dettagli

Prolog: aritmetica e ricorsione

Prolog: aritmetica e ricorsione Capitolo 13 Prolog: aritmetica e ricorsione Slide: Aritmetica e ricorsione 13.1 Operatori aritmetici In logica non vi è alcun meccanismo per la valutazione di funzioni, che è fondamentale in un linguaggio

Dettagli

Virtualizzazione e installazione Linux

Virtualizzazione e installazione Linux Virtualizzazione e installazione Linux Federico De Meo, Davide Quaglia, Simone Bronuzzi Lo scopo di questa esercitazione è quello di introdurre il concetto di virtualizzazione, di creare un ambiente virtuale

Dettagli

Boot Camp Guida di installazione e configurazione

Boot Camp Guida di installazione e configurazione Boot Camp Guida di installazione e configurazione Indice 3 Introduzione 4 Panoramica dell'installazione 4 Passo 1: Verificare la presenza di aggiornamenti 4 Passo 2: Per preparare il Mac per Windows 4

Dettagli

Fondamenti di Informatica e Laboratorio T-AB T-16 Progetti su più file. Funzioni come parametro. Parametri del main

Fondamenti di Informatica e Laboratorio T-AB T-16 Progetti su più file. Funzioni come parametro. Parametri del main Fondamenti di Informatica e Laboratorio T-AB T-16 Progetti su più file. Funzioni come parametro. Parametri del main Paolo Torroni Dipartimento di Elettronica, Informatica e Sistemistica Università degli

Dettagli

Introduzione alla Programmazione ad Oggetti in C++

Introduzione alla Programmazione ad Oggetti in C++ Introduzione alla Programmazione ad Oggetti in C++ Lezione 1 Cosa è la Programmazione Orientata agli Oggetti Metodologia per costruire prodotti software di grosse dimensioni che siano affidabili e facilmente

Dettagli

AA 2006-07 LA RICORSIONE

AA 2006-07 LA RICORSIONE PROGRAMMAZIONE AA 2006-07 LA RICORSIONE AA 2006-07 Prof.ssa A. Lanza - DIB 1/18 LA RICORSIONE Il concetto di ricorsione nasce dalla matematica Una funzione matematica è definita ricorsivamente quando nella

Dettagli

APPLICAZIONI SU PIU FILE

APPLICAZIONI SU PIU FILE APPLICAZIONI SU PIU FILE Serve poter sviluppare applicazioni su piú file: - alcune funzioni e alcune definizioni di dati in un file - altre funzioni e dati in file diversi Perché?? 1. Se il programma è

Dettagli

Funzioni matlab per la gestione dei file. Informatica B Prof. Morzenti

Funzioni matlab per la gestione dei file. Informatica B Prof. Morzenti Funzioni matlab per la gestione dei file Informatica B Prof. Morzenti File Contenitori di informazione permanenti Sono memorizzati su memoria di massa Possono continuare a esistere indipendentemente dalla

Dettagli

Modulo. Programmiamo in Pascal. Unità didattiche COSA IMPAREREMO...

Modulo. Programmiamo in Pascal. Unità didattiche COSA IMPAREREMO... Modulo A Programmiamo in Pascal Unità didattiche 1. Installiamo il Dev-Pascal 2. Il programma e le variabili 3. Input dei dati 4. Utilizziamo gli operatori matematici e commentiamo il codice COSA IMPAREREMO...

Dettagli

Linguaggio C++ Uso ambiente Dev C++ con creazione di progetto con scelta Basic --> Empty Project

Linguaggio C++ Uso ambiente Dev C++ con creazione di progetto con scelta Basic --> Empty Project Linguaggio C++ Uso ambiente Dev C++ con creazione di progetto con scelta Basic --> Empty Project NB: E necessario: adoperare la sintassi più evoluta per le direttive di precompilazione 1, usando come contenitore

Dettagli

Progetti reali con ARDUINO

Progetti reali con ARDUINO Progetti reali con ARDUINO Introduzione alla scheda Arduino (parte 2ª) ver. Classe 3BN (elettronica) marzo 22 Giorgio Carpignano I.I.S. Primo LEVI - TORINO Il menù per oggi Lettura dei pulsanti Comunicazione

Dettagli

Schema Tipologia a Stella

Schema Tipologia a Stella Cos'e' esattamente una rete! Una LAN (Local Area Network) è un insieme di dispositivi informatici collegati fra loro, che utilizzano un linguaggio che consente a ciascuno di essi di scambiare informazioni.

Dettagli

Lezione n.19 Processori RISC e CISC

Lezione n.19 Processori RISC e CISC Lezione n.19 Processori RISC e CISC 1 Processori RISC e Superscalari Motivazioni che hanno portato alla realizzazione di queste architetture Sommario: Confronto tra le architetture CISC e RISC Prestazioni

Dettagli

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica Fondamenti di Informatica Algebra di Boole: Concetti di base Fondamenti di Informatica - D. Talia - UNICAL 1 Algebra di Boole E un algebra basata su tre operazioni logiche OR AND NOT Ed operandi che possono

Dettagli

Esercitazione 7. Procedure e Funzioni

Esercitazione 7. Procedure e Funzioni Esercitazione 7 Procedure e Funzioni Esercizio Scrivere un programma che memorizza in un array di elementi di tipo double le temperature relative al mese corrente e ne determina la temperatura massima,

Dettagli

Funzioni. Corso di Fondamenti di Informatica

Funzioni. Corso di Fondamenti di Informatica Dipartimento di Informatica e Sistemistica Antonio Ruberti Sapienza Università di Roma Funzioni Corso di Fondamenti di Informatica Laurea in Ingegneria Informatica (Canale di Ingegneria delle Reti e dei

Dettagli

Le funzioni in C. I programmi C sono costituiti da definizioni di variabili e funzioni.

Le funzioni in C. I programmi C sono costituiti da definizioni di variabili e funzioni. Le funzioni in C I programmi C sono costituiti da definizioni di variabili e funzioni. Una definizione di funzione ha il seguente formato: tipo-ritornato nome-funzione(lista-parametri) { dichiarazioni

Dettagli

Bus di sistema. Bus di sistema

Bus di sistema. Bus di sistema Bus di sistema Permette la comunicazione (scambio di dati) tra i diversi dispositivi che costituiscono il calcolatore E costituito da un insieme di fili metallici che danno luogo ad un collegamento aperto

Dettagli

Linguaggio di bash per esempi. Tre modi per quotare. Esempio. quotare: significa trattare caratteri speciali come normali caratteri

Linguaggio di bash per esempi. Tre modi per quotare. Esempio. quotare: significa trattare caratteri speciali come normali caratteri Linguaggio di bash per esempi Tre modi per quotare quotare: signica trattare caratteri speciali come normali caratteri es. di aratteri speciali: $, blank, apici, 1. backslash: per quotare un solo carattere

Dettagli

Lezione su Informatica di Base

Lezione su Informatica di Base Lezione su Informatica di Base Esplora Risorse, Gestione Cartelle, Alcuni tasti di scelta Rapida Domenico Capano D.C. Viterbo: Lunedì 21 Novembre 2005 Indice Una nota su questa lezione...4 Introduzione:

Dettagli

Guida rapida all uso di ECM Titanium

Guida rapida all uso di ECM Titanium Guida rapida all uso di ECM Titanium Introduzione Questa guida contiene una spiegazione semplificata del funzionamento del software per Chiputilizzare al meglio il Tuning ECM Titanium ed include tutte

Dettagli

P a s q u a l e t t i V e r o n i c a

P a s q u a l e t t i V e r o n i c a PHP: OOP Pasqualetti Veronica Oggetti Possiamo pensare ad un oggetto come ad un tipo di dato più complesso e personalizzato, non esistente fra i tipi tradizionali di PHP, ma creato da noi. 2 Gli oggetti

Dettagli

WINDOWS - Comandi rapidi da tastiera più utilizzati.

WINDOWS - Comandi rapidi da tastiera più utilizzati. WINDOWS - Comandi rapidi da tastiera più utilizzati. La prima colonna indica il tasto da premere singolarmente e poi rilasciare. La seconda e terza colonna rappresenta la combinazione dei i tasti da premere

Dettagli

Elementi di semantica denotazionale ed operazionale

Elementi di semantica denotazionale ed operazionale Elementi di semantica denotazionale ed operazionale 1 Contenuti! sintassi astratta e domini sintattici " un frammento di linguaggio imperativo! semantica denotazionale " domini semantici: valori e stato

Dettagli

Arduino: Programmazione

Arduino: Programmazione Programmazione formalmente ispirata al linguaggio C da cui deriva. I programmi in ARDUINO sono chiamati Sketch. Un programma è una serie di istruzioni che vengono lette dall alto verso il basso e convertite

Dettagli

Determinare la grandezza della sottorete

Determinare la grandezza della sottorete Determinare la grandezza della sottorete Ogni rete IP possiede due indirizzi non assegnabili direttamente agli host l indirizzo della rete a cui appartiene e l'indirizzo di broadcast. Quando si creano

Dettagli

Boot Camp Guida all installazione e alla configurazione

Boot Camp Guida all installazione e alla configurazione Boot Camp Guida all installazione e alla configurazione Indice 4 Introduzione 5 Cosa ti occorre 6 Panoramica dell installazione 6 Passo 1: verifica la presenza di aggiornamenti. 6 Passo 2: apri Assistente

Dettagli

Germano Pettarin E-book per la preparazione all ECDL ECDL Modulo 2 Sistema Operativo Windows Argomenti del Syllabus 5.0

Germano Pettarin E-book per la preparazione all ECDL ECDL Modulo 2 Sistema Operativo Windows Argomenti del Syllabus 5.0 Germano Pettarin E-book per la preparazione all ECDL ECDL Modulo 2 Sistema Operativo Windows Argomenti del Syllabus 5.0 G. Pettarin ECDL Modulo 2: Sistema Operativo 2 Modulo 2 Il sistema operativo Windows

Dettagli

Programmazione C Massimo Callisto De Donato massimo.callisto@unicam.it www.cs.unicam.it/massimo.callisto

Programmazione C Massimo Callisto De Donato massimo.callisto@unicam.it www.cs.unicam.it/massimo.callisto Università degli studi di Camerino Scuola di scienze e tecnologia - Sezione Informatica Programmazione C Massimo Callisto De Donato massimo.callisto@unicam.it www.cs.unicam.it/massimo.callisto LEZIONE

Dettagli

Visibilità dei Membri di una Classe

Visibilità dei Membri di una Classe Visibilità dei Membri di una Classe Lezione 10 Ogni classe definisce un proprio scope racchiude il codice contenuto nella definizione della classe e di tutti i suoi membri ogni metodo della classe definisce

Dettagli

Risolvere un problema significa individuare un procedimento che permetta di arrivare al risultato partendo dai dati

Risolvere un problema significa individuare un procedimento che permetta di arrivare al risultato partendo dai dati Algoritmi Algoritmi Risolvere un problema significa individuare un procedimento che permetta di arrivare al risultato partendo dai dati Il procedimento (chiamato algoritmo) è composto da passi elementari

Dettagli

GUIDA ALLA PROGRAMMAZIONE GRAFICA IN C

GUIDA ALLA PROGRAMMAZIONE GRAFICA IN C GUIDA ALLA PROGRAMMAZIONE GRAFICA IN C.:luxx:. PREMESSE In questa guida non verranno trattati i costrutti di flusso, le funzioni, o comunque le caratteristiche del linguaggio, che si danno come presupposte.

Dettagli

SOFTWARE GESTIONE SMS DA INTERFACCE CL MANUALE D INSTALLAZIONE ED USO

SOFTWARE GESTIONE SMS DA INTERFACCE CL MANUALE D INSTALLAZIONE ED USO CLSMS SOFTWARE GESTIONE SMS DA INTERFACCE CL MANUALE D INSTALLAZIONE ED USO Sommario e introduzione CLSMS SOMMARIO INSTALLAZIONE E CONFIGURAZIONE... 3 Parametri di configurazione... 4 Attivazione Software...

Dettagli

LA FINESTRA DI OPEN OFFICE CALC

LA FINESTRA DI OPEN OFFICE CALC LA FINESTRA DI OPEN OFFICE CALC Barra di Formattazione Barra Standard Barra del Menu Intestazione di colonna Barra di Calcolo Contenuto della cella attiva Indirizzo della cella attiva Cella attiva Intestazione

Dettagli

Calc è il programma per la gestione di fogli di calcolo della suite OpenOffice.org.

Calc è il programma per la gestione di fogli di calcolo della suite OpenOffice.org. Calc è il programma per la gestione di fogli di calcolo della suite OpenOffice.org. Nuovo documento Anteprima di stampa Annulla Galleria Apri Controllo ortografico Ripristina Sorgente dati Salva Controllo

Dettagli

Corso di Programmazione ad Oggetti

Corso di Programmazione ad Oggetti Corso di Programmazione ad Oggetti Introduzione alla programmazione ad oggetti a.a. 2008/2009 Claudio De Stefano 1 La programmazione modulare Un programma può essere visto come un insieme di moduli che

Dettagli

Corso di Informatica Generale (C. L. Economia e Commercio) Ing. Valerio Lacagnina Rappresentazione in virgola mobile

Corso di Informatica Generale (C. L. Economia e Commercio) Ing. Valerio Lacagnina Rappresentazione in virgola mobile Problemi connessi all utilizzo di un numero di bit limitato Abbiamo visto quali sono i vantaggi dell utilizzo della rappresentazione in complemento alla base: corrispondenza biunivoca fra rappresentazione

Dettagli

FASE DEBUGGING: Compiler Linker. controllando che la voce Genera le informazioni per il debug cioè. "Generate debugging information"

FASE DEBUGGING: Compiler Linker. controllando che la voce Genera le informazioni per il debug cioè. Generate debugging information FASE DEBUGGING: Prima della compilazione, si devono inserire 1 nel progetto informazioni per il debug cioè si devono visualizzare le opzioni di progetto seguendo il percorso: controllando che la voce Genera

Dettagli

Abstract Data Type (ADT)

Abstract Data Type (ADT) Abstract Data Type Pag. 1/10 Abstract Data Type (ADT) Iniziamo la nostra trattazione presentando una nozione che ci accompagnerà lungo l intero corso di Laboratorio Algoritmi e Strutture Dati: il Tipo

Dettagli

Introduzione. Esempio 1. Soluzione: SPOSTA_1.BAT

Introduzione. Esempio 1. Soluzione: SPOSTA_1.BAT Introduzione Un file batch è un file di testo di tipo ASCII che contiene una sequenza di comandi DOS. I file batch devono avere estensione.bat I comandi DOS all interno dei programmi batch sono eseguiti

Dettagli

SISSI IN RETE. Quick Reference guide guida di riferimento rapido

SISSI IN RETE. Quick Reference guide guida di riferimento rapido SISSI IN RETE Quick Reference guide guida di riferimento rapido Indice generale Sissi in rete...3 Introduzione...3 Architettura Software...3 Installazione di SISSI in rete...3 Utilizzo di SISSI in Rete...4

Dettagli

UML: Class Diagram. Ing. Orazio Tomarchio Orazio.Tomarchio@diit.unict.it

UML: Class Diagram. Ing. Orazio Tomarchio Orazio.Tomarchio@diit.unict.it UML: Class Diagram Ing. Orazio Tomarchio Orazio.Tomarchio@diit.unict.it Dipartimento di Ingegneria Informatica e delle Telecomunicazioni Università di Catania Class Diagram Forniscono una vista strutturale

Dettagli

Sottoprogrammi: astrazione procedurale

Sottoprogrammi: astrazione procedurale Sottoprogrammi: astrazione procedurale Incapsulamento di un segmento di programma presente = false; j = 0; while ( (j

Dettagli

Analisi di massima: L utente dovrà inserire un numero limite, e tramite vari calcoli verrà stampato a video la sequenza.

Analisi di massima: L utente dovrà inserire un numero limite, e tramite vari calcoli verrà stampato a video la sequenza. Relazione tecnica Fibonacci ANDENA GIANMARCO Traccia: Creare un algoritmo che permetta, dato un valore intero e positivo, di stabilire la sequenza utilizzando la regola di fibonacci dei numeri fino al

Dettagli

1. Si consideri uno spazio di indirizzamento logico di otto pagine di 1024 parole ognuna, mappate su una memoria fisica di 32 frame.

1. Si consideri uno spazio di indirizzamento logico di otto pagine di 1024 parole ognuna, mappate su una memoria fisica di 32 frame. 1. Si consideri uno spazio di indirizzamento logico di otto pagine di 1024 parole ognuna, mappate su una memoria fisica di 32 frame. (a) Da quanti bit è costituito l indirizzo logico? (b) Da quanti bit

Dettagli

Creare e ripristinare immagine di sistema con Windows 8

Creare e ripristinare immagine di sistema con Windows 8 Creare e ripristinare immagine di con Windows 8 La versione Pro di Windows 8 offre un interessante strumento per il backup del computer: la possibilità di creare un immagine completa del, ovvero la copia

Dettagli

GeoGebra 4.2 Introduzione all utilizzo della Vista CAS per il secondo biennio e il quinto anno

GeoGebra 4.2 Introduzione all utilizzo della Vista CAS per il secondo biennio e il quinto anno GeoGebra 4.2 Introduzione all utilizzo della Vista CAS per il secondo biennio e il quinto anno La Vista CAS L ambiente di lavoro Le celle Assegnazione di una variabile o di una funzione / visualizzazione

Dettagli

Lezione 9: Strutture e allocazione dinamica della memoria

Lezione 9: Strutture e allocazione dinamica della memoria Lezione 9: Strutture e allocazione dinamica della memoria Laboratorio di Elementi di Architettura e Sistemi Operativi 9 Maggio 2012 Allocazione dinamica della memoria Memoria dinamica È possibile creare

Dettagli

Appunti sugli Elaboratori di Testo. Introduzione. D. Gubiani. 19 Luglio 2005

Appunti sugli Elaboratori di Testo. Introduzione. D. Gubiani. 19 Luglio 2005 Appunti sugli Elaboratori di Testo D. Gubiani Università degli Studi G.D Annunzio di Chieti-Pescara 19 Luglio 2005 1 Cos è un elaboratore di testo? 2 3 Cos è un elaboratore di testo? Cos è un elaboratore

Dettagli

Rapida Introduzione all uso del Matlab Ottobre 2002

Rapida Introduzione all uso del Matlab Ottobre 2002 Rapida Introduzione all uso del Matlab Ottobre 2002 Tutti i tipi di dato utilizzati dal Matlab sono in forma di array. I vettori sono array monodimensionali, e così possono essere viste le serie temporali,

Dettagli

Lezione 1. 1 All inizio di ogni capitolo vengono indicati gli obiettivi della lezione sotto forma di domande la cui risposta è lo scopo

Lezione 1. 1 All inizio di ogni capitolo vengono indicati gli obiettivi della lezione sotto forma di domande la cui risposta è lo scopo Lezione 1 Obiettivi della lezione: 1 Cos è un calcolatore? Cosa c è dentro un calcolatore? Come funziona un calcolatore? Quanti tipi di calcolatori esistono? Il calcolatore nella accezione più generale

Dettagli

Siamo così arrivati all aritmetica modulare, ma anche a individuare alcuni aspetti di come funziona l aritmetica del calcolatore come vedremo.

Siamo così arrivati all aritmetica modulare, ma anche a individuare alcuni aspetti di come funziona l aritmetica del calcolatore come vedremo. DALLE PESATE ALL ARITMETICA FINITA IN BASE 2 Si è trovato, partendo da un problema concreto, che con la base 2, utilizzando alcune potenze della base, operando con solo addizioni, posso ottenere tutti

Dettagli

CAPITOLO PRIMO IL CONCETTO DI ALGORITMO 1

CAPITOLO PRIMO IL CONCETTO DI ALGORITMO 1 1.1 Che cos è un algoritmo CAPITOLO PRIMO IL CONCETTO DI ALGORITMO 1 Gli algoritmi sono metodi per la soluzione di problemi. Possiamo caratterizzare un problema mediante i dati di cui si dispone all inizio

Dettagli

Integrated Development Environment (IDE) DevC++ 4.9.9.2

Integrated Development Environment (IDE) DevC++ 4.9.9.2 Integrated Development Environment (IDE) DevC++ 4.9.9.2 Manuale utente Data ultima revisione: 22/10/2008 Fondamenti di informatica Università Facoltà Corso di laurea Politecnico di Bari 1 a Facoltà di

Dettagli

Corso di Alfabetizzazione Informatica

Corso di Alfabetizzazione Informatica Corso di Alfabetizzazione Informatica Scopo di questo corso, vuole essere quello di fornire ad ognuno dei partecipanti, indipendentemente dalle loro precedenti conoscenze informatiche, l apprendimento

Dettagli