Le classi FileInputStream e RandomAccessFile. Semplici Algoritmi di Ordinamento

Documenti analoghi
Semplici Algoritmi di Ordinamento

Fondamenti di Informatica. Algoritmi di Ricerca e di Ordinamento

Semplici Algoritmi di Ordinamento

I/O Streams in Java. Lorenzo Gallucci

Algoritmi di Ricerca. Esempi di programmi Java

Variabili e Metodi di classe Interfacce e Package File in Java

Algoritmi di Ricerca. Esempi di programmi Java

Variabili e Metodi di classe Interfacce e Package Gestione di File in Java

Java I/O e serializzazione

Programmazione ad Oggetti

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

Corso sul linguaggio Java

IL LINGUAGGIO JAVA. Input, Tipi Elementari e Istruzione Condizionale. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

10. File e loro attributi

A. Ferrari Java: Stream e File

INPUT OUTPUT

Informatica I. Ingegneria Medica. Prof. Diego Salamon

IL LINGUAGGIO JAVA. Input, Tipi Elementari e Istruzione Condizionale. Primo esempio di un programma Java

Laboratorio di Matematica e Informatica 1

Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni

Informatica. Prof. A. Longheu. Input e Output

Algebra di Boole: Concetti di base. E un algebra basata su tre operazioni logiche

