Buscar

atividade 4 A4 GRA1033 TÉCNICAS DE PROGRAMAÇÃO

Prévia do material em texto

18/10/2021 20:06 GRA1033 TÉCNICAS DE PROGRAMAÇÃO GR3342211 - 202110.ead-14912.01
https://anhembi.blackboard.com/webapps/late-course_engine_soap-BBLEARN/Controller?COURSE_ID=_671362_1 1/10
Usuário EDUARDO OLIMPIO RAMOS
Curso GRA1033 TÉCNICAS DE PROGRAMAÇÃO GR3342211 - 202110.ead-
14912.01
Teste ATIVIDADE 4 (A4)
Iniciado 04/06/21 17:39
Enviado 04/06/21 18:42
Status Completada
Resultado da
tentativa
10 em 10 pontos 
Tempo decorrido 1 hora, 2 minutos
Resultados exibidos Respostas enviadas, Respostas corretas, Comentários
Pergunta 1
Resposta Selecionada: 
Resposta Correta: 
Comentário
da resposta:
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 listagem de todos os registros armazenados no arquivo.
#include <stdio.h>
 
int main()
{
FILE *arq;
int qtd,valor_int,i;
float valor_float;
arq=fopen("exercicio.dat","___");
if(arq==NULL)
{
printf("Erro de abertura do arquivo.\n");
return 0;
}
fread(&qtd,____,1,arq);
for(i=0; i<qtd;i++)
{
____(&valor_int,sizeof(int),1,arq);
____(&valor_float,sizeof(float),1,arq);
printf("[%d] int=%d float=%f\n",i,valor_int,valor_float);
}
fclose(arq);
return 0;
}
Assinale a alternativa que você julgue ser a correta.
. rb ; sizeof(int) ; fread ; fread .
. rb ; sizeof(int) ; fread ; fread .
Parabéns! Sua resposta foi a correta! Você observou bem o fato de que, para
somente a leitura de um arquivo binário, faz-se necessário apenas o modo “ rb”
1 em 1 pontos
18/10/2021 20:06 GRA1033 TÉCNICAS DE PROGRAMAÇÃO GR3342211 - 202110.ead-14912.01
https://anhembi.blackboard.com/webapps/late-course_engine_soap-BBLEARN/Controller?COURSE_ID=_671362_1 2/10
de abertura. Arquivos binários requerem a função “ fread()” para que seja
processada a leitura do registro.
Pergunta 2
Resposta Selecionada: 
Resposta Correta: 
Comentário
da resposta:
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.
F, V, F, V.
F, V, F, V.
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 3
Resposta Selecionada: 
Resposta Correta: 
Comentário
da resposta:
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.
F, V, V, F.
F, V, V, F.
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
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> 
1 em 1 pontos
1 em 1 pontos
1 em 1 pontos
18/10/2021 20:06 GRA1033 TÉCNICAS DE PROGRAMAÇÃO GR3342211 - 202110.ead-14912.01
https://anhembi.blackboard.com/webapps/late-course_engine_soap-BBLEARN/Controller?COURSE_ID=_671362_1 3/10
Resposta Selecionada: 
Resposta Correta: 
 
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.
. r ; w ; fputs ; atividade_tmp.txt ; atividade.txt .
. r ; w ; fputs ; atividade_tmp.txt ; atividade.txt .
18/10/2021 20:06 GRA1033 TÉCNICAS DE PROGRAMAÇÃO GR3342211 - 202110.ead-14912.01
https://anhembi.blackboard.com/webapps/late-course_engine_soap-BBLEARN/Controller?COURSE_ID=_671362_1 4/10
Comentário
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 5
Resposta Selecionada: 
Resposta Correta: 
Comentário
da resposta:
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 aberturade 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.
. r ; fgets ; prodB*3 .
. r ; fgets ; prodB*3 .
Parabéns! Sua resposta foi a correta! Você associou corretamente 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”).
1 em 1 pontos
1 em 1 pontos
18/10/2021 20:06 GRA1033 TÉCNICAS DE PROGRAMAÇÃO GR3342211 - 202110.ead-14912.01
https://anhembi.blackboard.com/webapps/late-course_engine_soap-BBLEARN/Controller?COURSE_ID=_671362_1 5/10
Pergunta 6
Resposta Selecionada: 
Resposta Correta: 
Comentário
da resposta:
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.
( sizeof(int)+sizeof(float))*2+sizeof(int).
(sizeof(int)+sizeof(float))*2+sizeof(int).
Parabéns! Sua resposta foi a correta! Você analisou corretamente o fato de que o
terceiro registro corresponde ao deslocamento multiplicado por dois, pelo fato de
que a numeração do registro se inicia em zero. Além do
“(sizeof(int)+sizeof(float))*2”, deve-se adicionar o deslocamento relativo ao
valor da quantidade de registros, localizado no início do arquivo.
Pergunta 7
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.
1 em 1 pontos
18/10/2021 20:06 GRA1033 TÉCNICAS DE PROGRAMAÇÃO GR3342211 - 202110.ead-14912.01
https://anhembi.blackboard.com/webapps/late-course_engine_soap-BBLEARN/Controller?COURSE_ID=_671362_1 6/10
Resposta Selecionada: 
Resposta Correta: 
Comentário
da resposta:
V, V, F, V.
V, V, F, V.
Parabéns! Sua resposta foi a correta! Realmente, uma das vantagens dos arquivos
binários sobre os arquivos de texto é em relação ao espaço ocupado. Enquanto
que, por exemplo, o valor inteiro 345789 ocupa seis bytes nos arquivos textuais,
nos arquivos binários são utilizados apenas quatro bytes. Como um arquivo pode
apresentar problemas, por exemplo, nos próprios dispositivos de I/O (Input/Output
– Entrada/Saída), é conveniente testar se a operação foi bem-sucedida. Por fim, é
também conveniente abrir o arquivo com o modo adequado à operação para tornar
o programa mais seguro em relação ao acesso e manutenção das informações.
Uma informação sobre eficiência que merece destaque é que deve-se evitar o uso
das funções “ fprintf()” e “ fscanf()” devido ao fato de que elas realizam
formatações dos valores manipulados aumentando-se, portanto, o tempo de
processamento. Para maior eficiência, deve-se utilizar as funções “ fwrite()” e
“ fread()”.
Pergunta 8
Resposta
Selecionada:
Resposta
Correta:
Comentário
da resposta:
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.
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.
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.
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
1 em 1 pontos
18/10/2021 20:06 GRA1033 TÉCNICAS DE PROGRAMAÇÃO GR3342211 - 202110.ead-14912.01
https://anhembi.blackboard.com/webapps/late-course_engine_soap-BBLEARN/Controller?COURSE_ID=_671362_1 7/10
realizado um laço de repetição iniciando-se no penúltimo elemento visto que o
último corresponde, justamente, ao EOF.
Pergunta 9
Resposta
Selecionada:
Resposta
Correta:
Comentário
da resposta:
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.
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.
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.
Parabéns! Sua resposta foi a correta! Você observou bem que foi incluído o
símbolo ”+”, que indica que operações de escrita poderão ser realizadas além das
operações de escrita do símbolo “w”. O “w” indica ainda, que sempre será criado
um arquivo novo, destruindo o conteúdo do arquivo caso já exista. Além destas
informações, encontramos o símbolo “b” denotando que o arquivo a ser aberto
será do tipo binário.
Pergunta 10
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. 
1 em 1 pontos
1 em 1 pontos
18/10/2021 20:06 GRA1033 TÉCNICAS DE PROGRAMAÇÃO GR3342211 - 202110.ead-14912.01
https://anhembi.blackboard.com/webapps/late-course_engine_soap-BBLEARN/Controller?COURSE_ID=_671362_1 8/10
Segunda-feira, 18 de Outubro de 2021 20h06min07s BRT
Resposta
Selecionada:
Resposta Correta:
Comentário
da resposta:
fclose(arq); 
return 0; 
} 
Assinale a alternativa que você julgue ser a correta.
. r+ ; ftell(arq) ; fseek(arq,pos,SEEK_SET);
fputs(linha,arq) .
. r+ ; ftell(arq) ; fseek(arq,pos,SEEK_SET);
fputs(linha,arq) .
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.
18/10/2021 20:06 GRA1033 TÉCNICAS DE PROGRAMAÇÃO GR3342211 - 202110.ead-14912.01
https://anhembi.blackboard.com/webapps/late-course_engine_soap-BBLEARN/Controller?COURSE_ID=_671362_1 9/10
18/10/2021 20:06 GRA1033 TÉCNICAS DE PROGRAMAÇÃO GR3342211 - 202110.ead-14912.01
https://anhembi.blackboard.com/webapps/late-course_engine_soap-BBLEARN/Controller?COURSE_ID=_671362_1 10/10

Continue navegando