Вы находитесь на странице: 1из 10

Registros

E com registros?

Registros
Exemplo leitura...:
typedef struct {
char nome[20];
float media;
}tipo_aluno;
tipo_aluno a;
tipo_aluno vet[100];
fread(&a,sizeof(tipo_aluno),1,f);
//lendo um registro;
fread(&vet,sizeof(tipo_aluno),100,f); /
/lendo o vetor todo
fread(&vet,sizeof(vet),1,f); //lendo o
vetor todo;

Registros
Exemplo escrita:
typedef struct {
char nome[20];
float media;
}tipo_aluno;

tipo_aluno a;
tipo_aluno vet[100];
fwrite(&a,sizeof(tipo_aluno),1,f); //escrevendo
um registro;
fwrite(&vet,sizeof(tipo_aluno),100,f); //
escrevendo o vetor todo
fwrite(&vet,sizeof(vet),1,f); // escrevendo o
vetor todo;

Como acessar um dado ou


registro sem
precisar ler o arquivo
seqencialmente?

_Funo:
fseek (ponteiro_para_arquivo,
posicao_relativa, marcao);

Posiciona o ponteiro para arquivo


binrio,
relativamente marcao indicada:
SEEK_SET incio do arquivo
SEEK_CUR posio corrente do arquivo
SEEK_END final do arquivo

Exemplo fseek e registros


#include<stdio.h>
#include<stdlib.h>

typedef char Disc[5]; //definindo um tipo


de dado novo
typedef struct{
int RA;
char nome[30];
Disc matriculas[6]; //vetor do novo tipo
definido Disc
float CR;
}tipo_Reg_aluno;

Exemplo fseek e registros


int main(){
FILE *f;
tipo_Reg_aluno Vet[2] = {
{12436, "Maria", {"MC102", "MA141", "F 128",
"F 129"}, 0.0},
{12232, "Joo", {"MC202", "MA211", "F 228",
"F 229"}, 0.8}
};
tipo_Reg_aluno aux;
f = fopen ("dados_aluno.bin", "wb"); //crio o
arquivo
fwrite(Vet, sizeof(tipo_Reg_aluno), 2, f);
//gravo o vetor inteiro no arquivo

fclose(f); //fecho o arquivo

Exemplo fseek e registros


f = fopen ("dados_aluno.bin", "r+b"); //abro
novamente para alterar

fseek(f, 2 * sizeof(tipo_Reg_aluno),
SEEK_SET);
//posiciono o ponteiro no segundo registro
fread(&aux, sizeof(tipo_Reg_aluno), 1, f);
//leio o registro e guardo em aux
aux.RA = 61122; //altero o ra do aluno
fseek(f, 2 * sizeof(tipo_Reg_aluno), SEEK_SET);
//posiciono o ponteiro denovo no registro
fwrite(&aux, sizeof(tipo_Reg_aluno), 1, f);
//Sobrescrevo o registro atualizado no arquivo
fclose(f); //fecho o arquivo

Exerccio 1

Dado o arquivo numeros.bin que possui


em sua primeira posio
um inteiro que indica a quantidade de
elementos de um vetor e
nas demais posies valores inteiros:
Ex: 100 10 5 15 21 3 99 101 458 22 ....
a) Escreva um programa que leia os
elementos do arquivo e
guarde-os em um vetor;
b) Verifique se cada nmero primo;
c) Armazene os nmeros primos em um
novo arquivo binrio que
deve ter o seguinte formato:

na primeira posio a quantidade de


primos
Nas demais posies os nmeros primos
Utilize a funo ehprimo para verificar se
um nmero primo para
verificar se cada nmero primo

Exerccio 1

// --------------------funo eh
primo-----------------------------------------int ehprimo (int n){ // n o parmetro de
entrada
int resto,i, primo=1; //define primo como
verdadeiro
for (i=2;i<n;i++){ // divide o n por todos os
anteriores
resto = n % i;
if (resto == 0)
primo=0;
} if (
primo)
return 1; // retorna verdadeiro, primo
else
return 0; // retorna falso, no primo
} //------------------------------------------------------------------------------

Exerccio 2

