26/11/2004Laboratorio di Programmazione - Luca Tesei1 Input/Output Redirecting, scomposizione dellinput, uso di file.

Slides:



Advertisements
Presentazioni simili
File Linguaggio C.
Advertisements

INFORMATICA Altre Istruzioni di I/O
Java Stream e File.
Java Stream e File. La classe File Per operare con lintero file java mette a disposizione la classe File Per utilizzare la classe File è necessario importare.
Array multidimensionali
If a cascata, switch, operatori logici
2/11/2004Laboratorio di Programmazione - Luca Tesei1 Progettazione Fase di progettazione di unapplicazione Fase di implementazione.
Linguaggi Regolari e Linguaggi Liberi
12/11/2004Laboratorio di Programmazione - Luca Tesei1 Caratteri – Input da Console Il tipo char Input dallo standard input.
26/10/2004Laboratorio di Programmazione - Luca Tesei1 Variabili e Oggetti Lo spazio di memoria di Java Le API di Java.
3/12/2004Laboratorio di Programmazione - Luca Tesei1 Sequenze di lunghezza variabile ArrayList Operazioni Ricerche.
5/11/2004Laboratorio di Programmazione - Luca Tesei1 Esercizi Su Progettazione e Implementazione di classi.
29/10/2004Laboratorio di Programmazione - Luca Tesei1 Metodi e variabili istanza Definizione e chiamata di metodi Uso delle variabili istanza Documentazione.
9/11/2004Laboratorio di Programmazione - Luca Tesei1 Tipi numerici di base - Costanti Interi e decimali Definizione di costanti.
22/10/2004Programmazione e Laboratorio di Programmazione – Luca Tesei1 Laboratorio – Primo Impatto Scrivere un semplice programma I primi concetti.
Programmazione e Laboratorio di Programmazione – Luca Tesei1 La Programmazione Cosè la programmazione? Concetti preliminari.
29/11/2004Laboratorio di Programmazione - Luca Tesei1 Ancora sulla progettazione/Pacchetti Concetti di coesione/accoppiamento/coerenza Uso dei package.
2/11/2004Laboratorio di Programmazione - Luca Tesei1 Punto della situazione Da dove veniamo, dove andiamo.
MATLAB. Scopo della lezione Programmare in Matlab Funzioni Cicli Operatori relazionali Esercizi vari.
Algoritmi e Programmazione
Informatica Generale Marzia Buscemi
1 Informatica Generale Susanna Pelagatti Ricevimento: Mercoledì ore presso Dipartimento di Informatica, Via Buonarroti,
1 System Call per Comunicazione tra Processi Pipe.
Programmazione Procedurale in Linguaggio C++
1 Istruzioni, algoritmi, linguaggi. 2 Algoritmo per il calcolo delle radici reali di unequazione di 2 o grado Data lequazione ax 2 +bx+c=0, quali sono.
9/12/2004Laboratorio di Programmazione - Luca Tesei1 Ereditarietà
Argomenti dalla linea dei comandi Gli argomenti possono essere passati a qualsiasi funzione di un programma, compresa la main(), direttamente dalla linea.
File.
Informatica 2. Concetti fondamentali di programmazione Programmare vuol dire scrivere un algoritmo in un linguaggio che faccia funzionare un calcolatore.
Fisica Computazionale I - 51 OPERAZIONI DI INPUT/OUTPUT Le operazioni di input/output sono estremamente complesse perche' implicano una sostanziale interazione.
1 Corso di Informatica (Programmazione) Lezione 13 (21 novembre 2008) Programmazione in Java: stringhe e array.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Le stringhe di caratteri in Java Anno Accademico 2009/2010.
Corso di Laurea in Biotecnologie Informatica (Programmazione)
Cosè un programma? LALA PROGRAMMAZIONE PROGRAMMAZIONELALA PROGRAMMAZIONE PROGRAMMAZIONE UN ELENCO DI ISTRUZIONI, APPARTENENTI A UN BEN DEFINITO LINGUAGGIO,
Introduzione agli stream e alle classi
Array bidimensionali Paragrafo5.
Scomposizione di stringhe
Il linguaggio Fortran 90: 4. Array: Vettori e Matrici
Strutture di controllo in C -- Flow Chart --
Esercizi C sui tipi definiti dall’utente
I File.
GESTIONE DEI FILE Per poter mantenere disponibili i dati tra le diverse esecuzioni di un programma (persi-stenza dei dati) è necessario poterli archi-viare.
Corso di PHP.
4 Tipi di dati & variabili
Programmazione in Java (9) Mauro Lorenzutti. 30/09/2005Corso Java - Mauro Lorenzutti2 Scaletta I/O Evoluto Serializzazione Comunicazioni via socket JUnit.
1 Gestione dei File. 2 Perché i file? Sono strutture dati persistenti Sono solitamente memorizzati sui dischi –Si usano dall'interno dei programmi Realizzano.
11/11/2004Laboratorio di Programmazione - Luca Tesei1 Operazioni numeriche - Input Espressioni, funzioni matematiche, classi involucro, Acquisizione di.
BIOINFO3 - Lezione 201 Come in ogni corso di introduzione ad un linguaggio di programmazione, proviamo a scrivere lormai celebre primo programma di prova.
REDIREZIONE INPUT E OUTPUT
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
Sviluppare un programma in C che, dato un array da 100 elementi interi caricato con numeri casuali compresi tra [10,100], sia in grado di cercare il valore.
Corso JAVA Lezione n° 11 Istituto Statale di Istruzione Superiore “F. Enriques”
Corso JAVA Lezione n° 12 Istituto Statale di Istruzione Superiore “F. Enriques”
Appunti di Java (J2SDK 1.4.2, JDK 1.6.0) prof. Antonella Schiavon settembre 2009.
15/11/2004Laboratorio di Programmazione - Luca Tesei1 Costrutto condizionale Scelte, blocchi.
Lezione 3 Struttura lessicale del linguaggio
Ingresso e uscita in Java F. Bombi 10 ottobre 2002.
Esercitazione su Vector. Permette di definire collezioni di dati generiche, che sono in grado di memorizzare elementi di ogni sottotipo di Object Definito.
Capitolo 6 Iterazione Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies.
Lez. 9 (13/14)Elementi di Programmazione1 Lezione 9 Valutazione di espressioni File di testo sequenziali.
Input-Output 16 Maggio Nei programmi sviluppati sino ad oggi abbiamo usato * output su schermo (con System.out.print e System.out.print ) * input.
Operatori di incremento e decremento
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
10/10/20021 Ingresso e uscita in Java F. Bombi 10 ottobre 2002.
Stringhe In linguaggio C. Stringhe  Un insieme di caratteri in sequenza forma una stringa.  Alcuni linguaggi definiscono per le stringhe uno specifico.
1 Input / Output Spesso un programma deve acquisire dati da una sorgente esterna o inviare informazioni a una destinazione esterna. L’informazione può.
13/08/02Input 1 Interagire con il computer Da tastiera Da riga di comando Funzioni di conversione.
1 Input / Output Spesso un programma deve acquisire dati da una sorgente esterna o inviare informazioni a una destinazione esterna. L’informazione puo’
Input in Java. Uso Scanner Un oggetto per la lettura dalla tastiera Piuttosto, per rappresentare la tastiera del nostro calcolatore useremo un oggetto.
Transcript della presentazione:

26/11/2004Laboratorio di Programmazione - Luca Tesei1 Input/Output Redirecting, scomposizione dellinput, uso di file

26/11/2004Laboratorio di Programmazione - Luca Tesei2 Lettura di una serie di numeri: Un altro esempio di ciclo e mezzo. Schema: boolean finito = false; while (!finito) { String input = legge un dato ; if ( i dati sono finiti ) finito = true; else { elabora il dato }

26/11/2004Laboratorio di Programmazione - Luca Tesei3 Un programma che analizza una serie di valori Definiamo una classe DataSet i cui oggetti sono possono acquisire dati tramite un metodo add( dato ) e restituire in ogni momento la media o il massimo dei dati inseriti fino a quel momento Altri metodi: – getAverage – getMaximum Vedere implementazione nel codice allegato (DataSet.java)

26/11/2004Laboratorio di Programmazione - Luca Tesei4 Inserimento dati e test Vediamo un programma che usa lo schema precedente per prendere una serie di dati e inserirli in un oggetto della classe DataSet Poi chiamiamo i metodi per la media e il massimo Consultare il codice allegato (InputTestLoop.java)

26/11/2004Laboratorio di Programmazione - Luca Tesei5 Inserimento dati: quando i dati sono tanti È molto noioso e ripetitivo inserire dati in maniera interattiva se i dati sono molti Sarebbe utile poter inserire tutti i dati che servono in un file di testo e poi fare in modo che il programma li prenda da lì Un modo molto semplice per fare questo è quello di utilizzare la lettura di dati da console e poi, in fase di esecuzione del programma, reindirizzare linput da un file Vedi codice allegato: (InputTestLoopRedirect.java)

26/11/2004Laboratorio di Programmazione - Luca Tesei6 Chiusura dellinput Per poter utilizzare il programma InputTestLoopRedirect occorre lanciarlo da console (prompt dei comandi Dos o shell di Linux) prompt#> java InputTestLoopRedirect Inserisci un valore numerico. Chiudi linput per terminare 16 Inserisci un valore numerico. Chiudi linput per terminare 32 Inserisci un valore numerico. Chiudi linput per terminare ^Z Media dei dati = 24.0 Valore massimo = 32.0

26/11/2004Laboratorio di Programmazione - Luca Tesei7 Chiusura dellinput In Dos/Windows per chiudere linput da tastiera basta premere Ctrl-z In Linux/Unix invece si usa Ctrl-d Unalternativa è scrivere un file di testo in cui in ogni riga mettiamo un valore numerico Poi redirigiamo linput del programma su questo file, invece che sulla tastiera: Ad esempio supponiamo di avere scritto i dati in un file datiInputTestLoopRedirect.txt

26/11/2004Laboratorio di Programmazione - Luca Tesei8 Redirecting dellinput #> java InputTestLoopRedirect < datiInputTestLoopRedirect.txt Inserisci un valore numerico. Chiudi linput per terminare Media dei dati = 24.0 Valore massimo = 32.0 Il file di testo deve contenere esclusivamente le seguenti due righe: La chiusura dellinput viene segnalata quando viene incontrato il carattere di EOF (fine file)

26/11/2004Laboratorio di Programmazione - Luca Tesei9 Scomposizione di stringhe E se volessimo, per comodità, inserire i valori nel file di testo anche su una stessa riga? Ad esempio: Il metodo readLine() della classe BufferedReader legge una intera riga per volta Se proviamo a fare il parsing di una riga con diversi numeri separati da spazi bianchi il metodo parseDouble solleva uneccezione

26/11/2004Laboratorio di Programmazione - Luca Tesei10 Scomposizione di stringhe Ci viene in aiuto la classe java.util.StringTokenizer Un oggetto di questa classe va costruito passandogli una certa stringa Dopodiché è possibile utilizzare la coppia di metodi –hasMoreToken() –nextToken() per prendere un token, cioè un insieme di caratteri contigui (non separati da spazi tab o newline), per volta fino allesaurimento della stringa stessa Consultare il codice allegato InputTestLoopToken.java

26/11/2004Laboratorio di Programmazione - Luca Tesei11 Scomposizione Se si prova a chiamare nextToken() senza che ci siano token viene sollevata uneccezione: si deve sempre controllare prima con hasMoreToken() :... StringTokenizer tokenizer = new StringTokenizer(input); while (tokenizer.hasMoreTokens()) { String token = tokenizer.nextToken(); double x = Double.parseDouble(token); data.add(x); }...

26/11/2004Laboratorio di Programmazione - Luca Tesei12 Redirecting delloutput Supponiamo di scrivere il file di testo di prima: Supponiamo di chiamarlo datiInputTestLoopToken.txt Lanciando il programma con il redirecting dellinput si ottengono comunque quattro stringhe in output che corrispondono alle richieste dei dati (utili solo nel caso che non si usi il redirect)

26/11/2004Laboratorio di Programmazione - Luca Tesei13 Redirecting delloutput #> java InputTestLoopToken < datiInputTestLoopToken.txt Inserisci un valore numerico. Chiudi linput per terminare Media dei dati = Valore massimo = Tutto questo output può essere anchesso reindirizzato su un file di testo, ad esempio output.txt: #> java InputTestLoopToken output.txt

26/11/2004Laboratorio di Programmazione - Luca Tesei14 Lettura e scrittura di file Naturalmente possiamo anche inserire esplicitamente nei nostri programmi la lettura di input da un file e la scrittura di output su un file Il tutto senza utilizzare il redirecting dello standard input o output Vediamo come è stato modellato il concetto di stream in Java e le varie classi per leggere/scrivere stream

26/11/2004Laboratorio di Programmazione - Luca Tesei15 Stream Uno stream è un flusso di entità Uno stream è di input se le entità fluiscono dallesterno verso la nostra applicazione Uno stream è di output se le entità fluiscono dalla nostra applicazione verso lesterno Generalmente le entità che scorrono in uno stream possono essere viste in due modi: – caratteri – byte

26/11/2004Laboratorio di Programmazione - Luca Tesei16 Stream Gli stream servono per memorizzare dati o per leggere dati precedentemente memorizzati Se i dati sono in formato testo allora sono rappresentati da caratteri, altrimenti da byte rappresenta il numero in un file di testo è una sequenza di 4 byte che rappresenta il numero (12345 = 48 * ) in un file binario

26/11/2004Laboratorio di Programmazione - Luca Tesei17 Le classi da usare in java.io Gli oggetti delle classi FileReader e FileWriter rappresentano file di testo in input o in output Gli oggetti delle classi FileInputStream e FileOutputString rappresentano file binari in input o in output Alla creazione di uno qualsiasi di questi oggetti va passata al cotruttore una stringa contentente il path+nome del file da cercare

26/11/2004Laboratorio di Programmazione - Luca Tesei18 Apertura di file FileReader reader = new FileReader(input.txt); Apre un file di testo in lettura FileWriter writer = new FileWriter(output.txt); Apre un file di testo in scrittura FileInputStream inputStream = new FileInputStream(input.dat); Apre un file binario in lettura FileOutputStream outputStream = new FileOutputStream(output.dat); Apre un file binario in scrittura

26/11/2004Laboratorio di Programmazione - Luca Tesei19 Lettura Sia FileInputStream che FileReader hanno un metodo read() che serve per leggere un byte o un carattere (rispettivamente) alla volta In ogni caso entrambi i metodi restituiscono un int: –se il valore restituito è –1 allora è stata raggiunta la fine del file –Se il valore restituito è non negativo allora si può fare il casting a byte o a char (rispettivamente) per ottenere il valore letto

26/11/2004Laboratorio di Programmazione - Luca Tesei20 Lettura File di testo: int next = reader.read(); char c; if (next != -1) c = (char) next; // c è il carattere letto else fine file File binario: int next = inputStream.read(); byte b; if (next != -1) b = (byte) next; // b è il byte letto else fine file

26/11/2004Laboratorio di Programmazione - Luca Tesei21 Scrittura File di testo int char =...; writer.write(c); File binario: byte b =...; outputStream.write(b);

26/11/2004Laboratorio di Programmazione - Luca Tesei22 Chiusura Ogni file aperto in qualsiasi modalità va chiuso quando il programma ha finito di operare su di esso: riferimentoAlFile.close();

26/11/2004Laboratorio di Programmazione - Luca Tesei23 Agevolazioni per i file di testo Leggere o scrivere un carattere per volta nei file di testo può risultare scomodo Possiamo incapsularli in oggetti più sofisticati che realizzano un interfaccia a linee È quello che facciamo sempre, ad esempio, quando leggiamo linee di testo dallo standard input La classe da usare per i file di testo in lettura la conosciamo già: è BufferedReader

26/11/2004Laboratorio di Programmazione - Luca Tesei24 Agevolazioni per i file di testo FileReader file = new FileReader(input.txt); BufferedReader in = new BufferedReader(file); String inputLine = in.readLine(); Già lo conosciamo: otteniamo una linea di testo con il metodo readLine()

26/11/2004Laboratorio di Programmazione - Luca Tesei25 Agevolazioni per i file di testo FileWriter file = new FileWriter(output.txt); PrintWriter out = new PrintWriter(file); out.println(29.25); out.println(new Rectangle(5,10,20,30)); out.println(Hello, World!); La classe PrintWriter è molto simile alla classe PrintStream che già conosciamo (è la classe a cui appartiene System.out ) Il metodo println si usa nel modo che conosciamo

26/11/2004Laboratorio di Programmazione - Luca Tesei26 Ricerca di un file nelle cartelle Può essere utile, quando si vuole aprire un file in input, presentare allutente la classica finestra di selezione di un file che gli permette di navigare tra le sue cartelle Ci viene in aiuto la classe javax.swing.JFileChooser

26/11/2004Laboratorio di Programmazione - Luca Tesei27 Ricerca di un file nelle cartelle JFileChooser chooser = new JFileChooser(); FileReader in = null; if (chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) { File selectedFile = chooser.getSelectedFile(); in = new FileReader(selectedFile); } Vedere il codice allegato MyTextCopy.java

26/11/2004Laboratorio di Programmazione - Luca Tesei28 Esercizio Modificare il programma MyTextCopy in modo che possa copiare file binari qualsiasi

26/11/2004Laboratorio di Programmazione - Luca Tesei29 Esercizio Scrivere un programma che prenda in input un certo numero n di numeri, li memorizzi in un array, poi ordini larray e stampi larray ordinato in output Suggerimento: usare due cicli for annidati ed effettuare uno scambio fra gli elementi a[i] e a[j] se a[i] > a[j] (Bubble Sort)

26/11/2004Laboratorio di Programmazione - Luca Tesei30 Esercizio Leggere da input una serie di numeri x i e memorizzarli in un array Calcolare la media dei valori Cercare il primo elemento dellarray minore o uguale alla media Calcolare la deviazione standard (attenti agli indici: nella formula partono da 1!)

26/11/2004Laboratorio di Programmazione - Luca Tesei31 Esercizio Scrivere una classe FactorGenerator che serva a calcolare tutti i fattori di un certo numero dato Ad esempio per il numero 150 deve dare i fattori: Mettere a disposizione i metodi nextFactor() e hasMoreFactor()

26/11/2004Laboratorio di Programmazione - Luca Tesei32 Esercizio Scrivere una classe PrimeGenerator che permetta di calcolare tutti i numeri primi minori di un certo numero dato Ad esempio per 20 deve stampare: Mettere a disposizione il metodo nextPrime()

26/11/2004Laboratorio di Programmazione - Luca Tesei33 Esercizio Determinare il valore di e elevato a un certo numero reale x utilizzando la seguente serie di potenze e fermando il calcolo quando laddendo attuale della somma diventa minore di una certa soglia fissata:

26/11/2004Laboratorio di Programmazione - Luca Tesei34 Esercizio Un array bidimensionale si dichiara nel seguente modo int a[][] = new int[3][3]; Rappresenta una tabella 3 per 3 di interi Il generico elemento in riga i e colonna j si indica con a[i][j] Le righe e le colonne vengono numerate a partire da 0 Continua....

26/11/2004Laboratorio di Programmazione - Luca Tesei35 Esercizio contd Scrivere un programma che utilizzi un array bidimensionale 3 per 3 come una scacchiera per il gioco del tris Il programma deve permettere a due utenti di specificare le proprie mosse alternativamente Il programma deve controllare se un utente ha fatto tris e proclamarlo vincitore Il programma non deve accettare mosse errate Continua...

26/11/2004Laboratorio di Programmazione - Luca Tesei36 Esercizio contd Scrivere una classe Scacchiera che gestisca la scacchiera con metodi per eseguire le mosse corrette, visualizzare la scacchiera corrente e per controllare se ci sono vincitori Scrivere poi una classe Tris che utilizzi la Scacchiera per far giocare i due giocatori

26/11/2004Laboratorio di Programmazione - Luca Tesei37 Esercizio Il gioco del Nim Ci sono n biglie in un mucchio Due giocatori prelevano a turno biglie dal mucchio Ad ogni mossa un giocatore deve prendere almeno una biglia e non può prenderne più della metà di quelle che sono attualmente nel mucchio Perde chi è costretto a prendere lultima biglia Continua...

26/11/2004Laboratorio di Programmazione - Luca Tesei38 Esercizio contd Scrivere un programma che giochi contro lutente al gioco del Nim Utilizzare la classe java.util.Random (vedere API) per generare numeri pseudocasuali Il programma deve seguire i seguenti passi: 1.Genera un numero casuale tra 10 e 100 che indica il numero iniziale di biglie 2.Genera un numero casuale tra 0 e 1 per decidere chi dei due giocatori inizia Continua...

26/11/2004Laboratorio di Programmazione - Luca Tesei39 Esercizio contd 3.Genera un numero casuale tra 0 e 1 per decidere se giocare in maniera stupida o utilizzare la strategia vincente Se gioca in maniera stupida ad ogni sua mossa il programma prenderà un numero casuale di biglie fra 1 e il massimo di biglie prelevabili La strategia vincente consiste in questo: ad ogni mossa il computer deve prelevare un numero di biglie tali che quelle che restano siano una potenza di due meno 1 (cioè 3, 6, 15, 31 o 63) Continua...

26/11/2004Laboratorio di Programmazione - Luca Tesei40 Esercizio contd È sempre una mossa valida tranne quando il numero di biglie disponibili è proprio una potenza di due meno 1 Se è questo il caso allora il computer toglie un numero casuale di biglie purché ammissibile Se il computer inizia la partita e decide di usare la strategia vincente risulterà imbattibile Negli altri casi si può vincere