Buscar

Atividade 2_Bloco_2_Tecnicas_de_Programação_Resposta

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
	
	
	
	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() 
  
___ 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: 
	
	
	
	
		Resposta Selecionada: 
	
. int ;  * ;  deixar em branco ; * ; * ; & . 
	Resposta Correta: 
	
.int ;  * ;  deixar em branco ; * ; * ; & . 
	Feedback da resposta: 
	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 2 
1 em 1 pontos
	
	
	
	Para a evocação de uma função, algumas informações deverão ser armazenadas, como o endereço da linha que contém a evocação (registrador PC – Program Counter – Contador de Programa), para que, quando a função for finalizada, o computador saiba voltar ao ponto de chamada. Dentre as afirmativa abaixo, assinale com “V” aquela(s) que você julgar estar correta e, com “F”, a(s) falsa(s). 
  
( ) As informações para o retorno, em função da evocação da função, são empilhadas em uma região da memória principal do computador chamada “ stack” (pilha). 
( )  Não precisamos nos preocupar com a quantidade de evocações aninhadas (uma função chamando outra e assim por diante, em uma ação de profundidade) independentemente dos dispositivo para o qual estamos implementando nosso código. 
( ) Funções recursivas são aquelas que demandam muito recurso da máquina. 
( ) O sistema operacional também empilha as informações decorrentes das funções associadas às interrupções do computador. 
  
Assinale a alternativa abaixo que contenha a sequência que você julgue ser a correta: 
	
	
	
	
		Resposta Selecionada: 
	
.V; F; F; V. 
	Resposta Correta: 
	
.V; F; F; V. 
	Feedback da resposta: 
	Parabéns! Sua resposta foi a correta! Realmente, o sistema operacional deve salvar o endereço da linha na qual ocorreu a evocação da função para que se possa, ao término da função, voltar à linha subsequente à chamada. Esse salvamento ocorre em uma estrutura de pilha ( stack) da memória principal. Essa região de pilha pode ser extremamente limitada em ambientes com pouca memória, tal como nos sistemas embarcados. As interrupções da máquina são tratadas, superficialmente falando, de forma análoga às funções. 
	
	
	
 Pergunta 3 
1 em 1 pontos
	
	
	
	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: 
	
	
	
	
		Resposta Selecionada: 
	
.  n<2 ; Dec2Bin(n / 2) ; printf("%d",n%2) . 
	Resposta Correta: 
	
.  n<2 ; Dec2Bin(n / 2) ; printf("%d",n%2) . 
	Feedback da resposta: 
	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. 
	
	
	
 Pergunta 4 
1 em 1 pontos
	
	
	
	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++; 
    } 
  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: 
	
	
	
	
		Resposta Selecionada: 
	
. void ; deixar em branco ; deixar em branco ; deixar em branco  . 
	Resposta Correta: 
	
.void ; deixar em branco ; deixar em branco ; deixar em branco  . 
	Feedback da resposta: 
	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 5 
1 em 1 pontos
	
	
	
	Recursividade é uma técnica que permite a escrita de códigos de forma mais sucinta porém faz uso de forma mais massivo da pilha de memória. Para essa questão, analise o código a seguir: 
  
#include <stdio.h> 
  
int f(int a, int b) 
 { 
   if(!b)return a; 
   return f(b, a % b); 
 } 
  
int main() 
{ 
  int x=3, y=10; 
  printf("%d",f(x,y)); 
} 
  
Escolha a opção correta: 
	
	
	
	
		Resposta Selecionada: 
	
.O código calcula o MDC (Máximo Divisor Comum) usando o algoritmo de Euclides. 
	Resposta Correta: 
	
.O código calcula o MDC (Máximo Divisor Comum) usando o algoritmo de Euclides. 
	Feedback da resposta: 
	Parabéns! Sua resposta foi a correta! Você lembrou bem que a fórmula de Euclides é originalmente recursiva:   MDC(a,b) = MDC(b,r) onde, “ r”= resto da divisão de “ a” por “ b”. 
	
	
	
 Pergunta 6 
1 em 1 pontos
	
	
	
	Em algumas situações, como inversão de vetores, surge a necessidade de implementar uma função que realiza a troca de dois elementos entre si, ou seja, o elemento “ vet[i] ” recebe o valor de “ vet[j] ” e “ vet[j] ” recebe o valor de “ vet[i] ”. Sendo assim, pode-se codificar uma função que realizará exatamente essa permuta. Para essa questão, considere o código apresentado a seguir:
 
 
#include <stdio.h> 
#include <string.h> 
  
void swap(char __c1, char __c2) 
{ 
  char tmp; 
  tmp = __c1; 
  __c1 = __c2; 
  __c2 = tmp; 
} 
  
void Ordena(char str[]) 
{ 
  for(int i=0; i < strlen(str)-1; i++) 
    for(int j=i+1; j < strlen(str); j++) 
      if(str[i]>str[j]) swap(__str[i],__str[j]); 
} 
  
