A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

© Copyright 2008 Algoritmos e Estruturas de Dados IF672ec - Algoritmos e Estruturas de Dados CIn - UFPE { alp4, dnq, dwcs, fmm, jdf2, lfpd, mraga, psbof,

Apresentações semelhantes


Apresentação em tema: "© Copyright 2008 Algoritmos e Estruturas de Dados IF672ec - Algoritmos e Estruturas de Dados CIn - UFPE { alp4, dnq, dwcs, fmm, jdf2, lfpd, mraga, psbof,"— Transcrição da apresentação:

1 © Copyright 2008 Algoritmos e Estruturas de Dados IF672ec - Algoritmos e Estruturas de Dados CIn - UFPE { alp4, dnq, dwcs, fmm, jdf2, lfpd, mraga, psbof, phas, rp2}@cin.ufpe.br Luis Filipe Prado Dandara Márcio Ricardo Alves Gadelha de Araújo Paulo Sérgio Borges de Oliveira Filho Pedro Henrique Atanásio e Silva Renato Parente 1 Arthur de Lima Padilha Danilo do Nascimento Queiroz Diego Wesley de Carvalho Spíndola Filipe Martins de Melo Júlio Domingues Ferraz

2 © 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 EntradaSaída Informações iniciais Resultados 2

3 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 Classe Console TecladoMonitor Entrada de Dados Saída de Dados Métodos read Métodos print e println 3 © Copyright 2008 Algoritmos e Estruturas de Dados

4 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 TecladoMonitor Entrada de Dados Saída de Dados 4 © Copyright 2008 Algoritmos e Estruturas de Dados

5 Na disciplina de Algoritmos, entrada e saída de dados serão feitas através de arquivos: Programa Estrutura FILE Arquivo Entrada Arquivo Saída Entrada de Dados Saída de Dados Função fscanf Função fprintf 5 © Copyright 2008 Algoritmos e Estruturas de Dados

6 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 6 © Copyright 2008 Algoritmos e Estruturas de Dados

7 Arquivos podem ser abertos de dois modos: leitura e gravação. Um programa em C com entrada e saída em arquivos é composto por duas estruturas FILE: 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 gravadas os resultados obtidos pelo programa. 7

8 © Copyright 2008 Algoritmos e Estruturas de Dados Ex: Ordenação de elementos Arquivo.inArquivo.out Programa Conjuntos de Entrada 4 3 2 4 1 Conjuntos de Saída Conjunto #1 1 2 3 4 5 9 10 55 41 2 Conjunto #2 2 9 10 41 55 4 10 30 45 90 Conjunto #3 10 30 45 90 Fim do arquivo 8

9 © Copyright 2008 Algoritmos e Estruturas de Dados Para abrir um arquivo para leitura, usa-se o modo r: FILE *entrada = fopen(teste.in, r); Em caso de erro (ex: o arquivo de entrada não existe), a função fopen retorna NULL. O arquivo de saída é sempre criado, e caso ele já exista, seu conteúdo anterior é descartado. E para abrir um arquivo para gravação, usa-se w: FILE *saida = fopen(teste.out, w); 9

10 © Copyright 2008 Algoritmos e Estruturas de Dados A entrada de dados é feita através da função fscanf: int n1; double n2; char str[20]; fscanf(entrada, %d, &n1); fscanf(entrada, %lf, &n2); fscanf(entrada, %s, str); O primeiro argumento é o arquivo a ser lido. O segundo é uma string contendo o formato das variáveis que estão nos argumentos seguintes. Não se esqueça do & antes de cada variável (com exceção das strings). 10

11 © Copyright 2008 Algoritmos e Estruturas de Dados fprintf(saida, %d, 3); fprintf(saida, %lf, 5.3); fprintf(saida, %s %d, Nota:, 7); fprintf(saida, Algoritmos); Da mesma maneira, a saída de dados é feita através da função fprintf (o & não é usado): A quebra de linha é feita através do símbolo \n: fprintf(saida, %d\n, 2); fprintf(saida, \n%lf, -2.7); fprintf(saida, \n%s\n, Algoritmos); fprintf(saida, \nNota:\n%d\n, 8); 11

12 © Copyright 2008 Algoritmos e Estruturas de Dados Os símbolos usados em fscanf e fprintf são: %d um número inteiro decimal %lf um double (algo como long-floating point) %s uma string (array de chars - não se usa o &) \n uma quebra de linha Outros símbolos também são utilizados nestas funções, mas para Algoritmos, apenas estes são suficientes. Se o fim do arquivo for alcançado, fscanf retorna EOF. Caso contrário, retorna o número de argumentos lidos. 12

13 © 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 a função fclose: fclose(entrada); fclose(saida); Assim, os arquivos de entrada e de saída são fechados, e a memória ocupada por eles é liberada para que possa ser usada novamente pelo sistema. 13

14 © Copyright 2008 Algoritmos e Estruturas de Dados Outra opção para manipular arquivos de entrada/saída em C/C++ é utilizar a função freopen. freopen(L0Q1.in, r, stdin); freopen(L0Q1.out, w, stdout); Os exemplos acima estão redirecionando a entrada e saída padrão, respectivamente, para o arquivo L0Q1.in e L0Q1.out. Desta forma, podem-se utilizar as funções scanf e printf (ou cin e cout) para acessar e imprimir dados no arquivo. 14

15 © Copyright 2008 Algoritmos e Estruturas de Dados Em C++, podemos manipular a E/S de arquivos com maior facilidade do que em C. Para isto, utiliza-se as classes ifstream e ofstream de. Para lermos do arquivo de entrada, precisamos criar uma instância de ifstream: ifstream entrada(teste.in); Essa instância de ifstream só tem permissão para leitura de teste.in. 15

16 © Copyright 2008 Algoritmos e Estruturas de Dados Para podermos gravar num arquivo, criamos uma instância de ofstream: ofstream saida(teste.out); Essa instância de ofstream tem permissão para gravar em teste.out. O arquivo de saída é sempre criado, e caso ele já exista, seu conteúdo anterior é descartado. 16

17 © Copyright 2008 Algoritmos e Estruturas de Dados A entrada de dados é feita através do operador de extração em streams: >>. int n1; double n2; char str[20]; entrada >> n1; entrada >> n2; entrada >> str; Simples assim! Ainda poderíamos obter o mesmo resultado fazendo: int n1; double n2; char str[20]; entrada >> n1 >> n2 >> str; 17

18 © Copyright 2008 Algoritmos e Estruturas de Dados 1. int n1; double n2; char str[20]; 2. entrada >> n1 >> n2 >> str; Quando a 2ª linha é executada, o que acontece é : 1º valor lido de teste.in vai para n1; 2º valor lido de teste.in >> n2; 3º valor lido de teste.in >> str. Apesar de facilitar e deixar o código limpo, o programador tem que tomar o cuidado de não enviar à uma variável algum tipo de dado diferente do que a mesma possa armazenar. 18

19 © Copyright 2008 Algoritmos e Estruturas de Dados int qualquer; // poderia ser qualquer tipo... while(entrada >> qualquer){ // leitura dos dados da entrada } // chegou aqui == leu todo o arquivo Enquanto se lê os dados da entrada, o programa precisa saber se ainda tem dados para extrair. Para isto faz-se o seguinte: Isto acontece porque a operação entrada >> qualquer retorna um valor != 0 enquanto tiver algo pra se ler de teste.in e colocar no inteiro qualquer. Se já foi lido todos os dados, a operação retorna 0(false). 19

20 © Copyright 2008 Algoritmos e Estruturas de Dados A saída de dados é feita através dos operadores de inserção em streams: <<. int n1 = 3; double n2 = 2.5; char str[20] = Algoritmos; saida << n1; saida << ; saida << n2; saida << ; saida << str; saida << \n; 20

21 © Copyright 2008 Algoritmos e Estruturas de Dados 3 2.5 Algoritmos // cursor aqui, por conta do \n Obteríamos a mesma linha fazendo apenas: Será impressa a seguinte linha em teste.out: saida << n1 << << n2 << << str << \n; Simples assim! 21

22 © 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 a função close(): entrada.close(); saida.close(); Assim, os arquivos de entrada e de saída são fechados, e a memória ocupada por eles é liberada para que possa ser usada novamente pelo sistema. 22

23 © Copyright 2008 Algoritmos e Estruturas de Dados A melhor maneira de aprender a resolver problemas usando arquivos (incluindo uso de arquivos em C/C++), é fazendo exercícios. Na página, os exercícios estão disponíveis em: http://moreno2.cin.ufpe.br/~if672/2008.2/aulasPraticas. htm A lista 0 também já está na página, em: http://www.cin.ufpe.br/~if672/2008.2/listas.htm 23


Carregar ppt "© Copyright 2008 Algoritmos e Estruturas de Dados IF672ec - Algoritmos e Estruturas de Dados CIn - UFPE { alp4, dnq, dwcs, fmm, jdf2, lfpd, mraga, psbof,"

Apresentações semelhantes


Anúncios Google