Você está na página 1de 9

Manipulao de Arquivos

At o momento, todos os programas que foram criados solicitavam ao usurio os


dados que o programa manipulava. Uma vez terminado o programa, todos os dados
introduzidos, ou mesmo os resultados do programa, eram perdidos, pois no eram
armazenados de forma definitiva num repositrio permanente.
As estruturas de dados manipuladas fora do ambiente do programa so conhecidas
como arquivos. Considera-se como ambiente do programa a memria principal, onde
nem sempre possvel manter certas estruturas de dados, pois esses dados so perdidos
depois do programa terminado.
A utilizao de arquivos pode ser vista em dois sentidos distintos:
1. O arquivo a fonte de dados para o programa: nesse caso trata-se de um
arquivo de entrada de dados (input).
2. O arquivo o destino dos dados gerados pelo programa: nesse caso trata-se de
um arquivo de sada de dados (output).
Funes de Acesso
Ser utilizada a funo FILE (stdio.h), que contm informaes adicionais sobre a
condio atual do arquivo a ser manipulado como: posio corrente de um registro
dentro do arquivo, modo de operao do arquivo entre outras informaes necessrias
para o dilogo com o Sistema Operacional.
Declarao: FILE *<nome_do_arquivo_lgico>
Onde: nome_do_arquivo_lgico o nome que escolhemos para a varivel de
arquivo.
Exemplo: FILE *arquivo;
fopen () abre um arquivo associando-o a uma estrutura que ser alterada de acordo
com as atualizaes necessrias e retornando um ponteiro para essa estrutura.
Modo
Significado
r
abre um arquivo para leitura
w
cria um arquivo para escrita
a
Acrescenta dados para um arquivo existente
r+
Abre um arquivo para leitura/escrita
w+
Cria um arquivo para leitura/escrita
a+
Acrescenta dados ou cria um arquivo para leitura e escrita.
Declarao: fopen (nome_do_arquivo_lgico , Modo)
fclose () tem por funo fechar o arquivo.
Declarao: close (<nome_do_arquivo_lgico>);
Exemplo: close (arquivo);
feof () verifica o final de arquivo. Caso o encontre, retorna verdadeiro.
1

Declarao: feof (<nome do arquivo lgico>)


Exemplo: feof (arquivo).
fprintf() tem a tarefa de salvar os dados em um arquivo.
Declarao: fprintf (<nome_do_arquivo_lgico>,<varivel>);
Exemplo: fprintf(arquivo,palavra);
fscanf() tem a tarefa de recuperar dados de um arquivo.
Declarao: fscanf (<nome_do_arquivo_lgico>,<varivel>).
Exemplo: fscanf (arquivo,palavra);
Aula prtica
Antes de iniciar a aula prtica, crie uma pasta chamada de modelos no drive C.
1) Criar na pasta modelos o arquivo texto Estacio.txt, escrever neste arquivo a palavra
linguagem em uma linha e a palavra programao em outra linha.
#include <stdio.h>
main() {
FILE *arquivo; // Cria varivel Arquivo
arquivo = fopen ("c:\\modelos\\Estacio.txt", "w"); // Cria arquivo Estacio.txt
fprintf(arquivo,"Linguagem\n"); // salva dado (Linguagem )
fprintf(arquivo,"Programao\n"); // salva dado (Programao)
fclose (arquivo);
// Fecha Arquivo.
}
2) Agora a sua vez:
a) Criar na pasta modelos o arquivo texto ourinhos.txt, escrever neste arquivo a palavra
estacio em uma linha e a palavra engenharia em outra linha.
#include <stdio.h>
main() {
FILE *arquivo;
arquivo = fopen ("c:\\modelos\\ourinhos.txt", "w");
fprintf(arquivo,"estacio\n");
fprintf(arquivo,"engenharia\n");
fclose (arquivo);
}
b) Criar na pasta modelos o arquivo texto engenharia.txt, escrever neste arquivo a
palavra produo em uma linha, palavra civil e automao em outra linha.
_______________________________________________________________________
_______________________________________________________________________
_______________________________________________________________________
2

