A maior rede de estudos do Brasil

Grátis
10 pág.
TÉCNICAS DE PROGRAMAÇÃO Atividade 4

Pré-visualização | Página 1 de 2

TÉCNICAS DE PROGRAMAÇÃO – Atividade 4
· 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
	
	
	
	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.
	
	
	
	
		Resposta Selecionada:
	
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.
	Resposta Correta:
	
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.
	Feedback da resposta:
	Parabéns! Sua resposta foi a correta! Realmente o programa exibe o conteúdo do arquivo em ordem reversa. Para posicionar em cada caractere do arquivo, foi realizado um laço de repetição iniciando-se no penúltimo elemento visto que o último corresponde, justamente, ao EOF.
	
	
	
· Pergunta 3
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 4
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 5
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 6
1 em 1 pontos
	
	
	
	Suponha que existe, em um arquivo textual, uma matriz 4x4 que relaciona os custos de um certo produto A (linhas) combinado com um produto B (colunas) como ilustra o exemplo a seguir: 
00 03 06 02 
03 00 04 07 
06 04 00 01 
02 07 01 00 
O produto não poderá ser combinado com ele mesmo. Por exemplo, combinando-se o produto dois com o produto três, teremos o valor 01. Cada valor de custo é representado, sempre, por dois caracteres e separados por um espaço em branco. Analise o código a seguir que imprima, na tela, o custo da combinação solicitada pelo usuário e preencha as lacunas. 
#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 
int main() 
{ 
char linha[30],custoStr[3]; 
int prodA,prodB,i=0; 
FILE *arq; 
arq=fopen("matrizcustos.txt","___"); 
if(arq==NULL) 
{ 
printf("Erro de abertura de arquivo origem."); 
return 0; 
} 
printf("Produto A (de 0 a 3):"); 
scanf("%d",&prodA); 
printf("Produto B:(de 0 a 3): "); 
scanf("%d",&prodB); 
for(;i<=prodA;i++) 
____(linha,30,arq); 
printf("linha selecionada: %s\n",linha); 
strncpy(custoStr,&linha[___],2); 
custoStr[3]='\x0'; 
fclose(arq); 
printf("Custo = %d",atoi(custoStr)); 
return 0; 
} 
Assinale a alternativa que você julgue ser a correta.
	
	
	
	
		Resposta Selecionada:
	 
. r ; fgets ; prodB*3 .
	Resposta Correta:
	 
. r ; fgets ; prodB*3 .
	Feedback da resposta:
	Parabéns! Sua resposta foi a correta! Você associou