Buscar

TÉCNICAS DE PROGRAMAÇÃO_av2

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

• Pergunta 1 
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 . 
Comentário 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 2 
1 em 1 pontos 
 
Existem duas formas para a criação de vetores: a primeira consiste em uma definição que não utiliza efetivamente ponteiros (tal 
como: “ int vet[5]; ”) e a segundo através da utilização de ponteiros (como por exemplo, “ int *vet; ”). Para essa questão, assinale 
com “V” a(s) linha(s) de código que apresentar o acesso correto à uma posição de um vetor instanciado como ponteiro e, com 
“F” a(s) linha(s) que apresentar uma codificação errada. Suponha que se deseja acessar a posição 3: 
 
 
 
 
( ) y = (*vet)[3] 
( ) y = vet[3] 
( ) y = *(vet+3) 
( ) y = *(vet+sizeof(int)*3) 
 
 
Assinale a alternativa que apresente a sequência que você julgue ser a correta. 
 
Resposta Selecionada: 
F, V, V, F. 
Resposta Correta: 
F, V, V, F. 
Comentário da 
resposta: 
Parabéns! Sua resposta foi a correta! Realmente, os vetores mapeados como ponteiros poderão ser 
acessados como um vetor sem o mapeamento por ponteiro (com em “ vet[3]”) ou através do conteúdo 
do início do vetor deslocado N bytes, como é o caso de “ *(vet+3)”. 
 
 
• Pergunta 3 
1 em 1 pontos 
 
Na definição do protótipo da função, em sua interface, temos que definir o tipo de retorno da função e, também, a lista de 
parâmetros. Para essa questão, suponha o trecho de código a seguir: 
 
#include <stdio.h> 
#include <stdlib.h> 
 
int func(int a, int __b, char __c[]) 
{ 
 a +=++__b; 
 itoa(a,c,10); 
 return a; 
} 
 
int main() 
{ 
 char c[10]; 
 int x=5, y=6; 
 printf("%d %s %d %d",func(x,&y,c),c,x,y); 
} 
 
 
Escolha a afirmativa que contém o resultado da impressão pela função “ printf” e os trechos a serem inseridos nas 
lacunas: 
 
Resposta Selecionada: 
.12 12 ; * ; deixar em branco ; * . 
Resposta Correta: 
.12 12 ; * ; deixar em branco ; * . 
 
Comentário da 
resposta: 
Parabéns! Sua resposta foi a correta! Você observou bem o fato de que a chamada da função, dentro do 
programa principal, requer uma passagem por valor para a variável “x” e uma passagem por referência 
para a variável “y”. Isso implica em “ int func(int a, int *b, char __c[])“ e, 
consequentemente, “ a +=++(*b);”. Uma string sempre é passada por referência – sendo assim, não 
necessita o uso de “ *”. 
 
• Pergunta 4 
0 em 1 pontos 
 
A manipulação de ponteiros, apesar de extremamente útil para diversas situações, requer um cuidado especial para que não 
sejam acessadas posições indevidas de memória. Para essa questão, suponha o seguinte código: 
 
 
#include <stdio.h> 
 
 
int main() 
{ 
int a, b, *p; 
b = 0; 
p = &b; 
a = *p; 
a = 10; 
(*p)++; 
--a; 
(*p) += a; 
printf("a = %d\tb = %d\tp = %d",a,b,*p); 
return 0; 
} 
 
 
 
Assinale a alternativa que contém os valores de “ a ”, “ b ” e do conteúdo de “ p ”, respectivamente. 
Resposta Selecionada: 
10, 10, 10. 
Resposta Correta: 
9, 10, 10. 
Comentário da 
resposta: 
Infelizmente a sua resposta está incorreta. Para responder essa questão, analise melhor a posição de 
memória referenciada pelo ponteiro “ p”. Verifique a sua correlação com as demais variáveis, assim 
você obterá o valor correto delas. 
 
 
• Pergunta 5 
0 em 1 pontos 
 
Uma matriz esparsa é aquela formada com a maioria de suas células tendo o valor 0. Sendo assim, não é necessário o 
armazenamento de toda a estrutura da matriz e, sim, somente das células que contém valores não nulos. Para essa questão, 
analise o código a seguir e preencha as lacunas: 
 
 
typedef struct 
{ 
int coluna; 
float valor; 
} ESPARSA; 
. . . 
int **matriz; 
 
 
matriz = (____)malloc(sizeof(____)*QtdLinhas); 
 