public static boolean occorre (int[] a, int n) { int i = 0; boolean trovato = false;

Gestione di file in Java

LETTURA DI DATI DA INPUT. Gli stream di byte consentono già di leggere dati (numeri di vario tipo), tramite la classe DataInputStream

10 - Programmare con gli Array

Corso di Fondamenti di Informatica Algoritmi su array / 1

Riassunto. Rassegna API - 2: eccezioni e file. Eccezioni. Oggi. Gettare, catturare, rimbalzare. Gettare. Stefano Mizzaro 1

Corso: Fondamenti di Informatica (Gruppo 2) a.a Corsi di laurea: Ing. Settore Informazione

Lezione 6 programmazione in Java

Riassunto. Rassegna API - 2: eccezioni e file. Eccezioni. Oggi. Gettare. Gettare, catturare, rimbalzare. Stefano Mizzaro 1

Algoritmi di Ricerca. Esempi di programmi Java

Array. Definizione e utilizzo di vettori

Creazione, eliminazione, lettura e scrittura di file di testo

Esercitazioni del Corso di Fondamenti di Informatica ARRAY. Prof. Giuseppe Manco. A cura di Ing. Andrea Tagarelli

Gestione dei compiti

Esercitazioni di Fondamenti di Informatica - Lez. 5 30/10/2018

Sistemi Operativi Teledidattico

Algoritmi di Ordinamento Corso di Informatica Laurea in Fisica. prof. ing. Corrado Santoro

A. Ferrari Stream e File

File e Stream In Java. Prof. Francesco Accarino IIS Sesto San Giovanni Via Leopardi 132

Vector e Enumeration (III parte)

18 - Vettori. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona

Fondamenti di Informatica 6. Algoritmi e pseudocodifica

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Esercizi di Algoritmi e Strutture Dati

Capitolo 5. Array e collezioni. c 2005 Pearson Education Italia Capitolo 5-1 / 61

Corso sul linguaggio Java

Fondamenti di Informatica

LETTURA DI DATI DA INPUT

Programmazione I - corso B a.a prof. Viviana Bono

ESERCIZIO 1 (FILE DI TESTO)

ELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli

Informatica (A-K) 5. Algoritmi e pseudocodifica

Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013

Algoritmi di ordinamento

Ricerca in una sequenza ordinata

Ordinamento. Scoperta guidata di tipici algoritmi: selection sort, bubble sort

Programmazione I - corso B a.a prof. Viviana Bono

Lezione 4 Casting, stringhe e caratteri, operatori relazionali, espressioni e variabili booleane

Capitolo 16 Iterazione

La paninoteca. Mi resta da scrivere solo costo()

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Bubble Sort. Bubble Sort

Array e Oggetti. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica. Dispensa 17. A. Miola Gennaio 2012

Esercizi su array. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica. Dispensa E08. C. Limongelli Gennaio 2012

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

Operazioni su file di caratteri

C: panoramica. Violetta Lonati

Iterazione. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica. Dispensa E06. C. Limongelli Dicembre 2011

Silvia Rossi. Algoritmi di Ordinamento. Informatica. Lezione n. Parole chiave: Bubble Sort Selection Sort. Corso di Laurea:

Iterazione. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa E07. C. Limongelli Novembre 2007

Fondamenti di Informatica L-A. Esercitazione 6

Esercitazione 4. Corso di Tecniche di programmazione

Array di array. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 03. A. Miola Febbraio 2008

Lettura e scrittura - Stream

Esercizi C su array e matrici

Input/Output. Introduzione. Stream. Capitolo 10 LORENZO BETTINI

Preparazione allo Scritto di Programmazione

Oggi. La programmazione strutturata - II. Riassunto (1/2) Riassunto (2/2) Sequenza e selezione. if e while. Stefano Mizzaro 1

Array mono- e bi-dimensionali Cicli while e do-while

Fondamenti di informatica T-1 (A K) Esercitazione 4: controllo del flusso

A. Ferrari. informatica. Java basi del linguaggio. Alberto Ferrari Informatica

Gestione dei files. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni Via Leopardi 132

Esercitazione 4. Gestione dei file in Unix

Corso di Laurea Ingegneria Civile Fondamenti di Informatica. Dispensa 18. Iterazione. Maggio Iterazione

Il linguaggio Java I file sequenziali

Fondamenti di Informatica L-A

Lezione 8: Stringhe ed array multidimensionali

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

Esercitazione n 2. Obiettivi

Transcript:

Fondamenti di Informatica Le classi FileInputStream e RandomAccessFile Semplici Algoritmi di Ordinamento Fondamenti di Informatica - D. Talia - UNICAL 1

Classe FileInputStream La classe FileInputStream definisce oggetti file e metodi per effettuare operazioni di lettura su file. Creazione/Apertura FileInputStream fl ; F = new FileInputStream(String pathname); oppure fl = new FileInputStream(File f); Nel secondo caso l argomento f è un oggetto della classe File dal quale si parte per creare l oggetto fl sul quale si potranno eseguire operazioni di lettura tramite i metodi della classe FileInputStream. Fondamenti di Informatica - D. Talia - UNICAL 2

Classe FileInputStream Metodi principali read() legge un byte e restituisce una valore compreso tra 0 e 255. read(byte[] b, off, len) legge un numero di byte non superiore a len a partire da off. skip(n) salta i successivi n byte. close() chiude il file. Si noti che dopo la chiusura del file non si possono eseguire operazioni, finché non avviene una nuova creazione. Fondamenti di Informatica - D. Talia - UNICAL 3

Classe FileOutputStream La classe FileoutputStream definisce oggetti file e metodi per effettuare operazioni di scrittura su file. Creazione/Apertura FileOutputStream fs ; fs = new FileOutputStream(String path, boolean append); oppure fs = new FileOutputStream(File f, boolean append); Il parametro append indica se occorre scrivere dalla fine del file (quando vale true) o dall inizio (quando vale false). Esempio di creazione con scrittura dalla fine: f = new FileOutputStream("C:/doc/dati.doc", true); Fondamenti di Informatica - D. Talia - UNICAL 4

Classe FileOutputStream Metodi principali write(int b) scrive i primi 8 bit contenuti nell intero b. write(byte[] b, off, len) scrive un numero di byte uguale a len a partire da off. skip(n) salta i successivi n byte. close() chiude il file. Fondamenti di Informatica - D. Talia - UNICAL 5

FileInputStream : Esempio import java.io.*; public class LeggiFile { Il programma legge e visualizza i caratteri presenti in un file e il numero totale di caratteri nel file. static public void main (String argv[]) { int input; boolean finefile= false; int cont = 0; FileInputStream f= new FileInputStream("dati.txt"); while(!finefile) // finchè non si è raggiunta la fine { // del file input = f.read(); if (input == -1) // si è alla fine del file finefile = true; else { System.out.print((char)input + " "); cont++;} // incrementa il contatore } // dei caratteri letti f.close(); System.out.println("Caratteri letti. " + cont); } // chiude il main } // chiude la classe Fondamenti di Informatica - D. Talia - UNICAL 6

Classe RandomAccessFile La classe RandomAccessFile comprende i metodi per la lettura e la scrittura di un file. Questa classe è la più completa per memorizzare dati su memoria secondaria. Creazione/Apertura RandomAccessFile f; f= new RandomAccessFile(String path, String modo); il modo può essere "r" o "rw" f= new RandomAccessFile(File file, String modo); Esempio di apertura in lettura e scrittura: f = new RandomAccessFile( risultati.txt, rw ); Fondamenti di Informatica - D. Talia - UNICAL 7

Classe RandomAccessFile Metodi principali write(int b) scrive un byte corrispondente ai primi 8 bit di b. write(byte[] b, off, len) scrive un numero di byte di b uguale a len a partire da off. writeint(int v) scrive quattro byte corrispondenti a v. writechar(int v) scrive due byte corrispondenti a (char) v. writelong(long v) scrive otto byte corrispondenti a v. writefloat(float v) scrive quattro byte corrispondenti a v. writechars(string s) scrive i caratteri della stringa s. Fondamenti di Informatica - D. Talia - UNICAL 8

Classe RandomAccessFile Metodi principali int readint() legge un intero. char readchar() legge un carattere. long readlong() legge un long. float readfloat() legge un reale. String readline() legge una stringa di caratteri fino al carattere di fine riga '\n'. length() restituisce il numero di byte del file. seek(pos) imposta il file pointer alla posizione pos. close() chiude il file. Fondamenti di Informatica - D. Talia - UNICAL 9

Ordinamento di una sequenza di elementi Esistono molti algoritmi di ordinamento. Tutti ricevono in input una sequenza non ordinata di elementi e restituiscono la sequenza ordinata. Algoritmi di ordinamento: selection sort, quick sort, bubble sort, merge sort. Ognuno di questi algoritmi usa un metodo diverso per ordinare una sequenza di elementi. Tutti generano lo stesso risultato (sequenza ordinata), ma alcuni sono più efficienti di altri. Fondamenti di Informatica - D. Talia - UNICAL 10

Selection sort Ordinamento per selezione (selection sort) Questo algoritmo ordina una sequenza di elementi andando a trovare l elemento minore e portandolo nella posizione iniziale della sequenza, e l elemento in posizione iniziale nella posizione occupata del valore minore. 85 37-3 10 9-3 37 85 10 9 Quindi sulla sotto-sequenza non ordinata effettua la stessa operazione fino a che rimane un solo elemento (che è ordinato). -3 37 85 10 9-3 9 85 10 37 Fondamenti di Informatica - D. Talia - UNICAL 11

Selection sort L algoritmo opera su una sequenza non ordinata come se fosse composta di due sotto-sequenze: la prima ordinata e la seconda non-ordinata, andando a cercare il valore minimo nella sequenza nonordinata e portandolo nella ultima posizione della sequenza ordinata. -3 9 85 10 37-3 9 10 85 37-3 9 10 85 37-3 9 10 37 85 Quando la sotto-sequenza non ordinata è composta da un solo elemento l ordinamento è terminato (l ultimo elemento è il maggiore). Fondamenti di Informatica - D. Talia - UNICAL 12

Selection Sort in Java public void ordinasel(int[] vet) { for (int j = 0; j < vet.length-1; j++) { int temp; int pos_min = j; for (int i = j+1; i < vet.length; i++) if (vet[pos_min] > vet[i]) pos_min = i; if (pos_min!= j) { temp = vet[j]; vet[j] = vet[pos_min]; vet[pos_min] = temp; } } // chiude il for } Fondamenti di Informatica - D. Talia - UNICAL 13

Selection Sort in Java Si usano due indici i e j: j scorre su tutto l array, mentre i scorre sulla parte dell array non ordinata. All inizio si assume che la posizione dell elemento minore è 0 e dalla posizione 1 fino alla fine si cerca il valore minimo. Se questo è più piccolo dell elemento nella posizione 0 viene scambiato. Quindi si incrementa l indice j (che identifica la prima posizione della parte non ordinata) e si esegue nuovamente la ricerca del minimo nella sotto-sequenza rimanente. Alla fine l elemento che rimarrà nell ultima posizione dell array (v[v.length-1]) è il valore maggiore. Fondamenti di Informatica - D. Talia - UNICAL 14

Bubble sort Ordinamento per scambio (bubble sort) Questo algoritmo ordina una sequenza di elementi andando a confrontare gli elementi a coppie e scambiandoli di posto se il secondo è minore del primo. 1 a scansione 85 37-3 10 9 37 85-3 10 9 37-3 85 10 9 37-3 10 85 9 L algoritmo termina quando dopo aver scandito tutta la sequenza senza che non sia stato effettuato alcuno scambio. In questo caso la sequenza risulta già ordinata. Fondamenti di Informatica - D. Talia - UNICAL 15

Bubble sort Dopo la prima scanzione abbiamo effettuato 4 scambi ma non abbiamo ottenuto la sequenza ordinata. Quindi si riparte dall inizio a scambiare gli elementi: 37-3 10 9 85-3 37 10 9 85 2 a scansione -3 10 37 9 85 3 a scansione -3 10 9 37 85-3 9 10 37 85 Se dopo una scansione (in questo caso la 4 a scanzione) non sono stati effettuati scambi, gli elementi sono già ordinati e l ordinamento è completato. Fondamenti di Informatica - D. Talia - UNICAL 16

Bubble Sort in Java public void ordinabub(int[] v) { boolean scambio ; int j= v.length-1; do { scambio = false; for (int i=0; i < j ; i++) { int temp; if (v[i] > v[i+1]) { temp = v[i]; v[i] = v[i+1]; v[i+1] = temp; scambio = true; } } // chiude il for j = j-1; } while (scambio == true); } Fondamenti di Informatica - D. Talia - UNICAL 17

Bubble Sort e Selection Sort in Java Gli algoritmi di ordinamento selection sort e bubble sort sono algoritmi abbastanza semplici, ma non sono i più efficienti. Il quick sort ed il merge sort sono più complessi ma più efficienti perché effettuano un numero minore di scansioni degli elementi di una sequenza. Altri algoritmi di ordinamento : insertion sort heap sort shaker Sort.... Fondamenti di Informatica - D. Talia - UNICAL 18