Uno stream o flusso di dati o canale è un percorso di comunicazione tra la sorgente di una certa informazione e la sua destinazione.

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Uno stream o flusso di dati o canale è un percorso di comunicazione tra la sorgente di una certa informazione e la sua destinazione."

Transcript

1 pag Input e output Nell informatica classica il concetto di input e output era strettamente legato all uso dei dispositivi esterni di memorizzazione (dischi, nastri) e quindi al concetto di file, al più veniva esteso alla tastiera come dispositivo di input e alla stampante pensata come file di output. La tendenza odierna è quella di separare nettamente i dispositivi dal trattamento dei flussi di dati da e verso di essi. Per questa ragione in Java e in C++ si è fatta la scelta di introdurre astrazioni pensate come oggetti che sono indipendenti dai dispositivi. Si parla quindi di oggetti Stream, Pipe o Filter che sono veri e propri Abstract Data Type dotati di operazioni non dipendenti dai dispositivi Stream, filter, pipe di dati Il significato letterale della parola stream, dal dizionario di inglese, è quello di fiume, torrente o flusso. Nel caso dell informatica il flusso è un astrazione che definisce le modalità (i metodi) di lettura dei token di informazione che fluiscono nello stream di input o dei metodi di scrittura in uno stream di output. Un token è una unità di informazione accessibile è può consistere in un byte, un carattere o un oggetto strutturato. Uno stream o flusso di dati o canale è un percorso di comunicazione tra la sorgente di una certa informazione e la sua destinazione. Sorgente Flusso Destinazione Le sorgenti possono essere le più svariate: la memoria Ram del computer, Internet, un dispositivo permanente di memorizzazione dati, la tastiera ecc. La stessa cosa vale per le destinazioni. La sorgente e la destinazione del flusso di byte sono anche denominati rispettivamente processo produttore e processo consumatore. Non è necessario conoscere in dettaglio la sorgente o la destinazione per leggere un flusso di input o per scrivere in un flusso di output. I metodi generali (oppure i programmi) che operano su una sorgente di dati accettano come argomento un flusso di input, così quelli che scrivono su una destinazione accettano come argomento uno stream di output. Sorgente Flusso di input Metodo o programma che legge dati Metodo o programma che scrive dati Flusso di output Destinazione

2 pag.113 Oltre ai metodi (o programmi) che fanno uso di stream di I/O esistono anche oggetti detti processori di dati. Un filter (filtro) o processore è un metodo, o un programma, dotato di due argomenti di tipo flusso: legge dati dal flusso di input, li elabora (filtra, seleziona ecc.) e li scrive sul flusso di output. I filtri non necessitano di alcuna informazione, nè riguardo alla sorgente nè riguardo alla destinazione; i filtri richiedono soltanto le modalità di accesso (astratte) al rispettivo flusso. Un filtro può essere rappresentato dalla figura: Flusso di INPUT Filtro o Processore Flusso di OUTPUT Infine esiste un oggetto particolare che prende il nome di pipe o condotto o convogliatore. Il suo ruolo è quello di connettere e sincronizzare un flusso di input con un flusso di output. Non si occupa di trasformare il contenuto dei dati come il filtro. Flusso di INPUT Pipe o condotto Flusso di OUTPUT Queste astrazioni: Sorgente o processo produttore dei dati; Flusso di input; Pipe o condotto; Filtro o processore; Flusso di output; Destinazione o processo Consumatore dei dati consentono di separare logicamente quelle entità, come File e dispositivi di memorizzazione, che nell informatica classica erano considerate legate in modo univoco. È il programmatore che decide quali relazioni costruire tra le diverse entità astratte e tra queste ultime e i dispositivi concreti Flussi di input e output in Java Nel package java.io sono contenute le classi che consentono di gestire le operazioni relative ai flussi. InputStream e Reader sono flussi astratti di input e sono genitori di tutte le classi di input di Java. InputStream (e le sue sottoclassi) tratta flussi di Byte e definisce i modi fondamentali con cui si possono consumare. Reader (e le sue sottoclassi) tratta flussi di Caratteri e definisce i modi fondamentali con cui si possono consumare. Visto che i genitori sono classi astratte, i relativi metodi sono implementati solo nelle sottoclassi della gerarchia.

3 pag.114 Gli schemi seguenti mostrano la gerarchia, anche se non completa, delle classi essenziali relative al trattamento dei flussi di input InputStream ByteArrayInputStream FileInputStream Reader CharArrayReader StringReader InputStreamReader BufferedReader FileReader Di seguito si riporta la gerarchia, simmetrica a quella di input, delle classi relative ai flussi di output. OutputStream ByteArrayOutputStream FileOutputStream Writer CharArrayWriter StringWriter OutputStreamWriter BufferedWriter FileWriter In prevalenza saranno trattati flussi di tipo carattere (Reader e Writer); gli esempi proposti potranno essere trasformati molto semplicemente per trattare flussi di byte. poiché le sottoclassi relative ai flussi di tipo carattere sono più articolate di quelle relative ai flussi di byte. Dalla gerarchia si nota che il ByteArrayInputStream (sottoclasse di InputStream) ha un corrispondendente in modalità carattere in CharArrayReader (sottoclasse di Reader); analogo parallelo può essere fatto per i flussi di output. Allo stesso modo la sottoclasse FileInputStream ha la corrispondente nella classe FileReader (analogamente per l output). Oltre a CharArrayReader (Writer), in Reader (Writer) sono presenti le sottoclassi StringReader (Writer), BufferedReader (Writer), InputStreamReader (Writer) che rendono più ricca l'elaborazione dei flussi di caratteri. Se si volesse spiegare sinteticamente il funzionamento di un flusso si dovrebbe dire che su questo oggetto sono consentite poche e semplici operazioni: Creare un flusso di input che legge da una sorgente. Creare un flusso di output che scrive su una destinazione. Leggere un carattere (byte). Scrivere un carattere (byte). Leggere un gruppo di caratteri (byte) di dimensione nota.

4 pag.115 Scrivere un gruppo di caratteri (byte) di dimensione nota. Saltare (skip) in lettura un blocco di caratteri. Chiudere il flusso, liberando lo heap dagli oggetti costruiti. Elenco sommario delle sottoclassi di I/O e dei costruttori e metodi principali. CharArrayReader CharArrayWriter Costruttori CharArrayReader(char[]) Costruttori CharArrayWriter() CharArrayReader(char[],int,int) CharArrayWriter(int) Metodi Metodi int read() void write(int) int read(char[],int,int) void write(char[],int,int) boolean ready() void write(string) long skip(long) void write(string,int,int) void close() void close() String tostring() char[ ] tochararray() StringReader StringWriter Costruttori StringReader(String) StringWriter() StringWriter(int) Metodi IDENTICI a CharArray IDENTICI a CharArray più StringBuffer getbuffer() InputStreamReader Costruttori InputStreamReader(InputStream) OutputStreamWriter OutputStreamWriter(OutputStream) Metodi IDENTICI a CharArray IDENTICI a CharArray FileReader Costruttori FileReader(String) Metodi IDENTICI inputstreamreader FileWriter FileWriter(String) FileWriter(String, boolean) IDENTICI outputstreamwriter BufferedReader BufferedWriter Costruttori BufferedReader(Reader) BufferedWriter(Writer) BufferedReader(Reader, int) BufferedWriter(Writer,int) Metodi IDENTICI a CharArray più IDENTICI a CharArray più String readline() [*] void newline() Dalla tabella si nota che i metodi di ogni classe sono pochi e spesso identici. In particolare si ripetono i metodi di lettura/scrittura di un byte, di un carattere o di

