Input/Output. Redirecting, scomposizione dell input, uso di file. 26/11/2004 Laboratorio di Programmazione - Luca Tesei 1

Documenti analoghi
Input e Output in Java

Istruzioni di ripetizione in Java 1

Flussi, lettori e scrittori

Esercizio 1: archivio CD e DVD

Esercitazione 4. Comandi iterativi for, while, do-while

Files in C++ Fondamenti di Informatica. R. Basili. a.a

IL CONCETTO DI FILE. È illecito operare oltre la fine del file.

Mini-Corso di Informatica

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1

Creazione, eliminazione, lettura e scrittura di file di testo

Input/output in C e in C++

L INTERFACCIA GRAFICA DI EXCEL

Fondamenti di Informatica. Algoritmi di Ricerca e di Ordinamento

VBA è un linguaggio di scripting derivato da Visual Basic, da cui prende il nome. Come ogni linguaggio ha le sue regole.

2) FILE BINARI: è una sequenza di byte avente una corrispondenza uno a uno con la sequenza ricevuta dal dispositivo esterno.

Gestione di files Motivazioni

20 - Input/Output su File

Un grafico utilizza i valori contenuti in un foglio di lavoro per creare una rappresentazione grafica delle relazioni esistenti tra loro;

EXCEL: FORMATTAZIONE E FORMULE

INDICE. Vista Libretto Livello Digitale 2. Importazione di dati da strumento 3. Inserisci File Vari 5. Compensazione Quote 5.

Data Import e Probabilità. Renato Mainetti

Sito web Telefono (Carmine)

Rappresentazione di dati: caratteri. Appunti a cura del prof. Ing. Mario Catalano

Individuazione di sottoproblemi

JAVA INTRODUZIONE C++ JDK e JRE API IDE (BLUEJ) JAVA Introduzione. Versioni e IDE DIAPOSITIVA 2 ALESSANDRO URSOMANDO

ISCRIZIONI E MAV ON-LINE

Linguaggio C: introduzione

Input/Output in Java

UD4 - MATLAB. M-file. Efficienza degli algoritmi. Formati d uscita

Il comando provoca il salvataggio dello stato e la terminazione dell esecuzione.

REGOLE DI BASE DEL GIOCO DEGLI SCACCHI

Un flusso (stream) è una astrazione che produce e/o consuma informazioni.

Il programma OCTAVE per l insegnamento dell algebra lineare nella Scuola Secondaria p. 1

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni

Video Scrittura (MS Word) Lezione 2 Tabelle e Immagini

per immagini guida avanzata Modificare il contenuto del foglio di lavoro Geometra Luigi Amato Guida Avanzata per immagini Excel

Introduzione a Visual Basic Lezione 2 Cicli e anomalie

Gestione risorse (Windows)

Informatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica

Programma per la generazione di filastrocche

Uso di metodi statici. Walter Didimo

PROGRAMMAZIONE STRUTTURATA

L accesso ai dispositivi esterni (tastiera, monitor, file,...) viene gestito mediante canali di comunicazione.

DESCRIZIONE CREAZIONE APP Si suddivide in 4 fasi di lavoro: 1. PIANIFICAZIONE; 2. PROGETTAZIONE; 3. SVILUPPO; 4. DISTRIBUZIONE.

LabVIEW parte II. Ing. Gianfranco Miele November 3, 2010

Codice Gray. (versione Marzo 2007)

Programmazione Orientata agli Oggetti in Linguaggio Java

Corso sul linguaggio Java

Corso di Fondamenti di Informatica Classi di istruzioni 2

ACCESS. Database: archivio elettronico, dotato di un programma di interfaccia che facilita la registrazione e la ricerca dei dati.

Array multidimensionali e stringhe

8.1 Anagrafica Imprese

Fondamenti VBA. Che cos è VBA

VISUAL BASIC FOR APPLICATION

Heap e code di priorità