for(i=0; i<QtdLinhas; i++) 
{ 
matriz[i] = (____)malloc(sizeof(____)*QtdElementos); 
AdicionaElementosLinha(matriz[i],ListaElementos); 
} 
 
 
Assinale a alternativa que apresenta a sequência correta para o preenchimento das lacunas. 
Resposta Selecionada: 
int * ; int ; int * ; int. 
Resposta Correta: 
int ** ; int ; int * ; int. 
Comentário da 
resposta: 
Infelizmente a sua resposta está incorreta. Para responder essa questão, reflita sobre o fato do 
número de elementos ser variável. Sendo assim, compensa ter uma coluna com um tamanho fixo, pré-
determinado? 
 
 
• Pergunta 6 
1 em 1 pontos 
 
Um ponteiro para ponteiro denota uma variável que armazena um valor através de uma dupla indireção. Sendo assim, um 
ponteiro referência um outro ponteiro que, por sua vez, aponta para um valor específico. Para essa questão, analise o código a 
seguir: 
 
 
#include <stdio.h> 
 
 
int main() 
 
{ 
int a = 10, *pont, **pontpont; 
pont = &a; 
pontpont = &pont; 
a = 12; 
printf("pont = %d\t pontpont: %d\n", *pont,**pontpont); 
return 0; 
} 
 
 
Assinale a alternativa que apresenta os valores impressos pela função “ printf() ”. 
Resposta Selecionada: 
12 12. 
Resposta Correta: 
12 12. 
Comentário da 
resposta: 
Parabéns! Sua resposta foi a correta! Você observou bem que as variáveis “ a”, “ pontpont” e “ pont” 
referenciam a mesma posição de memória. Sendo assim, o valor a ser impresso corresponde ao 
próprio valor de “ a”. 
 
 
• Pergunta 7 
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+. 
Comentário 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 sempreseria 
criado. Então, sobra o modo “ a+”. Pelo fato de aparecer “ fwrite()” e “ fread()”, então, o arquivo é binário. 
Sendo assim, “ ab+”. 
 
• Pergunta 8 
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 . 
Comentário 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 9 
1 em 1 pontos 
 
Gerar números aleatórios tem a sua serventia em diversas situações, tais como geração de sequências para testes de 
softwares, solução inicial em problemas de otimização e definição do intervalo de tempo para o reenvio de informações em 
redes de computadores. Para o teste, imaginemos um cenário onde dois jogares disputam uma partida de lançamento de dados 
– ganha aquele que obtiver maior pontuação no dado lançado. Para simular esse cenário, imaginemos o código abaixo: 
 
#include <stdio.h> //arquivo header para a funcao printf() 
#include <stdlib.h> //arquivo header para as funcoes srand() e rand() 
#include <time.h> //arquivo header para a funcao time() 
 
 
void Compara(int __jog1, int __jog2) 
{ 
 if(jog1 > jog2) printf("Jogador 1 vencedor (1=%d x 2=%d)\n",jog1,jog2); 
 else if (jog1 < jog2) printf("Jogador 2 vencedor!(1=%d x 2=%d)\n",jog1,jog2); 
 else printf("Empate (%d)\n",jog1); 
} 
 
___ Dado() 
{ 
 return ____; 
} 
 
 
int main() 
{ 
 srand(time(NULL)); 
 Compara(Dado(),Dado()); 
 return 0; 
} 
 
 
Assinale a opção abaixo que contenha os trechos de código para preencher as lacunas (o caracter “_” significa para deixar a 
lacuna vazia): 
Resposta Selecionada: 
. __ ; __ ; int ; (rand()%6)+1 . 
Resposta Correta: 
. __ ; __ ; int ; (rand()%6)+1 . 
Comentário da 
resposta: 
Parabéns! Sua resposta foi a correta! Realmente nenhuma função requer passagem de parâmetros por 
referência pois o único valor retornado é feito através do retorno da função “ Dado()”. A geração do 
número aleatório segue a forma “ (rand()%6)+1” pois a soma por um impede a geração do valor 0 e o 
resto da divisão define o valor limite superior do número gerado. 
 
 
• Pergunta 10 
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) . 
Comentário 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. 
 
 
Sexta-feira, 10 de Dezembro de 2021 18h23min11s BRT

Continue navegando