Buscar

TP_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 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 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. 
 
Resposta 
Selecionada: 
 
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. 
Resposta 
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. 
Feedback 
da 
resposta: 
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 2 
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 
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”). 
 
 
• Pergunta 3 
1 em 1 pontos 
 
Suponha a existência de um arquivo textual onde as palavras são 
separadas pelo caractere “$” e pelo caractere “%”. Suponha também, que 
há a necessidade de se implementar um programa para imprimir, na tela, o 
conteúdo do referido arquivo de modo que, ao encontrar o caractere “$” 
imprime-se um espaço em branco e, ao encontrar o “%” pula-se para a linha 
seguinte da tela. 
Para essa questão, analise o código a seguir e preencha as lacunas. 
#include <stdio.h> 
 
 
int main() 
{ 
FILE *arq; 
char carac; 
arq=fopen("texto.txt","___"); 
if(arq==NULL) 
{ 
printf("Erro de abertura do arquivo.\n"); 
return 0; 
} 
while(1) 
{ 
carac = ____(arq); 
if(___) 
break; 
switch(carac) 
{ 
case '$': 
carac = ' '; 
break; 
case '%': 
carac = '\n'; 
break; 
} 
printf("%c",carac); 
} 
fclose(arq); 
return 0; 
} 
Assinale a alternativa que você julgue ser a correta. 
 
Resposta Selecionada: 
. r ; getc ; carac == EOF. 
Resposta Correta: 
. r ; getc ; carac == EOF. 
Feedback 
da 
resposta: 
Parabéns! Sua resposta foi a correta! Você associou 
acertadamente o modo de abertura de arquivo textual para 
somente leitura (parâmetro “r”), usou a função correta para ler 
um caractere do arquivo textual (“ getc()”) e testou corretamente o 
fim do arquivo (“ carac == EOF”). 
 
• Pergunta 4 
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 5 
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 6 
0 em 1 pontos 
 
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. 
Resposta Selecionada: 
(sizeof(int)+sizeof(float))*3+sizeof(int). 
Resposta Correta: 
(sizeof(int)+sizeof(float))*2+sizeof(int). 
Feedback 
da 
resposta: 
Infelizmente a sua resposta está incorreta. Para responder essa 
questão, reflita melhor sobre quantos bytes deverão ser 
deslocados para se chegar ao terceiro registro sabendo-se que 
o primeiro registro vem logo em seguida do campo que 
corresponde à quantidade de registros no arquivo. 
 
 
• Pergunta 7 
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 8 
0 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); fputc(linha,arq) . 
Resposta Correta: 
. r+ ; ftell(arq) ; fseek(arq,pos,SEEK_SET); fputs(linha,arq) . 
Feedback da 
resposta: 
Infelizmente a sua resposta está incorreta. Para responder essa 
questão, reflita e tente responder à questão: como poderemos 
reposicionar o ponteiro do arquivo para que possamos 
sobrescrever o conteúdo do arquivo? 
 
 
• Pergunta 9 
1 em 1 pontos 
 
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. 
 
Resposta Selecionada: 
V, V, F, V. 
Resposta Correta: 
V, V, F, V. 
Feedback 
da 
resposta: 
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 10 
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()”.

Outros materiais