FILE BINARI FILE BINARI

Corso di Laurea Ingegneria Informatica Laboratorio di Informatica

Laboratorio di Programmazione Lezione 1. Cristian Del Fabbro

Unità 2 I file binari

File di script. I File di Script Corso 2D - R.Virili 1

STRINGHE: ARRAY DI CARATTERI! a p e \0

Lettura e scrittura - Stream

Backup e ripristino Guida per l'utente

Informatica d ufficio

C. Horstmann Fondamenti di programmazione e Java 2 3^ edizione Apogeo

4 GLI ARRAY E LE STRINGHE

Funzioni condizionali

Alfa. Il GO tra gioco, matematica ed economia. Alla ricerca della strategia ottimale

Macchine RAM. API a.a. 2013/2014 Gennaio 27, 2014 Flavio Mutti, PhD

Introduzione alle macchine a stati (non definitivo)

Introduzione al C. Stream e disk file

Esame Laboratorio di Sistemi Operativi Cognome Nome Mat.

La segreteria didattica dovrà eseguire semplici operazioni per effettuare lo scrutinio:

Fortran in pillole : prima parte

Operazioni di input/output. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni

La codifica. dell informazione

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO VI.2014

7 Disegni sperimentali ad un solo fattore. Giulio Vidotto Raffaele Cioffi

SCRUTINIO ON LINE 1 PERIODO

ESERCITAZIONE MATLAB

Jclic Download e installazione

Grafici e Pagina web

Lab. di Sistemi Operativi - Esercitazione - Comandi Shell

3.5.1 PREPARAZ1ONE I documenti che si possono creare con la stampa unione sono: lettere, messaggi di posta elettronica, o etichette.

DOMANDE DI RIPASSO (aggiornato al 13/2)

Il linguaggio Java I file sequenziali

Il calcolatore. Architettura di un calcolatore (Hardware)

Alcune idee sui sistemi software e la loro architettura

Strutture di controllo in C++

COMPILAZIONE DELLA DOMANDA ON LINE

EXCEL. Alfabetizzazione Informatica Prof. GIUSEPPE PATTI

Word Formattazione del testo. Samuele Mazzolini

Traduzione e adattamento a cura di Gylas per Giochi Rari. Versione 1.1 Novembre

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre Negli esercizi proposti si utilizzano le seguenti classi:

Video Scrittura (MS Word) Lezione 1 Funzioni di base

Note sull implementazione in virgola fissa di filtri numerici

IEIM Esercitazione IX Ordinamento vettori e Struct Complesse. Alessandro A. Nacci -

Grafici. 1 Generazione di grafici a partire da un foglio elettronico

OPERAZIONI CHIUSURA E APERTURA Note operative

Regole del Sette e mezzo

Transcript:

Input/Output Redirecting, scomposizione dell input, uso di file 26/11/2004 Laboratorio di Programmazione - Luca Tesei 1

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/2004 Laboratorio di Programmazione - Luca Tesei 2

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/2004 Laboratorio di Programmazione - Luca Tesei 3

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/2004 Laboratorio di Programmazione - Luca Tesei 4

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 l input da un file Vedi codice allegato: (InputTestLoopRedirect.java) 26/11/2004 Laboratorio di Programmazione - Luca Tesei 5

Chiusura dell input 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 l input per terminare 16 Inserisci un valore numerico. Chiudi l input per terminare 32 Inserisci un valore numerico. Chiudi l input per terminare ^Z Media dei dati = 24.0 Valore massimo = 32.0 26/11/2004 Laboratorio di Programmazione - Luca Tesei 6

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

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

Scomposizione di stringhe E se volessimo, per comodità, inserire i valori nel file di testo anche su una stessa riga? Ad esempio: 13 343.54 100.09 25 1.8 12 3 33 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 un eccezione 26/11/2004 Laboratorio di Programmazione - Luca Tesei 9

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 all esaurimento della stringa stessa Consultare il codice allegato InputTestLoopToken.java 26/11/2004 Laboratorio di Programmazione - Luca Tesei 10

