Você está na página 1de 3

Universidade Federal do ABC (UFABC)

Centro de Matemática, Computação e Cognição (CMCC)

PRÁTICA DE APRENDIZAGEM

Tema: Introdução a Arquivos (Algoritmos e Estruturas de Dados II)


Professor: Carlo Kleber da Silva Rodrigues
Aluno: _________________________________________________________________________
Matrícula nº: _________________________Data: _____/_____/_______

ORIENTAÇÃO GERAL

Cada QUESTÃO proposta deverá ter em sua solução, quando pertinente e mesmo que não citado no texto do
problema:
a) o algoritmo da solução;
b) a análise de complexidade de tempo (pior caso);
c) a análise de complexidade de espaço (pior caso);
d) o código fonte do programa escrito na linguagem de programação C *(ou na linguagem de sua preferência);
e) utilize a ferramenta Dev-C++ (http://www.bloodshed.net/) *(ou alguma de sua preferência)

QUESTÃO 1
Digite o código a seguir. Compile e execute. O que esse programa faz? Qual é a entrada? Qual é o resultado (saída)?
Encontrou algum erro? Se encontrou, conserte-o! Qual a complexidade assintótica de pior caso (tempo e espaço)?
Justifique suas respostas.

//Exemplo: Abrindo, gravando e fechando arquivo


#include <stdio.h>
#include <conio.h>
#include <iostream>
#include <math.h>

int main(void)
{
FILE *pont_arq; // cria variável ponteiro para o arquivo
char palavra[20],c; // variável do tipo char/string
char texto_str[20];

//abrindo o arquivo com tipo de abertura w (gravacao)


pont_arq = fopen("arquivo_palavra.txt", "wt");

//testando se o arquivo foi realmente criado


if(pont_arq == NULL)
{
printf("Erro na abertura do arquivo!");
return 1;
}

printf("Escreva uma palavra para testar gravacao de arquivo: ");


scanf("%s", palavra);

//usando fprintf para armazenar a string no arquivo


fprintf(pont_arq, "%s", palavra);

//usando fclose para fechar o arquivo

fclose(pont_arq);

printf("Dados gravados com sucesso!");

// leitura do arquivo: letra a letra

1/3
Universidade Federal do ABC (UFABC)
Centro de Matemática, Computação e Cognição (CMCC)

puts("\n");

//abrindo o arquivo com tipo de abertura r (leitura)


pont_arq = fopen("arquivo_palavra.txt", "r");

do
{
//faz a leitura do caractere no arquivo apontado por pont_arq
c = getc(pont_arq);

//exibe o caractere lido na tela


printf("%c" , c);
// getch();

}while (c != EOF);

fclose(pont_arq);

puts("\n");

// leitura do arquivo : texto


//abrindo o arquivo com tipo de abertura r (leitura)
pont_arq = fopen("arquivo_palavra.txt", "r");

//enquanto não for fim de arquivo o looping será executado


//e será impresso o texto

while(fgets(texto_str, 20, pont_arq) != NULL)


printf("%s", texto_str);

//fechando o arquivo
fclose(pont_arq);

getch();
return(0);
}

QUESTÃO 2
Digite o código a seguir. Compile e execute. O que esse programa faz? Qual é a entrada? Qual é o resultado (saída)?
Encontrou algum erro? Se encontrou, conserte-o! Qual a complexidade assintótica de pior caso (tempo e espaço)? Qual
a diferença deste código para o código da questão anterior? Justifique suas respostas.
#include <stdio.h>
int main(void)
{
register int i;
FILE *pa;
float saldo[100];

/* abre para gravacao */


if((pa=fopen("saldo", "wb"))==NULL) {
printf("Nao foi possivel abrir o arquivo.");
return 1;
}

for(i=0; i<100; i++) saldo[i] = (float) i;

/* isto salva toda a matriz saldo em um unico passo */

2/3
Universidade Federal do ABC (UFABC)
Centro de Matemática, Computação e Cognição (CMCC)

fwrite(saldo, sizeof saldo, 1, pa);


fclose(pa);

/* zera a matriz */
for(i=0; i<100; i++) saldo[i] = 0.0;

/* abre para leitura */


if((pa=fopen("saldo","rb"))==NULL) {
printf("Nao foi possivel abrir o arquivo");
return 1;
}

/* isto le toda a matriz saldo de uma unica vez */


fread(saldo, sizeof saldo, 1, pa);

/* exibe o conteudo da matriz */


for(i=0; i<100; i++) printf("%f ", saldo[i]);

fclose(pa);
return 0;
}.

QUESTÃO 3
Escreva um algoritmo para manter uma lista telefônica de uma dada cidade brasileira em um arquivo. Considere que o
número de assinantes seja 100 mil habitantes, depois que seja 1 milhão de habitantes, finalmente que seja 10 milhões
de habitantes. Para realizar consultas, inserções e remoções, você deve poder informar nomes e/ou números. Que tipo
de arquivo você indicaria (sequencial, sequencial indexado, indexado, direto)? Qual a complexidade assintótica de pior
caso (tempo e espaço)? Como você estimaria o número de acessos ao arquivo no caso de operações de consulta,
inserção e remoção de assinantes? Essa estimativa variaria em função do número de assinantes? Seria um mesmo tipo
de algoritmo independentemente do número de assinantes? Justifique suas respostas.

FIM

Juntos somos melhores! 😊

3/3

Você também pode gostar