Baixe o app para aproveitar ainda mais
Prévia do material em texto
Programação Estruturada Prof.ª: Priscilla Abreu pbraz@unicarioca.edu.br Disciplina – Programação Estruturada Roteiro de aula: • Objetivo da aula – Resolução dos exercícios – Arquivo Texto – Arquivos • Manipulação de arquivos binários • Acesso aleatório a arquivos • Exercícios 2Algoritmos II RESOLUÇÃO DE EXERCÍCIOS 3Programação Estruturada Exercício 1) Faça um programa que armazene em um arquivo denominado raizQuadrada.txt uma tabela de raízes quadradas dos cem primeiros inteiros positivos. 4Programação Estruturada Resolução – Exercício 1 #include <stdio.h> #include <math.h> int main(){ FILE *ptArq; float raiz; int i; ptArq = fopen("raizQuadrada.txt", "w"); 5Programação Estruturada Resolução – Exercício 1 if (ptArq != NULL) printf("Arquivo criado com sucesso!"); else{ printf("Arquivo não foi criado!"); exit(0); } 6Programação Estruturada Resolução – Exercício 1 for (i=1; i<=100;i++){ fprintf(ptArq, "%f\n", sqrt(i)); } printf("\n Fechando o arquivo..."); fclose(ptArq); } 7Programação Estruturada MANIPULAÇÃO DE ARQUIVOS 8Programação Estruturada Arquivo texto Arquivos texto são mais simples de serem manipulados e permitem fácil acesso ao seu conteúdo. Mas possuem as seguintes desvantagens: – O acesso aos elementos é sequencial; – Ocupam mais espaço que arquivos binários. 9Programação Estruturada Arquivo binário Arquivos binários têm seu conteúdo armazenado no formato binário e, por isso, ocupam menos bytes que os arquivos textos. Além disso, não precisam de separadores entre os campos nem entre os registros. Em geral, utilizam a extensão “.dat” ou “.bin”. 10Programação Estruturada Manipulação de dados em um arquivo binário Acesso e manipulação de arquivos por meio de: ̶ Leitura e gravação de blocos de informações estruturadas ̶ Dados são lidos e gravados em blocos, normalmente oriundos de estruturas, vetores e matrizes; ̶ Funções: ̶ fread(endereco, tamanho, quantidade, ponteiro_arquivo) => leitura de bloco; ̶ fwrite(endereco, tamanho, quantidade, ponteiro_arquivo) => gravação de bloco. 11Programação Estruturada Manipulação de dados em um arquivo binário Gravando blocos de dados em um arquivo ̶ Função fwrite() ̶ Grava um bloco de informações em um arquivo binário. ̶ Necessidade de passar o endereço da variável e não apenas a variável. ̶ Sintaxe: ̶ fwrite(endereco, tamanho, quantidade, ponteiro) ̶ Exemplo: fwrite(ch, sizeof(char), 20, ptArq); Onde: char ch[20]; 12Programação Estruturada Manipulação de dados em um arquivo binário #include <stdio.h> #include <stdlib.h> int main (){ int valor [20]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20}; char ch[20]= "Teste geral"; FILE *ptarq = fopen( "binario.dat" , "wb"); // escrita em modo binário if ( ptarq == NULL ) { printf ("O arquivo não pôde ser aberto "); return 1; } fwrite (ch , sizeof (char), 20, ptarq); fwrite (valor , sizeof (int), 20, ptarq); fclose(ptarq ); } 13Programação Estruturada Manipulação de dados em um arquivo binário Lendo blocos de dados de um arquivo ̶ Função fread() ̶ Faz a leitura de um bloco de informações de um arquivo binário para uma variável do programa. ̶ Sintaxe: ̶ fread(endereco, tamanho, quantidade, ponteiro) ̶ Exemplo: fread(ch, sizeof(ch), 1, ptArq); Onde: char ch[20]; 14Programação Estruturada Manipulação de dados em um arquivo binário #include <stdio.h> #include <stdlib.h> int main (){ int i, valor [20]; char ch[20]; FILE *ptarq = fopen( "binario.dat" , "rb"); // leitura em modo binário if ( ptarq == NULL ) { printf ("O arquivo não pôde ser aberto "); return 1; } fread (ch , sizeof (ch), 1, ptarq ); fread(valor , sizeof (valor), 1, ptarq ); printf("%s\n",ch); for (i=0;i<20;i++) printf("%d ",valor[i]); fclose(ptarq ); } 15Programação Estruturada Manipulação de dados em um arquivo binário ̶ Uma das principais aplicações destas funções é a leitura e escrita de estruturas criadas pelos usuários. A gravação em binário da estrutura permite que o programador ao escrever ou ler do arquivo se preocupe somente com a estrutura como um todo e não com cada elemento que a compõe. ̶ Exemplo: typedef struct _PESSOA{ char nome [40]; int ano; } PESSOA; FILE *pa; PESSOA p; ... fwrite(&p, sizeof ( PESSOA), 1, pa); //comando de escrita 16Programação Estruturada Manipulação de dados em um arquivo binário #include <stdio.h> #include <stdlib.h> typedef struct _PESSOA{ char nome [40]; int ano; } PESSOA; int main (){ FILE *pa; PESSOA p; pa = fopen( "binario3.dat" , "wb"); // leitura em modo binário if ( pa == NULL ) { printf ("O arquivo não pôde ser aberto "); return 1; } 17Programação Estruturada Manipulação de dados em um arquivo binário printf("Nome: "); gets(p.nome); printf("Ano: "); scanf("%d",&p.ano); fwrite(&p, sizeof ( PESSOA), 1, pa); fclose(pa); pa = fopen( "binario3.dat" , "rb"); // leitura em modo binário if ( pa == NULL ) { printf ("O arquivo não pôde ser aberto "); return 1; } fread (&p , sizeof (PESSOA), 1, pa ); printf("Nome: %s\n",p.nome); printf("Ano: %d\n",p.ano); fclose(pa); } 18Programação Estruturada Exercício 1) Faça um programa que leia as notas de 30 alunos de uma turma e armazene as notas em um arquivo binário. Após o armazenamento das notas no arquivo, você deve fechar o arquivo. Abra o arquivo novamente para ler todas as notas armazenadas e calcular média da turma e exibir o resultado. 19Programação Estruturada ACESSO ALEATÓRIO A ARQUIVOS 20Programação Estruturada Acesso aleatório a arquivos Todo arquivo aberto tem, associado a ele, um ponteiro para a posição atual do arquivo. Esse ponteiro é o que fornece a localização do próximo byte a ser lido ou escrito. Até o momento desenvolvemos arquivos que são acessados de forma sequencial. Através do acesso aleatório, podemos acessar e transferir dados de qualquer posição do arquivo. Para isso utilizamos a função fseek(), para modificar a posição atual do ponteiro no arquivo. 21Programação Estruturada Acesso aleatório a arquivos Função que permite posicionar o ponteiro em um ponto específico do arquivo; ̶ Sintaxe: ̶ fseek(ponteiro, qtdbytes, origem); Onde: ponteiro – ponteiro responsável pela manipulação; qtdbytes – deslocamento do ponteiro em bytes; origem – Origem do deslocamento, a partir de onde começará o deslocamento. SEEK_END -> indica o final do arquivo; SEEK_CUR -> posição atual do arquivo; SEEK_SET -> posição inicial do arquivo. A função retorna 0 se a operação obtiver sucesso. 22Programação Estruturada Acesso aleatório a arquivos ̶ Exemplos: ̶ fseek(ptarq, 0, SEEK_SET); ̶ fseek(ptarq, 100, SEEK_SET); // posiciona o ponteiro 100 bytes à direita do início do arquivo ̶ fseek(ptarq, 15, SEEK_CUR); // posiciona o ponteiro 15 bytes a partir da posição atual 23Programação Estruturada Acesso aleatório a arquivos ̶ Exemplo: #include <stdio.h> #include <stdlib.h> int main (){ float media=0, notas[30]; int i; FILE *ptarq = fopen( "binario.dat" , "r+b"); // leitura e escrita em modo binário if ( ptarq == NULL ) { printf ("O arquivo não pôde ser aberto "); return 1; } 24Programação Estruturada Acesso aleatório a arquivos for (i=0;i<30;i++){ printf("Informe uma nota: "); scanf("%f",¬as[i]); } fwrite (notas, sizeof (notas), 1, ptarq ); fseek(ptarq,0,SEEK_SET); fread(notas,sizeof(notas),1, ptarq); for (i=0;i<30;i++){ media+=notas[i]; } media/=30; printf("\nMédia: %.1f",media); fclose(ptarq); } 25Programação Estruturada A função REWIND() ̶ Posicionamento do ponteiro no início do arquivo; ̶ Função utilizada: void rewind (FILE *parq); ̶ Arquivo deve estar aberto com um modo que permita a execução das operações desejadas; ̶ Exemplo: em um arquivo aberto somente para escrita, ao posicionar o cursor novamente no início, não irá permitir outra operação que não seja escrita. 26Programação Estruturada A função FEOF() ̶ Indica se um arquivo chegou ao seu final; ̶ Pode ser utilizada tanto em arquivos texto quanto binários; ̶ EOF => valor que indicao fim do arquivo; ̶ Função utilizada: int feof (FILE *parq); ̶ Exemplo: while (!feof(ptarq)) fread(&p, sizeof(pessoa), 1,ptarq); 27Programação Estruturada Renomeando arquivos ̶ Função para renomear um arquivo. ̶ Sintaxe: ̶ rename("arquivo_antigo", "arquivo_novo"); ̶ Exemplo: if (rename("teste.txt", "teste2.txt") == 0) printf("Arquivo foi renomeado com sucesso!!! "); else printf("Erro para renomear o arquivo!"); 28Programação Estruturada Excluindo arquivos ̶ Função que remove um arquivo e retorna zero(0) se a operação for realizada com sucesso. ̶ Sintaxe: ̶ remove(arquivo); ̶ Exemplo: if (remove("teste.txt")==0) printf("Arquivo removido! "); else printf("Arquivo não foi removido! "); 29Programação Estruturada DÚVIDAS ? 30Programação Estruturada Exercício 1) Faça um programa que armazene em um arquivo binário os dados de 10 funcionários de uma loja. Utilize uma estrutura para representar os dados desses funcionários, contendo código, nome, cpf, sexo e salário. Ao final da gravação no arquivo, volte ao seu início e imprima as informações gravadas através do acesso ao arquivo. 2) Complemente o exercício anterior apresentando ao final da impressão dos dados gravados, as informações do funcionário com maior salário. 31Programação Estruturada
Compartilhar