Buscar

ATIVIDADE 2 GRA1033 TÉCNICAS .._

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

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

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ê viu 3, do total de 7 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

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

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ê viu 6, do total de 7 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

Prévia do material em texto

Revisar envio do teste: ATIVIDADE 2
GRA1033 TÉCNICAS DE PROGRAMAÇÃO PNA (ON) - 201920.2160.01 Unidade 2
Revisar envio do teste: ATIVIDADE 2 
Usuário JOHNNY WILLIAN LOURENCO PECEGO
Curso GRA1033 TÉCNICAS DE PROGRAMAÇÃO PNA (ON) - 201920.2160.01
Teste ATIVIDADE 2
Iniciado 21/11/19 20:50
Enviado 21/11/19 22:53
Status Completada
Resultado da tentativa 2 em 2,5 pontos  
Tempo decorrido 2 horas, 2 minutos
Resultados exibidos Respostas enviadas, Respostas corretas, Comentários
Pergunta 1
Resposta
Selecionada:
Os compiladores C/C++, para realizar a verificação de consistência de uso das funções, faz uso dos
arquivos de cabeçalhos ( headers ). Nestes arquivos, por exemplo, o protótipo das funções são declarados.
Desta forma, o compilador verifica se as chamadas implementadas estão compatíveis com as definições
das funções. Para essa questão, suponha a existência de dois arquivos: um contendo o arquivo header e
outro contendo a implementação em C .
 
(A) Arquivo header :
 
#ifndef _ARQHEADER 
#define _ARQHEADER 
  
int func1(int *, int); 
float func2(float, char []); 
void func3(int *, int *, float); 
int func4(char[],int, char); 
  
#endif 
 
(B) Arquivo de implementação
 
int main() 
{ 
  int a,b,c;              
  float f1,f2; 
  char str[20],carac; 
  c=func1(a,b);           //Linha 1 
  f2=func2(f1,str[0]);    //Linha 2 
  c=func3(&a, &b, f1);    //Linha 3 
  c=func4(str,a,carac);   //Linha 4 
  func1(&c,a);            //Linha 5 
  return 0; 
} 
 
Analisando a parte de implementação com o arquivo header, assinale a alternativa que contém os
possíveis erros que seriam acusados pelo compilador:
Minha Área
0,25 em 0,25 pontos
JOHNNY WILLIAN LOURENCO PECEGO
Resposta
Correta:
Feedback
da
resposta:
.Na linha 1, o parâmetro “ a” não está sendo passado por referência (falta o “ &”); na linha
2, está sendo passado o caracter da posição 0 e não toda a string 
“ str”; na linha 3, está sendo atribuído um valor à variável “ c” por intermédio de uma função
que nada retorna ( func3); as demais linhas estão corretas.
.Na linha 1, o parâmetro “a” não está sendo passado por referência (falta o “&”); na linha 2,
está sendo passado o caracter da posição 0 e não toda a string
“str”; na linha 3, está sendo atribuído um valor à variável “c” por intermédio de uma função
que nada retorna (func3); as demais linhas estão corretas.
Parabéns! Sua resposta foi a correta! Você fez a correspondência correta dos protótipos das
funções (interfaces) definidos no arquivo de cabeçalhos nas chamadas inseridas no programa
principal. Você observou bem que, apesar de uma função retornar um valor, não é obrigatório
fazer uso do retono no momento da chamada da função (como está codificada a linha 5).
Pergunta 2
Resposta Selecionada: 
Resposta Correta: 
Feedback
da
resposta:
Modularizar um sistema significa dividí-lo em blocos funcionais e, estes subdividí-los em funções. É
recomendável que as funções tenham o seu comportamento bem pontual, ou seja, deve ser única a
desempenhar uma função específica. Diante da questão sobre modularização, assinale com “V” a(s)
afirmativa(s) abaixo que você julgue como verdadeira(s) e, com (F), a(s) falsa(s). 
  
( ) Dificulta o processo de testes pelo fato de que, com a modularização, deve-se testar um número muito
maior de funções . 
( ) Facilita a reutilização do código pois a funcionalidade de uma função pode fazer parte de uma outra
parte do sistema. 
( ) O programa fica mais organizado, separado por funcionalidades. 
( ) A compreensão do código se torna mais exaustiva devido ao grande número de chamadas de funções
na implementação. 
  
