Buscar

Atividade4

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 7 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 7 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Atividade 4 - Técnicas de Programação
1- Arquivos textuais são aqueles cujo conteúdo é formado somente por strings e podem ser abertos por editores de texto do tipo “bloco de notas”. Para essa questão, analise o código a seguir:
#include <stdio.h>
 
int main()
{
FILE *arq;
long pos,i;
char carac;
arq = fopen("conteudo.txt","r");
if(arq==NULL)
{
printf("Erro de aberura do arquivo.");
return 0;
}
fseek(arq,0,SEEK_END);
pos=ftell(arq);
printf("Pos = %ld\n",pos);
for(i=pos-1; i>=0; i--)
{
fseek(arq,i,SEEK_SET);
carac = fgetc(arq);
printf("%c",carac);
}
return 0;
}
Assinale a alternativa que você julgue ser a correta.
R: O programa faz a impressão do arquivo em ordem inversa. O trecho com as linhas “ fseek(arq,0,SEEK_END);” e “ pos=ftell(arq);” servem para coletar o tamanho do arquivo.
2- Ao manipularmos arquivos, alguns cuidados ou estilos devem ser tomados para garantir ao programa um maior grau de eficiência e segurança. Dentre as afirmativas a seguir, identifique V para verdadeiro e F para falso.
( ) arquivos binários tendem a demandar menos espaço em relação aos arquivos texto devido ao fato de que os espaços alocados fisicamente são proporcionados pelos tamanhos dos tipos de dados utilizados;
( ) em toda operação envolvendo arquivos, é sempre conveniente testar se a operação, por exemplo, abertura, escrita e leitura, foram bem sucedidas;
( ) é mais conveniente abrir um arquivo sempre para leitura e escrita para evitar testes de acesso pelo sistema operacional, tornando, portanto, o programa mais eficiente;
( ) é conveniente abrir o arquivo com o modo justo para a demanda, ou seja, caso for realizada apenas leitura de informações, abrir o arquivo somente para leitura. Dessa forma, o programa torna-se mais seguro em relação ao acesso às informações.
Assinale a alternativa que tenha a sequência correta.
R: V, V, F, V.
3- Para essa questão, suponha que um certo arquivo mantém, em sua primeira posição, a quantidade de registros armazenados. Após o indicativo da quantidade, são gravados os valores na forma <int,float>. Desta forma, o arquivo consiste em:
<qtd_registros><int1><float1><int2><float2>...<intn,floatn>.
Para essa questão, analise o código a seguir e preencha as lacunas de modo a representar o processo de criação de um arquivo novo e gravação de três registros.
#include <stdio.h>
 
void GravaArq(FILE *arq, int val_i,float val_f)
{
fwrite(&val_i,sizeof(____),1,arq);
fwrite(&val_f,sizeof(____),1,arq);
}
 
 
int main()
{
FILE *arq;
int qtd=3;
arq=fopen("exercicio.dat","___");
if(arq==NULL)
{
printf("Erro de abertura do arquivo (1).\n");
return 0;
}
fwrite(&qtd,sizeof(int),1,arq);
GravaArq(arq,0,2.1);
GravaArq(arq,10,45.21);
GravaArq(arq,20,345.87);
fclose(arq);
return 0;
}
Assinale a alternativa que você julgue ser a correta.
R: . int ; float ; wb .
4- Suponha a existência de um arquivo onde a primeira posição indica a quantidade de registros armazenados. Após o indicativo da quantidade, o arquivo armazena valores na forma <int,float>. Desta forma, o arquivo consiste em:
<qtd_registros><int1><float1><int2><float2>...<intn,floatn>.
Para essa questão, analise o código a seguir e preencha a lacuna de modo que o programa imprima os valores relativos ao terceiro par “<int><float>”.
#include <stdio.h>
 