5 pag.116 una sequenza di caratteri. Solo BufferedReader e BufferedWriter contengono i metodi readline() e newline(), rispettivamente, che intuitivamente consentono di agire non su singoli caratteri o su singoli byte, ma su intere righe Dalla sorgente alla destinazione Si farà uso nel seguito di uno schema astratto, ma semplificato, che pensa ad un programma che legge byte o caratteri come a un processo consumatore. Il programma è immaginato come la destinazione del flusso di input. Si ricorda che la distinzione tra inputstream e Reader si riferisce solo ai token che fluiscono; nel primo si tratta esclusivamente di byte, nel secondo esclusivamente di caratteri. Graficamente rappresenteremo la sorgente, il flusso e il programma (destinazione del flusso) nel modo seguente: Sorgente Tipo di Flusso Flusso Programma Questa rappresentazione grafica consentirà di cogliere sinteticamente le entità coinvolte e le loro relazioni reciproche. Sorgente Costruttore Token del flusso Progr. Destinazione array stringa file X X X X "XXXX" Text Flusso di Char Tipo di flusso (cons. di Char) (cons. di Line) tastiera (cons. di Byte) I simboli rappresentano: le sorgenti: array, stringa, file di testo, tastiera ecc; i tipi di flusso costruiti (classe Java utilizzata) per generare il flusso: CharArrayReader (CAR), StringReader(SR), InputStreamReader(ISR), BufferedReader(BR), FileReader (FR); i componenti o token del flusso: Char, Line o Byte; il programma: consumatore dei Token del flusso.

6 pag.117 Esempio 1. Costruire un programma che consenta di consumare (leggere e stampare sul monitor) un flusso di caratteri la cui sorgente è un array memorizzato nella RAM. Lo schema che rappresenta il programma potrebbe essere il seguente. X X X X CAR Flusso di Char (cons. di Char) Nello schema sono indicati: all'estrema sinistra, la sorgente che è un array di caratteri; il costruttore CAR CharArrayReader del flusso, che ha come argomento un array; il flusso ed i relativi token che in questo caso sono dei caratteri; il Programma consumatore o destinatario. public class cap09_es_01 { public static void main(string args[])throws IOException { char[] c={'a','b','c','d','e','f','g'; // sorgente CharArrayReader f_in = new CharArrayReader(c); // costruzione flusso int ch; while ((ch=f_in.read())!=-1) // ciclo di lettura System.out.print((char)ch); System.out.println("\nfine esecuzione."); Esecuzione: Commento al codice: La classe CharArrayReader scelta per la risoluzione è quella più aderente alla sorgente. Infatti il costruttore del flusso accetta come argomento un array di caratteri. Il metodo base per acquisire i caratteri del flusso è read(). Quando con successive letture si giunge al termine dello stream, read() restituisce il codice 1. Se la sorgente non è un array di caratteri ma una stringa, il problema potrebbe essere così riformulato: Esempio 2. Costruire un programma che consenta di consumare (leggere e stampare sul monitor) un flusso di caratteri la cui sorgente è una stringa memorizzato nella RAM. "XXXX" SR Flusso di Char (cons. di Char)