Scomposizione Se si prova a chiamare nexttoken() senza che ci siano token viene sollevata un eccezione: 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/2004 Laboratorio di Programmazione - Luca Tesei 11

Redirecting dell output Supponiamo di scrivere il file di testo di prima: Supponiamo di chiamarlo datiinputtestlooptoken.txt Lanciando il programma con il redirecting dell input 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/2004 Laboratorio di Programmazione - Luca Tesei 12

Redirecting dell output #> java InputTestLoopToken < datiinputtestlooptoken.txt Inserisci un valore numerico. Chiudi l input per terminare Inserisci un valore numerico. Chiudi l input per terminare Inserisci un valore numerico. Chiudi l input per terminare Inserisci un valore numerico. Chiudi l input per terminare Media dei dati = 66.42875000000001 Valore massimo = 343.54 Tutto questo output può essere anch esso reindirizzato su un file di testo, ad esempio output.txt: #> java InputTestLoopToken < datiinputtestlooptoken.txt > output.txt 26/11/2004 Laboratorio di Programmazione - Luca Tesei 13

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/2004 Laboratorio di Programmazione - Luca Tesei 14

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

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 1 2 3 4 5 rappresenta il numero 12345 in un file di testo 0 0 48 57 è una sequenza di 4 byte che rappresenta il numero 12345 (12345 = 48 * 256 + 57) in un file binario 26/11/2004 Laboratorio di Programmazione - Luca Tesei 16

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/2004 Laboratorio di Programmazione - Luca Tesei 17

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/2004 Laboratorio di Programmazione - Luca Tesei 18

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/2004 Laboratorio di Programmazione - Luca Tesei 19

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/2004 Laboratorio di Programmazione - Luca Tesei 20

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

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

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/2004 Laboratorio di Programmazione - Luca Tesei 23

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/2004 Laboratorio di Programmazione - Luca Tesei 24

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/2004 Laboratorio di Programmazione - Luca Tesei 25

Ricerca di un file nelle cartelle Può essere utile, quando si vuole aprire un file in input, presentare all utente 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/2004 Laboratorio di Programmazione - Luca Tesei 26

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/2004 Laboratorio di Programmazione - Luca Tesei 27

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

Esercizio Scrivere un programma che prenda in input un certo numero n di numeri, li memorizzi in un array, poi ordini l array e stampi l array 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/2004 Laboratorio di Programmazione - Luca Tesei 29

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

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: 2 3 5 5 Mettere a disposizione i metodi nextfactor() e hasmorefactor() 26/11/2004 Laboratorio di Programmazione - Luca Tesei 31

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: 2 3 5 7 11 13 17 19 Mettere a disposizione il metodo nextprime() 26/11/2004 Laboratorio di Programmazione - Luca Tesei 32

Esercizio Determinare il valore di e elevato a un certo numero reale x utilizzando la seguente serie di potenze e fermando il calcolo quando l addendo attuale della somma diventa minore di una certa soglia fissata: e x x n = n! n=0 26/11/2004 Laboratorio di Programmazione - Luca Tesei 33

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/2004 Laboratorio di Programmazione - Luca Tesei 34

Esercizio cont d 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/2004 Laboratorio di Programmazione - Luca Tesei 35

Esercizio cont d 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/2004 Laboratorio di Programmazione - Luca Tesei 36

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 l ultima biglia Continua... 26/11/2004 Laboratorio di Programmazione - Luca Tesei 37

Esercizio cont d Scrivere un programma che giochi contro l utente 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/2004 Laboratorio di Programmazione - Luca Tesei 38

Esercizio cont d 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/2004 Laboratorio di Programmazione - Luca Tesei 39

Esercizio cont d È 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 26/11/2004 Laboratorio di Programmazione - Luca Tesei 40