Escolha a opção correta:
.F ; V ; V ; F .
.F ; V ; V ; F .
Parabéns! Sua resposta foi a correta! Realmente, a modularização facilita o processo de
verificação, testes, compreensão e reaproveitamento de código pelo fato de que existe uma
separação funcional do código assim como as funções são implementadas de forma mais
pontuais.
Pergunta 3
Resposta Selecionada: 
Resposta Correta: 
Feedback
da
resposta:
Para essa questão, suponha o seguinte enunciado. “A resistência de uma liga metálica se dá pelos
percentuais de utilização de carbono misturados a outros elementos, essencialmente o ferro. Suponha a
necessidade de se implementar uma função que, dada uma métrica de resistência (tipo de resistência –
suponha que existam disponíveis 10 níveis de resistência) e um volume de ferro (em toneladas) calcule e
retorne o percentual e a massa (em toneladas) de carbono a ser utilizada na liga metálica”. Para esse
enunciado foi implementada uma função cuja chamada ocorrerá na forma:
 
. . . 
float massaCarbono; 
massaCabono = CalculaQtdCarbono(tipo_resist,massaFerro, &percentual_carbono); 
.  . . 
 
Assinale a opção abaixo que represente a interface mais apropriada para a questão:
. float CalculaQtdCarbono(float, float, float); .
. float CalculaQtdCarbono(unsigned char, float, float *); .
Infelizmente a sua resposta está incorreta. Para responder essa questão,  você deve refletir
sobre o fato de a função deve retornar dois valores: um valor é representado pela massa do
carbono a ser usada na liga e, o outro, refere-se ao percentual de carbono. Reflita, também,
sobre a faixa de valores possíveis para o tipo da liga e escolha um tipo de dados mais
condizente para a referida faixa.
0,25 em 0,25 pontos
0 em 0,25 pontos
Pergunta 4
Resposta Selecionada: 
Resposta Correta: 
Feedback
da
resposta:
Na linguagem C/C++, encontramos alguns comandos capazes de modificar o fluxo de execução de um
programa: “ return ” (retorno de uma função), “ break ” (finaliza, por exemplo, um laço de repetição) e “
continue ” que volta para a linha que contém a definição do laço de repetição (por exemplo, a linha que
contém a palavra “ for ”). Para essa questão, suponha que seja necessário implementar uma função
hipotética que, passados como parâmetros os valores de “ início ” e de “ final ” de uma contagem, imprima
os elementos de acordo com o seguinte conjunto de regras: não imprimir os números ímpares; caso seja
encontrado um valor múltiplo de 5, sair de laço de repetição; caso seja encontrado o valor 48, sair da
função. Para tanto, analise o código a seguir:
 
 
#include <stdio.h> 
  
void func(int inicio, int final) 
{ 
  int i=inicio; 
  for(; i<final; i++) 
    {    
      if(i%2) ____; 
      printf("%d ",i); 
      if(!(i%5)) ____; 
      if(i==48) 
      { 
        printf("\nSaindo da funcao pois encontrou 48.\n"); 
        ____; 
      } 
    } 
  if(i==final) printf("\nsaiu do laco pelo limite da contagem\n"); 
  else printf("\nsaiu do laco pois encontrou um multiplo de 5\n"); 
} 
  
int main() 
{ 
  printf("Execucao 1:\n"); 
  func(6,15); 
  printf("Execucao 2:\n"); 
  func(46,55); 
  printf("Execucao 3:\n"); 
  func(36,39); 
  return 0; 
} 
 
Assinale a opção abaixo que contenha a ordem correta de aparição dos comandos “ return ”, “ break ” e “
continue ”:
. continue ; return ; break .
. continue ; break ; return .
Infelizmente a sua resposta está incorreta. Para responder essa questão,  reflita melhor as
regras definidas para a função e tente relacionar com os comandos “ return”, “ break” e “
continue”. Por exemplo, ao se deparar com um valor ímpar, deve-se incrementar o valor da
contagem e voltar à linha de início do laço.
Pergunta 5
Quando se implementa uma fução, devemos seguir a sintaxe da linguagem de programação utilizada e,
também, realzar a definição de sua interface de acordo com as nossas necessidades. Para essa  questão,
suponha o trecho de código a seguir:
 
#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() 
  
0 em 0,25 pontos
0,25 em 0,25 pontos
Resposta Selecionada: 
Resposta Correta:Feedback
da
resposta:
___ func1(int ___x, ___ a) 
{ 
  ___x=rand()%a; 
  return ___x*(rand()%5); 
} 
  
int main() 
{ 
  int aleat,ret; 
  int a=10; 
  srand(time(NULL));  //iniciacao do gerador de numeros aleatorios 
  for(int i=0; i<10;i++) 
    { 
      ret=func1(__aleat,a); 
      printf("valor aleatorio gerado %d: %d (limitado %d) - ret funcao: %d.\n", 
              i,aleat,a,ret); 
    } 
  return 0; 
} 
 
