ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem...
Transcript of ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem...
![Page 1: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/1.jpg)
ARQUIVOS Vanessa BraganholoEstruturas de Dados e Seus Algoritmos
![Page 2: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/2.jpg)
ARQUIVO
Arquivo é um conjunto de dados, dispostos de forma sequencial
INSTITUTO DE COMPUTAÇÃO - UFF 2
ProgramaArquivo
![Page 3: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/3.jpg)
STREAM
Leitura e escrita em um arquivo é feita por meio de um stream
INSTITUTO DE COMPUTAÇÃO - UFF 3
ProgramaArquivo
01011100 1001111111011101
Stream
![Page 4: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/4.jpg)
LEITURA DE ARQUIVOS
INSTITUTO DE COMPUTAÇÃO - UFF 4
ProgramaArquivo
01011100 1001111111011101
Stream
![Page 5: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/5.jpg)
ESCRITA DE ARQUIVOS
INSTITUTO DE COMPUTAÇÃO - UFF 5
ProgramaArquivo
01011100 1001111111011101
Stream
![Page 6: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/6.jpg)
CURSOR
Um cursor é associado ao arquivo de forma a indicar a próxima posição a ser lida ou gravada
O cursor é inicializado com 0 na abertura do arquivo
O cursor é incrementado a cada operação de leitura ou escrita no arquivo
INSTITUTO DE COMPUTAÇÃO - UFF 6
![Page 7: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/7.jpg)
BUFFER
Um buffer pode ser usado para acelerar a leitura e escrita de arquivos
INSTITUTO DE COMPUTAÇÃO - UFF 7
Programa
Arquivo
01011100
10011111
Memória de Dados
11011101
01011101
Buffer
11011100
01111100 01001100
![Page 8: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/8.jpg)
BUFFER PARA LEITURA
Situação inicial: buffer vazio
INSTITUTO DE COMPUTAÇÃO - UFF 8
Programa
Arquivo
01011100
10011111
Memória de Dados
11011101
Buffer
![Page 9: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/9.jpg)
BUFFER PARA LEITURA
Programa faz operação de leitura Buffer está vazio, então dado é lido do arquivo
para o buffer, até que ele fique cheio (ou que o arquivo acabe)
INSTITUTO DE COMPUTAÇÃO - UFF 9
Programa
Arquivo
01011100
10011111
Memória de Dados
11011101
Buffer
01011101 11011100
01111100 01001100
![Page 10: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/10.jpg)
BUFFER PARA LEITURA
Programa faz operação de leitura Buffer está vazio, então dado é lido do arquivo
para o buffer, até que ele fique cheio (ou que o arquivo acabe)
Dado requisitado na leitura é enviado ao programa a partir do buffer (usando o streamque está conectado ao arquivo)
INSTITUTO DE COMPUTAÇÃO - UFF 10
Programa
Arquivo
01011100
10011111
Memória de Dados
11011101
Buffer
01011101
11011100
01111100 01001100
![Page 11: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/11.jpg)
BUFFER PARA LEITURA
Programa faz operação de leitura Buffer está vazio, então dado é lido do arquivo
para o buffer, até que ele fique cheio (ou que o arquivo acabe)
Dado requisitado na leitura é enviado ao programa a partir do buffer (usando o streamque está conectado ao arquivo)
INSTITUTO DE COMPUTAÇÃO - UFF 11
Programa
Arquivo
01011100
10011111
Memória de Dados
11011101
Buffer
11011100
01111100 01001100
![Page 12: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/12.jpg)
BUFFER PARA ESCRITA
Situação inicial: buffer vazio
INSTITUTO DE COMPUTAÇÃO - UFF 12
Programa
Arquivo
01011100
10011111
Memória de Dados
11011101
Buffer
![Page 13: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/13.jpg)
BUFFER PARA ESCRITA
Escrita vai sendo feita no buffer
INSTITUTO DE COMPUTAÇÃO - UFF 13
Programa
Arquivo
Memória de Dados
01011101
Buffer
![Page 14: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/14.jpg)
BUFFER PARA ESCRITA
Escrita vai sendo feita no buffer
INSTITUTO DE COMPUTAÇÃO - UFF 14
Programa
Arquivo
Memória de Dados
Buffer
01011101
11011100
![Page 15: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/15.jpg)
BUFFER PARA ESCRITA
Quando o buffer enche ele é automaticamente descarregado no arquivo
INSTITUTO DE COMPUTAÇÃO - UFF 15
Programa
Arquivo
Memória de Dados
01011101
Buffer
11011100
01111100 01001100
01011101
11011100
01111100
01001100
![Page 16: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/16.jpg)
BUFFER PARA ESCRITA
Quando o buffer enche ele é automaticamente descarregado no arquivo
Depois é esvaziado para aguardar novas escritas...
Essa operação se chama flush
INSTITUTO DE COMPUTAÇÃO - UFF 16
Programa
Arquivo
Memória de Dados
Buffer
01011101
11011100
01111100
01001100
![Page 17: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/17.jpg)
FLUSH
Operação de flush descarrega todo o conteúdo do buffer
Flush pode ser automático, ou forçado pelo programador (mais detalhes mais adiante nessa aula)
INSTITUTO DE COMPUTAÇÃO - UFF 17
Programa
Arquivo
01011100
10011111
Memória de Dados
11011101
01011101
Buffer
11011100
01111100
01001100
![Page 18: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/18.jpg)
TIPOS DE ARQUIVOS
INSTITUTO DE COMPUTAÇÃO - UFF 18
Arquivo Texto
Arquivo Binário
![Page 19: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/19.jpg)
ARQUIVO TEXTO
Conteúdo é apenas texto
INSTITUTO DE COMPUTAÇÃO - UFF 19
![Page 20: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/20.jpg)
ARQUIVO BINÁRIO
Conteúdo é binário
INSTITUTO DE COMPUTAÇÃO - UFF 20
![Page 21: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/21.jpg)
MANIPULAÇÃO DE ARQUIVOS EM C
Fonte:Schildt, H. C Completo e Total. Ed. McGraw-Hill
![Page 22: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/22.jpg)
ABERTURA DE ARQUIVO
Deve-se associar um stream a um arquivo e realizar uma operação de abertura
Após a abertura, informações podem ser trocadas entre o arquivo e o seu programa
A operação de abertura inicializa o cursor
![Page 23: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/23.jpg)
FECHAMENTO DE ARQUIVO
A operação de fechamento de arquivo desassocia o arquivo do stream
Libera a memória (equivalente ao free p/ memória alocada dinamicamente)
Se um arquivo aberto para escrita for fechado, o conteúdo de seu buffer associado é escrito no arquivo para evitar perda de conteúdo
BUFFER
![Page 24: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/24.jpg)
FILE
Em C, cada stream associado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE
Essa estrutura é definida no cabeçalho stdio.h, que deve ser incluído em todos os programas que manipulam arquivos
![Page 25: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/25.jpg)
FUNÇÕES
Nome Função
fopen() Abre um arquivofclose() Fecha um arquivofeof() Devolve verdadeiro se o fim do arquivo for atingidoferror() Devolve verdadeiro se ocorreu erroremove() Apaga um arquivofflush() Descarrega o buffer no arquivo
![Page 26: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/26.jpg)
EXEMPLO#include <stdio.h>#include <stdlib.h>
int main(int argc, char** argv) {
FILE *arq; //declara ponteiro para arquivo//abre arquivo
arq = fopen("dados.txt", "r");if (arq != NULL){// checa se não deu erro na abertura do arquivo
//processa arquivo
...
fclose(arq); //fecha arquivo}
else printf("Erro ao abrir arquivo\n");
}
![Page 27: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/27.jpg)
EXEMPLO#include <stdio.h>#include <stdlib.h>
int main(int argc, char** argv) {
FILE *arq; //declara ponteiro para arquivo//abre arquivo
arq = fopen("dados.txt", "r");if (arq != NULL){// checa se não deu erro na abertura do arquivo
//processa arquivo
...
fclose(arq); //fecha arquivo}
else printf("Erro ao abrir arquivo\n");
}
Nome do Arquivo
Modo de Abertura (r = leitura de arquivo
texto)
![Page 28: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/28.jpg)
EXEMPLO#include <stdio.h>#include <stdlib.h>
int main(int argc, char** argv) {
FILE *arq; //declara ponteiro para arquivo//abre arquivo
arq = fopen("dados.txt", "r");if (arq != NULL){// checa se não deu erro na abertura do arquivo
//processa arquivo
...
fclose(arq); //fecha arquivo}
else printf("Erro ao abrir arquivo\n");
}
Se houver erro na abertura, arq ficará com
valor NULL
![Page 29: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/29.jpg)
MANIPULAÇÃO DE ARQUIVOS TEXTO EM C
Fonte:Schildt, H. C Completo e Total. Ed. McGraw-Hill
INSTITUTO DE COMPUTAÇÃO - UFF 29
![Page 30: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/30.jpg)
MODOS DE ABERTURA DE ARQUIVOS TEXTOModo Significado
r Abre um arquivo texto para leitura (se não existir, retorna NULL)
w Abre um arquivo texto para escrita (se já existir, conteúdo é apagado, se não existir, será criado)
a Abre (se já existir) ou cria um arquivo texto para escrita, preservando o conteúdo já existente
r+ Abre um arquivo texto para leitura e escrita (se arquivo não existe, retorna NULL)
w+ Cria e abre um arquivo texto para leitura e escrita (se arquivo já existe, conteúdo é apagado)
a+ Abre (se já existir) ou cria um arquivo texto para leitura e escrita – cursor é posicionado no final do arquivo
![Page 31: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/31.jpg)
LEITURA E ESCRITA DE ARQUIVOS TEXTONome Função
fputc() Escreve um caractere em um arquivo
fgetc() Lê um caractere de um arquivo
fprintf() É para um arquivo o que printf() é para o console
fscanf() É para um arquivo o que scanf() é para o console
![Page 32: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/32.jpg)
EXEMPLO – LEITURA CARACTERE A CARACTEREvoid le_arquivo_caracteres() {
FILE *arq; //declara ponteiro para arquivo//abre arquivo para leituraarq = fopen("../dados.txt", "r");
if (arq != NULL){// checa se não deu erro na abertura do arquivochar c;while ((c = fgetc(arq)) != EOF) {//le char e testa se chegou ao fim
printf("%c", c); //imprime caractere lido no monitor}fclose(arq); //fecha arquivo
}else printf("Erro ao abrir arquivo\n");
}
este é um arquivo textoque tem várias linhas123
dados.txt
![Page 33: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/33.jpg)
EXEMPLO – LEITURA STRING A STRINGvoid le_arquivo_strings(){
FILE *arq; //declara ponteiro para arquivo//abre arquivo para leituraarq = fopen("../dados.txt", "r");if (arq != NULL){// checa se não deu erro na abertura do arquivo
char* s[10];fscanf(arq, "%s", &s);while (!feof(arq)) {//testa se chegou ao final do arquivo
printf("%s\n", s);fscanf(arq, "%s", &s);
}fclose(arq); //fecha arquivo
}else printf("Erro ao abrir arquivo\n");
}
INSTITUTO DE COMPUTAÇÃO - UFF 33
este é um arquivo texto que tem várias linhas123
dados.txt
![Page 34: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/34.jpg)
EXEMPLO – LEITURA STRING A STRINGvoid le_arquivo_strings(){
FILE *arq; //declara ponteiro para arquivo//abre arquivo para leituraarq = fopen("../dados.txt", "r");if (arq != NULL){// checa se não deu erro na abertura do arquivo
char* s[10];fscanf(arq, "%s", &s);while (!feof(arq)) {//testa se chegou ao final do arquivo
printf("%s\n", s);fscanf(arq, "%s", &s);
}fclose(arq); //fecha arquivo
}else printf("Erro ao abrir arquivo\n");
}
INSTITUTO DE COMPUTAÇÃO - UFF 34
A leitura poderia ter sido feita direto dentro da condição do while como no exemplo anterior
char* s[10];while(fscanf(arq, “%s”, &s) != EOF) {... }
este é um arquivo texto que tem várias linhas123
dados.txt
![Page 35: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/35.jpg)
EXEMPLO – LEITURA STRING A STRING COMO NÚMERO (CASO O ARQUIVO SÓ CONTENHA NÚMEROS)void le_arquivo_strings(){
FILE *arq; //declara ponteiro para arquivo//abre arquivo para leituraarq = fopen("../numeros.txt", "r");if (arq != NULL){// checa se não deu erro na abertura do arquivo
int n;fscanf(arq, "%d", &n);while (!feof(arq)) {//testa se chegou ao final do arquivo
printf("%d\n", n);fscanf(arq, "%d", &n);
}fclose(arq); //fecha arquivo
}else printf("Erro ao abrir arquivo\n");
}
INSTITUTO DE COMPUTAÇÃO - UFF 35
10 20 304050 60 7080
numeros.txt
![Page 36: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/36.jpg)
EXEMPLO – GRAVAÇÃO DE ARQUIVO TEXTO USANDO STRINGvoid grava_arquivo_strings(char* nomeArq) {
FILE *arq; //declara ponteiro para arquivo
//abre arquivo para gravaçãoarq = fopen(nomeArq, "w");if (arq != NULL) {// checa se não deu erro na abertura do arquivo
for (int i = 10; i < 100; i = i + 3) {fprintf(arq, "%d\n", i); //grava no arquivo
}fclose(arq);
}else printf("Erro ao abrir arquivo\n");
}
INSTITUTO DE COMPUTAÇÃO - UFF 36
![Page 37: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/37.jpg)
EXEMPLO – GRAVAÇÃO DE ARQUIVO TEXTO USANDO STRINGvoid grava_arquivo_strings(char* nomeArq) {
FILE *arq; //declara ponteiro para arquivo
//abre arquivo para gravaçãoarq = fopen(nomeArq, "w");if (arq != NULL) {// checa se não deu erro na abertura do arquivo
for (int i = 10; i < 100; i = i + 3) {fprintf(arq, "%d\n", i); //grava no arquivo
}fclose(arq);
}else printf("Erro ao abrir arquivo\n");
}
INSTITUTO DE COMPUTAÇÃO - UFF 37
Valor a ser gravado é int, então usa-se %dUsa-se os mesmos formatos que se usa no printf (%s para
string, %f para float, etc.)
![Page 38: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/38.jpg)
EXERCÍCIO
Dados dois arquivos texto contendo números dispostos de forma ordenada, gerar um arquivo equivalente ao merge dos dois arquivos, contendo todos os números presentes nos dois arquivos de entrada, mas sem repetições
void merge(char* nomeArq1, char* nomeArq2, char* nomeArqMerge)
INSTITUTO DE COMPUTAÇÃO - UFF 38
![Page 39: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/39.jpg)
ARQUIVOS BINÁRIOSINSTITUTO DE COMPUTAÇÃO - UFF 39
![Page 40: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/40.jpg)
ENTIDADES
Aplicações precisam armazenar dados sobre as mais diversas entidades, que podem ser concretas ou abstratas Funcionário de uma empresa (concreto) Carros de uma locadora de veículos (concreto) Contas-corrente dos clientes de um banco (abstrato) Ligações telefônicas dos clientes de uma empresa de telefonia (abstrato)
![Page 41: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/41.jpg)
ATRIBUTOS
Cada uma dessas entidades pode ser descrita por um conjunto de atributos Funcionário: nome, CPF, data-nascimento, salário Carro: marca, modelo, ano-fabricação, placa Conta-Corrente: agência, conta, saldo Ligações Telefônicas: data, origem, destino, duração
Os atributos também podem ser chamados de campos
![Page 42: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/42.jpg)
REGISTROS
Indivíduos dessas entidades possuem um valor para cada um desses atributos (chamados de pares atributo-valor)
Um conjunto de pares atributo-valor que identifica um indivíduo de uma entidade é chamado de registro
![Page 43: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/43.jpg)
EXEMPLOS DE REGISTROS
Funcionário: <nome, João>, <CPF, 012345678-90>, <data-nascimento, 10/04/1980>, <salário, 3000>
Carro<marca, Honda>, <modelo, Fit>, <ano-fabricação, 2010>, <placa, XYZ0123>
Conta-Corrente<agencia, 0123>, <conta, 123456>, <saldo, 2000>
Ligação Telefônica<data, 01/07/2010>, <origem, 21-2598-3311>, <destino, 21-2589-3322>, <duração, 10’36”>
![Page 44: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/44.jpg)
TABELA
Uma tabela é um conjunto ordenado de registros. Uma tabela pode ser armazenada em memória principal ou em memória secundária (disco)
Nesse segundo caso, também costuma ser chamada de arquivo
![Page 45: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/45.jpg)
EXEMPLO: ARQUIVO DE FUNCIONÁRIOS
Nome CPF Data-Nascimento Salário
João 012345678-90 10/04/1980 3000
Maria 234567890-12 25/07/1978 5000
Lúcia 345678901-23 27/04/1981 1500
IMPORTANTE: Todos os registros de uma mesma tabela possuem a mesma estrutura (mesmo conjunto de atributos/campos)
![Page 46: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/46.jpg)
PROBLEMA: ENCONTRAR REGISTROS
Problema comum de diversas aplicações: encontrar um ou mais registros em uma tabela Encontrar o empregado de nome Maria Encontrar todos os empregados que ganham 3000 Encontrar todos os empregados que nasceram em 27/04/1981
![Page 47: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/47.jpg)
CONCEITO DE CHAVE
Dados usados para encontrar um registro: chave
Chave: subconjunto de atributos que identifica um determinado registro
![Page 48: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/48.jpg)
CHAVE PRIMÁRIA E SECUNDÁRIA
Chave primária: subconjunto de atributos que identifica unicamente um determinado registro. Exemplo: CPF do funcionário ou RG do funcionário Na hipótese de uma chave primária ser formada por uma combinação de campos, essa combinação
deve ser mínima (não deve conter campos supérfluos) Eventualmente, podemos encontrar mais de uma combinação mínima de campos que forma uma chave
primária
Chave secundária: subconjunto de atributos que identificam um conjunto de registros de uma tabela. Exemplo: Nome do funcionário
![Page 49: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/49.jpg)
TABELAS
Aplicações reais lidam com várias tabelas, cada uma delas representando uma entidade
Uma aplicação de controle bancário que precisa controlar clientes, agências e contas-correntes precisaria de quais tabelas?
![Page 50: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/50.jpg)
APLICAÇÃO BANCÁRIA
Uma aplicação de controle bancário precisaria de quais tabelas? Cliente Agência Conta-Corrente
![Page 51: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/51.jpg)
CERTA REDUNDÂNCIA É NECESSÁRIA
Neste caso, é necessário correlacionar os dados, para que seja possível saber que conta pertence a que agência, e que conta pertence a que cliente
Para isso, é usual repetir a chave primária da tabela referenciada no outro arquivo
Cliente: CodCliente, Nome, CPF, Endereço Agência: CodAgencia, NumeroAgencia, Endereco Conta-Corrente: CodAgencia, CodCliente, CodConta, NumeroConta, Saldo
![Page 52: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/52.jpg)
APLICAÇÃO FINANCEIRA
Chaves primárias: Cliente: CodCliente Agência: CodAgencia Conta-Corrente: CodAgencia E CodConta
Chaves primárias alternativas: Cliente: CPF Agência: NumeroAgencia Conta-Corrente: NumeroConta
Chaves secundárias: Cliente: Nome Agência: Endereço Conta-Corrente: CodAgencia OU CodCliente OU Saldo
![Page 53: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/53.jpg)
DISCUSSÃO SOBRE CHAVES
Por quê não usar CPF como chave primária de cliente? Por quê os atributos artificiais (código)?
![Page 54: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/54.jpg)
OPERAÇÕES SOBRE ARQUIVOS BINÁRIOS
Programas que lidam com arquivos realizam os seguintes tipos de operações sobre eles: Criação: alocação e inicialização da área de dados, assim como de seus descritores Destruição: liberação da área de dados e descritores usados na representação da tabela Inserção: inclusão de novo registro na tabela Exclusão: remoção de um registro da tabela Alteração: modificação dos valores de um ou mais atributos/campos da tabela Consulta: obtenção dos valores de todos os campos de um registro, dada uma chave de entrada
![Page 55: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/55.jpg)
MANIPULAÇÃO DE ARQUIVOS BINÁRIOS EM C
Fonte:Schildt, H. C Completo e Total. Ed. McGraw-Hill
INSTITUTO DE COMPUTAÇÃO - UFF 55
![Page 56: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/56.jpg)
MODOS DE ABERTURA DE ARQUIVOS BINÁRIOSModo Significado
rb Abre um arquivo binário para leitura (se arquivo não existe, retorna NULL)
wb Abre um arquivo binário para escrita (se arquivo já existe, conteúdo é apagado, se arquivo não existe, será criado)
ab Abre um arquivo binário para escrita, preservando o conteúdo já existente (se arquivo não existe, será criado)
rb+ Abre um arquivo binário para leitura e escrita (se arquivo não existe, retorna NULL)
wb+ Cria um arquivo binário para leitura e escrita (se arquivo já existe, conteúdo é apagado)
ab+ Abre (se já existir) um arquivo binário para leitura e escrita, preservando o conteúdo já existente (escreve sempre no final do arquivo – append). Se não existir, cria arquivo.
![Page 57: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/57.jpg)
FUNÇÕES PARA MANIPULAÇÃO DE ARQUIVOS BINÁRIOS
INSTITUTO DE COMPUTAÇÃO - UFF 57
Nome Função
fseek() Posiciona o cursor em um byte específico
ftell() Retorna a posição atual do cursor
rewind() Posiciona o cursor no início do arquivo
fread() Lê dado binário do arquivo
fwrite() Escreve dado binário em arquivo
feof() Devolve verdadeiro se o fim do arquivo for atingido
ferror() Devolve verdadeiro se ocorreu erro
remove() Apaga um arquivo
fflush() Descarrega um arquivo
![Page 58: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/58.jpg)
EXEMPLO
Gravar registros de funcionários num arquivo
![Page 59: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/59.jpg)
STRUCT FUNCIONÁRIO
typedef struct Funcionario {int cod;char nome[50];char cpf[15];char data_nascimento[11];double salario;
} TFunc;
![Page 60: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/60.jpg)
SALVA FUNCIONÁRIO
// Salva no arquivo out, na posição atual do cursorvoid salva(TFunc *func, FILE *out) {
fwrite(&func->cod, sizeof(int), 1, out);//func->nome ao invés de &func->nome, //pois string já é ponteirofwrite(func->nome, sizeof(char),
sizeof(func->nome), out);fwrite(func->cpf, sizeof(char),
sizeof(func->cpf), out);fwrite(func->data_nascimento, sizeof(char),
sizeof(func->data_nascimento), out);fwrite(&func->salario, sizeof(double), 1, out);
}
![Page 61: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/61.jpg)
SALVA FUNCIONÁRIO
// Salva no arquivo out, na posição atual do cursorvoid salva(TFunc *func, FILE *out) {
fwrite(&func->cod, sizeof(int), 1, out);//func->nome ao invés de &func->nome, //pois string já é ponteirofwrite(func->nome, sizeof(char),
sizeof(func->nome), out);fwrite(func->cpf, sizeof(char),
sizeof(func->cpf), out);fwrite(func->data_nascimento, sizeof(char),
sizeof(func->data_nascimento), out);fwrite(&func->salario, sizeof(double), 1, out);
}
ORDEM é importante – posteriormente, registro
deverá ser lido nessa mesma ordem
![Page 62: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/62.jpg)
SALVA FUNCIONÁRIO
// Salva no arquivo out, na posição atual do cursorvoid salva(Funcionario *func, FILE *out) {
fwrite(&func->cod, sizeof(int), 1, out);//func->nome ao invés de &func->nome, //pois string já é ponteirofwrite(func->nome, sizeof(char),
sizeof(func->nome), out);fwrite(func->cpf, sizeof(char),
sizeof(func->cpf), out);fwrite(func->data_nascimento, sizeof(char),
sizeof(func->data_nascimento), out);fwrite(&func->salario, sizeof(double), 1, out);
}
Dado a ser gravado
Tamanho em bytes do dado a ser gravado
Número de itens a serem gravados
Arquivo destino
![Page 63: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/63.jpg)
LER UM REGISTRO DE FUNCIONÁRIO
// Le do arquivo in na posição atual do cursor// Retorna um ponteiro para funcionário lido do arquivoTFunc *le(FILE *in) {
TFunc *func = (Funcionario *) malloc(sizeof(Funcionario));if (0 >= fread(&func->cod, sizeof(int), 1, in)) {
free(func);return NULL;
}fread(func->nome, sizeof(char), sizeof(func->nome), in);fread(func->cpf, sizeof(char), sizeof(func->cpf), in);fread(func->data_nascimento, sizeof(char),
sizeof(func->data_nascimento), in);fread(&func->salario, sizeof(double), 1, in);return func;
}
![Page 64: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/64.jpg)
// Le do arquivo in na posição atual do cursor// Retorna um ponteiro para funcionário lido do arquivoTFunc *le(FILE *in) {
TFunc *func = (Funcionario *) malloc(sizeof(Funcionario));if (0 >= fread(&func->cod, sizeof(int), 1, in)) {
free(func);return NULL;
}fread(func->nome, sizeof(char), sizeof(func->nome), in);fread(func->cpf, sizeof(char), sizeof(func->cpf), in);fread(func->data_nascimento, sizeof(char),
sizeof(func->data_nascimento), in);fread(&func->salario, sizeof(double), 1, in);return func;
}
LER UM REGISTRO DE FUNCIONÁRIOLeitura na mesma ordem em que foi
feita a gravação
![Page 65: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/65.jpg)
// Le do arquivo in na posição atual do cursor// Retorna um ponteiro para funcionário lido do arquivoTFunc *le(FILE *in) {
TFunc *func = (Funcionario *) malloc(sizeof(Funcionario));if (0 >= fread(&func->cod, sizeof(int), 1, in)) {
free(func);return NULL;
}fread(func->nome, sizeof(char), sizeof(func->nome), in);fread(func->cpf, sizeof(char), sizeof(func->cpf), in);fread(func->data_nascimento, sizeof(char),
sizeof(func->data_nascimento), in);fread(&func->salario, sizeof(double), 1, in);return func;
}
LER UM REGISTRO DE FUNCIONÁRIOVariável para guardar
dado a ser lido
Tamanho em bytes do dado a ser lido
Número de itens a serem lidos
Arquivo fonte
![Page 66: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/66.jpg)
TIPOS DE ACESSO A ARQUIVOSINSTITUTO DE COMPUTAÇÃO - UFF 66
![Page 67: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/67.jpg)
TIPOS DE ACESSO A ARQUIVOS
Arquivos Sequenciais
Arquivos de Acesso Direto
INSTITUTO DE COMPUTAÇÃO - UFF 67
![Page 68: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/68.jpg)
ARQUIVO DE ACESSO SEQUENCIAL
Arquivos texto só podem ser acessados via acesso sequencial
Leitura do arquivo é feita do início ao fim, string por string
Não é possível pular diretamente para um determinado ponto do arquivo
INSTITUTO DE COMPUTAÇÃO - UFF 68
![Page 69: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/69.jpg)
ARQUIVO DE ACESSO DIRETO
Arquivo em que o acesso a um registro pode ser feito diretamente, sem ter que ler todos os registros que vêm antes dele
Pode-se pular para um determinado registro usando fseek, bastando para isso saber o endereço dele
Possível usar apenas para arquivos binários
69
![Page 70: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/70.jpg)
ENDEREÇO?
Como saber o endereço de um determinado registro?
Endereço é definido sempre como um deslocamento em relação a um ponto de partida (normalmente se usa o início do arquivo como referência)
EndereçoReg(i) = (i – 1) * tamanhoReg
onde tamanhoReg é o tamanho dos registros do arquivo, em bytes
70
![Page 71: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/71.jpg)
EXEMPLO
Tamanho Registro: CodCli = 4 bytes Nome = 10 bytes DataNascimento = 12 bytes
Total: 26 bytes por registro
71
CodCli Nome DataNascimento
10 Joao 02/12/1990
02 Maria 04/10/1976
15 Carlos 30/06/1979
04 Carolina 14/05/2000
01 Murilo 23/10/1988
![Page 72: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/72.jpg)
EXEMPLO
Endereço do Registro 3 = (3-1) * 26 = 52
Tamanho Registro: CodCli = 4 bytes Nome = 10 bytes DataNascimento = 12 bytes
Total: 26 bytes por registro
72
0
265278
104
CodCli Nome DataNascimento
10 Joao 02/12/1990
02 Maria 04/10/1976
15 Carlos 30/06/1979
04 Carolina 14/05/2000
01 Murilo 23/10/1988
![Page 73: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/73.jpg)
PARA LER O REGISTRO 3
1. Abrir o arquivo2. Calcular o endereço do registro 3
3. Avançar o cursor (fseek) para o endereço calculado4. Ler o registro
Ao terminar de ler o registro, o cursor estará posicionado no registro 4
73
![Page 74: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/74.jpg)
FSEEK
fseek(FILE *arq, long int desloc, int flag)
flag pode ser SEEK_SET: indica que deslocamento será feito a partir do início do arquivo SEEK_CUR: indica que deslocamento será feito a partir da posição atual do cursor SEEK_END: indica que deslocamento será feito a partir do final do arquivo (útil para descobrir
tamanho do arquivo, combinado com o uso da função ftell, que retorna a posição atual do cursor, em bytes)
INSTITUTO DE COMPUTAÇÃO - UFF 74
![Page 75: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/75.jpg)
EXEMPLO: DESCOBRIR O NÚMERO DE REGISTROS DE UM ARQUIVO/* * tamanho do registro, retornado pela função * tamanho_registro() é dado em bytes*/
int tamanho_arquivo(FILE *arq) {fseek(arq, 0, SEEK_END);int tam = trunc(ftell(arq) / tamanho_registro());return tam;
}
INSTITUTO DE COMPUTAÇÃO - UFF 75
![Page 76: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/76.jpg)
COLOCANDO TUDO EM AÇÃO...
Acompanhem o exemplo do tutorial de manipulação de arquivos em C, disponível no site da disciplina
![Page 77: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/77.jpg)
BUSCA EM ARQUIVO BINÁRIO
Suponha que um banco mantém seus funcionários em um arquivo (mais de 10000 funcionários)
O banco deseja dar um aumento para o funcionário de código 305
Como encontrar o funcionário no arquivo?
INSTITUTO DE COMPUTAÇÃO - UFF 77
![Page 78: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/78.jpg)
ALTERNATIVA 1 – BUSCA SEQUENCIAL
Ler arquivo do início até encontrar o funcionário Muito custoso No pior caso (funcionário não existe ou é o último), lê o arquivo inteiro
INSTITUTO DE COMPUTAÇÃO - UFF 78
![Page 79: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/79.jpg)
BUSCA SEQUENCIAL POR FUNCIONÁRIO 305
Código Nome Salário
102 Joao Silva 1000
123 Carlos Albuquerque 1500
143 Ana Bueno 1500
200 Caio Gusmao 4000
239 Bianca Amarilo 3000
254 Arnaldo Souza 4300
305 Marisa Clara 5000
403 Bruno Simao 4500
410 Guilherme Santos 2000
502 Tatiana Andrade 2500
INSTITUTO DE COMPUTAÇÃO - UFF 79
![Page 80: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/80.jpg)
BUSCA SEQUENCIAL POR FUNCIONÁRIO 305
Código Nome Salário
102 Joao Silva 1000
123 Carlos Albuquerque 1500
143 Ana Bueno 1500
200 Caio Gusmao 4000
239 Bianca Amarilo 3000
254 Arnaldo Souza 4300
305 Marisa Clara 5000
403 Bruno Simao 4500
410 Guilherme Santos 2000
502 Tatiana Andrade 2500
INSTITUTO DE COMPUTAÇÃO - UFF 80
![Page 81: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/81.jpg)
BUSCA SEQUENCIAL POR FUNCIONÁRIO 305
Código Nome Salário
102 Joao Silva 1000
123 Carlos Albuquerque 1500
143 Ana Bueno 1500
200 Caio Gusmao 4000
239 Bianca Amarilo 3000
254 Arnaldo Souza 4300
305 Marisa Clara 5000
403 Bruno Simao 4500
410 Guilherme Santos 2000
502 Tatiana Andrade 2500
INSTITUTO DE COMPUTAÇÃO - UFF 81
![Page 82: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/82.jpg)
BUSCA SEQUENCIAL POR FUNCIONÁRIO 305
Código Nome Salário
102 Joao Silva 1000
123 Carlos Albuquerque 1500
143 Ana Bueno 1500
200 Caio Gusmao 4000
239 Bianca Amarilo 3000
254 Arnaldo Souza 4300
305 Marisa Clara 5000
403 Bruno Simao 4500
410 Guilherme Santos 2000
502 Tatiana Andrade 2500
INSTITUTO DE COMPUTAÇÃO - UFF 82
![Page 83: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/83.jpg)
BUSCA SEQUENCIAL POR FUNCIONÁRIO 305
Código Nome Salário
102 Joao Silva 1000
123 Carlos Albuquerque 1500
143 Ana Bueno 1500
200 Caio Gusmao 4000
239 Bianca Amarilo 3000
254 Arnaldo Souza 4300
305 Marisa Clara 5000
403 Bruno Simao 4500
410 Guilherme Santos 2000
502 Tatiana Andrade 2500
INSTITUTO DE COMPUTAÇÃO - UFF 83
![Page 84: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/84.jpg)
BUSCA SEQUENCIAL POR FUNCIONÁRIO 305
Código Nome Salário
102 Joao Silva 1000
123 Carlos Albuquerque 1500
143 Ana Bueno 1500
200 Caio Gusmao 4000
239 Bianca Amarilo 3000
254 Arnaldo Souza 4300
305 Marisa Clara 5000
403 Bruno Simao 4500
410 Guilherme Santos 2000
502 Tatiana Andrade 2500
INSTITUTO DE COMPUTAÇÃO - UFF 84
![Page 85: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/85.jpg)
BUSCA SEQUENCIAL POR FUNCIONÁRIO 305
Código Nome Salário
102 Joao Silva 1000
123 Carlos Albuquerque 1500
143 Ana Bueno 1500
200 Caio Gusmao 4000
239 Bianca Amarilo 3000
254 Arnaldo Souza 4300
305 Marisa Clara 5000
403 Bruno Simao 4500
410 Guilherme Santos 2000
502 Tatiana Andrade 2500
INSTITUTO DE COMPUTAÇÃO - UFF 85
![Page 86: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/86.jpg)
ALTERNATIVA 2
Se arquivo está ordenado, faz busca binária
INSTITUTO DE COMPUTAÇÃO - UFF 86
![Page 87: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/87.jpg)
BUSCA BINÁRIA POR FUNCIONÁRIO 305
Código Nome Salário
1 102 Joao Silva 1000
2 123 Carlos Albuquerque 1500
3 143 Ana Bueno 1500
4 200 Caio Gusmao 4000
5 239 Bianca Amarilo 3000
6 254 Arnaldo Souza 4300
7 305 Marisa Clara 5000
8 403 Bruno Simao 4500
9 410 Guilherme Santos 2000
10 502 Tatiana Andrade 2500
INSTITUTO DE COMPUTAÇÃO - UFF 87
Lê registro do meio e compara chave buscada com a chave do
registro lido
início = 1fim = 10
meio = trunc((inicio + fim)/2) = 5 305 > 239
![Page 88: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/88.jpg)
BUSCA BINÁRIA POR FUNCIONÁRIO 305
INSTITUTO DE COMPUTAÇÃO - UFF 88
Repete procedimento na metade do arquivo correspondente (se
chave menor, na metade de cima, se chave maior, na metade de
baixo)
início = meio + 1
Código Nome Salário
1 102 Joao Silva 1000
2 123 Carlos Albuquerque 1500
3 143 Ana Bueno 1500
4 200 Caio Gusmao 4000
5 239 Bianca Amarilo 3000
6 254 Arnaldo Souza 4300
7 305 Marisa Clara 5000
8 403 Bruno Simao 4500
9 410 Guilherme Santos 2000
10 502 Tatiana Andrade 2500
![Page 89: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/89.jpg)
BUSCA BINÁRIA POR FUNCIONÁRIO 305
INSTITUTO DE COMPUTAÇÃO - UFF 89
Lê registro do meio e compara chave buscada com a chave do
registro lido
início = 6fim = 10
meio = trunc((inicio + fim)/2) = 8 305 < 403
Código Nome Salário
1 102 Joao Silva 1000
2 123 Carlos Albuquerque 1500
3 143 Ana Bueno 1500
4 200 Caio Gusmao 4000
5 239 Bianca Amarilo 3000
6 254 Arnaldo Souza 4300
7 305 Marisa Clara 5000
8 403 Bruno Simao 4500
9 410 Guilherme Santos 2000
10 502 Tatiana Andrade 2500
![Page 90: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/90.jpg)
BUSCA BINÁRIA POR FUNCIONÁRIO 305
INSTITUTO DE COMPUTAÇÃO - UFF 90
Repete procedimento na metade do arquivo correspondente (se
chave menor, na metade de cima, se chave maior, na metade de
baixo)
fim = meio - 1
Código Nome Salário
1 102 Joao Silva 1000
2 123 Carlos Albuquerque 1500
3 143 Ana Bueno 1500
4 200 Caio Gusmao 4000
5 239 Bianca Amarilo 3000
6 254 Arnaldo Souza 4300
7 305 Marisa Clara 5000
8 403 Bruno Simao 4500
9 410 Guilherme Santos 2000
10 502 Tatiana Andrade 2500
![Page 91: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/91.jpg)
BUSCA BINÁRIA POR FUNCIONÁRIO 305
INSTITUTO DE COMPUTAÇÃO - UFF 91
Lê registro do meio e compara chave buscada com a chave do
registro lido
início = 6fim = 7
meio = trunc((inicio + fim)/2) = 6 305 > 254
Código Nome Salário
1 102 Joao Silva 1000
2 123 Carlos Albuquerque 1500
3 143 Ana Bueno 1500
4 200 Caio Gusmao 4000
5 239 Bianca Amarilo 3000
6 254 Arnaldo Souza 4300
7 305 Marisa Clara 5000
8 403 Bruno Simao 4500
9 410 Guilherme Santos 2000
10 502 Tatiana Andrade 2500
![Page 92: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/92.jpg)
BUSCA BINÁRIA POR FUNCIONÁRIO 305
INSTITUTO DE COMPUTAÇÃO - UFF 92
Repete procedimento na metade do arquivo correspondente (se
chave menor, na metade de cima, se chave maior, na metade de
baixo)
inicio = meio + 1
Código Nome Salário
1 102 Joao Silva 1000
2 123 Carlos Albuquerque 1500
3 143 Ana Bueno 1500
4 200 Caio Gusmao 4000
5 239 Bianca Amarilo 3000
6 254 Arnaldo Souza 4300
7 305 Marisa Clara 5000
8 403 Bruno Simao 4500
9 410 Guilherme Santos 2000
10 502 Tatiana Andrade 2500
![Page 93: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/93.jpg)
Código Nome Salário
1 102 Joao Silva 1000
2 123 Carlos Albuquerque 1500
3 143 Ana Bueno 1500
4 200 Caio Gusmao 4000
5 239 Bianca Amarilo 3000
6 254 Arnaldo Souza 4300
7 305 Marisa Clara 5000
8 403 Bruno Simao 4500
9 410 Guilherme Santos 2000
10 502 Tatiana Andrade 2500
BUSCA BINÁRIA POR FUNCIONÁRIO 305
INSTITUTO DE COMPUTAÇÃO - UFF 93
Lê registro do meio e compara chave buscada com a chave do
registro lido
início = 7fim = 7
meio = trunc((inicio + fim)/2) = 7 305 = 305
![Page 94: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/94.jpg)
BUSCA BINÁRIA – DETALHES
Exige que se saiba o endereço de um determinado registro, para que seja possível fazer o seek no arquivo para aquele endereço Usar cálculo de endereço visto anteriormente
Exige que se saiba quantos registros o arquivo possui Usar função tamanho_arquivo vista anteriormente
INSTITUTO DE COMPUTAÇÃO - UFF 94
![Page 95: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/95.jpg)
COMPARAÇÃO
Na busca sequencial, para esse exemplo, foram lidos 7 registros até encontrar o funcionário desejado
Na busca binária, foram lidos apenas 4 registros
Assumindo que o arquivo tem n registros: Complexidade da busca sequencial: O(n) Complexidade da busca binária: O(log n)
INSTITUTO DE COMPUTAÇÃO - UFF 95
![Page 96: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/96.jpg)
EXERCÍCIO
Dado um arquivo de funcionários, ordenado, implementar uma função que faz busca binária no arquivo
/* cod é a chave buscada* *arq é o ponteiro para o arquivo* tam é o número de registros do arquivo*/
TFunc *busca_binaria(int cod, FILE *arq, int tam)
INSTITUTO DE COMPUTAÇÃO - UFF 96
![Page 97: ARQUIVOS - ic.uff.brvanessa/material/ed/07-Arquivos.pdfEm C, cada streamassociado a um arquivo tem uma estrutura de controle de arquivo do tipo FILE Essa estrutura é definida no cabeçalho](https://reader034.fdocumentos.tips/reader034/viewer/2022050214/5f6003d74fd2cc3419088d50/html5/thumbnails/97.jpg)
REFERÊNCIA
Schildt, H. C Completo e Total. Ed. McGraw-Hill
INSTITUTO DE COMPUTAÇÃO - UFF 97