... algoritmi1.1
all'interno di questo testo non viene data una definizione formale di algoritmo, o programma, sebbene tale termine venga utilizzato continuamente; si tenga presente che un algoritmo è, a livello intuitivo, una serie finita di operazioni che è possibile effettuare su un insieme di dati di partenza per ottenere un insieme di dati in uscita; gli algoritmi da noi considerati sono deterministici, cioè effettuando uno stesso algoritmo su un certo insieme di dati si ottiene lo stesso risultato che effettuandolo un numero arbitrario di volte sullo stesso insieme di partenza
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... l'efficienza1.2
per efficienza si intende in questo contesto una maggiore velocità di esecuzione dei programmi
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... compilatore1.3
per procurare si intenda una delle seguenti opzioni: acquistare un compilatore commerciale oppure copiare da qualcuno (magari da Internet) un compilatore non commerciale, cioè free (libero). Non è invece contemplata l'idea di copiare da qualcuno un compilatore commerciale, perché vietato dalle leggi internazionali sui copyright
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... C++1.4
si noti che l'estensione dei programmi C++ è solitamente proprio .cpp; è buona norma attenersi a questa convenzione
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... tabulazioni2.1
una tabulazione orizzontale è data dall'inserimento del carattere tab da tastiera e corrisponde ad un numero di spaziature singole tale da arrivare alla prima ``colonna'' disponibile; ad esempio inserendo i seguenti caratteri ``a tab b return aa tab b return aaa tab b'' si ottiene la seguente formattazione:
a b
aa b
aaa b
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... moltissimi2.2
per un approfondimento si consideri ``Programming in C++, rules and recommendations'' di Erik Nyquist e Mats Henricson, di cui è disponibile la versione tradotta in inglese da Joseph Supanich
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... dati2.3
infatti ``iostream'' sta per ``input/output stream'', cioè flusso di entrata/uscita dati
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...primitivi 2.4
impareremo nei capitoli successivi a derivare nuovi tipi da quelli primitivi, da cui questo appellativo
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... segno2.5
in realtà esiste anche un altro operatore aritmetico unario in C++: l'operatore positivo (+), il quale è stato tuttavia inserito nel linguaggio puramente per simmetria con l'operatore negativo
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... sintattici2.6
un sinonimo sintattico in un linguaggio di programmazione è una struttura sintattica che ha un perfetto equivalente in un'altra; i linguaggi di programmazione presentano molti sinonimi sintattici, in genere, perché aumentano la chiarezza del codice e rendono più veloce ed intuitivo il lavoro di programmazione
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... classica3.1
una proposizione del genere può essere valutata utilizzando la logica sfumata (fuzzy logic), la quale assegna ad ogni espressione logica un livello di verità compreso tra $0$ e $1$; nel nostro caso avremmo un valore di verità di $0.5$. Purtroppo un modello del genere è difficilmente applicabile all'interno di un calcolatore e solo molto recentemente sono stati raggiunti traguardi significativi in merito alla programmazione di calcolatori con i metodi della fuzzy logic
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... esempi3.2
da adesso in poi utilizzeremo il simbolo ``T'' per indicare ``vero'' (in inglese true) e ``F'' per indicare ``falso'' (false) per uniformità con le guide disponibili in linea, le quali sono probabilmente in inglese
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...pseudocasuali 3.3
nessun numero all'interno di un calcolatore è strettamente casuale; è tuttavia possibile calcolare dei numeri che sono estremamente simili ad essi: i numeri pseudocasuali; essi sono calcolati attraverso delle formule precise ma sono basati su eventi il cui ripetersi è piuttosto raro
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... momento3.4
spesso tale momento preciso è la mezzanotte del 1 gennaio 1970, ma potrebbe anche essere un qualsiasi altro giorno
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... graffe3.5
tuttavia, nel caso non si racchiuda il corpo di istruzione del case in un blocco, non è possibile creare variabili al suo interno
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... numero3.6
in tutto il paragrafo faremo riferimento sempre a numeri positivi, cioè privi di segno, per semplicità
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... esempio3.7
supponiamo negli esempi che un unsigned int abbia 8 cifre per ragioni di semplicità; tuttavia il loro numero dipende dal compilatore e dalla macchina utilizzata: in genere esso è 32 nei PC comuni, e 64 su macchine più potenti
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... shiftare3.8
tale termine non è propriamente corretto in italiano, ma è talmente in voga tra i programmatori che si è preferito utilizzarlo
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... identificatori4.1
identifier: in C++ gli identificatori corrispondono a sequenze di caratteri, cifre e caratteri di sottolineatura, che rispettano le medesime regole già enunciate a proposito delle variabili
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...int 4.2
oppure unsigned int, si veda il paragrafo relativo agli operatori di confronto bit a bit
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... scientifica4.3
la notazione scientifica prevede che ogni numero sia rappresentato come prodotto di un numero compreso tra $0$ e $1$ e di una potenza decimale; ad esempio $125=.125 \cdot 10^3$ oppure $.000125=.125 \cdot 10^{-3}$
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...warning4.4
si tratta di ``consigli'' che il compilatore ci fornisce riguardo a probabili errori; tali segnalazioni non pregiudicano comunque il normale funzionamento del programma, il quale viene normalmente compilato e collegato
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... ASCII4.5
su certe macchine IBM la codifica utilizzata è EBCDIC
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... costante4.6
d'ora in poi indicheremo le variabili costanti come costanti senz'altro, in tutti i casi in cui non ci sia il rischio di ambiguità con le costanti letterali
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...output 4.7
abbiamo inserito come esempio la massa della Terra, della Luna e la loro distanza media
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... standard4.8
in realtà l'autore utilizza come riferimento la GNU C library, la quale tuttavia non dovrebbe presentare amenità in quanto ligia alle specifiche dell'ANSI C standard
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... inverse4.9
ci si cimenti con questo esercizio solo se si ha una discreta padronanza delle formule trigonometriche
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... binario5.1
l'unico tipo per il quale, in questo testo, considereremo nota la rappresentazione è il tipo unsigned int
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...alias5.2
in italiano il termine è ``sinonimo'', il quale è comunque poco usato, e non verrà dunque adottato in questo testo; d'altronde alias, aliasing, anti-aliasing sono termini che ricorrono comunemente in un gran numero di programmi, dai videogiochi, alla videoscrittura, al fotoritocco
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... distrutte5.3
il che equivale a dire che la memoria da esse occupata viene segnata dal programma come libera, e può essere utilizzata da altri programmi
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... locali5.4
una variabile si dice locale ad una funzione se viene dichiarata all'interno del suo corpo, oppure se è un argomento di essa; le funzioni che non sono locali a nessuna funzione sono dette globali, e devono venire dichiarate all'esterno di tutte le funzioni
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... compilatore5.5
a seconda del diverso compilatore utilizzato i messaggi di errore, così come quelli di warning, possono essere formalmente differenti
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... fossero6.1
in realtà la maggior parte dei compilatori, di fronte ad un array parzialmente inizializzato, mettono automaticamente a zero tutti gli elementi non inizializzati; tuttavia tale pratica non è propriamente standard e, dunque, è bene non farci troppo affidamento
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... nome6.2
si usi il costrutto switch
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... stessa6.3
in realtà potrebbe anche contenere solo una chiamata ad un'altra funzione, la quale richiama la prima; in tal caso le due funzioni si dicono mutuamente ricorsive
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... esterno6.4
tale regola vale anche nel caso, che non prenderemo in considerazione, di array con dimensione maggiore di due
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... semplice6.5
questo algoritmo non è abbastanza sofisticato da potere essere utilizzato con matrici ``gradi''; infatti prendendo una matrice, ad esempio, 20 $\times$ 20 probabilmente con un normale calcolatore i tempi di calcolo sarebbero superiori all'età stimata dell'universo ...
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... bytes7.1
essendo 1 byte = 8 bit, un intero occupa dunque 32 bit; la memoria richiesta da una variabile è dipendente dal compilatore utilizzato e dalla macchina sulla quale esso compila il programma
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... memoria7.2
noi supporremo sempre che l'operazione di allocazione abbia buon fine; nel caso contrario, verrebbe tornato un puntatore nullo
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... semplici7.3
indicheremo con il nome di liste semplici le liste i cui elementi sono collegati tramite un solo puntatore e l'ultimo elemento punta 0; nel seguito con il nome di liste indicheremo sempre le liste semplici, tranne nell'ultimo paragrafo di questo capitolo, nel quale forniremo qualche cenno su altri tipi di liste
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... struttura7.4
per ragioni di compattezza tipografica in tutti gli esempi del presente capitolo non includeremo tale struttura, la quale è supposta automaticamente inserita; nel caso si voglia provare un esempio, è sufficiente copiare manualmente la definizione della struttura all'inizio di ogni esempio
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...tex2html_verb_mark7.5
si noti che abbiamo utilizzato un carattere minuscolo per la l'iniziale dell'identificatore di una struttura; tale eccezione è giustificata dal fatto che gli elementi di una lista sono le unità fondamentali del tipo ``lista''
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... causali7.6
si ricordi eventualmente di includere le appropriate librerie, più volte utilizzate nei nostri esempi
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... utilizzati8.1
infatti il C++ è detto un linguaggio a tipizzazione stretta
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... intero8.2
nel caso si dichiari void la funzione principale, allora il compilatore automaticamente la ridichiara int e aggiunge prima della fine del programma uno statement che torna un codice di successo (quasi sempre 0)
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...tex2html_verb_mark8.3
è possibile omettere l'estensione .exe nei sistemi operativi Microsoft se si esegue un programma; altre estensioni che vengono automaticamente inserite da tali sistemi operativi sono .com e .bat
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... bit8.4
cioè 8 bytes, essendo 1 byte = 8 bit
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... campi8.5
elenchiamo solo i campi standard, che dovrebbero essere contenuti in tutte le implementazioni di time.h; nulla esclude che le case produttrici dei compilatori aggiungano altri campi a tale struttura; se si vuole avere l'elenco completo dei campi della struttura tm si consulti la guida del proprio compilatore
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... esempio8.6
la libreria che ho utilizzato per provare l'esempio è, come nella maggior parte dei casi, in inglese; esistono comunque anche delle versioni localizzate in lingua italiana
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...nome_file 8.7
nome_file è comprensivo anche del percorso del file!
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... seguente8.8
per compilare il programma ci sono diverse strade. La più semplice consiste nell'utilizzare un ambiente di sviluppo sofisticato e accorpare tutti i files nel medesimo progetto; la strada più articolata e aspra è quella di creare un Makefile e di compilare il programma con il comando make. Un buon compromesso consiste semplicemente nel compilare entrambi i files .cpp e di collegarli in un unico eseguibile; tali operazioni possono essere effettuare in un solo colpo con il compilatore GNU g++:
g++ ex8_7_3.cpp mialibreria.cpp -o eseguibile.exe
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...direttiva8.9
una direttiva è semplicemente un insieme predefinito di operazioni compiute, prima che il programma venga compilato, dal preprocessore; tutte le direttive cominciano per ``#''
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... essa8.10
nelle librerie GNU C++
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... classe9.1
in tal caso essa è implicitamente inline; noi non abbiamo trattato funzioni di tale particolare tipo, comunque basti sapere che conviene in generale definire le funzioni all'interno di una classe solo se esse constano di poche righe di codice (una o due) per motivi di efficienza e (soprattutto) di leggibilità del codice
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... modulari9.2
un numero modulare è un numero intero il cui intervallo di definizione è $0 \leq x \leq N$, ove $N$ è il periodo della classe di numeri modulari che stiamo considerando; se prendiamo un numero $y$ che non è compreso nell'intervallo di definizione, esso può essere ricondotto alla sua classe di equivalenza semplicemente sottraendo ad esso $N$. Ad esempio se consideriamo i numeri di modulo $12$ (come le ore di un orologio a lancette): $1=13=25=-11=\ldots$
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... errore9.3
del tipo: no match for `NumeriModulari & + NumeriModulari &'
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... seguente9.4
nel quale si suppone di avere costruito i files ``arrays2.h'' e ``arrays2.cpp'' a partire dai corrispondenti presentati nella sezione precedente, aggiungendo ad essi la dichiarazione e la definizione dell'operatore di assegnamento
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...tex2html_verb_mark9.5
aggiungiamo il dichiarazione e definizione del costruttore di copia nei files ``arrays2.h'' e ``arrays2.cpp'', rispettivamente
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... conversioni10.1
il C++, ricordiamo, è un linguaggio di programmazione deterministico: se compiliamo un numero arbitrario di volte un programma privo di errori dobbiamo ottenere sempre il medesimo risultato
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... statiche10.2
intenderemo con statico un oggetto il quale è dichiarato static, in dipendenza del contesto nel quale avviene la dichiarazione; non si faccia confusione con le variabili non dinamiche le quali, talvolta, sono dette statiche
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... classe10.3
non importa in quale posizione si colloca la dichiarazione, sia essa all'interno della parte pubblica, privata o protetta della classe
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...tex2html_verb_mark10.4
attenzione: non ``string.h'', la quale contiene, come abbiamo visto, le funzioni di libreria sulle stringhe stile-C
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...flag 11.1
i flag (it. ``bandierina'') sono delle variabili, solitamente di tipo bool, che specificano lo stato o le caratteristiche di un oggetto
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... creata11.2
si inserisca il codice seguente subito dopo l'ultima delle definizioni di funzioni membro della classe lista bilaterale
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... blocco11.3
noi consideremo i blocchi aventi dimensione di 5 celle per semplicità, ma nella pratica tale numero è troppo esiguo; la dimensione ottimale di un blocco dipende da numerosi fattori, i quali esulano dagli scopi del nostro corso
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... funzione12.1
non è propriamente vero che tutte le funzioni virtuali pure non debbano avere un corpo, ma per noi è sufficiente credere che sia così
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... comprese12.2
funzioni virtuali che restituiscono puntatori (o riferimenti) alla classe base, downcasting e altro
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... due12.3
varrebbe la pena ricordare anche l'esistenza della iostream, la quale eredita sia da istream sia da ostream; siccome non abbiamo introdotto affatto l'ereditarietà multipla, ci sembra inopportuno seminare dubbi, considerato anche l'importanza relativa della iostream rispetto alle due classi base
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... questione12.4
a titolo di curiosità si sappia che rdbuf() è membro di ios
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... stream12.5
per quanto riguarda il primo metodo, in realtà viene restituito un void* piuttosto che un bool; tuttavia, siccome il valore restituito è arbitrario tranne che nel rispetto della conversione a vero/falso, e siccome non abbiamo mai introdotto il tipo void*, abbiamo preferito semplificare direttamente la questione
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... seguenti12.6
in realtà il secondo ed il quarto costruttore posseggono anche un terzo argomento, il quale ha tuttavia significato solo per sistemi di tipo Unix, nei quali è possibile specificare la protezione
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... file12.7
in dipendenza del sistema operativo e del compilatore utilizzato è possibile avere un numero di modalità ben maggiore di quelle presentate
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... IOStream12.8
si suppone che tutti i file siano in formato testo
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.