_______________________________________________________________________
_______________________________________________________________________
_______________________________________________________________________
_______________________________________________________________________
_______________________________________________________________________
3) Acrescentar vrias palavras em um arquivo (palavra.txt).
#include <stdio.h>
#include <iostream.h>
main() {
FILE *arquivo;
// Cria varivel arquivo
int quantidade, x;
arquivo = fopen ("c:\\modelos\\palavra.txt", "w"); // cria e abre o arquivo
char palavra[30];
cout << "Quantidade de palavras : ";
cin >> quantidade;
for (x=1; x<=quantidade; x++){ // repete quantidade vezes.
cout << "palavra : ";
cin >> palavra;
strcat (palavra,"\n"); // concatena ou junta a mudana da linha na palavra.
fprintf(arquivo,palavra);
}
fclose (arquivo);
}
Aprendemos a salvar dados em um arquivo.
Agora, vamos aprender a recuperar esses dados.

4) Recupere os dados do arquivo Estacio.txt. Lembre-se que no programa anterior eram


somente duas palavras (linguagem e programao).
#include <stdio.h>
#include <iostream.h>
main() {
FILE *arquivo; // criao do arquivo lgico
char palavra[30];
// a palavra a ser recuperada tem no mximo 30 letras.
arquivo = fopen ("c:\\modelos\\Estacio.txt","r"); // o modo r abre para leitura
fscanf (arquivo,"%s", &palavra);
// l a primeira palavra,
cout << "palavra : "<< palavra<< "\n";
// exibe na tela a primeira palavra
fscanf (arquivo,"%s", &palavra);
// l a segunda palavra
cout << "palavra : "<< palavra<< "\n";
// exibe na tela a segunda palavra
fclose (arquivo);
// fecha o arquivo
system("pause");
}
5) Agora a sua vez:
a) Recupere os dados do arquivo ourinhos.txt. Lembre-se que no programa anterior eram
somente duas palavras (estacio e engenharia).
#include <stdio.h>
#include <iostream.h>
main() {
FILE *arquivo;
char palavra[30];
arquivo = fopen ("c:\\modelos\\ourinhos.txt","r");
fscanf (arquivo,"%s", &palavra);
cout << "palavra : "<< palavra<< "\n";
fscanf (arquivo,"%s", &palavra);
cout << "palavra : "<< palavra<< "\n";
fclose (arquivo);
system("pause");
}

6) Verifique o exerccio 3. Vamos recuperar vrias palavras usando um comando de


repetio.
#include <stdio.h>
#include <iostream.h>
main() {
FILE *arquivo;
int quantidade, x;
arquivo = fopen ("c:\\modelos\\palavra.txt", "r");
char palavra[30];
for ( ; ; ) {
// loop infininto, no sei quantas palavras h no arquivo.
if (feof(arquivo)) {
break;
// cancela a repetio
}
fscanf (arquivo,"%s", &palavra);
cout << "Palavra : " << palavra<<"\n";
}
fclose (arquivo);
system ("pause");
}
Aplicao Prtica - Votao
Crie um programa com menu de opes (visualizao abaixo) que realize a eleio do
melhor professor da sala.
Menu 01

Menu 02

[ 1 ] Votao
[ 2 ] Resultado parcial
[ 3 ] Fim

[ 1 ] Marcelo
[ 2 ] Erivelton
[ 3 ] Lazanha