Baseando-se no exemplo Exemplo


fseek e registros altere
o programa para que ele atualize o CR
de uma aluno
informado pelo usurio. O usurio
informa o RA do aluno e
o novo CR.
O programa deve localizar o aluno pelo
RA e atualizar o
registro no arquivo.

MC-102
Algoritmos e
Programao
de Computadores
Prof. Ariel Vargas
Unicamp
Arquivos Binrios

Arquivos

_ Arquivos Texto
_ Podem ser manipulados por um
editor de texto comum
_ Os dados so gravados como
caracteres de 8 bits (1
byte). Ex:
_ O nmero 12345678 ocupa 8 bytes, ou seja,
64 bits

_ Arquivos Binrios
_ Dados so gravados na forma binria
_ Costumam ser mais compactos. Ex:
_ O nmero 12345678 ocupa 4 bytes
(considerado-se uma
mquina na qual um nmero inteiro
representado por 32
bits)

_ Indicados para armazenar grandes


quantidades de
valores numricos

Arquivos binrios, qual a


vantagem?
Como Manipular Arquivos
Binrios?

_ Da mesma forma que um


arquivo texto:
_ preciso abrir o arquivo antes
de realizar
leitura/escrita
_ preciso fechar o arquivo aps
realizar
leitura/escrita

Arquivos Binrios
_ Para abrir e fechar uma arquivo
binrio usa-se, da mesma
forma, as funes: (no muda nada!!!)

_ Abrir um arquivo:
_ ponteiro_para_arquivo = fopen
(nome_arquivo, modo_abertura);

_ Fechar um arquivo:
_ fclose (ponteiro_para_arquivo);

Arquivos Binrios
_ Alguns modos de abertura: (tem um
b agora)
endereco_memoria, tamanho_tipo_de_dado,
numero_elementos, ponteiro_para_arquivo

Lendo e escrevendo Vetores de um


arquivo binrio
#include<stdio.h>
#include<stdlib.h>
int main(){
int i, v[20] = {0, 1, 2, 3 ,4, 5, 6, 7, 8, 9,10, 11, 12, 13, 14, 15, 16, 17,
18, 19};
int v2[20];
FILE *f; //ponteiro para arquivo
int n = 20;
f = fopen ("vetor.bin", "wb"); //crio o arquivo para gravao
fwrite(&n,sizeof(int),1,f); //gravo n na primeira posio do arquivo
for (i=0;i<n;i++)
fwrite(&v[i],sizeof(int),1,f); //gravo o vetor posio a posio
fclose(f); //fecho o arquivo
f = fopen ("vetor.bin", "rb"); //abro novamente para leitura
fread(&n,sizeof(int),1,f); //leio a primeira posio q contem a
quantidade de elementos do vetor
printf("%d\n",n); //imprimo a quantidade na tela
for (i=0;i<n;i++){
fread(&v2[i],sizeof(int),1,f); //leio cada posio do vetor e
armazeno em v2 na tela
printf("%d ",v2[i]) ; //imprimo cada posio de v2

_ rb - abre arquivo binrio para leitura


_ wb - cria arquivo binrio para gravao,
eliminando o contedo
anterior, se houver
_ ab - abre ou cria um arquivo binrio para
gravao em seu final
_ r+b - abre arquivo binrio para leitura e
gravao no incio
_ w+b - cria arquivo binrio para
leitua/gravao no incio

_ a+b - abre ou cria arquivo binrio para


leitura no incio e
gravao no final

Arquivos Binrios
Ler dados de um arquivo binrio:
fread (endereco_da_variavel,
tamanho_tipo_de_dado,
numero_elementos,
ponteiro_para_arquivo);
Ex:
Int n;

fread(&n, sizeof(int), 1, f);


endereco_memoria, tamanho_tipo_de_dado,
numero_elementos, ponteiro_para_arquivo

Arquivos Binrios
Escrever dados em um arquivo binrio:
fwrite (endereco_da_variavel,
tamanho_tipo_de_dado,
numero_elementos,
ponteiro_para_arquivo);
Ex:
Int n = 10;

fwrite(&n, sizeof(int), 1, f);

Вам также может понравиться