Buscar

TÉCNICAS DE PROGRAMAÇÃO Atividade 4

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 10 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 10 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 9, do total de 10 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

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ê associoucorretamente os trechos de código às lacunas observando de maneira certa o modo de abertura do arquivo (“ r”), a função de leitura de uma linha a partir de um arquivo textual (“ fgets()”) e o deslocamento dentro da linha (“ prodB*3”).
	
	
	
· Pergunta 7
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.
	
	
	
· Pergunta 8
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 9
1 em 1 pontos
	
	
	
	Na linguagem C, encontramos dois tipos de arquivos: os arquivos textuais e os arquivos binários. Nos arquivos textuais, as informações são gravadas como strings, independentes de seu tipo; porém, para tal, devemos usar algumas funções específicas. Para os comandos abaixo, assinale com (T) aquele(s) que serve(m) unicamente para arquivos textuais, com (B) para arquivos binários e, com (A) aquele(s) que serve(m) para ambos. 
( ) fwrite() 
( ) fputs() 
( ) fputc() 
( ) fread() 
( ) fopen() 
Assinale a alternativa cuja ordem você julgue ser correta.
	
	
	
	
		Resposta Selecionada:
	 
B, T, T, B, A.
	Resposta Correta:
	 
B, T, T, B, A.
	Feedback da resposta:
	Parabéns! Sua resposta foi a correta! As funções “ fputs()” e “ fputc()” são utilizadas exclusivamente nos arquivos textuais para a gravação de strings e de caracter, respectivamente. Para os arquivos binários, utiliza-se “ fwrite()” e “ fread()”. A abertura é realizada por meio da função “ fopen()” independentemente do tipo do arquivo.
	
	
	
· Pergunta 10
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+”.

Outros materiais