Buscar

ATIVIDADE 2 (A2) TÉCNICAS DE PROGRAMAÇÃO

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 6 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 6 páginas

Prévia do material em texto

13/11/2020 Revisar envio do teste: ATIVIDADE 2 (A2) – GRA1033 ...
https://unifacs.blackboard.com/webapps/assessment/review/review.jsp?attempt_id=_38678595_1&course_id=_610982_1&content_id=_14917691_1&… 1/6
 
Revisar envio do teste: ATIVIDADE 2 (A2)
GRA1033 TÉCNICAS DE PROGRAMAÇÃO GR3342202 - 202020.ead-8511.03 Unidade 2
Revisar envio do teste: ATIVIDADE 2 (A2) 
Usuário JEFERSON VENTURA DOS SANTOS
Curso GRA1033 TÉCNICAS DE PROGRAMAÇÃO GR3342202 - 202020.ead-8511.03
Teste ATIVIDADE 2 (A2)
Iniciado 09/11/20 18:44
Enviado 09/11/20 19:09
Status Completada
Resultado da tentativa 9 em 10 pontos 
Tempo decorrido 24 minutos
Resultados exibidos Respostas enviadas, Respostas corretas, Comentários
Pergunta 1
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(unsigned char, float, float *); .
. float CalculaQtdCarbono(unsigned char, float, float *); .
Parabéns! Sua resposta foi a correta! Você interpretou corretamente o enunciado! Realmente, a
função deve retornar dois valores: a massa de carbono (colocado como float em razão dos
valores fracionários) e o percentual de carbono (passado como referência, como float, na lista de
parâmetros da função). Foi utilizado o “ unsigned int” para o tipo da liga em função de uma escala
com poucos valores (por exemplo, de 1 a 10).
Pergunta 2
Quando construimos aplicações para que sejam executadas a partir do comando de linha (prompt ou
console), temos a possibilidade de passarmos informações ao programa. Para tanto, usamos os parâmetros
comumente identificados por “ argc ” e “ argv ”. Considerando o trecho: 
 
 int main(int argc, char *argv[]) 
Minha Área
1 em 1 pontos
1 em 1 pontos
JEFERSON VENTURA DOS SANTOS
https://unifacs.blackboard.com/
https://unifacs.blackboard.com/webapps/blackboard/execute/courseMain?course_id=_610982_1
https://unifacs.blackboard.com/webapps/blackboard/content/listContent.jsp?course_id=_610982_1&content_id=_14917654_1&mode=reset
https://unifacs.blackboard.com/webapps/portal/execute/tabs/tabAction?tab_tab_group_id=_359_1
https://unifacs.blackboard.com/webapps/login/?action=logout
13/11/2020 Revisar envio do teste: ATIVIDADE 2 (A2) – GRA1033 ...
https://unifacs.blackboard.com/webapps/assessment/review/review.jsp?attempt_id=_38678595_1&course_id=_610982_1&content_id=_14917691_1&… 2/6
Resposta Selecionada: 
Resposta Correta: 
Feedback
da
resposta:
 
Analise as afirmativas a seguir, marcando com “V” a(s) verdadeira(s) e, com “F” a(s) falsa(s): 
 
( ) caso colocarmos, em nosso código “ printf(“%s”,argv[0]) ”, será impresso o nome do próprio programa. 
( ) caso não passemos nenhum parâmetro ao programa, “ argv ” assumirá o valor 0. 
( ) o parâmetro “ argv ” é uma lista de strings . 
( ) o parâmetro “ argc ” sempre será positivo e maior ou igual a 1. 
 
Marque a opção que tiver a sequência que você julgue ser a correta:
.V ; F; V ; V .
.V ; F; V ; V .
Parabéns! Sua resposta foi a correta! Realmente, o parâmetro “ argv” sempre conterá pelo menos
um item – que é o nome do arquivo executável evocado para a execução, inserido na posição 0
do parâmetro “ argv”. Desta forma, o “ argc” sempre será maior ou igual a 1.
Pergunta 3
Resposta Selecionada: 
Resposta Correta: 
Feedback
da
resposta:
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:
.Apenas as afirmativas II e II estão corretas.
.Apenas as afirmativas II e II estão corretas.
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 4
Resposta Selecionada: 
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 .
1 em 1 pontos
1 em 1 pontos
13/11/2020 Revisar envio do teste: ATIVIDADE 2 (A2) – GRA1033 ...
https://unifacs.blackboard.com/webapps/assessment/review/review.jsp?attempt_id=_38678595_1&course_id=_610982_1&content_id=_14917691_1&… 3/6
Resposta Correta: 
Feedback
da
resposta:
.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 5
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 6
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 comopré-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:
1 em 1 pontos
1 em 1 pontos
13/11/2020 Revisar envio do teste: ATIVIDADE 2 (A2) – GRA1033 ...
https://unifacs.blackboard.com/webapps/assessment/review/review.jsp?attempt_id=_38678595_1&course_id=_610982_1&content_id=_14917691_1&… 4/6
Resposta
Selecionada:
Resposta
Correta:
Feedback
da
resposta:
.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” .
.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” .
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 7
Resposta Selecionada: 
Resposta Correta: 
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 ; break ; return .
. continue ; break ; return .
1 em 1 pontos
13/11/2020 Revisar envio do teste: ATIVIDADE 2 (A2) – GRA1033 ...
https://unifacs.blackboard.com/webapps/assessment/review/review.jsp?attempt_id=_38678595_1&course_id=_610982_1&content_id=_14917691_1&… 5/6
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
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 9
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)); 
} 
1 em 1 pontos
0 em 1 pontos
13/11/2020 Revisar envio do teste: ATIVIDADE 2 (A2) – GRA1033 ...
https://unifacs.blackboard.com/webapps/assessment/review/review.jsp?attempt_id=_38678595_1&course_id=_610982_1&content_id=_14917691_1&… 6/6
Sexta-feira, 13 de Novembro de 2020 22h06min01s BRT
Resposta
Selecionada:
 
Resposta Correta:
Feedback
da
resposta:
 
Escolha a opção correta:
.O código calcula a mediana entre os dois números.
.O código calcula o MDC (Máximo Divisor Comum) usando o algoritmo de Euclides.
Infelizmente a sua resposta está incorreta. Para responder essa questão, reflita que algumas
funções citadas nas alternativas faz uso da aplicação da fórmula diretamente, ou seja, não
compensaria fazer uso de funções recursivas.
Pergunta 10
Resposta Selecionada: 
Resposta Correta: 
Feedback
da
resposta:
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:
. 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.
← OK
1 em 1 pontos
javascript:launch('/webapps/gradebook/do/student/viewAttempts?course_id=_610982_1&method=list&nolaunch_after_review=true');

Continue navegando