# Informatica 2 Liceo Scientifico Scienze Applicate/File Binari

Informatica 2 Liceo Scientifico Scienze Applicate
Copertina Tutti i moduli · Sviluppo
* Linguaggi di programmazioneInformatica 2 Liceo Scientifico Scienze Applicate/Linguaggi di programmazione
* Compilare un programmaInformatica 2 Liceo Scientifico Scienze Applicate/Compilare un programma
* CiaoMondoInformatica 2 Liceo Scientifico Scienze Applicate/CiaoMondo
* AreaRettangoloInformatica 2 Liceo Scientifico Scienze Applicate/AreaRettangolo
* AreaTrapezioInformatica 2 Liceo Scientifico Scienze Applicate/AreaTrapezio
** Compito1Informatica 2 Liceo Scientifico Scienze Applicate/Compito1
* Programmazione ImperativaInformatica 2 Liceo Scientifico Scienze Applicate/Programmazione Imperativa
* Diagrammi di FlussoInformatica 2 Liceo Scientifico Scienze Applicate/Diagrammi di Flusso
* Operatori AritmeticiInformatica 2 Liceo Scientifico Scienze Applicate/Operatori Aritmetici
* Istruzione ifInformatica 2 Liceo Scientifico Scienze Applicate/Istruzione if
** Esercizio Equazione 2^ gradoInformatica 2 Liceo Scientifico Scienze Applicate/Esercizio Equazione 2^ grado
** Esercizio Calcola lo ScontoInformatica 2 Liceo Scientifico Scienze Applicate/Esercizio Calcola lo Sconto
** Esercizio Calcola lo Sconto2Informatica 2 Liceo Scientifico Scienze Applicate/Esercizio Calcola lo Sconto2
* Operatori LogiciInformatica 2 Liceo Scientifico Scienze Applicate/Operatori Logici
** Esercizio x interno all'intervalloInformatica 2 Liceo Scientifico Scienze Applicate/Esercizio x interno all'intervallo
** Esercizio x esterno all'intervalloInformatica 2 Liceo Scientifico Scienze Applicate/Esercizio x esterno all'intervallo
* Istruzione switchInformatica 2 Liceo Scientifico Scienze Applicate/Istruzione switch
** Esercizio Scelta EquazioneInformatica 2 Liceo Scientifico Scienze Applicate/Esercizio Scelta Equazione
* Altre Istruzioni di Scelta o DiramazioneInformatica 2 Liceo Scientifico Scienze Applicate/Altre Istruzioni di Scelta o Diramazione
* Istruzioni di RipetizioneInformatica 2 Liceo Scientifico Scienze Applicate/Istruzioni di Ripetizione
** Es (do-while) Indovina il numeroInformatica 2 Liceo Scientifico Scienze Applicate/Es (do-while) Indovina il numero
** Es (while) La nonna è stancaInformatica 2 Liceo Scientifico Scienze Applicate/Es (while) La nonna è stanca
** Es (for) Somma di 5 numeriInformatica 2 Liceo Scientifico Scienze Applicate/Es (for) Somma di 5 numeri
** Es (for) Analisi sequenza datiInformatica 2 Liceo Scientifico Scienze Applicate/Es (for) Analisi sequenza dati
** Es (for) Sequenze NumericheInformatica 2 Liceo Scientifico Scienze Applicate/Es (for) Sequenze Numeriche
** Es (for) SupermarketInformatica 2 Liceo Scientifico Scienze Applicate/Es (for) Supermarket
** Es (while) Bisca ClandestinaInformatica 2 Liceo Scientifico Scienze Applicate/Es (while) Bisca Clandestina
* Compito2Informatica 2 Liceo Scientifico Scienze Applicate/Compito2
* I vettoriInformatica 2 Liceo Scientifico Scienze Applicate/I vettori
** Es Usiamo i vettoriInformatica 2 Liceo Scientifico Scienze Applicate/Es Usiamo i vettori
** Es2 Usiamo i vettoriInformatica 2 Liceo Scientifico Scienze Applicate/Es2 Usiamo i vettori
** Es3 Supermarket con vettoriInformatica 2 Liceo Scientifico Scienze Applicate/Es3 Supermarket con vettori
** Compito dic 2019Informatica 2 Liceo Scientifico Scienze Applicate/Compito dic 2019
** BubbleSortInformatica 2 Liceo Scientifico Scienze Applicate/BubbleSort
** Ricerca DicotomicaInformatica 2 Liceo Scientifico Scienze Applicate/Ricerca Dicotomica
* Matrici e ArrayInformatica 2 Liceo Scientifico Scienze Applicate/Matrici e Array
** Es matrici battaglia navaleInformatica 2 Liceo Scientifico Scienze Applicate/Es matrici battaglia navale
** Es matrici 1Informatica 2 Liceo Scientifico Scienze Applicate/Es matrici 1
** Es matrici 2Informatica 2 Liceo Scientifico Scienze Applicate/Es matrici 2
* PuntatoriInformatica 2 Liceo Scientifico Scienze Applicate/Puntatori
* StructInformatica 2 Liceo Scientifico Scienze Applicate/Struct
** Es Bubble Sort con StructInformatica 2 Liceo Scientifico Scienze Applicate/Es Bubble Sort con Struct
* FunzioniInformatica 2 Liceo Scientifico Scienze Applicate/Funzioni
* Funzioni Void e non VoidInformatica 2 Liceo Scientifico Scienze Applicate/Funzioni Void e non Void
** esercizi1 funzioniInformatica 2 Liceo Scientifico Scienze Applicate/esercizi1 funzioni
** esercizi2 funzioniInformatica 2 Liceo Scientifico Scienze Applicate/esercizi2 funzioni
** esercizi3 funzioniInformatica 2 Liceo Scientifico Scienze Applicate/esercizi3 funzioni
* BacktrackingInformatica 2 Liceo Scientifico Scienze Applicate/Backtracking
* TemplateInformatica 2 Liceo Scientifico Scienze Applicate/Template
* FileInformatica 2 Liceo Scientifico Scienze Applicate/File
** File di TestoInformatica 2 Liceo Scientifico Scienze Applicate/File di Testo
** File BinariInformatica 2 Liceo Scientifico Scienze Applicate/File Binari
** File RecordsInformatica 2 Liceo Scientifico Scienze Applicate/File Records
** Es FilesInformatica 2 Liceo Scientifico Scienze Applicate/Es Files
* Esercizi VacanzeInformatica 2 Liceo Scientifico Scienze Applicate/Esercizi Vacanze
** Esercizi1Informatica 2 Liceo Scientifico Scienze Applicate/Esercizi1
** Esercizi2Informatica 2 Liceo Scientifico Scienze Applicate/Esercizi2
** Esercizi3Informatica 2 Liceo Scientifico Scienze Applicate/Esercizi3
* Olimpiadi Informatica
** NobileChimicoInformatica 2 Liceo Scientifico Scienze Applicate/NobileChimico
** Sunnydale
** MappaAnticaInformatica 2 Liceo Scientifico Scienze Applicate/MappaAntica
Modifica il sommario

