© Copyright 2008 Algoritmos e Estruturas de Dados 1 IF672 - Algoritmos e Estruturas de Dados CIn -...
-
Upload
fatima-filipe-aleixo -
Category
Documents
-
view
226 -
download
0
Transcript of © Copyright 2008 Algoritmos e Estruturas de Dados 1 IF672 - Algoritmos e Estruturas de Dados CIn -...
© Copyright 2008 Algoritmos e Estruturas de Dados1
IF672 - Algoritmos e Estruturas de Dados CIn - UFPE
Adriana Libório Fernandes LinsArthur Cavalcanti AlemÁtila Valgueiro Malta MoreiraFlavio Juvenal da Silva JúniorGustavo Cauê Silva BotelhoMatheus Bispo Arrais de Souza
Murilo Raphael de Souza LiraRafael Alberto Gomes Pereira LimaRafael Brandão LoboRafael Loureiro de CarvalhoTiago Carneiro Pessoa CantoVinicius Miranda Cesar
© Copyright 2008 Algoritmos e Estruturas de Dados
Os dados de um programa passam por três etapas:
Sendo assim, a entrada e a saída de dados são partes fundamentais na construção de um programa.
Processamento
Entrada Saída
Informações iniciais
Resultados
2
© Copyright 2008 Algoritmos e Estruturas de Dados
Na disciplina de Introdução à Programação, a entrada de dados era feita através do teclado e a saída através do monitor, usando-se a classe Console:
Programa
ClasseConsole
Teclado MonitorEntrada de Dados Saída de Dados
Métodosread
Métodosprint e println
3
© Copyright 2008 Algoritmos e Estruturas de Dados
Na disciplina de Introdução à Programação, a entrada de dados era feita através do teclado e a saída através do monitor, usando-se a classe Console:
Programa
GUI
Teclado MonitorEntrada de Dados Saída de Dados
4
© Copyright 2008 Algoritmos e Estruturas de Dados
Na disciplina de Algoritmos, entrada e saída de dados serão feitas através de arquivos:
Programa
Arquivo ArquivoEntrada de Dados Saída de Dados
Métodosread
Métodosprint
File Reader
Buffered Reader
File Writer
Print Writer
5
© Copyright 2008 Algoritmos e Estruturas de Dados
Para simplificar a implementação das listas, foi criada a classe Arquivo, que contém todas as funções de E/S:
Programa
ClasseArquivo
ArquivoEntrada
ArquivoSaída
Entrada de Dados Saída de Dados
Métodosread
Métodosprint e println
6
© Copyright 2008 Algoritmos e Estruturas de Dados
Motivação:
• Menor tempo de teste de um programa
• Menor preocupação com tratamento de erros de entrada (dados inválidos, incompletos, etc.)
• Processamento de séries de conjuntos de dados
• Processamento de grandes quantidades de dados.Ex: ordenar 10.000 números
7
© Copyright 2008 Algoritmos e Estruturas de Dados
Arquivos podem ser abertos de dois modos: leitura e gravação. Um objeto da classe Arquivo é composto por dois arquivos:
• O arquivo de entrada (input) é aberto no modo leitura (read) e dele serão lidas as informações que programa irá utilizar.
• O arquivo de saída (output) é aberto para gravação (write) e nele serão gravados os resultados obtidos pelo programa.
8
© Copyright 2008 Algoritmos e Estruturas de Dados
Ex: Ordenação de elementosArquivo.in Arquivo.out
Programa
Conjuntos de Entrada
43 2 4 1
Conjuntos de Saída
Conjunto #11 2 3 4
59 10 55 41 2
Conjunto #22 9 10 41 55
410 30 45 90
Conjunto #310 30 45 90
Fim doarquivo
9
© Copyright 2008 Algoritmos e Estruturas de Dados
Para criar um par de arquivos entrada/saída, basta passar o nome dos arquivos escolhidos como argumentos do construtor da classe Arquivo:Arquivo arq = new Arquivo(“L1Q1.in”, “L1Q1.out”);
Se o arquivo de entrada não existir, uma exceção (RuntimeException) é lançada.
O arquivo de saída é sempre criado; caso ele já exista, seu conteúdo anterior é descartado.
10
© Copyright 2008 Algoritmos e Estruturas de Dados
A entrada de dados é feita através dos métodos de leitura, ou seja, métodos read habilitados para os tipos int, double e String. A sintaxe é similar à da classe Console:int n = arq.readInt();double d = arq.readDouble();String s = arq.readString();
Estes métodos ignoram todos os brancos, ou seja, espaços, quebras de linha (enter) ou tabulações (tab).
11
© Copyright 2008 Algoritmos e Estruturas de Dados
Ex: Armazenamento em array
15 3 1 020 52
int array[] = new int[6];
for (int i = 0; i < 6; i++)array[i] = arq.readInt();
Aplicando o código à seguinte entrada temos:Arquivo.in
Programa
15 3 1 0 20 52
12
© Copyright 2008 Algoritmos e Estruturas de Dados
Métodos de leitura ignoram os espaços em branco e quebras de linha. Para verificar se uma linha (ou o arquivo) chegou ao fim, usa-se:
boolean isEndOfLine(); boolean isEndOfFile();
Ex: Leitura de dados até o fim do arquivo
while (! arq.isEndOfFile() ) {int x = arq.readInt();...
}
Fim de linha
Fim de arquivo
13
© Copyright 2008 Algoritmos e Estruturas de Dados
Para poder ler também os espaços e quebras de linha do arquivo, existem dois métodos adicionais:
String lin = arq.readLine();
Este método retorna também ‘ ’, ‘\n’, ‘\t’. Retorna ‘\0’ quando o fim do arquivo é alcançado.
char c = arq.readChar();
Retorna todos os caracteres até o fim da linha. Se a linha estiver em branco, retorna a string vazia (“”), e null quando o fim do arquivo é alcançado.
14
© Copyright 2008 Algoritmos e Estruturas de Dados
void print(char c);void print(String s);void print(int n);void print(double d);void print(double d, int dec);
Da mesma maneira, a saída de dados é feita através dos metódos de gravação, ou seja, métodos print:
Os métodos acima imprimem os dados formatados de acordo com o padrão de Java. O último imprime um double com um número indicado de casas decimais.
15
© Copyright 2008 Algoritmos e Estruturas de Dados
Para começar uma nova linha no arquivo de saída após a escrita de um dado, usa-se os métodos println:
void println();void println(char c);void println(String s);void println(int n);void println(double d);void println(double d, int dec);
Usar ‘\n’ ao invés dos métodos acima pode resultar em problemas na formatação do arquivo de saída.
16
© Copyright 2008 Algoritmos e Estruturas de Dados
Exemplos:Arquivo.out
arq.print(‘a’); aarq.print(‘b’); b
arq.println();arq.println(‘c’);
c
arq.println(“Teste”);Teste
arq.println(123);123
arq.println(2.555, 2); 2.56
arq.println(10, 4); 10.0000
arq.print(12 + “ ”); 12arq.print(15 + “ ”);
15
arq.println(“xy”+ 10);
xy10
17
© Copyright 2008 Algoritmos e Estruturas de Dados
Quando o arquivo não for mais necessário é preciso fechá-lo, ou seja, liberar os recursos utilizados por ele. Para isso, usa-se o método close:
arq.close();
Tanto o arquivo de entrada como o de saída são fechados e a memória ocupada por eles é liberada pelo garbage collector. Caso isto não seja feito, as informações podem não ser gravadas corretamente.
18
© Copyright 2008 Algoritmos e Estruturas de Dados
Ex: Ler inteiros da entrada e imprimi-los na saída:public static void main(String[] args) {
Arquivo arq = new Arquivo(“LxQ1.in”, “LxQ1.out”);
while ( ! arq.isEndOfFile() ) { int n = arq.readInt(); arq.println( n ); }
arq.close();}
19
© Copyright 2008 Algoritmos e Estruturas de Dados
A melhor maneira de aprender a resolver problemas usando arquivos (incluindo a classe Arquivo em Java), é fazendo exercícios.
Na página, os exercícios estão disponíveis em:http://www.cin.ufpe.br/~if672/2009.1/aulasPraticas.htm
A lista 0 também já está na página, em:http://www.cin.ufpe.br/~if672/2009.1/listas.htm
20