int main()
{
FILE *arq;
int valor_int;
float valor_float;
arq=fopen("exercicio.dat","rb+");
if(arq==NULL)
{
printf("Erro de abertura do arquivo.\n");
return 0;
}
fseek(arq,_______________,SEEK_SET);
fread(&valor_int,sizeof(int),1,arq);
fread(&valor_float,sizeof(float),1,arq);
printf("Terceiro registro: int=%d float=%f\n",valor_int,valor_float);
fclose(arq);
return 0;
}
Assinale a alternativa que você julgue ser a correta.
R: ( sizeof(int)+sizeof(float))*2+sizeof(int).
5- Na programação em C, podemos encontrar duas formas distintas de se abrir um arquivo (textual ou binária) aliadas aos modos que esse arquivo será manipulado. Para essa questão, analise o código a seguir, que manipula um arquivo binário, e preencha a lacuna corretamente.
. . .
FILE *arq;
int codigo;
char buffer[35]="algo a ser escrito no arquivo\n";
arq=fopen("exercicio.dat","____");
if(arq==NULL)
{
printf("Erro de abertura do arquivo.\n");
return 0;
}
...
if(!fread(&codigo,sizeof(int),1,arq)) //caso o arquivo ainda esteja vazio
codigo=0;
else
codigo++;
...
if(!fwrite(&codigo,sizeof(int),1,arq))
printf("erro na gravacao do codigo.\n");
else
if(!fwrite(buffer,35,1,arq))
printf("Erro na gravacao do buffer.\n");
fclose(arq);
. . .
Considerando que, caso o arquivo não exista, será criado um novo e caso exista, os dados deverão ser mantidos, assinale a alternativa que corresponda ao preenchimento da lacuna.
R: ab+
6- Para a manipulação de um arquivo, deve-se antes, realizar a sua abertura através do comando “ fopen()”. Tal comando permite associar o nome físico do arquivo assim como a sua forma de abertura. Para essa questão, analise as linhas de código a seguir:
FILE *arq;
arq = fopen(“arquivo.dat”,”wb+”);
Assinale a alternativa que você julgue ser a correta.
R: Será aberto um arquivo binário “ arquivo.dat” permitindo-se operações de leitura e de escrita. Sempre será criado um arquivo novo, destruindo o conteúdo caso já exista um arquivo com o mesmo nome.
7- Em arquivos textuais, quando desejamos substituir uma informação com o mesmo tamanho da nova informação, podemos realizar sobrescrita sem a necessidade de criação de arquivo temporário para receber a nova versão do conteúdo. Para essa questão, analise o código a seguir, que realiza a troca do caractere “i” pelo caractere “y” na primeira linha do arquivo. Em sua análise preencha as lacunas.
#include <stdio.h>
#include <string.h>
 
int main()
{
FILE *arq;
char linha[40];
long pos;
int i;
arq=fopen("atividade.txt","___");
if(arq==NULL)
{
printf("Erro de abertura do arquivo.\n");
return 0;
}
pos=_____; //armazenar a posicao corrente do ponteiro de arquivo.
fgets(linha,40,arq);
for(i=0;i<strlen(linha);i++)
if(linha[i]=='i')
linha[i]='y';
_____; //reposicionar no ponto anterior aa leitura
_____; //gravacao da linha.
fclose(arq);
return 0;
}
Assinale a alternativa que você julgue ser a correta.
R: r+ ; ftell(arq) ; fseek(arq,pos,SEEK_SET); fputs(linha,arq) .
8- Em uma operação de recuperação de informações a partir de um arquivo, após a leitura de um item, deve-se sempre verificar se o final do arquivo foi alcançado. A informação de EOF ( End-Of-File - Final de Arquivo) pode ser obtida em diversas operações. Para essa questão, analise as linhas de código a seguir:
I - info = fgetc(arq);
II - fputs(buffer, sizeof(buffer), arq);
III - fread(buffer,sizeof(buffer),1,arq);
IV - fputc(carac,arq);
Assinale a alternativa que você julgue ser a correta.
R: Apenas a função da linha III não pode retornar EOF.
9- Quando se manipula um arquivo, às vezes temos a necessidade de alterar informações ou incluir novas. Para tanto, funções “ fseek()”, “ fgets()”, “ fputs()”, “ fgetc()” e “ fgets()” podem ser utilizadas. Dentre as alternativas a seguir, assinale V para verdadeiro e F para falso.
( ) a função “ fseek()“ não admite valores negativos para o seu deslocamento mesmo quando utilizada com o parâmetro “SEEK_CUR”;
( ) no caso de gravarmos uma informação no meio do arquivo, a informação será sobrescrita;
( ) no caso de gravarmos uma informação no meio do arquivo, toda a informação abaixo do ponto a receber a nova informação será deslocada;
( ) a função “ fseek()“ admite três pontos de referência para o seu deslocamento: a partir do início do arquivo (SEEK_SET), a partir da posição corrente (SEEK_CUR) e a partir do fim do arquivo (SEEK_END).
Assinale a alternativa que você julgue ter a sequência correta.
 
R: F, V, F, V.
10- Em algumas situações, temos a necessidade de conhecermos a quantidade de palavras em um arquivo textual. Para essa questão, analise o código a seguir e preencha as lacunas.
#include <stdio.h>
 
int ContPalavras(char linha[])
{
int cont=0,i=0,esp=0;
for(;linha[i]!='\x0';i++)
{
if((!esp) && (linha[i]!=' '))
{
esp=1;
cont++;
}
else
if(esp && (linha[i]==''))
esp=0;
}
return cont;
}
int main()
{
FILE *arq;
char linha[40];
int cont=0;
arq=fopen("atividade.txt","___");
if(arq==NULL)
{
printf("Erro de abertura do arquivo.\n");
return 0;
}
while(1)
{
____(linha,40,arq);
cont+=ContPalavras(linha);
if(____)
break;
}
printf("Qtd de palavras = %d\n",cont);
fclose(arq);
return 0;
}
Assinale a alternativa que você julgue ser a correta.
R: . r ; fgets ; feof(arq) .

Continue navegando