Escolha a afirmativa que contém o resultado da impressão pela função “ printf ” e os trechos a serem
inseridos nas lacunas:
. int ;  * ;  deixar em branco ; * ; * ; & .
.int ;  * ;  deixar em branco ; * ; * ; & .
Parabéns! Sua resposta foi a correta! Você observou bem o fato de que a variável “ aleat”,
dentro da função “ main()” não foi instanciada e que a referida instanciação ocorre dentro da
função “ func1”. Desta forma, é necessário que ela seja passada como referência. Associando
esse tipo de passagem, os demais preenchimentos são consequência.
Pergunta 6
Resposta Selecionada: 
Resposta Correta: 
Feedback
da
resposta:
Na computação, existem várias formas de representação numérica, dentre as quais, podemos citar as
representações decimal, hexadecimal, octal e binária. Para realizar a conversão, por exemplo, de um valor
formatado na base decimal para uma base K , basta realizar divisões sucessivas por K e coletar o último
quociente e todos os restos das divisões em ordem inversa.  
Suponha a necessidade de criar uma função recursiva para a conversão de um número na base decimal
para a representação binária (base 2). Para essa questão, suponha o trecho a seguir:
 
#include <stdio.h> 
 
void Dec2Bin(int n) 
{  
  if(__) printf("%d",n); 
  else 
    { 
      ___; 
      ___; 
    } 
} 
 
int main() 
{ 
  
  Dec2Bin(14); 
  return 0; 
} 
 
Assinale a opção abaixo que contenha os trechos de código para preencher as lacunas:
.  n<2 ; Dec2Bin(n / 2) ; printf("%d",n%2) .
.  n<2 ; Dec2Bin(n / 2) ; printf("%d",n%2) .
Parabéns! Sua resposta foi a correta! Você interpretou corretamente o fato de a impressão
dos restos das divisões sucessivas é realizada na ordem reversa às divisões, ou seja, a
impressão necessita ser do tipo “pós-ordem”, inserida após a chamada recursiva. Como
critério de parada, a cláusula que indica a não possibilidade de continuar as divisões por 2.
0,25 em 0,25 pontos
Pergunta 7
Resposta Selecionada: 
Resposta Correta: 
Feedback
da
resposta:
Um valor binário pode ser representado no padrão conhecido como BCD 8421 ( Binary-coded Decimal –
Decimal Codificado em Binário). Nesta codificação, os valores 8421 representam o resultado de 2 i , onde i
denota a posição do dígito dentro da palavra. Por exemplo, 1001 (2) = 1*8 + 0*4 + 0*2 +1*1 = 9 (10) . Para
essa questão, suponha o seguinte código recursivo:
 
#include <stdio.h> 
#include <string.h> 
  
int Bin2Dec(char bin[],int pos,int exp) 
{ 
  if(____) return 0; 
  return (bin[pos]-48)*exp + Bin2Dec(bin,____,____); 
} 
  
int main() 
{ 
  char binario[9]="10011101";  //valor em decimal = 157 
  printf("Valor convertido: %d", Bin2Dec(binario,strlen(binario)-1,1)); 
  return 0; 
} 
 
Assinale a opção abaixo que contenha os trechos de código para preencher as lacunas:
.  pos<0 ; pos-1 ; exp*2 .
.  pos<0 ; pos-1 ; exp*2 .
Parabéns! Sua resposta foi a correta! Realmente o código foi implementado para que a última
posição fosse evocada antes para facilitar o cálculo do expoente – à medida que se aproxima
da posição 0 (início do vetor – posição mais significativa do número binário), o expoente vai
sendo multiplicado por 2. Sendo assim, a posição foi descrementada a cada evocação da
função recursiva. A posição 0 do vetor também deveria ser manipulada – essa a razão do (
pos<0).
Pergunta 8
Quando se implementa uma fução, devemos seguir a sintaxe da linguagem de programação utilizada e,
também, realizar a definição de sua interface de acordo com as nossas necessidades. Para essa  questão,
suponha o trecho de código a seguir para procurar uma sequência dentro de uma cadeia de DNA:
 
#include <stdio.h> 
#include <string.h> 
  
___ ProcuraDNA(char ___dna[],char ___seq[],int ___ret[]) 
{ 
  int indice=0; 
  for(int i=0; i<strlen(dna); i++) 
    if(!strncmp(&(dna[i]),seq,3)) ret[indice++]=i; 
  ret[indice]=-1;   //apenas para marcar o último item adicionado 
} 
  