### File Binari

Quando si vuole lavorare con i file binari non si utilizza la codifica ASCII, i dati contenuti nelle celle della ram che rappresentano delle variabili vengono scritti così come sono nel file,
per poi essere successivamente letti trasferendo la sequenza binaria dal file direttamente alle celle di memoria corrispondenti alle variabili del programma.
Aggiunta la libreria fstream ci troviamo 3 nuovi tipi di dato
* ifstream che serve per gestire un file di input ( da cui possiamo leggere le informazioni e caricarle nelle variabili del programma)
* ofstream che serve per gestire un file di output ( su cui possiamo scrivere le informazioni contenute nelle variabili del nostro programma.
* fstream che serve per gestire un file di input/output (su cui possiamo sia leggere e sia scrivere delle informazioni) qui sono presenti due cursori distinti uno per le operazioni di lettura e uno per le operazioni di scrittura,
altri attributi possibili oltre a in,out e binary sono:
| Attributo | Significato |
| ios::ate | (all'apertura gli indici di lettura e scrittura sono posizionati alla fine del file, se il file conteneva dei dati questi non vengono sovrascritti, gli indici lettura e scrittura possono essere riposizionati in altri punti del file dopo l'apertura) |
| ios::app | (all'apertura l'indice di scrittura è posizionato alla fine del file e pronto solo per aggiungere ulteriori dati) |
| ios::trunc | (elimina il contenuto del file che viene aperto) |
che possono essere uniti usando l'operatore or bitwise rappresentato dal simbolo | quindi per un file binario a cui voglio aggiungere solo dei dati in coda
Le operazioni che di solito si fanno su un file binario sono :
* creare un file (vuoto) e scriverci una sequenza di dati corrispondenti ai valori di alcune variabili del nostro programma in C
* aprire un file (esistente) e leggere i dati in sequenza (caricandoli in alcune variabili del programma in C)
* aprire un file (esistente) e aggiungere in coda altre informazioni.
* In un file binario è possible non solo leggere/scrivere i dati in sequenza ma anche posizionarsi all'interno del file (in un punto arbitrario) e leggere/scrivere i dati partendo da quel punto, sollevandoci così dall'onere di leggere/scrivere tutti i dati che lo precedono.
* È possibile allora aprire un file esistente di input, posizionarsi in un punto specifico del file, prima dell'inizio della sequenza binaria di un specifica variabile e leggere solo quella specifica variabile.
* È possibile allora aprire un file esistente di output, posizionarsi in un punto specifico del file, prima dell'inizio della sequenza binaria di un specifica variabile e sovrascriverla con una nuova sequenza binaria, che va a modificarne il valore.
* È possibile allora aprire un file esistente di input/ e output , posizionarsi in un punto specifico del file, prima dell'inizio della sequenza binaria di un specifica variabile e sovrascrivere/leggere solo quel particolare dato, oppure possiamo aggiungere in coda delle nuove informazioni.
In un file binario di input/output ci sono due cursori che simbolicamente indichiamo con g e p, che indicano rispettivamente il punto di lettura e il punto di scrittura sul file. I comandi per leggere la posizione del punto di lettura e' tellg( ), mentre quello di scrittura e' tellp( ), entrambi .restituiscono la posizione rispetto all'inizio del file espressa in byte.
Per posizionarsi in un punto del file, bisogna esprimere la posizione fornendo un offset rispetto o all'inizio del file, o rispetto alla posizione corrente o rispetto alla fine del file. In pratica posizionati 50 byte dall'inizio del file, oppure posizionati -20 byte dalla fine del file, oppure posizionati 30 byte rispetto alla posizione corrente.
I simboli usati per esprimere rispetto a cosa misurare l'offset sono
mentre per esprimere l'offset basta un numero positivo o negativo che esprime lo spostamento in byte
per posizionarsi in un punto per la prossima lettura si usa il comando
ad esempio seekg(40, ios::beg) significa 40 byte dopo l'inizio del file
ad esempio seekg(-23,ios::end) significa 23 byte prima della fine del file
analogamente per posizionarsi in un punto per la prossima scrittura si usa
per scrivere un dato il comando e'
per scrivere il valore di una variabile a di tipo intero (che occupa 4 byte) scriviamo
se non conosciamo la dimensione della variabile possiamo usare la funzione
che ne restituisce la dimensione in byte, oppure
che restituisce la dimensione del tipo di dati intero, quindi possiamo anche scrivere
il cast (const char *) permette di salvare i dati sul file come sequenze di byte (un char rappresenta un valore di un byte)
per scrivere un vettore vett di interi di dimensione 500 elementi, possiamo dare il seguente comando
per leggere un dato il comando e'
se abbiamo int a=12; per scrivere il dato usiamo il comando
per leggere un vettore vett di interi di dimensione 500 elementi, possiamo dare il seguente comando