7 pag.118 public class cap09_es_02 { public static void main(string args[])throws IOException { String s="pippo e pluto"; // sorgente StringReader f_in = new StringReader(s); // costruzione flusso int ch; while ((ch=f_in.read())!=-1) // ciclo di lettura System.out.print((char)ch); System.out.println("\nfine esecuzione."); Esecuzione: Commento al codice: La classe StringReader, scelta per la risoluzione, è quella più aderente alla sorgente. Infatti il costruttore del flusso accetta come argomento una stringa. Il metodo base per acquisire i caratteri del flusso è ancora read() fino al termine dello stream. Gli esempi precedenti avevano solo un significato didattico formale. Infatti, se l obiettivo del programma è quello di stampare un array o una stringa, non è necessario operare con uno stream, sarebbe sufficiente un banale programma di stampa. L esempio che segue è più significativo perché per la prima volta mostra come si possano acquisire caratteri dalla tastiera. Esempio 3. Costruire un programma che consenta di consumare (leggere e stampare sul monitor) un flusso di caratteri la cui sorgente è la tastiera ISR Flusso di Char (cons. di Char) public class cap09_es_03 { public static void main(string args[])throws IOException { InputStreamReader f_in=new InputStreamReader(System.in); int ch; while ((ch=f_in.read())!='\r') System.out.print((char)ch); System.out.println("\nfine esecuzione."); Commento al codice: La tastiera è individuata in Java da System.in e si tratta, in particolare, di uno stream di Byte. La classe InputStreamReader, scelta per la soluzione, è una classe particolare che fa da ponte tra sorgenti di byte e sorgenti di caratteri. In sostanza InputStreamReader converte una sorgente di byte in una sorgente di caratteri. A conferma di questo si noti che il costruttore del flusso accetta come

8 pag.119 argomento un oggetto di tipo InputStream (flusso di byte). Il metodo base per acquisire i caratteri dal flusso è ancora read(). Si noti che in questo caso il ciclo di acquisizione di caratteri è interrotto (non dal codice 1 che indica la fine dello stream) dal codice \r che corrispondere alla pressione del tasto di INVIO. Il programma acquisisce solo una riga di caratteri fino alla pressione del tasto di invio. Se si volessero acquisire più righe, invece di una sola, si potrebbe condizionare la fine dell acquisizione alla lettura di un carattere convenzionale come per esempio # nel modo seguente: while ((ch=f_in.read())!='#') invece di while ((ch=f_in.read())!='\r') in questo caso si acquisirebbero da tastiera tutte le righe desiderate fino a quando non si immette il carattere convenzionale #. Esempio 4. Costruire un programma che consenta di consumare (leggere e stampare sul monitor) un flusso di caratteri la cui sorgente è un file di testo memorizzato su disco. Text FR Flusso di Char (cons. di Char) public class cap09_es_04 { public static void main(string args[])throws IOException { FileReader f_in = new FileReader("c:/mio.txt"); int ch; while ((ch=f_in.read())!=-1) { System.out.print((char)ch); System.out.println("\nfine esecuzione."); Esecuzione: Il file, come mostra la finestra di output, contiene le cinque righe che sono stampate prima del messaggio di <fine esecuzione.> Commento al codice: La classe FileReader, scelta per la soluzione, è quella più aderente alla sorgente. Infatti il costruttore del flusso esige come argomento una stringa che deve rappresentare il nome di un file su disco.

9 pag Flussi e Filtri Fino a questo momento i quattro esempi sviluppati hanno utilizzato quattro delle cinque classi di input illustrate nello schema del gruppo Reader. La quinta BufferedReader più che una classe generatrice di flussi di input è un filtro; infatti il suo costruttore esige come parametro un flusso di tipo Reader e costruisce un flusso bufferizzato organizzato in linee. Uno schema che ne rappresenti il funzionamento potrebbe essere il seguente: flusso di caratteri o Reader Buffered Reader Flusso bufferizzato in linee (cons. di Char o Line) Si nota che lo schema mostra che BuffereReader può essere pensato come il generatore di un oggetto che ha come parametro di input un flusso e che restituisce in output un flusso organizzato in linee che viene messo a disposizione come flusso di input del programma consumatore. Questo risponde alla definizione di Filtro in quanto da un flusso di caratteri si può ottenere un flusso modificato organizzato in linee di testo con marcatori di fine linea (\r o \n). esempio 5. assegnata una sorgente di tipo array di caratteri che contenga anche marcatori di fine linea (\r o \n), si desidera realizzare un programma che consumi i dati in forma di flusso di input acquisendo le singole righe del testo e stampandole numerate progressivamente. Lo schema mostra graficamente la relazione tra sorgente e flussi coinvolti: Flusso di Char Flusso di Linee X X X X CAR BR (cons. di Linee) public class cap09_es_05 { public static void main(string args[])throws IOException { char[]c={'p', r,'i','m', a,'\n','s','e','c','o','n', d, a,'\n'; CharArrayReader f_in = new CharArrayReader(c); BufferedReader in=new BufferedReader(f_in); String s=" "; int n=0; while ((s=in.readline())!=null) { n=n+1; System.out.println(n+ : +s); System.out.println("\nfine esecuzione."); Esecuzione: 1: prima 2: seconda fine esecuzione.

10 pag.121 Commento al codice: Notare che l array contiene caratteri i marcatori, indifferentemente \r o \n. Si costruisce prima il flusso di caratteri CharArrayReader che viene passato in input (come parametro del costruttore) a BufferedReader che costruisce il flusso Bufferizzato che sarà letto dal programma con il metodo readln() non presente nelle altre classi flusso. Il ciclo di lettura si interrompe quando la stringa in lettura è null. Il programma precedente può essere di maggior interesse se applicato ad un file di testo memorizzato su disco. esempio 6. realizzare un programma che legga un file di testo e stampi le singole righe numerandole progressivamente. La figura evidenzia che si può costruire un flusso di caratteri utilizzando FileReader e quindi filtrarlo con BufferedReader per ottenere il flusso di linee desiderato. Flusso di Char Flusso di Linee Text FR BR (cons. di Linee) public class cap09_es_06 { public static void main(string args[]) throws IOException { FileReader f_in = new FileReader("c:/mio.txt"); BufferedReader in=new BufferedReader(f_in); String s=" ";int n=0; while ((s=in.readline())!=null) { n=n+1; System.out.println(n+ : +s); System.out.println("\nfine esecuzione."); Commento al codice: Il file stampato è identico a quello dell esempio 4, la novità consiste nel fatto che la condizione di fine ciclo è fondata, come quella dell array precedente, sulla presenza dei marcatori di fine linea nel file di testo e quindi sul fatto che readline() restituisce null. Si costruisce prima il flusso di caratteri FileReader che viene passato in input (come parametro del costruttore) a BufferedReader che costruisce il flusso Bufferizzato che sarà letto dal programma con il metodo readln() non presente nelle altre classi flusso.

11 pag Flussi di Output con le classi Writer Si affronteranno ora alcuni esempi di utilizzo di flussi di output mostrando la simmetria esistente rispetto ai flussi di input. esempio 7. realizzare un programma che generi in sequenza i caratteri e li depositi su un flusso di output indirizzato ad una destinazione di tipo array di caratteri. Al termine stampi l array destinazione. (prod. di Char) CAW Flusso di Char X X X X public class cap09_es_07 { public static void main(string args[])throws IOException { CharArrayWriter out=new CharArrayWriter(); // (1) flusso do output for (int i=0; i<=9; i++) { String s=""+i; // trasforma il numero in stringa char ch=s.charat(0); // da stringa a carattere out.write(ch); // (2) scrive nel flusso char[] c=out.tochararray(); // (3) da flusso ad array di char System.out.println("il flusso di output contiene:"); for (int i=0; i<c.length; i++) System.out.print(c[i]); System.out.println("\nfine esecuzione."); Esecuzione: il flusso di output contiene: fine esecuzione. Commento al codice: La nota (1) mostra il costruttore del flusso. La (2) il metodo di scrittura di un carattere nel flusso di output. La (3) la trasformazione del flusso in un array destinazione. Si affronteranno due esempi più interessanti, il primo genera un file di testo in output scrivendo su di esso alcune stringhe, il secondo lo genera acquisendo l input dalla tastiera. esempio 8. realizzare un programma che generi un file di testo inserendo su ogni riga del file una parola contenuta in un array di stringhe. Lo schema grafico rappresentativo degli stream è il seguente:

12 pag.123 (prod. di Stringhe) FW Flusso di Char Text public class cap09_es_08 { public static void main(string args[])throws IOException { FileWriter out=new FileWriter("c:/out.txt"); // (1) String s[]={"pera","banana","fico","mela"; for (int i=0; i<s.length; i++) out.write(s[i]+'\n'); // (2) out.close(); // (3) /* verifica e stampa del file generato */ System.out.println("il flusso di output contiene:"); FileReader in=new FileReader("c:/out.txt"); int ch; while ((ch=in.read())!= -1) System.out.print((char)ch); System.out.println("\nfine esecuzione."); Esecuzione: il flusso di output contiene: pera banana fico mela fine esecuzione. Commento al codice: La nota (1) mostra il costruttore di FileWriter, la (2) la scrittura di una stringa sul file seguita dal marcatore \n di newline. La nota (3) evidenzia la necessità di chiudere il file di output per poter salvare i dati prima di riaprirlo per la lettura e la stampa di verifica. esempio 9. realizzare un programma che generi un file di testo inserendo su ogni riga una riga di testo acquisita da tastiera. Il programma termina quando da tastiera si immette una riga vuota. Lo schema grafico rappresentativo degli stream è il seguente: Flusso di Char Flusso di Linee Flusso di Linee ISR BR (cons. di Linee e produtt. di linee) FW BW Text

13 pag.124 public class cap09_es_09 { public static void main(string args[])throws IOException { InputStreamReader f_in=new InputStreamReader(System.in); // (1) BufferedReader in=new BufferedReader(f_in); // (2) FileWriter f_out=new FileWriter("c:/out.txt"); // (3) BufferedWriter out=new BufferedWriter(f_out); // (4) String s=" "; while (s.length()!=0) { // (5) s=in.readline(); // (6) out.write(s); // (7) out.newline(); // (8) out.close(); // (9) /* verifica e stampa del file generato */ System.out.println("\nil flusso di output contiene:"); FileReader new_in=new FileReader("c:/out.txt"); int ch; while ((ch=new_in.read())!= -1) System.out.print((char)ch); System.out.println("\nfine esecuzione."); Commento al codice: Si tratta evidentemente di un programma di INPUT/OUTPUT in quanto dopo la lettura di ogni linea dalla tastiera la trascrive nel file. Lo schema grafico mostra la necessità di costruire un ISR flusso di caratteri, vedi nota (1) del codice. Si filtra il flusso di input da tastiera attraverso un BR, nota (2) del codice, per ottenere un flusso organizzato in linee. Le note (3) (4) mostrano il costruttore di FileWriter, intermediario necessario per ottenere un output bufferizzato BW per la scrittura di intere righe nel file. Le note (5),(6),(7) e (8) mostrano rispettivamente, la condizione di interruzione della lettura da tastiera quando la riga di input è vuota (s.length()==0), la lettura della linea di input dal BR, la scrittura della stringa sul buffer del file e infine il newline necessario.

14 pag Un filtro interessante StreamTokenizer Un filtro molto utile per analizzare e selezionare token di uno stream di caratteri è lo StreamTokenizer. Questo filtro consente di separare con estrema semplicità diversi tipi di gettone (token) presenti nel flusso di input. Si possono isolare le parole formate da soli caratteri alfabetici (WORD), i token numerici (NUMBER) separandole da caratteri di punteggiatura o altro. Il filtro funziona identificando i caratteri separatori che di norma sono SPAZI, fine linea EOL o fine file EOF. Nella tabella sono riportatati sinteticamente campi, costruttori e metodi: StreamTokenizer NOTE Costruttori StreamTokenizer(Reader) L imput dello streamtokenizer e un oggetto Reader. In particolare se si legge da tastiera si può usare un InputStreamReader, se si legge da un file di testo è necessario passare da FileReader ecc. Attributi o Campi Metodi double nval String sval static int TT_EOF static int TT_EOL static int TT_NUMBER static int TT_WORD int ttye void commentchar(char) void eolissignificant() int lineno() void lowercasemode(boolean) int nexttoken() void ordinarychar(int) void ordinarychars(int, int) void wordchars(int, int) void quotechar(int, int) void whitespacechars(int, int) void slashslashcomments(boolean) void slashstarcomments(boolean) Campo che contiene il token di tipo NUMBER, trasformato in double dopo l isolamento del Token. Dopo l operazione di lettura a.nexttoken(); se a.ttype==a.tt_number allora si può acquisire il valore double a.nval. Campo che contiene, come nel caso precedente, il token do tipo WORD. La costante che indica che nexttoken() ha incontrato il fine file. Ad esempio if (a.ttype==a.tt_eof) Analogo al precedente. Analogo al precedente. Analogo al precedente. Campo che contiene informazioni relativamente al tipo di token isolato dopo una lettura a.nexttoken(). E possibile chiedersi SE a.ttype==a.tt_word oppure stampare il carattere (char)a.ttype Definisce quali caratteri debbano essere interpretati come un commento. Decreta che il marcatore di fine linea deve essere individuato e non tralasciato dal filtro. Restituisce il numero di riga del token letto. Se boolean è true, prima di analizzare i token li trasforma tutti in lettere minuscole. Legge il token successivo dello stream e restituisce un intero che rappresenta il ttype (tipo di token). Definisce il o l intervallo dei caratteri ordinari che non sono ne NUMBER ne WORD ne COMMENT ne SPACE ne EOL ne EOF. Definisce l intervallo dei caratteri che appartengono a un WORD. Per default sono i caratteri alfabetici. Definisce i caratteri che identificano una costante stringa. Definisce i caratteri che separano i Token. Definisce i caratteri che individuano commenti (che ST tralascia nell analisi) in C e C++ e Java /* */ oppure //

15 pag. 126 esempio 10. partendo da una stringa che contenga parole numeri e caratteri vari filtrarla con uno StreamTokenizer per stampare in modo separato i vari token indicando a fianco di ognuno di che cosa si tratta. Se utilizziamo gli schemi introdotti per indicare flussi e filtri si potrebbe indicare la sequenza del programma con il seguente schema grafico: stringa "XXXX" Flusso di Char SR Flusso di Token ST (cons. di Token) Lo schema mostra che dalla stringa sorgente si deve costruire con StringReader (SR) un flusso (Reader) necessario per costruire il filtro StringTokenizer (ST). Questo restituisce in output un flusso filtrato di Token che il programma consumerà per produrre gli effetti desiderati. class cap09_es_10 { public static void main(string arg[]) throws IOException { String s="parola (1) sono un numero 2.55?? una costante 2001 "; StringReader f_char=new StringReader(s); // (1) StreamTokenizer st=new StreamTokenizer(f_char); // (2) st.nexttoken(); // (3) while (st.ttype!=st.tt_eof) { // (4) if(st.ttype==st.tt_word) // (5) System.out.println("WORD:"+st.sval); // (6) else if(st.ttype==st.tt_number) // (7) System.out.println("NUM:"+st.nval); // (8) else if (st.sval==null) // (9) System.out.println("CHAR:"+(char)st.ttype); // (10) else System.out.println("OGGETTO di tipo "+st.ttype+" :"+st.sval); // (11) st.nexttoken(); Esecuzione: WORD:parola CHAR:( NUM:1.0 CHAR:) WORD:sono WORD:un WORD:numero NUM:2.55 CHAR:? CHAR:? WORD:una WORD:costante OGGETTO di tipo 39:2001

16 pag. 127 Commenti al codice: Le note (1) e (2) mostrano la costruzione dei flussi indicati nello schema. La (3) indica l invocazione del metodo che stacca il primo Token. La nota (4) evidenzia che il ciclo di estrazione dei Token ha termine quando si incontra il Token TT_EOF (costante predefinita in StreamTokenizer che indica la fine del flusso). Le note da (5) a (11) mostrano come si testano e si stampano i diversi token utilizzando il campo ttype di ogni token che informa a quale tipo appartiene il gettone attualmente in lettura. I tipi sono WORD, NUMBER, TT_EOF ecc. Se il tipo è null significa che si tratta di un singolo carattere di punteggiatura. Il metodo st.nexttoken() presente nell ultima riga del ciclo fa avanzare il puntatore al prossimo tokem dello stream. esempio 11. Si desidera realizzare un programma che stampi l intero file di testo c:/mio.txt memorizzato su disco e successivamente tutti e solo i token WORD che contiene. Richieste: Passare il FileReader ad un BufferedReader al fine di stampare le righe del file; quindi riaprire il FileReader e assegnarlo come input a StreamTokenizer per stampare i soli WORD secondo lo schema grafico seguente. Lo schema mostra che pur trattandosi di un unico codice questo può essere pensato come una coppia di programmi indipendenti che nel caso specifico sono eseguiti una dopo l altro. Il primo stampa semplicemente il file di testo, il secondo mostra come vengono estratti dal file i soli token di tipo WORD. Text Flusso di Char Flusso di Linee FR BR (cons. di Linee) Flusso di Char FR Flusso di Token ST (cons. di Token) class cap09_es_11 { public static void main(string arg[]) throws IOException { FileReader f_char=new FileReader("c:/mio.txt"); // (1) BufferedReader f_line=new BufferedReader(f_char); // (2) System.out.println("Le righe nel file sono:"); String s=" "; while ((s=f_line.readline())!=null) System.out.println(s); f_char=new FileReader("c:/mio.txt"); // (3) StreamTokenizer st=new StreamTokenizer(f_char); // (4) System.out.println("\nLe sole parole sono:"); st.nexttoken(); // (5) while (st.ttype!=st.tt_eof) { if(st.ttype==st.tt_word) System.out.print(st.sval+" "); st.nexttoken(); System.out.println("\nFine scansione.\n");

17 pag. 128 Esecuzione: Le righe nel file sono: prima riga numero 1234 anno "2001" // commento non analizzato NUMERO 3.32 Le sole parole sono: prima riga numero anno NUMERO Fine scansione. Commenti al codice: Le note (1) e (2), unite al primo ciclo di stampa. si riferiscono alla costruzione del flusso di input FileReader (FR) che opera sul file di testo, questo flusso viene filtrato dal successivo BufferedReader (BR) per consentire la stampa per linee del testo e consumare il flusso. Le note (3) (4) mostrano la sequenza di costruzione del FileReader che diviene input di StreamTokenizer. Infine si avvia la lettura del primo token evidenziato dalla nota (5). Le istruzioni successive consistono nel ciclo del programma che consuma i token e stampa solo i WORD che sono quelli desiderati. esempio 12. Si desidera realizzare un programma che stampi tutti e soltanto i token numerici di un file di testo memorizzato su disco con a fianco il numero di riga del file su cui il token è scritto. class cap09_es_12 { public static void main(string arg[]) throws IOException { FileReader f_char=new FileReader("c:/mio.txt"); // (1) StreamTokenizer st=new StreamTokenizer(f_char); // (2) System.out.println("I numeri contenuti nel file sono:"); st.nexttoken(); // (3) while (st.ttype!=st.tt_eof) { if(st.ttype==st.tt_number) System.out.println(st.nval+" riga:"+st.lineno()); st.nexttoken(); System.out.println("\nFine scansione file."); Esecuzione: I numeri contenuti nel file sono: riga: riga:5 Fine scansione file. Commenti al codice: Il programma non differisce dalla seconda parte del precedente esempio 11 con le uniche differenze che in questo caso si stampano solo i Token NUMBER e a fianco il numero di riga su cui questi sono memorizzati. Il metodo st.lineno() è utilizzato proprio al fine di estrarre i numeri di riga del token in esame.

18 pag E Esercizi Problemi che usano stream o filtri in modo elementare. Uso delle sottoclassi di ImputStream, OutputStream, Reader e Writer per risolvere problemi Si desidera costruire un programma che acquisisca da un array di caratteri le singole lettere utilizzando un opportuno stream e stampi solo le vocali. Richieste: realizzare il solo main() scegliendo il corretto costruttore di stream. Nota: il metodo che testa se un carattere è contenuto nell insieme delle vocali potrebbe essere il seguente appartenente alla classe String. String Voc= aeiou ; char ch= a ; if ((Voc.indexOf(ch))!=-1) 9.2. Si desidera costruire un programma che acquisisca da una stringa le singole lettere utilizzando un opportuno stream e le collochi in un StringBuffer ponendo al termine di ogni sequenza di cinque caratteri il marcatore \n e infine stampi il buffer ottenuto. Richieste: realizzare il solo main() scegliendo il corretto costruttore di stream Si desidera costruire un programma che acquisita da tastiera una sequenza di linee fino a quando non si immette il marcatore #. Trasferisca le linee acquisite in un StringBuffer eliminando i marcatori di fine linea \n, \r ; infine stampi il testo del Buffer ottenuto. Richieste: realizzare il solo main() scegliendo il corretto costruttore di stream Si desidera costruire un programma che acquisita dati da un array di caratteri assegnato dall utente, l array contiene anche marcatori di fine linea \n ; i dati acquisiti li scriva utilizzando un opportuno stream di output in un file di testo memorizzato su disco. Richieste: realizzare il solo main() utilizzando il costruttore FileWriter per lo stream di output Si desidera costruire un programma che acquisita da una stringa assegnata dall utente i caratteri e li trascriva in sequenze di cinque caratteri su ogni riga di un file di testo inserendo l opportuno marcatore di fine linea. Richieste: realizzare il solo main() scegliendo il/i corretto/i costruttore/i di stream di output Si desidera costruire un programma che acquisita da un file di testo memorizzato su disco le diverse linee e le riscriva su un nuovo file di testo in in sequenze di cinque caratteri su ogni riga di testo inserendo l opportuna marcatore di fine linea. Richieste: realizzare il solo main() scegliendo i corretti costruttori di stream di input e output. Problemi semplici che usano stream di I/O e la classe StreamTokenizer Si desidera costruire un programma che filtri un file di testo memorizzato su disco e stampi di fianco a ogni parola la riga su cui si trova. Richieste: realizzare il solo main() facendo uso del filtro StreamTokenizer.

19 pag Si desidera costruire un programma che Dopo aver acquisito una parola da ricercare, filtri un file di testo memorizzato su disco e stampi quante volte ricorre la parola nel testo. Richieste: realizzare il solo main() facendo uso del filtro StreamTokenizer Si desidera costruire un programma che Dopo aver acquisito una parola da ricercare, filtri un file di testo memorizzato su disco e stampi su quali righe si trova quella parola. Richieste: realizzare il solo main() facendo uso del filtro StreamTokenizer Si desidera costruire un programma che Filtri un file di testo memorizzato su disco che contiene esclusivamente numeri separati da spazi e stampi la somma algebrica dei numeri trovati. Richieste: realizzare il solo main() facendo uso del filtro StreamTokenizer. Problemi la cui soluzione richiede la progettazione di una a più classi senza Frame o GUI Si desidera costruire un programma che usi un flusso qualsiasi di caratteri di input e mostri il testo completo sulla console in output." Indicazioni: il flusso da cui provengono i caratteri è un generico Reader (a seconda delle necessità il dispositivo potrà essere uno StringBuffer, una Strimg, un Array o un File di caratteri, la Tastiera). Si tratta quindi di progettare una Classe. (Chi fa che cosa?) la Classe, chiamiamola, Leggi_mostra avrà un costruttore generico di tipo Reader e disprrà di almeno un metodo leggi() che acquisisce dallo stream i caratteri per costruire una Stringa (che deve essere memorizzata negli attributi), e un secondo metodo che mostra() la stringa su console. Leggi_mostra - Reader flusso; - String testo; +Leggi_mostra(Reader in) +String leggi() +void mostra() Richieste: implementare la classe e un main di prova per verificare i due metodi al variare dello stream reader associato Si desidera costruire un programma che analizzi un flusso qualsiasi di caratteri e consenta di sapere se il testo contiene token numerici e/o token di tipo word" Indicazioni: I casi d'uso potrebbero essere i seguenti: costruttore del Filtro (quali parametri?). realizzare una funzionalità (metodo?) che risponda alla domanda quanti_num();

20 pag. 131 realizzare una funzionalità (metodo?) che risponda alla domanda quante_par() opzionalmente: dammi_num() Filtro() dammi_par() quanti_num() quante_par() Il flusso sarà un generico Reader (a seconda delle necessità il dispositivo potrà essere uno StringBuffer, una Strimg, un Array o un File di caratteri, la Tastiera). L'analisi del flusso verrà eseguita utilizzando uno StreamTockenizer. Si tratta quindi di progettare una Classe Filtro. (Chi fa che cosa?) Rischieste: o Disegnare (diagramma di classe) la classe Filtro; o Codificare la Classe e un main() di prova che verifichi le funzionalità realizzate; Problemi la cui soluzione richiede la progettazione di una a più classi con l'uso di una Frame ed eventi GUI Si desidera costruire un programma che analizzi (filtri) un testo contenuto in un campo di una frame e mostri le elaborazioni in un secondo campo della frame alla pressione dell'opportuno pulsante." Richieste a: o si immagini che il testo nel primo campo sia immesso dall'utente e il filtro esegua una banale ricopiatura del testo di input nel secondo campo alla pressione di un button. o progettare una classe Filtro che abbia un metodo mostra() che restituisce il testo di input inalterato. o progettare la GUI (Finestra) con i due campi e il button che attiva il comando mostra(); o progettare un main() che attivi e verifichi il funzionamento. Richieste b: o si immagini che il testo nel primo campo sia, come nella richiesta (a), immesso dall'utente e il filtro esegua una banale ricopiatura del testo di input nel secondo campo alla pressione di un button. o Usare la classe Leggi_mostra progettata nell'esercizio o progettare la GUI con i due campi e il button che attiva il comando mostra(); o progettare un main() che attivi e verifichi il funzionamento. Richiesta c: o immagini che il testo nel primo campo sia, come nella richiesta (a), immesso dall'utente e il filtro scriva nel secondo campo il messaggio "ci sono/non ci sono parole o numeri". Il filtro deve accertare, alla pressione di un button, se il primo campo ha parole o numeri. o Usare la classe progettata nell'esercizio o progettare la GUI con i due campi e il button che attiva il comando;

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

/** * VETTORE DINAMICO elementi */ private Vector elementi; /** * METODO COSTRUTTORE */ public coda() { elementi=new Vector(); }

/** * VETTORE DINAMICO elementi */ private Vector elementi; /** * METODO COSTRUTTORE */ public coda() { elementi=new Vector(); } import java.util.*; class coda * Questa classe contiene tutti i metodi per la gestione della coda * @author D'Ambrosio Giovanni Classe 4D I.T.I.S. Grottaminarda * @version 26/02/2010 * VETTORE DINAMICO

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

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

Il modello client/server consente a due processi di condividere risorse e di cooperare per il raggiungimento di un obiettivo.

Il modello client/server consente a due processi di condividere risorse e di cooperare per il raggiungimento di un obiettivo. In una rete di ampie dimensioni, ciascuna sottorete (es. LAN, WAN) è connessa ad altre sottoreti tramite router. Internet è un insieme di reti connesse tra loro. Essenzialmente, in una rete alcune macchine

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

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

! Programmazione strutturata ! TDA. ! Classi, incapsulamento, ! OO. ! Scambio messaggi, eredità, polimorfismo. ! OO in Java

! Programmazione strutturata ! TDA. ! Classi, incapsulamento, ! OO. ! Scambio messaggi, eredità, polimorfismo. ! OO in Java Riassunto Rassegna API - 1 Stefano Mizzaro Dipartimento di matematica e informatica Università di Udine http://www.dimi.uniud.it/mizzaro/ mizzaro@uniud.it Programmazione, lezione 17 3 maggio 2015! Programmazione

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

Semplici Algoritmi di Ordinamento

Semplici Algoritmi di Ordinamento Fondamenti di Informatica Semplici Algoritmi di Ordinamento Fondamenti di Informatica - D. Talia - UNICAL 1 Ordinamento di una sequenza di elementi Esistono molti algoritmi di ordinamento. Tutti ricevono

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

Un oggetto per la lettura dalla tastiera

Un oggetto per la lettura dalla tastiera Fondamenti di informatica Oggetti e Java ottobre 2012 1 Un oggetto per la lettura dalla tastiera Le API di Java hanno un oggetto System.in che rappresenta la tastiera del calcolatore, ma che non è semplice

Dettagli

Manipolazione di testi: espressioni regolari

Manipolazione di testi: espressioni regolari Manipolazione di testi: espressioni regolari Un meccanismo per specificare un pattern, che, di fatto, è la rappresentazione sintetica di un insieme (eventualmente infinito) di stringhe: il pattern viene

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

Programmazione di rete in Java

Programmazione di rete in Java Programmazione di rete in Java Reti di calcolatori Una rete di calcolatori è un sistema che permette la condivisione di dati informativi e risorse (sia hardware sia software) tra diversi calcolatori. Lo

Dettagli

Fondamenti di Informatica. Dichiarazione, creazione e gestione di array in Java

Fondamenti di Informatica. Dichiarazione, creazione e gestione di array in Java Fondamenti di Informatica Dichiarazione, creazione e gestione di array in Java Array in Java - creazione La creazione fa una inizializzazione implicita: num = new int[10]; con valore 0 per int e double,

Dettagli

R.Focardi Laboratorio di Ingegneria del Software 6. 1

R.Focardi Laboratorio di Ingegneria del Software 6. 1 Networking Java permette comunicazioni in rete basate sul concetto di socket, che permette di vedere la comunicazione in termini di flusso (stream), in modo analogo all input-output di file, usando Stream

Dettagli

Oggetti Lezione 3. aspetti generali e definizione di classi I

Oggetti Lezione 3. aspetti generali e definizione di classi I Programmazione a Oggetti Lezione 3 Il linguaggio Java: aspetti generali e definizione di classi I Sommario Storia e Motivazioni Definizione di Classi Campi e Metodi Istanziazione di oggetti Introduzione

Dettagli

Introduzione ad Access

Introduzione ad Access Introduzione ad Access Luca Bortolussi Dipartimento di Matematica e Informatica Università degli studi di Trieste Access E un programma di gestione di database (DBMS) Access offre: un supporto transazionale

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

Editor vi. Editor vi

Editor vi. Editor vi Editor vi vi 1 Editor vi Il vi è l editor di testo standard per UNIX, è presente in tutte le versioni base e funziona con qualsiasi terminale a caratteri Permette di visualizzare una schermata alla volta

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

Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati

Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati Condizione di sincronizzazione Qualora si voglia realizzare una determinata politica di gestione delle risorse,la decisione se ad

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

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

Programmazione Java: Variabili membro, Metodi La parola chiave final

Programmazione Java: Variabili membro, Metodi La parola chiave final Programmazione Java: Variabili membro, Metodi La parola chiave final romina.eramo@univaq.it http://www.di.univaq.it/romina.eramo/tlp Roadmap Definire una classe» Variabili membro» Metodi La parola chiave

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

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

Comandi filtro: sed. Se non si specificano azioni, sed stampa sullo standard output le linee in input, lasciandole inalterate.

Comandi filtro: sed. Se non si specificano azioni, sed stampa sullo standard output le linee in input, lasciandole inalterate. Comandi filtro: sed Il nome del comando sed sta per Stream EDitor e la sua funzione è quella di permettere di editare il testo passato da un comando ad un altro in una pipeline. Ciò è molto utile perché

Dettagli

Inter Process Communication. Laboratorio Software 2008-2009 C. Brandolese

Inter Process Communication. Laboratorio Software 2008-2009 C. Brandolese Inter Process Communication Laboratorio Software 2008-2009 C. Brandolese Introduzione Più processi o thread Concorrono alla relaizzazione di una funzione applicativa Devono poter realizzare Sincronizzazione

Dettagli

La fase di realizzazione. La fase di realizzazione (cont.) Traduzione in Java del diagramma degli use case

La fase di realizzazione. La fase di realizzazione (cont.) Traduzione in Java del diagramma degli use case Università degli Studi di Roma La Sapienza Corso di Laurea in Ingegneria dell Informazione Sede di Latina Corso di Laurea in Ingegneria dell Informazione Consorzio Nettuno La fase di realizzazione si occupa

Dettagli

Finestra.java. static String nomicolonne[] = {"ind.","cognome","nome","telefono","e-mail"}; //nomi delle colonne della tabella

Finestra.java. static String nomicolonne[] = {ind.,cognome,nome,telefono,e-mail}; //nomi delle colonne della tabella import java.awt.*; import java.awt.event.actionevent; import java.awt.event.actionlistener; import java.awt.event.windowevent; import java.awt.event.windowlistener; import java.io.*; import java.util.*;

Dettagli

RICORSIONE - schema ricorsivo (o induttivo) si esegue l'azione S, su un insieme di dati D, mediante eventuale esecuzione di

RICORSIONE - schema ricorsivo (o induttivo) si esegue l'azione S, su un insieme di dati D, mediante eventuale esecuzione di RICORSIONE - schema ricorsivo (o induttivo) si esegue l'azione S, su un insieme di dati D, mediante eventuale esecuzione di esempio CERCA 90 NEL SACCHETTO = estrai num Casi num 90 Effetti CERCA 90 NEL

Dettagli

esercizi Esercizi / problemi

esercizi Esercizi / problemi Sistemi informativi applicati (reti di calcolatori): esercizi 1 Esercizi / problemi 1. Creare un applicazione che calcoli la media aritmetica dei seguenti valori interi: 35, 117, 23 e ne visualizzi il

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

Classi ed Oggetti in JAVA

Classi ed Oggetti in JAVA Classi ed Oggetti in JAVA Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dell Informazione Università di Siena Via Roma 56 53100 SIENA Uff. 0577233606 rigutini@dii.unisi.it www.dii.unisi.it/~rigutini/

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

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

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

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

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

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

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

Serduino - SERRA CON ARDUINO

Serduino - SERRA CON ARDUINO Serduino - SERRA CON ARDUINO 1 Componenti Facchini Riccardo (responsabile parte hardware) Guglielmetti Andrea (responsabile parte software) Laurenti Lorenzo (progettazione hardware) Rigolli Andrea (reparto

Dettagli

INFORMATIVA FINANZIARIA

INFORMATIVA FINANZIARIA Capitolo 10 INFORMATIVA FINANZIARIA In questa sezione sono riportate le quotazioni e le informazioni relative ai titoli inseriti nella SELEZIONE PERSONALE attiva.tramite la funzione RICERCA TITOLI è possibile

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

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

Tipicamente un elaboratore è capace di trattare domini di dati di tipi primitivi

Tipicamente un elaboratore è capace di trattare domini di dati di tipi primitivi TIPI DI DATO Tipicamente un elaboratore è capace di trattare domini di dati di tipi primitivi numeri naturali, interi, reali caratteri e stringhe di caratteri e quasi sempre anche collezioni di oggetti,

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

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

Laboratorio di Sistemi Fattoriale di un numero Jsp [Java]

Laboratorio di Sistemi Fattoriale di un numero Jsp [Java] Desideriamo realizzare una applicazione web che ci consenta di calcolare il fattoriale di un numero. L'esercizio in sé non particolarmente difficile, tuttavia esso ci consentirà di affrontare il problema

Dettagli

I name server DNS. DNS: Domain Name System. Esempio di DNS. DNS: Root name server. DNS: queries ripetute

I name server DNS. DNS: Domain Name System. Esempio di DNS. DNS: Root name server. DNS: queries ripetute DNS: Domain Name System I name DNS Persone: identificatori: CF, nome, Numero di Passaporto Host e router Internet: Indirizzo IP ( bit) - usato per instradare i pacchetti nome, per es., massimotto.diiie.unisa.it

Dettagli

How to Develop Accessible Linux Applications

How to Develop Accessible Linux Applications How to Develop Accessible Linux Applications Sharon Snider Copyright 2002 IBM Corporation v1.1, 2002-05-03 Diario delle Revisioni Revisione v1.1 2002-05-03 Revisionato da: sds Convertito in DocBook XML

Dettagli

Pila.h versione 6. class Pila { private: int marker; int * contenuto; public:

Pila.h versione 6. class Pila { private: int marker; int * contenuto; public: 1 Pila.h versione 6 struct Pila { private: int size; int defaultgrowthsize; int marker; int * contenuto; void cresci(int increment); public: Pila(int initialsize) ; Pila(); ~Pila() ; void copy(pila * to)

Dettagli

Dipartimento del Tesoro

Dipartimento del Tesoro Dipartimento del Tesoro POWER POINT AVANZATO Indice 1 PROGETTAZIONE DELL ASPETTO...3 1.2 VISUALIZZARE GLI SCHEMI...4 1.3 CONTROLLARE L ASPETTO DELLE DIAPOSITIVE CON GLI SCHEMI...5 1.4 SALVARE UN MODELLO...6

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

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

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

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

MIPS Instruction Set 2

MIPS Instruction Set 2 Laboratorio di Architettura 15 aprile 2011 1 Architettura Mips 2 Chiamata a Funzione 3 Esercitazione Registri MIPS reference card: http://refcards.com/docs/waetzigj/mips/mipsref.pdf 32 registri general

Dettagli

Sottoprogrammi: astrazione procedurale

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

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

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

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

2. GESTIONE DOCUMENTI NON SBN

2. GESTIONE DOCUMENTI NON SBN Istituto centrale per il catalogo unico delle biblioteche italiane e per le informazioni bibliografiche APPLICATIVO SBN-UNIX IN ARCHITETTURA CLIENT/SERVER 2. GESTIONE DOCUMENTI NON SBN Manuale d uso (Versione

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

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

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

Inter-Process Communication

Inter-Process Communication Inter-Process Communication C. Baroglio a.a. 2002-2003 1 Introduzione In Unix i processi possono essere sincronizzati utilizzando strutture dati speciali, appartenti al pacchetto IPC (inter-process communication).

Dettagli

CATTURARE LO SCHERMO INTERO O LA FINESTRA ATTIVA

CATTURARE LO SCHERMO INTERO O LA FINESTRA ATTIVA CATTURARE LO SCHERMO INTERO O LA FINESTRA ATTIVA Supponiamo di voler eseguire una istantanea del nostro desktop, quella che in gergo si chiama Screenshot (da screen, schermo, e shot, scatto fotografico).

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

Comandi di Input/Output in Matlab

Comandi di Input/Output in Matlab Comandi di Input/Output in Matlab Il comando format controlla la configurazione numerica dei valori esposta da MAT- LAB; il comando regola solamente come i numeri sono visualizzati o stampati, non come

Dettagli

Le formule possono essere scritte utilizzando un insieme di funzioni predefinite che Excel mette a disposizione, raggruppate per argomento.

Le formule possono essere scritte utilizzando un insieme di funzioni predefinite che Excel mette a disposizione, raggruppate per argomento. Excel: le funzioni Le formule possono essere scritte utilizzando un insieme di funzioni predefinite che Excel mette a disposizione, raggruppate per argomento. DEFINIZIONE: Le funzioni sono dei procedimenti

Dettagli

Energy Studio Manager Manuale Utente USO DEL SOFTWARE

Energy Studio Manager Manuale Utente USO DEL SOFTWARE Energy Studio Manager Manuale Utente USO DEL SOFTWARE 1 ANALYSIS.EXE IL PROGRAMMA: Una volta aperto il programma e visualizzato uno strumento il programma apparirà come nell esempio seguente: Il programma

Dettagli

CORSO DI ALGORITMI E PROGRAMMAZIONE. JDBC Java DataBase Connectivity

CORSO DI ALGORITMI E PROGRAMMAZIONE. JDBC Java DataBase Connectivity CORSO DI ALGORITMI E PROGRAMMAZIONE JDBC Java DataBase Connectivity Anno Accademico 2002-2003 Accesso remoto al DB Istruzioni SQL Rete DataBase Utente Host client Server di DataBase Host server Accesso

Dettagli

Trattamento aria Regolatore di pressione proporzionale. Serie 1700

Trattamento aria Regolatore di pressione proporzionale. Serie 1700 Trattamento aria Serie 7 Serie 7 Trattamento aria Trattamento aria Serie 7 Serie 7 Trattamento aria +24VDC VDC OUTPUT MICROPROCESS. E P IN EXH OUT Trattamento aria Serie 7 Serie 7 Trattamento aria 7 Trattamento

Dettagli

Ricorsione. Corso di Fondamenti di Informatica

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

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

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

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

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

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

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

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

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

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

Form Designer Guida utente DOC-FD-UG-IT-01/01/12

Form Designer Guida utente DOC-FD-UG-IT-01/01/12 Form Designer Guida utente DOC-FD-UG-IT-01/01/12 Le informazioni contenute in questo manuale di documentazione non sono contrattuali e possono essere modificate senza preavviso. La fornitura del software

Dettagli

l Editor vi vi (visual editor) è stato scritto per essere utilizzabile con qualsiasi tipo di terminale.

l Editor vi vi (visual editor) è stato scritto per essere utilizzabile con qualsiasi tipo di terminale. l Editor vi Negli ambienti Unix esistono molti editor di testo diversi; tuttavia vi è l unico che siamo sicuri di trovare in qualsiasi variante di Unix. vi (visual editor) è stato scritto per essere utilizzabile

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

Generalizzazione di funzioni e di classi. Macro come funzioni generiche

Generalizzazione di funzioni e di classi. Macro come funzioni generiche Alessio Bechini - Corso di - Generalizzazione di funzioni e di classi Il meccanismo di template Macro come funzioni generiche long longmax(long x, long y) { Possibile soluzione int intmax(int x, int y)

Dettagli

WORD (livello avanzato): Struttura di un Documento Complesso. Struttura di un Documento Complesso

WORD (livello avanzato): Struttura di un Documento Complesso. Struttura di un Documento Complesso Parte 5 Adv WORD (livello avanzato): Struttura di un Documento Complesso 1 di 30 Struttura di un Documento Complesso La realizzazione di un libro, di un documento tecnico o scientifico complesso, presenta

Dettagli

Luca Mari, Sistemi informativi applicati (reti di calcolatori) appunti delle lezioni. Architetture client/server: applicazioni client

Luca Mari, Sistemi informativi applicati (reti di calcolatori) appunti delle lezioni. Architetture client/server: applicazioni client Versione 25.4.05 Sistemi informativi applicati (reti di calcolatori): appunti delle lezioni Architetture client/server: applicazioni client 1 Architetture client/server: un esempio World wide web è un

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

Dispense di Informatica Anno Scolastico 2008/2009 Classe 3APS. Dal Problema all'algoritmo

Dispense di Informatica Anno Scolastico 2008/2009 Classe 3APS. Dal Problema all'algoritmo stituto Tecnico Statale Commerciale Dante Alighieri Cerignola (FG) Dispense di nformatica Anno Scolastico 2008/2009 Classe 3APS Dal Problema all'algoritmo Pr.: 001 Ver.:1.0 Autore: prof. Michele Salvemini

Dettagli

PROGRAMMAZIONE ORIENTATA AGLI OGGETTI in C++

PROGRAMMAZIONE ORIENTATA AGLI OGGETTI in C++ PROGRAMMAZIONE ORIENTATA AGLI OGGETTI in C++ Classi ed oggetti. Classi derivate, ereditarietà e polimorfismo. Template Capitoli 12, 13, 14 Luis Joyannes Aguilar. Fondamenti di Programmazione in C++. Algoritmi,

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

La procedura di registrazione prevede cinque fasi: Fase 4 Conferma

La procedura di registrazione prevede cinque fasi: Fase 4 Conferma Guida Categoria alla registrazione StockPlan Connect Il sito web StockPlan Connect di Morgan Stanley consente di accedere e di gestire online i piani di investimento azionario. Questa guida offre istruzioni

Dettagli

Gestione dinamica di una pila

Gestione dinamica di una pila Gestione dinamica di una pila Una pila o stack è una lista lineare a lunghezza variabile in cui inserimenti (push) ed estrazioni (pop) vengono effettuate ad un solo estremo, detto testa (top) della pila.

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