Professional Documents
Culture Documents
E como seria se eu
precisasse trabalhar com
uma matriz em um arquivo?
#include<stdio.h>
#include<stdlib.h>
int main(){
int i,j, m[4][5] = {0,1,2,3,4,
5,6,7,8,9,
10,11,12,13,14,
15,16,17,18,19};
int m2[4][5];
FILE *f; //ponteiro para arquivo
int l = 4;
int c = 5;
f = fopen ("mat.bin", "w+b"); //crio o arquivo para
gravao e leitura
fwrite(&l,sizeof(int),1,f); //gravo l na primeira
posio do arquivo
fwrite(&c,sizeof(int),1,f); //gravo c na segunda
posio do arquivo
fwrite(&m,sizeof(m),1,f); //gravo a matriz toda de
uma vez
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;
_Funo:
fseek (ponteiro_para_arquivo,
posicao_relativa, marcao);
#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;
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
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)
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
Arquivos Binrios
Ler dados de um arquivo binrio:
fread (endereco_da_variavel,
tamanho_tipo_de_dado,
numero_elementos,
ponteiro_para_arquivo);
Ex:
Int n;
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;