1 / 43

Capítulo V – Comandos de Entrada e Saída

Capítulo V – Comandos de Entrada e Saída. 5.1 – Equipamentos de entrada e saída 5.2 – Saída no vídeo-texto 5.3 – Entrada pelo teclado 5.4 – Entrada e saída por arquivos em disco 5.5 – Controle do vídeo-texto 5.6 – Vídeo-gráfico. 5.4 – Entrada e Saída por Arquivos em Disco.

vaughan
Download Presentation

Capítulo V – Comandos de Entrada e Saída

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Capítulo V – Comandos de Entrada e Saída 5.1 – Equipamentos de entrada e saída 5.2 – Saída no vídeo-texto 5.3 – Entrada pelo teclado 5.4 – Entrada e saída por arquivos em disco 5.5 – Controle do vídeo-texto 5.6 – Vídeo-gráfico

  2. 5.4 – Entrada e Saída por Arquivos em Disco 5.4.1 – Arquivos-textos e arquivos binários • Arquivos: regiões contíguas na memória secundária, dos mais diversos tamanhos, destinadas cada uma a guardar informações correlatas, usadas para um determinado fim • Existem arquivos de programas, arquivos de dados, arquivos de imagens, arquivos com som digitalizado, etc.

  3. A Linguagem C trabalha com dois tipos de arquivos: • Arquivos-textos: • Seu conteúdo pode ser encarado como uma sequência linear de caracteres • Arquivos de programas são arquivos-textos • Alguns arquivos de dados também são • Arquivos binários: • Podem conter números inteiros e reais em binário, textos, imagens, etc.

  4. Arquivos binários: • Tipicamente são sequências lineares de estruturas de mesmo tipo • Estruturas serão vistas em capítulo específico • Arquivos binários não serão estudados em CES-10 • Arquivos-textos: • São os arquivos abordados neste tópico

  5. Nos arquivos-textos, existe uma divisão em linhas proporcionada pelos caracteres ‘\n’ (new line) • Cada um desses caracteres é uma marca de final de linha • As linhas não têm necessariamente o mesmo número de caracteres • Linhas vazias são caracterizadas por conterem apenas o ‘\n’ e nada mais

  6. 5.4.2 – Abertura e fechamento de arquivos-textos • Dados de entrada para programas podem ser retirados de arquivos, em vez de serem digitados por meio do teclado • Resultados de um programa podem ser gravados num arquivo, em vez de aparecerem no vídeo • Todo arquivo da memória secundária precisa ser associado a uma variável do tipo FILE de um programa, para ser acessado por esse programa

  7. Abertura de um arquivo: ato de associar um arquivo do disco a uma variável do tipo FILE • Em C, essa abertura é feita pela função fopen, pertencente ao arquivo stdio.h • Exemplo: seja o seguinte trecho de programa: FILE *ff; ff = fopen ("C:\\ces10\\programas\\dados", "r"); • O arquivo dados, localizado na sub-pasta programas da pasta ces10 do diretório C, será aberto somente para leituras

  8. FILE *ff; ff = fopen ("C:\\ces10\\programas\\dados", "r"); • O arquivo dados fica associado à variável ff, ou seja, tudo o que for realizado em ff será feito no arquivo dados • Se o arquivo a ser aberto estiver na mesma pasta que contém o arquivo do programa que o acessará, apenas o nome do arquivo é necessário: • Não é necessário informar a localização do arquivo: ff = fopen ("dados", "r");

  9. FILE *ff; ff = fopen ("C:\\ces10\\programas\\dados", "r"); • Na declaração de toda variável do tipo FILE,o asterisco ‘*’ deve ser colocado antes do seu nome • Isso é uma característica das variáveis do tipo ponteiro, que serão estudadas em capítulo específico • Variável do tipo FILE é um ponteiro que guarda o endereço da região de memória para ela reservada

  10. Modos de abertura de arquivos-textos: • A abertura só para leitura ou para leitura inicial de um arquivo não existente falhará • fopen retornará um valor a ser interpretado como abertura mal-sucedida

  11. Modos de abertura de arquivos-textos: • Abertura só para escrita ou para escrita inicial: • Se o arquivo não existir: provocará sua criação • Se o arquivo já existir:apagará todo o seu conteúdo, reinicializando-o

  12. Modos de abertura de arquivos-textos: • Abertura para aumentar a partir do final: • Se o arquivo não existir: provocará sua criação • Se o arquivo já existir: tudo será escrito a partir de seu final Em CES-10 só serão abordados os modos “r” e “w”

  13. Uma variável do tipo FILE ocupa um espaço de vários bytes na memória principal • Num dado momento da execução do programa, apenas um desses bytes pode ser acessado • Diz-se que existe um cursor posicionado nesse byte • O cursor pode se movimentar ao longo dessa variável ou arquivo, mediante chamadas de funções para leitura ou escrita

  14. Ao se encerrarem as operações em um arquivo-texto, deve-se nele executar a operação de fechamento • A associação estabelecida por fopen é então desfeita • A função fclose, pertencente também ao arquivo stdio.h, realiza essa operação • Exemplo: fclose (ff) • O fechamento de um arquivo garante que todas as alterações realizadas na variável a ele associada redundem também em alterações nele próprio

  15. Exemplo: seja arq um arquivo de n bytes do diretório do usuário • Seja o seguinte trecho de programa em C: FILE *fl; fl = fopen (“arq”, “r+”); • Seja também k < n o número de bytes de fl • Ou seja, arq não cabe em fl • A seguir um esquema de troca de conteúdo entre arq e fl

  16. 0 1 2 k-1 k k+1 n-1 • Logoapós a execução de fopen: os k 1os bytes de arq são copiados em fl • O cursor do arquivo é posicionado em seu início  arq cursor cópia de k bytes fl

  17. 0 1 2 k-1 k k+1 n-1 • Após algumas leituras e escritas, o cursor se movimenta para frente • As leituras e escritas são feitas apenas em fl (arq fica desatualizado)  arq cursor fl

  18. 0 1 2 k-1 k k+1 n-1 • Com mais leituras e escritas, o cursor chega ao final de fl, mas não de arq • arqcontinua desatualizado  arq cursor fl

  19. 0 1 2 k-1 k k+1 n-1 • Para acesso ao próximo byte: o conteúdo de fl é copiado de volta em arq, atualizando-o  arq cópia de k bytes fl

  20. 0 1 2 k-1 k k+1 n-1 • Os próximos k bytes de arq são copiados em fl  arq O cursor vai para o início de fl, mas não de arq cursor cópia de k bytes fl

  21. 0 1 2 k-1 k k+1 n-1 • A execução de fclose copia fl de volta em arq, atualizando-o  arq cópia de k bytes fl

  22. 5.4.3 – Leitura e escrita em arquivos-textos • Em C, a leitura e a escrita em arquivos-textos é feita respectivamente pelas funções fscanf e fprintf, também pertencentes ao arquivo stdio.h • Formas gerais: fscanf (Variavel, CadeiaDeControle, OutrosArgumentos); fprintf (Variavel, CadeiaDeControle, OutrosArgumentos);

  23. fscanf (Variavel, CadeiaDeControle, OutrosArgumentos); fprintf (Variavel, CadeiaDeControle, OutrosArgumentos); • CadeiaDeControle e OutrosArgumentos têm o mesmo significado visto para as funções scanf e printf • Variavel é o nome da variável do tipo FILE associada ao arquivo que sofrerá as operações de leitura e/ou escrita

  24. fscanf (Variavel, CadeiaDeControle, OutrosArgumentos); fprintf (Variavel, CadeiaDeControle, OutrosArgumentos); • O valor retornado pelas funções fscanf e fprintfé o mesmo retornado pelas funções scanf e printf • fscanf pode ser usada como um detector de final de arquivo • Quando fscanf encontra e lê a marca de final de arquivo, ela retorna -1 (menos 1)

  25. infile No vídeo outfile A soma dos 9 numeros eh 274 1 12 43 21 67 23 74 23 10 x = 2 x = 2 x = 2 x = 2 x = 1 x = -1 Exemplo: seja o seguinte trecho de programa: int a, b, soma, x, n; FILE *f1, *f2; soma = 0; n = 0; f1 = fopen ("infile", "r"); f2 = fopen ("outfile", "w"); x = fscanf(f1, "%d%d", &a, &b); printf ("x = %d\n", x); while (x > 0) { if (x == 2) {soma += a + b; n += 2;} else {soma += a; n++;} x = fscanf(f1, "%d%d", &a, &b); printf ("x = %d\n", x); } fprintf (f2, "A soma dos %d numeros eh %d", n, soma); fclose (f1); fclose (f2); Encontrou final de arquivo

  26. infile No vídeo outfile A soma dos 9 numeros eh 274 1 12 43 21 67 23 74 23 10 # x = 2 x = 2 x = 2 x = 2 x = 1 x = 0 Mudando o conteúdo de infile: int a, b, soma, x, n; FILE *f1, *f2; soma = 0; n = 0; f1 = fopen ("infile", "r"); f2 = fopen ("outfile", "w"); x = fscanf(f1, "%d%d", &a, &b); printf ("x = %d\n", x); while (x > 0) { if (x == 2) {soma += a + b; n += 2;} else {soma += a; n++;} x = fscanf(f1, "%d%d", &a, &b); printf ("x = %d\n", x); } fprintf (f2, "A soma dos %d numeros eh %d", n, soma); fclose (f1); fclose (f2); Não encontrou final de arquivo

  27. Exercícios 5.4: 1) Fazer um programa para: • Ler o nome de um arquivo existente no diretório desse programa (leitura de cadeia de caracteres - próximo capítulo) • Produzir um outro arquivo contendo as linhas do arquivo lido numeradas É interessante ler um arquivo contendo um programa, para que se obtenha a numeração de suas linhas

  28. Capítulo V – Comandos de Entrada e Saída 5.1 – Equipamentos de entrada e saída 5.2 – Saída no vídeo-texto 5.3 – Entrada pelo teclado 5.4 – Entrada e saída por arquivos em disco 5.5 – Controle do vídeo-texto 5.6 – Vídeo-gráfico

  29. 5.5 – Controle do Vídeo-Texto 5.5.1 – A função gotoxy • Vista nas aulas de lab, gotoxy posiciona o cursor do vídeo-texto na posição dada por seus argumentos • Forma geral: gotoxy (expressão1, expressão2) No da coluna No da linha

  30. 5.5 – Controle do Vídeo-Texto 5.5.1 – A função gotoxy • Para ser usada no CodeBlocks, gotoxy pertence à biblioteca conio2 (arquivos <conio2.h> e <libconio.a>) • Esses dois arquivos deverão ser copiados respectivamente para as pastas include e lib, de CodeBlocks\MinGW • Instruções de como configurar o CodeBlocks para trabalhar com a biblioteca conio2 são apresentadas nas aulas práticas

  31. Limpa a tela: conio2.h Exemplo: desenho de segmentos de retas com ‘*’ #include <stdio.h> #include <conio.h> #include <conio2.h> int main () { int a, b, i; printf ("Maximize a tela e digite algo!"); getch (); clrscr (); for (a=1, b=1, i=1; i<=10; a+=8, b+=2, i++) { gotoxy (a, b); printf ("********"); } printf ("\n\nDigite algo para encerrar: "); getch (); return 0; } Na tela Sempre posiciona o cursor na posição [a, b] Inicialmente [a, b] = [1, 1] A cada repetição a+=8 e b+=2

  32. Resultado no vídeo Exemplo: programa para o desenho de uma casa

  33. #include <stdio.h> #include <conio.h> #include <conio2.h> int main () { int i,j,x,y,z; printf ("Maximize a tela e digite algo!"); getch (); clrscr (); /* Desenho do telhado */ for (x=10,y=12,z=40,i=1; i<=7; x+=3,y-=1,z-=6,i++) { gotoxy (x,y); printf ("%s%*s","////",z,"\\\\\\\\"); } gotoxy (x,y); printf ("/\\");

  34. /* Desenho do piso: coordenada inicial (17, 19); Comprimento 30 */ x=17; y=19; gotoxy (x,y); printf ("##############################"); /* Desenho das paredes: altura 8; intervalo 28 */ for (y--,i=1;i<=8;y--,i++) { gotoxy (x,y); printf ("%c%29c",'#', '#'); }

  35. /* Desenho da janela e da porta: janela: 8x3; porta: 5x6 */ for (x=22,y=13,i=1;i<=3;y++,i++){ gotoxy (x,y); printf ("########"); } for (x=38,y=13,i=1;i<=6;y++,i++){ gotoxy (x,y); printf ("#####"); }

  36. /* Desenho da chamine: */ x=40; y=4; gotoxy (x,y); printf ("###"); for (y++,i=1;i<=3;y++,i++){ gotoxy (x,y); printf ("%c%2c",'#','#'); } x=42; gotoxy (x,y); printf ("%c",'#'); /* Fechamento da tela */ gotoxy (1, 23); printf ("Digite algo para encerrar: "); getch (); return 0; }

  37. 5.5.2 – Outras funções do conio2.h • textbackground: estabelece a cor de fundo de um texto escrito • textcolor: estabelece a cor do texto • Exemplo: no programa da casinha: printf ("Maximize a tela e digite algo!"); getch (); clrscr (); textcolor(BLUE); textbackground(LIGHTRED); for (i = 1; i <= 40; i++) printf (" "); getch (); Escreve 40 linhas vazias com fundo LIGHTRED 80 espaços

  38. Resultado:

  39. Capítulo V – Comandos de Entrada e Saída 5.1 – Equipamentos de entrada e saída 5.2 – Saída no vídeo-texto 5.3 – Entrada pelo teclado 5.4 – Entrada e saída por arquivos em disco 5.5 – Controle do vídeo-texto 5.6 – Vídeo-gráfico

  40. 5.6 – Vídeo-Gráfico • Visto nas aulas de laboratório • No CodeBlocks são usadas rotinas gráficas desenvolvidas pelo Prof. Carlos Henrique QuartucciForster

  41. Exercícios 5.6: 1) Seja um tabuleiro de xadrez e as peças Rainha, Torre, Bispo e Cavalo. Fazer um programa que leia a inicial de várias dessas peças e as coordenadas de cada uma dentro do tabuleiro e, para cada peça em separado, desenhe no vídeo-texto e no vídeo-gráfico o tabuleiro mostrando a posição da peça, as casas atacadas por ela e as casas livres de seu ataque. Ver exemplos no próximo slide

  42. R-5-6

  43. 2) Fazer umprograma que leia uma frase e a escreva no vídeo-gráfico, de modo que cada caractere da frase ocupe um retângulo de 33x21 pixels 3) Desenhar a Bandeira do Brasil no vídeo-texto e no vídeo-gráfico

More Related