int main() 
{ 
  char str[11]="icbjdgfeah"; 
  printf("Vetor original: %s\n",str); 
  Ordena(str); 
  printf("Vetor ordenado: %s\n",str); 
  return 0; 
} 
 
Assinale a opção abaixo que contenha os elementos para preencher as lacunas (nas opçõesabaixo, o símbolo ”_” significa deixar a lacuna sem preenchimento): 
	
	
	
	
		Resposta Selecionada: 
	
. * ; * ; * ; * ; * ; * ; & ; & . 
	Resposta Correta: 
	
. * ; * ; * ; * ; * ; * ; & ; & . 
	Feedback da resposta: 
	Parabéns! Sua resposta foi a correta! Você observou que, apesar da função “ swap” manipular elementos do vetor, foram passadas posições específicas, ou seja, foram passados apenas caracteres. Sendo assim, é necessário passar as referências dos itens “ str[i]” e “ str[j]” para que as alterações realizadas dentro da função “ swap” tenham validade na função “ Ordena”. 
	
	
	
 Pergunta 7 
1 em 1 pontos
	
	
	
	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 ”: 
	
	
	
	
		Resposta Selecionada: 
	
. continue ; break ; return . 
	Resposta Correta: 
	
. continue ; break ; return . 
	Feedback da resposta: 
	Parabéns! Sua resposta foi a correta! Realmente, para pular os ímpares, deve-se incrementar o contador de contagem e voltar ao início do laço de repetição, usando, para tal, o “ continue”. Por sua vez, a finalização do laço (quando for múltiplo de 5) é conseguido pelo comando “ break”. Por fim, para encerrar totalmente a função, ao se deparar com o valor 48, utiliza-se o comando “ return”. 
	
	
	
 Pergunta 8 
1 em 1 pontos
	
	
	
	Para essa questão, suponha o seguinte enunciado: “O imposto de renda incidirá sobre o salário de todos os assalariados de modo que o desconto seja proporcional ao seu salário e de acordo com as faixas de valores”. Para esse enunciado foi implementada uma função cuja chamada ocorrerá na forma:
 
. . . 
float salarioLiquido; 
salarioLiquido = CalculaIRPF(salario_bruto, &imposto_retido); 
.  . . 
 
Assinale a opção abaixo que represente a interface mais apropriada para a questão: 
	
	
	
	
		Resposta Selecionada: 
	
.  float CalculaIRPF(float, float *);  . 
	Resposta Correta: 
	
.  float CalculaIRPF(float, float *);  . 
	Feedback da resposta: 
	Parabéns! Sua resposta foi a correta! Você interpretou corretamente o enunciado observando bem os valores retornados pela função. Os valores retornados devem ser passados como referência usando o símbolo “ *” no protótipo da função e “ &” na chamada da função. 
	
	
	
 Pergunta 9 
1 em 1 pontos
	
	
	
	Na interface das funções, podemos encontrar as variáveis passadas por valor e as variáveis passadas por referência. Para essa questão, analise as afirmativas abaixo: 
  
I – Na passagem por valor, as modificações realizadas internamente à função não impactam sobre o valor da variável na origem da chamada da função. 
II – Na passagem por referência, qualquer alteração dentro da função, automaticamente altera o valor da variável na origem pois ambas possuem o mesmo endereço de memória. 
III – No código: “ func(int a , float *b)”, a variável “ a” é passada por referência enquanto que a variável “ b” é passada por valor. 
IV – Para realizar modificações ou acessar o conteúdo de variáveis passadas por referência, deve-se  usar variável precedida pelo sinal “ &” para indicar o seu conteúdo. Por exemplo, na função “ func(int a , float *b)”, para se instanciar a variável “ b”, dentro do código, usaremos, por exemplo: “ &b = 5;”. 
  
Escolha a alternativa abaixo que você julgue ser a correta: 
	
	
	
	
		Resposta Selecionada: 
	
.Apenas as afirmativas II e II estão corretas. 
	Resposta Correta: 
	
.Apenas as afirmativas II e II estão corretas. 
	Feedback da resposta: 
	Parabéns! Sua resposta foi a correta! Realmente, a passagem de parâmetros por referência, a posição de memória é a mesma da variável origem, o que proporciona que ambas as variáveis estarão sempre sincronizadas. O acesso às variáveis passadas por referência, no caso do função da afirmativa IV, é feito mediante o uso do símbolo “*” (por exemplo, “ &b = 5;”). 
	
	
	
 Pergunta 10 
1 em 1 pontos
	
	
	
	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: 
	
	
	
	
		Resposta Selecionada: 
	
.F ; V ; V ; F . 
	Resposta Correta: 
	
.F ; V ; V ; F . 
	Feedback da resposta: 
	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.

Outros materiais