Buscar

Atividade Final - Unidade 4 - Técnicas de Programação

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 8 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 8 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

Prévia do material em texto

· Pergunta 1
1 em 1 pontos
	
	
	
	Para a manipulação de arquivos temos que, inicialmente, realizar a instanciação do ponteiro do arquivo por intermédio da operação de abertura. Para tanto, usa-se a função “ fopen()” passando como parâmetros o nome físico do arquivo e o modo de abertura. Para essa questão, suponha que o programa em questão, tenha em seu código, as seguintes linhas:
if(! fread (&item,sizeof(tipo_do_item),1,arq))
return -1;
...
if(! fwrite (&item,sizeof(tipo_do_item),1,arq))
return -2;
...
Levando em conta as linhas de código acima, o fato de que o arquivo binário deve existir previamente e as suas informações deverão ser mantidas, selecione a opção que contém a forma de abertura adequada.
	
	
	
	
		Resposta Selecionada:
	 
. arq=fopen("arq.dat","rb+"); .
	Resposta Correta:
	 
. arq=fopen("arq.dat","rb+"); .
	Feedback da resposta:
	Parabéns! Sua resposta foi a correta! O fato do código apresentar as funções “ fread()” e “ fwrite()” já determina que está sendo manipulado um arquivo binário. Como o arquivo deve existir previamente e serão realizadas operações de leitura e de escrita, o modo de abertura deverá ser, necessariamente “ rb+”.
	
	
	
· Pergunta 2
1 em 1 pontos
	
	
	
	Em diversas situações, nos arquivos textuais, faz-se necessária a substituição de palavras. Para essa questão, analise o código a seguir que coleta linha por linha de um arquivo texto e realiza a substituição de palavras. Na análise, preencha as lacunas com os códigos correspondentes.
#include <stdio.h>
#include <string.h>
 
void ProcessaLinha(char linha[],char nome_ret[],char nova_palavra[])
{
int i=0;
char tmp[40];
for(;i<strlen(linha)-strlen(nome_ret);i++)
if(!strncmp(&linha[i],nome_ret,strlen(nome_ret)))
{
strncpy(tmp,linha,i);
tmp[i]='\x0';
strcat(tmp,nova_palavra);
strcat(tmp,&linha[i+strlen(nome_ret)]);
strcpy(linha,tmp);
}
}
 
int main()
{
char linha[40],nome_ret[11],nova_palavra[11];
FILE *arq,*arqtmp;
arq=fopen("atividade.txt","___");
if(arq==NULL)
{
printf("Erro de abertura de arquivo origem.");
return 0;
}
arqtmp=fopen("atividade_tmp.txt","___");
if(arq==NULL)
{
printf("Erro de abertura do arquivo temporario.");
return 0;
}
printf("Palavra a ser substituida (ate 10 letras): ");
gets(nome_ret);
printf("Nova palavra (ate 10 letras): ");
gets(nova_palavra);
while(1)
{
fgets(linha,40,arq); //fgets() lê toda a linha até o <enter>
if(feof(arq))
break;
ProcessaLinha(linha,nome_ret,nova_palavra);
____(linha,arqtmp);
}
fclose(arq);
fclose(arqtmp);
if(remove("atividade.txt"))
printf("Erro na remocao.\n");
else if(rename("____", "____"))
printf("Erro no renomeamento.\n");
return 0;
}
Assinale a alternativa que você julgue possuir a sequência correta.
	
	
	
	
		Resposta Selecionada:
	 
. r ; w ; fputs ; atividade_tmp.txt ; atividade.txt .
	Resposta Correta:
	 
. r ; w ; fputs ; atividade_tmp.txt ; atividade.txt .
	Feedback da resposta:
	Parabéns! Sua resposta foi a correta! Você observou corretamente os tipos de abertura necessários para o arquivo origem das informações e para o arquivo temporário; e, também, a necessidade do uso da função “ fputs()” para a gravação no arquivo temporário e os parâmetros da função “ rename()”.
	
	
	
· Pergunta 3
1 em 1 pontos
	
	
	
	Uma das vantagens de um arquivo binário consiste na possibilidade do uso direto de registros (estruturas de dados). Sendo assim, pode-se gravar ou recuperar, com apenas uma operação, todos os dados inseridos em tal estrutura de dados. Para essa questão, analise o trecho de código a seguir e preencha as lacunas.