int main() 
{ 
  int i=0, pos[19]; 
  char str[19] = "GATGATCATGTCGTACATC",   //uma sequencia de DNA qualquer 
       seq_proc[4] = "ATG";  //Adenina, Timina, Guanina – uma cadeia exemplo 
  ProcuraDNA(str,seq_proc,pos); 
  printf("posicoes:"); 
  while(pos[i]!=-1) 
    { 
      printf("%d ",pos[i]); 
      i++; 
0,25 em 0,25 pontos
0,25 em 0,25 pontos
Resposta Selecionada: 
Resposta Correta: 
Feedback
da
resposta:
    } 
  return 0; 
} 
 
Escolha a afirmativa que contém o resultado da impressão pela função “ printf ” e os trechos a serem
inseridos nas lacunas:
. void ; deixar em branco ; deixar em branco ; deixar em branco  .
.void ; deixar em branco ; deixar em branco ; deixar em branco  .
Parabéns! Sua resposta foi a correta! Você se atentou bem ao fato de que vetores, de forma
como as strings, quando passadas como parâmetros, já denotam passagem por referência.
Sendo assim, os símbolos “*” e “&” não são necessários.
Pergunta 9
Resposta Selecionada:
 
Resposta Correta:
 
Feedback
da
resposta:
Com a recursividade, os laços de repetição são substituídos pelas chamadas recursivas. Esse tipo de
implementação tem os seus estudos aprofundados na área da computação denominada como matemática
discreta. Para essa questão, pense em uma solução recursiva, implementada em C, para resolver a
expressão 2 n. Dentre as alternativas a seguir, escolha aquela que tiver uma codificação que corresponda
à solução. 
  
Escolha a opção correta:
.  int dois_a_n(int n) { if(n == 0) return 1;  return 2*dois_a_n(n-1); } 
 .
.  int dois_a_n(int n) { if(n == 0) return 1;  return 2*dois_a_n(n-1); }
 .
Parabéns! Sua resposta foi a correta! Você observou a relação entre a condição de parada e
a variação do parâmetro passado. Como a condição de parada é 0, os parâmetros devem ser
passados de forma descrescente.
Pergunta 10
Resposta Selecionada:
 
Resposta Correta:
 
Feedback
Uma das etapas iniciais da implementação das funções consiste na definição de suas interfaces, ou seja,
definição dos tipos de retornos e de suas listas de parâmetros. Para essa questão, suponha o seguinte
enunciado: “Um certa loja apresenta um programa de incentivo aos seus vendedores atribuindo
premiações àqueles que realizaram mais vendas no mês (independentemente do valor vendido) e àqueles
que conseguiram maiores montantes de venda (maior valor vendido independentemente do número de
vendas efetuadas). As vendas estão lançadas em uma matriz – cada linha denota um vendedor e as
colunas representam as vendas de cada vendedor. A última posição das colunas de cada vendedor contém
o valor -1 indicando o término dos lançamentos. Os nomes dos vendedores estão lançados em um vetor de
strings – cada vendedor respresenta um índice do vetor“.
 
Para tanto, serão criadas as funções abaixo:
 
NomeVendedorMaiorQtdVendas( ); 
NomeVendedorMaiorValorVendas( ); 
 
Para a questão, suponha que a quantidade máxima de vendas vale 30 e os nomes têm o tamanho máximo
de 40 caracteres. Assinale a opção abaixo que contenha as interfaces das funções apropriadas ao
enunciado:
. int NomeVendedorMaiorQtdVendas(float vendas[][30], char nomes[][40], 
                                   char nomemaior[]) ; 
     float NomeVendedorMaiorValorVendas(float vendas[][30], char nomes[][40], 
                                   char nomemaior[]) .
. int NomeVendedorMaiorQtdVendas(float vendas[][30], char nomes[][40], 
                                   char nomemaior[]) ;
     float NomeVendedorMaiorValorVendas(floatvendas[][30], char nomes[][40], 
                                   char nomemaior[]) .
Parabéns! Sua resposta foi a correta! Você interpretou bem o enunciado realizando
0,25 em 0,25 pontos
0,25 em 0,25 pontos
Quinta-feira, 21 de Novembro de 2019 22h55min16s BRT
da
resposta:
corretamente o tipo de retorno das funções e seus respectivos parâmetros. Podemos reforçar
o fato da escolha do tipo “ int” para a maior quantidade de vendas (o número de vendas é um
valor inteiro) e do tipo “ float” para o valor vendido (o montande de valor é uma grandeza que
manipula os centavos, portanto, um valor do tipo real – float). Salientamos o fato de que,
quando passamos matrizes como parâmetros, temos que informar o tamanho de pelo menos
a última dimensão – essa foi o motivo de preenchermos o tamanho das colunas.
← OK

Outros materiais

Outros materiais