Algoritmos Escher. Agenda Estruturas de Seleção; Exercícios.
© Copyright 2008 Algoritmos e Estruturas de Dados IF672ec - Algoritmos e Estruturas de Dados CIn -...
Transcript of © Copyright 2008 Algoritmos e Estruturas de Dados IF672ec - Algoritmos e Estruturas de Dados CIn -...
![Page 1: © Copyright 2008 Algoritmos e Estruturas de Dados IF672ec - Algoritmos e Estruturas de Dados CIn - UFPE { alp4, dnq, dwcs, fmm, jdf2, lfpd, mraga, psbof,](https://reader035.fdocumentos.tips/reader035/viewer/2022081602/552fc0fa497959413d8b905a/html5/thumbnails/1.jpg)
© 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
![Page 2: © Copyright 2008 Algoritmos e Estruturas de Dados IF672ec - Algoritmos e Estruturas de Dados CIn - UFPE { alp4, dnq, dwcs, fmm, jdf2, lfpd, mraga, psbof,](https://reader035.fdocumentos.tips/reader035/viewer/2022081602/552fc0fa497959413d8b905a/html5/thumbnails/2.jpg)
© 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
![Page 3: © Copyright 2008 Algoritmos e Estruturas de Dados IF672ec - Algoritmos e Estruturas de Dados CIn - UFPE { alp4, dnq, dwcs, fmm, jdf2, lfpd, mraga, psbof,](https://reader035.fdocumentos.tips/reader035/viewer/2022081602/552fc0fa497959413d8b905a/html5/thumbnails/3.jpg)
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 Monitor
Entrada de Dados Saída de Dados
Métodosread
Métodosprint e println
3© Copyright 2008 Algoritmos e
Estruturas de Dados
![Page 4: © Copyright 2008 Algoritmos e Estruturas de Dados IF672ec - Algoritmos e Estruturas de Dados CIn - UFPE { alp4, dnq, dwcs, fmm, jdf2, lfpd, mraga, psbof,](https://reader035.fdocumentos.tips/reader035/viewer/2022081602/552fc0fa497959413d8b905a/html5/thumbnails/4.jpg)
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 Monitor
Entrada de Dados Saída de Dados
4© Copyright 2008 Algoritmos e
Estruturas de Dados
![Page 5: © Copyright 2008 Algoritmos e Estruturas de Dados IF672ec - Algoritmos e Estruturas de Dados CIn - UFPE { alp4, dnq, dwcs, fmm, jdf2, lfpd, mraga, psbof,](https://reader035.fdocumentos.tips/reader035/viewer/2022081602/552fc0fa497959413d8b905a/html5/thumbnails/5.jpg)
Na disciplina de Algoritmos, entrada e saída de dados serão feitas através de arquivos:
Programa
EstruturaFILE
ArquivoEntrada
ArquivoSaída
Entrada de Dados Saída de Dados
Funçãofscanf
Funçãofprintf
5© Copyright 2008 Algoritmos e
Estruturas de Dados
![Page 6: © Copyright 2008 Algoritmos e Estruturas de Dados IF672ec - Algoritmos e Estruturas de Dados CIn - UFPE { alp4, dnq, dwcs, fmm, jdf2, lfpd, mraga, psbof,](https://reader035.fdocumentos.tips/reader035/viewer/2022081602/552fc0fa497959413d8b905a/html5/thumbnails/6.jpg)
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
![Page 7: © Copyright 2008 Algoritmos e Estruturas de Dados IF672ec - Algoritmos e Estruturas de Dados CIn - UFPE { alp4, dnq, dwcs, fmm, jdf2, lfpd, mraga, psbof,](https://reader035.fdocumentos.tips/reader035/viewer/2022081602/552fc0fa497959413d8b905a/html5/thumbnails/7.jpg)
© Copyright 2008 Algoritmos e Estruturas de Dados
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
![Page 8: © Copyright 2008 Algoritmos e Estruturas de Dados IF672ec - Algoritmos e Estruturas de Dados CIn - UFPE { alp4, dnq, dwcs, fmm, jdf2, lfpd, mraga, psbof,](https://reader035.fdocumentos.tips/reader035/viewer/2022081602/552fc0fa497959413d8b905a/html5/thumbnails/8.jpg)
© 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
8
![Page 9: © Copyright 2008 Algoritmos e Estruturas de Dados IF672ec - Algoritmos e Estruturas de Dados CIn - UFPE { alp4, dnq, dwcs, fmm, jdf2, lfpd, mraga, psbof,](https://reader035.fdocumentos.tips/reader035/viewer/2022081602/552fc0fa497959413d8b905a/html5/thumbnails/9.jpg)
© 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
![Page 10: © Copyright 2008 Algoritmos e Estruturas de Dados IF672ec - Algoritmos e Estruturas de Dados CIn - UFPE { alp4, dnq, dwcs, fmm, jdf2, lfpd, mraga, psbof,](https://reader035.fdocumentos.tips/reader035/viewer/2022081602/552fc0fa497959413d8b905a/html5/thumbnails/10.jpg)
© 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
![Page 11: © Copyright 2008 Algoritmos e Estruturas de Dados IF672ec - Algoritmos e Estruturas de Dados CIn - UFPE { alp4, dnq, dwcs, fmm, jdf2, lfpd, mraga, psbof,](https://reader035.fdocumentos.tips/reader035/viewer/2022081602/552fc0fa497959413d8b905a/html5/thumbnails/11.jpg)
© 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
![Page 12: © Copyright 2008 Algoritmos e Estruturas de Dados IF672ec - Algoritmos e Estruturas de Dados CIn - UFPE { alp4, dnq, dwcs, fmm, jdf2, lfpd, mraga, psbof,](https://reader035.fdocumentos.tips/reader035/viewer/2022081602/552fc0fa497959413d8b905a/html5/thumbnails/12.jpg)
© 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
![Page 13: © Copyright 2008 Algoritmos e Estruturas de Dados IF672ec - Algoritmos e Estruturas de Dados CIn - UFPE { alp4, dnq, dwcs, fmm, jdf2, lfpd, mraga, psbof,](https://reader035.fdocumentos.tips/reader035/viewer/2022081602/552fc0fa497959413d8b905a/html5/thumbnails/13.jpg)
© 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
![Page 14: © Copyright 2008 Algoritmos e Estruturas de Dados IF672ec - Algoritmos e Estruturas de Dados CIn - UFPE { alp4, dnq, dwcs, fmm, jdf2, lfpd, mraga, psbof,](https://reader035.fdocumentos.tips/reader035/viewer/2022081602/552fc0fa497959413d8b905a/html5/thumbnails/14.jpg)
© 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
![Page 15: © Copyright 2008 Algoritmos e Estruturas de Dados IF672ec - Algoritmos e Estruturas de Dados CIn - UFPE { alp4, dnq, dwcs, fmm, jdf2, lfpd, mraga, psbof,](https://reader035.fdocumentos.tips/reader035/viewer/2022081602/552fc0fa497959413d8b905a/html5/thumbnails/15.jpg)
© 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 <fstream>.
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
![Page 16: © Copyright 2008 Algoritmos e Estruturas de Dados IF672ec - Algoritmos e Estruturas de Dados CIn - UFPE { alp4, dnq, dwcs, fmm, jdf2, lfpd, mraga, psbof,](https://reader035.fdocumentos.tips/reader035/viewer/2022081602/552fc0fa497959413d8b905a/html5/thumbnails/16.jpg)
© 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
![Page 17: © Copyright 2008 Algoritmos e Estruturas de Dados IF672ec - Algoritmos e Estruturas de Dados CIn - UFPE { alp4, dnq, dwcs, fmm, jdf2, lfpd, mraga, psbof,](https://reader035.fdocumentos.tips/reader035/viewer/2022081602/552fc0fa497959413d8b905a/html5/thumbnails/17.jpg)
© 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
![Page 18: © Copyright 2008 Algoritmos e Estruturas de Dados IF672ec - Algoritmos e Estruturas de Dados CIn - UFPE { alp4, dnq, dwcs, fmm, jdf2, lfpd, mraga, psbof,](https://reader035.fdocumentos.tips/reader035/viewer/2022081602/552fc0fa497959413d8b905a/html5/thumbnails/18.jpg)
© 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
![Page 19: © Copyright 2008 Algoritmos e Estruturas de Dados IF672ec - Algoritmos e Estruturas de Dados CIn - UFPE { alp4, dnq, dwcs, fmm, jdf2, lfpd, mraga, psbof,](https://reader035.fdocumentos.tips/reader035/viewer/2022081602/552fc0fa497959413d8b905a/html5/thumbnails/19.jpg)
© 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
![Page 20: © Copyright 2008 Algoritmos e Estruturas de Dados IF672ec - Algoritmos e Estruturas de Dados CIn - UFPE { alp4, dnq, dwcs, fmm, jdf2, lfpd, mraga, psbof,](https://reader035.fdocumentos.tips/reader035/viewer/2022081602/552fc0fa497959413d8b905a/html5/thumbnails/20.jpg)
© 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
![Page 21: © Copyright 2008 Algoritmos e Estruturas de Dados IF672ec - Algoritmos e Estruturas de Dados CIn - UFPE { alp4, dnq, dwcs, fmm, jdf2, lfpd, mraga, psbof,](https://reader035.fdocumentos.tips/reader035/viewer/2022081602/552fc0fa497959413d8b905a/html5/thumbnails/21.jpg)
© 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
![Page 22: © Copyright 2008 Algoritmos e Estruturas de Dados IF672ec - Algoritmos e Estruturas de Dados CIn - UFPE { alp4, dnq, dwcs, fmm, jdf2, lfpd, mraga, psbof,](https://reader035.fdocumentos.tips/reader035/viewer/2022081602/552fc0fa497959413d8b905a/html5/thumbnails/22.jpg)
© 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
![Page 23: © Copyright 2008 Algoritmos e Estruturas de Dados IF672ec - Algoritmos e Estruturas de Dados CIn - UFPE { alp4, dnq, dwcs, fmm, jdf2, lfpd, mraga, psbof,](https://reader035.fdocumentos.tips/reader035/viewer/2022081602/552fc0fa497959413d8b905a/html5/thumbnails/23.jpg)
© 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