#include <stdio.h>
#include <iostream.h>
#include <string.h>
// funcao que cria um menu.
int menu(){
int opcao;
system ("cls");
cout << " ============================\n";
cout << " [ 1 ] Votao \n";
cout << " [ 2 ] Resultado Parcial \n";
5

cout << " [ 3 ] Fim \n";


cout << " ============================\n";
cout << "opcao: ";
cin >> opcao;
return (opcao);
}
// funcao do menu de votao
int votacao (){
int voto;
system ("cls");
cout << " ========================= \n";
cout << " [ 1 ] Marcelinho \n";
cout << " [ 2 ] Erivelton \n";
cout << " [ 3 ] Lazanha \n";
cout << " ========================= \n";
cout << " Qual o seu voto: ";
cin >> voto;
return (voto);
}
main() {
FILE *arquivo;
int opcao, voto, marcelo, erivelton, lazanha;
for (;;) { //loop infinito
opcao = menu();
if (opcao == 3){
break;
}
else if (opcao == 1){
arquivo = fopen ("c:\\modelos\\votos.txt","a+");
if (arquivo == NULL){
arquivo = fopen ("c:\\modelos\\votos.txt", "w");
}
voto = votacao();
fprintf (arquivo,"%d\n",voto);
fclose (arquivo);
}
else {
system("cls");
marcelo=0;
erivelton=0;
lazanha = 0;
arquivo = fopen ("c:\\modelos\\votos.txt","r");
if (arquivo == NULL){
6

cout<< "Arquivo nao existe \n";


}
else{
for ( ; ; ) {
fscanf (arquivo,"%d",&voto); // loop infininto, no sei quantas palavras h
no arquivo.
if (feof(arquivo)) { // se encontrar o final do arquivo, pare a busca e saia da
repetio
break;

// cancela a repetio

}
else{
if (voto==1) { marcelo++; }
if (voto==2) { erivelton++;}
if (voto==3) { lazanha++; }
}
}
cout << "Votacao parcial \n";
cout << " Marcelo : "<< marcelo <<"\n";
cout << " Erivelton : "<< erivelton <<"\n";
cout << " Lazanha : "<< lazanha <<"\n";
fclose (arquivo);
}
system("pause");
}
}
}
Aplicao prtica 02: Alterar o programa anterior, acrescentar mais professores
para a votao.
Aplicao prtica 03: Desenvolva um programa que cadastre o nome do aluno e
mais avaliaes (prova 01 e prova 02). Apresente a media e a situao de cada
aluno, de acordo com a sua mdia (6.0 ou maior est aprovado, caso contrrio,
reprovado).
#include <stdio.h>
#include <iostream.h>
#include <string.h>
// funcao que cria um menu.
int menu(){
int opcao;
system ("cls");
7

cout << " ============================\n";


cout << " [ 1 ] Cadastrar aluno \n";
cout << " [ 2 ] Situao da Sala \n";
cout << " [ 3 ] Fim \n";
cout << " ============================\n";
cout << "opcao: ";
cin >> opcao;
return (opcao);
}
main() {
FILE *arquivo;
float opcao, p1, p2, media;
char nome[30];
for (;;) { //loop infinito
opcao = menu();
if (opcao == 3){
break;
}
else if (opcao == 1){
arquivo = fopen ("c:\\modelos\\aluno.txt","a+");
if (arquivo == NULL){
arquivo = fopen ("c:\\modelos\\aluno.txt", "w");
}
system("cls");
cout << " === Cadastro de aluno === \n\n";
cout << "\t Nome do aluno : ";
cin >> nome;
cout << "\t Prova 01: ";
cin >> p1;
cout << "\t Prova 02: ";
cin >> p2;
fprintf (arquivo,"%s %f %f\n",nome,p1,p2);
fclose (arquivo);
}
else {
system("cls");
cout << "============================ \n";
cout << "
Relatorio
\n\n";
arquivo = fopen ("c:\\modelos\\aluno.txt","r");
if (arquivo == NULL){
cout<< " Nao existe relatorio disponivel \n";
}
8

else{
cout<< "nome" <<"\t\t"<<"media" <<"\t situacao\n\n";
for ( ; ; ) { // loop infininto, no sei quantas palavras h no arquivo.
fscanf (arquivo,"%s %f %f",&nome,&p1,&p2);
if (feof(arquivo)) { // se encontrar o final do arquivo, pare a busca e saia da
repetio
break;
// cancela a repetio
}
else{
media = (p1+p2)/2;
if (media >=6){
cout<< nome <<"\t\t"<<media <<"\t aprovado\n";
}
else{
cout<< nome <<"\t\t"<<media <<"\t reprovado\n";
}
}
}
fclose (arquivo);
cout << "\n ======== FIM ======== \n";
}
system("pause");
}
}
}
Aplicao prtica 04: Crie um arquivo chamado de primo.txt e preencha esse arquivo
com 10.000 nmeros primos. Use o seguinte algoritmo para gerar nmeros primos.
Pede ao utilizador para introduzir o nmero P
Se P = 1, P NO PRIMO
Se P = 2, P PRIMO.
Se P = 3 , P PRIMO
Se P par, ento P NO PRIMO.
Caso contrrio
N=3
Encontra resto da diviso (R = P % N)
Enquanto (R 0) e ( N <

) repete:

Incrementa N por 2 (N = N + 2)
Calcula R (R = P % N)
Se (R 0), P um nmero Primo!
Caso contrrio, P no primo.
Teste com os seguintes nmeros primos: 1 , 2, 193707721 e 2147483647
Teste com os seguintes nmeros NO primos: 60, 771