TSTRUCT ts;
. . .
arq=fopen("registros.dat","rb+");
if(arq==NULL)
{
printf("Erro de abertura do arquivo.\n");
return 0;
}
________; //posicionar no início do arquivo
printf("Item a ser localizado: ");
scanf("%d",&item);
while(1)
{
________; //ler a estrutura
if(________) //testar se foi encontrado o final de arquivo
break;
if(ts.item==item)
{
//manipulação do registro encontrado...
Assinale a alternativa que você julgue conter a sequência correta do preenchimento das lacunas.
	
	
	
	
		Resposta Selecionada:
	 
rewind(arq) ; fread(&ts,sizeof(TSTRUCT),1,arq) ; feof(arq) .
	Resposta Correta:
	 
rewind(arq) ; fread(&ts,sizeof(TSTRUCT),1,arq) ; feof(arq) .
	Feedback da resposta:
	Parabéns! Sua resposta foi a correta! Você associou corretamente as lacunas com as respectivas funções. Para o posicionamento no início do arquivo, poderia ser usada, também, a função “ fseek(arq,0,SEEK_SET)”. Devido ao fato de ser um arquivo binário, a leitura deve ser “ fread()” e o teste de final de arquivo, independentemente do modo textual ou binário, é feito pela função “ feof()”.
	
	
	
· Pergunta 4
1 em 1 pontos
	
	
	
	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.
	
	
	
	
		Resposta Selecionada:
	 
ab+.
	Resposta Correta:
	 
ab+.
	Feedback da resposta:
	Parabéns! Sua resposta foi a correta! Você observou corretamente a consideração final: “ caso o arquivo não exista, será criado um novo e caso exista, os dados deverão ser mantidos”. Caso fosse colocado “ r+”, o arquivo deveria existir para ser aberto; caso a abertura fosse “ w+”, o arquivo sempre seria criado. Então, sobra o modo “ a+”. Pelo fato de aparecer “ fwrite()” e “ fread()”, então, o arquivo é binário. Sendo assim, “ ab+”.
	
	
	
· Pergunta 5
1 em 1 pontos
	
	
	
	Linguagens estruturadas permitem que informações sejam armazenadas e recuperadas de memórias não voláteis. Porém, elas são dependentes de funções e estruturas exportadas pelo sistema operacional. Dadas as afirmativas a seguir, classifique-as V para verdadeiro e F para falso.
( ) Ponteiros de arquivos (“ FILE *”) devem ser alocados dinamicamente através do uso “ malloc()” antes de serem utilizados.
( ) Ponteiros de arquivos referenciam uma posição de memória mantida pelo sistema operacional que armazena atributos e status dos arquivos manipulados.
( ) Para a manipulação da posição corrente do arquivo podemos usar as funções “ ftell()” e “ fseek()” que devolvem e setam a posição corrente do arquivo, respectivamente.
( ) A função “fread ()” retorna EOF quando chegar ao final do arquivo.
Assinale a alternativa que você julgue ter a sequência correta.
	
	
	
	
		Resposta Selecionada:
	 
F, V, V, F.
	Resposta Correta:
	 
F, V, V, F.
	Feedback da resposta:
	Parabéns! Sua resposta foi a correta! Descritores de arquivos são estruturas mantidas pelo sistema operacional e são endereçados através dos ponteiros de arquivos, que são instanciados pelo uso da função “fopen ()”. A função “fread ()” retorna a quantidade de itens lidos.
	
	
	
· Pergunta 6
1 em 1 pontos
	
	
	
	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.
	
	
	
	
		Resposta Selecionada:
	 
Apenas a função da linha III não pode retornar EOF.
	Resposta Correta:Apenas a função da linha III não pode retornar EOF.
	Feedback da resposta:
	Parabéns! Sua resposta foi a correta! Apesar das funções das linhas II e IV serem de saída (gravação), podem retornar EOF em caso de erro. A função da linha I pode retornar EOF no caso do encontro de final de arquivo na operação de leitura. A função da linha III retorna a quantidade de itens lidos.
	
	
	
· Pergunta 7
1 em 1 pontos
	
	
	
	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.
	
	
	
	
		Resposta Selecionada:
	 
. r+ ; ftell(arq) ; fseek(arq,pos,SEEK_SET); fputs(linha,arq) .
	Resposta Correta:
	 
. r+ ; ftell(arq) ; fseek(arq,pos,SEEK_SET); fputs(linha,arq) .
	Feedback da resposta:
	Parabéns! Sua resposta foi a correta! Você deve ter notado que podemos salvar a posição do ponteiro do arquivo para que possamos restaurar a posição e sobrescrever o conteúdo. Para isso, foram usadas as funções “ ftell()” e “ fseek()”, respectivamente.
	
	
	
· Pergunta 8
1 em 1 pontos
	
	
	
	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.
	
	
	
	
		Resposta Selecionada:
	 
. r ; fgets ; feof(arq) .
	Resposta Correta:
	 
. r ; fgets ; feof(arq) .
	Feedback da resposta:
	Parabéns! Sua resposta foi a correta! Você observou bem que o programa manipula um arquivo textual apenas para operações de leitura. A contagem das palavras foi feita linha a linha, usando-se, portanto, a função “ fgets()”. O laço deve ser interrompido ao encontrar o final de arquivo – teste feito a partir do valor de retorno da função “ feof()”.
	
	
	
· Pergunta 9
1 em 1 pontos
	
	
	
	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.
	
	
	
	
		Resposta Selecionada:
	 
. int ; float ; wb .
	Resposta Correta:
	 
. int ; float ; wb .
	Feedback da resposta:
	Parabéns! Sua resposta foi a correta! Realmente, para realizar somente operações em um arquivo binário, deve-se usar o modo “ wb”. O processo de gravação ocorre mediante a utilização de “ fwrite()” onde o tamanho do item gravado deve acompanhar o tipo. No caso, foi utilizada a função “ sizeof()” vinculado ao tipo passado como parâmetro para a gravação.
	
	
	
· Pergunta 10
1 em 1 pontos
	
	
	
	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.
	
	
	
	
		Resposta Selecionada:
	 
F, V, F, V.
	Resposta Correta:
	 
F, V, F, V.
	Feedback da resposta:
	Parabéns! Sua resposta foi a correta! Pelo fato da função “ fseek()” utilizar, como parâmetro de deslocamento, um tipo “ long int”, valores negativos podem ser colocados para que seja realizado, um deslocamento de retrocesso do ponteiro do arquivo ou a partir do ponto referenciado. Assim como em vetores, a escrita em posições já gravadas provoca a sobreposição de informações.

Outros materiais