Buscar

atividade 2 tecnicas de progrmçao

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 12 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 12 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 12 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
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:
Resposta Selecionada:	
Correta . int dois_a_n(int n) { if(n == 0) return 1; return 2*dois_a_n(n-1); }
 .
Resposta Correta:	
Correta . int dois_a_n(int n) { if(n == 0) return 1; return 2*dois_a_n(n-1); }
 .
Feedback da resposta:	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 2
0 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:	
Incorreta . * ; * ; int ; (rand()%6)+1 .
Resposta Correta:	
Correta . __ ; __ ; int ; (rand()%6)+1 .
Feedback da resposta:	Infelizmente a sua resposta está incorreta. Para responder essa questão, observe que não há a necessidade das funções retornar informações através de seus parâmetros. Para a geração do número aleatório, avalie a expressão relacionada à função “ rand()” com os valores passíveis de serem gerados por um dado de jogo.
Pergunta 3
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:	
Correta . float CalculaIRPF(float, float *); .
Resposta Correta:	
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 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:	
Correta . void ; deixar em branco ; deixar em branco ; deixar em branco .
Resposta Correta:	
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
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:	
Correta .Apenas as afirmativas II e II estão corretas.
Resposta Correta:	
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 6
0 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:	
Incorreta . n<2 ; printf("%d",n/2) ; Dec2Bin(n % 2) .
Resposta Correta:	
Correta . n<2 ; Dec2Bin(n / 2) ; printf("%d",n%2) .
Feedback da resposta:	Infelizmente a sua resposta está incorreta. Para responder essa questão, analise o fato de que 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”. Como critério de parada, deve-se verificar quando que uma divisão inteira se torna impossível de ser continuada.
Pergunta 7
0 em 1 pontos
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:
Resposta Selecionada:	
Incorreta . pos<0 ; pos+1 ; exp*2 .
Resposta Correta:	
Correta . pos<0 ; pos-1 ; exp*2 .
Feedback da resposta:	Infelizmente a sua resposta está incorreta. Para responder essa questão, observe que fica mais fácil processar o vetor que corresponde ao número binário da ordem do final (última posição) para o início (posição 0). Com esse encaminhamento, observe, também, a variação do expoente.
Pergunta 8
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:	
Correta .V; F; F; V.
Resposta Correta:	
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 9
1 em 1 pontos
Em funções recursivas, a posição da chamada recursiva em relação às demais linhas de seu código influencia o resultado. Dependendo da posição, a recursividade é dita como pré-ordem (quando o processamento antecede a chamada recursiva); ordem simétrica (quando o processamento encontra-se entre duas chamadas recursivas) ou, finalmente, pós-ordem (processamento após as chamadas recursivas). Para essa questão, suponha o código a seguir:
 
#include <stdio.h>
 
void Recursao1(int i)
 {
 if(i>=5) return;
 printf("%d ",i);
 Recursao1(i+1);
 }
 
void Recursao2(int i)
 {
 if(i>=5) return;
 Recursao2(i+1);
 printf("%d ",i);
 }
 
int main()
{
 printf("Recursao1\n");
 Recursao1(0);
 printf("\n\nRecursao2\n");
 Recursao2(0);
 return 0;
}
 
Assinale a opção que você julgue ser a correta:
Resposta Selecionada:	
Correta .A função “ Recursao1” segue uma recursão pré-ordem – logo o seu resultado é “ 0 1 2 3 4”. Por sua vez, a função “ Recursao2” é pós-ordem, por consequência, o seu resultado é: “ 4 3 2 1 0” .
Resposta Correta:	
Correta .A função “Recursao1” segue uma recursão pré-ordem – logo o seu resultado é “0 1 2 3 4”. Por sua vez, a função “Recursao2” é pós-ordem, por consequência, o seu resultado é: “4 3 2 1 0” .
Feedback da resposta:	Parabéns! Sua resposta foi a correta! Você observou corretamente a ordem de chamada e impressão do resultado. Na pré-ordem, a impressão acontece antes da chamada, por consequência, a impressão é realizada, neste caso, na ordem crescente. Na pós-ordem, a impressão acontece na ordem descrescente pois a recursão caminha por todos os níveis da contagem e imprime o resultado na volta das chamadas recursivas.
Pergunta 10
1 em 1 pontos
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:
Resposta Selecionada:	
Correta . int NomeVendedorMaiorQtdVendas(float vendas[][30], char nomes[][40],
 char nomemaior[]) ;
 float NomeVendedorMaiorValorVendas(float vendas[][30], char nomes[][40],
 char nomemaior[]) .
Resposta Correta:	
Correta . int NomeVendedorMaiorQtdVendas(float vendas[][30], char nomes[][40],
 char nomemaior[]) ;
 float NomeVendedorMaiorValorVendas(float vendas[][30], char nomes[][40],
 char nomemaior[]) .
Feedback da resposta:	Parabéns! Sua resposta foi a correta! Você interpretou bem o enunciado realizando 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.

Continue navegando