Você está na página 1de 9

0 em 1 pontos

Pergunta 1
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:

https://fmu.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_TEST_PLAYER&COURSE_ID=_667793… 1/9
27/04/2021 Revisar envio do teste: ATIVIDADE 2 (A2) – GRA1033 ...

. int NomeVendedorMaiorQtdVendas(float vendas[][], char


nomes[][],
                                   char nomemaior[]) ;
     float NomeVendedorMaiorValorVendas(float vendas[][],
char nomes[][],
                                   char nomemaior[]) .

Resposta
Correta: . int NomeVendedorMaiorQtdVendas(float vendas[][30], char
nomes[][40],
                                   char nomemaior[]) ;
     float NomeVendedorMaiorValorVendas(float vendas[][30],
char nomes[][40],
                                   char nomemaior[]) .

Comentário Infelizmente a sua resposta está incorreta. Para responder essa questão,  pense
da no fato de que o número de vendas é um valor inteiro e que o montande de
resposta: valor é uma grandeza que manipula os centavos. Analise o fato de que, quando
passamos matrizes como parâmetros, temos que informar o tamanho de pelo
menos a última dimensão.

1 em 1 pontos
Pergunta 2
Modularizar um sistema signi ca 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í ca. Diante da questão sobre modularização, assinale
com “V” a(s) a rmativa(s) abaixo que você julgue como verdadeira(s) e, com (F), a(s) falsa(s).
 
( ) Di culta 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 ca 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 .

Comentário Parabéns! Sua resposta foi a correta! Realmente, a modularização facilita o


da processo de veri cação, testes, compreensão e reaproveitamento de código
resposta: pelo fato de que existe uma separação funcional do código assim como as
funções são implementadas de forma mais pontuais.

https://fmu.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_TEST_PLAYER&COURSE_ID=_667793… 2/9
27/04/2021 Revisar envio do teste: ATIVIDADE 2 (A2) – GRA1033 ...

1 em 1 pontos
Pergunta 3
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 codi cação que corresponda à solução.
 
Escolha a opção correta:

Resposta
Selecionada: .  int
dois_a_n(int n) { if(n == 0) return 1;  return
2*dois_a_n(n-1); }
 .

Resposta Correta:
.  int dois_a_n(int n) { if(n == 0) return 1;  return
2*dois_a_n(n-1); }
 .

Comentário Parabéns! Sua resposta foi a correta! Você observou a relação entre a condição
da de parada e a variação do parâmetro passado. Como a condição de parada é 0,
resposta: os parâmetros devem ser passados de forma descrescente.

0 em 1 pontos
Pergunta 4
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
#de ne _ARQHEADER
 
int func1(int *, int);
oat func2( oat, char []);
void func3(int *, int *, oat);
int func4(char[],int, char);
 
#endif

https://fmu.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_TEST_PLAYER&COURSE_ID=_667793… 3/9
27/04/2021 Revisar envio do teste: ATIVIDADE 2 (A2) – GRA1033 ...

 
(B) Arquivo de implementação
 
int main()
{
  int a,b,c;             
  oat 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:

Resposta
Selecionada: .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.

Resposta
Correta: .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.

Comentário Infelizmente a sua resposta está incorreta. Para responder essa questão, analise
da os parâmetros das e o tipo de retorno das funções descritos no arquivo de
resposta: cabeçalhos e faça a correspondência exata nas chamadas das funções. Os tipos
devem bater com exatidão.

1 em 1 pontos
Pergunta 5
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:

https://fmu.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_TEST_PLAYER&COURSE_ID=_667793… 4/9
27/04/2021 Revisar envio do teste: ATIVIDADE 2 (A2) – GRA1033 ...

 
#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: .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: .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” .

Comentário Parabéns! Sua resposta foi a correta! Você observou corretamente a ordem de
da chamada e impressão do resultado. Na pré-ordem, a impressão acontece antes
resposta: 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.

1 em 1 pontos
https://fmu.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_TEST_PLAYER&COURSE_ID=_667793… 5/9
27/04/2021 Revisar envio do teste: ATIVIDADE 2 (A2) – GRA1033 ...

Pergunta 6
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:
 
...
oat 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 *);  .

Comentário Parabéns! Sua resposta foi a correta! Você interpretou corretamente o


da enunciado observando bem os valores retornados pela função. Os valores
resposta: retornados devem ser passados como referência usando o símbolo “ *” no
protótipo da função e “ &” na chamada da função.

1 em 1 pontos
Pergunta 7
Na de nição do protótipo da função, em sua interface, temos que de nir 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);

https://fmu.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_TEST_PLAYER&COURSE_ID=_667793… 6/9
27/04/2021 Revisar envio do teste: ATIVIDADE 2 (A2) – GRA1033 ...

}
 
 
Escolha a a rmativa 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 Parabéns! Sua resposta foi a correta! Você observou bem o fato de que a
da chamada da função, dentro do programa principal, requer uma passagem por
resposta: 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 “ *”.

1 em 1 pontos
Pergunta 8
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 nalizada, o computador saiba voltar ao ponto de
chamada. Dentre as a rmativa 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.

Comentário Parabéns! Sua resposta foi a correta! Realmente, o sistema operacional deve
da salvar o endereço da linha na qual ocorreu a evocação da função para que se
resposta: 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, super cialmente falando, de forma análoga às funções.

https://fmu.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_TEST_PLAYER&COURSE_ID=_667793… 7/9
27/04/2021 Revisar envio do teste: ATIVIDADE 2 (A2) – GRA1033 ...

1 em 1 pontos
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));
}
 
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.

Comentário Parabéns! Sua resposta foi a correta! Você lembrou bem que a fórmula de
da Euclides é originalmente recursiva:   MDC(a,b) = MDC(b,r) onde, “ r”= resto da
resposta: divisão de “ a” por “ b”.

0 em 1 pontos
Pergunta 10
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>
 

https://fmu.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_TEST_PLAYER&COURSE_ID=_667793… 8/9
27/04/2021 Revisar envio do teste: ATIVIDADE 2 (A2) – GRA1033 ...

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: .  pos<0 ; pos-1 ; exp/2 .

Resposta Correta: .  pos<0 ; pos-1 ; exp*2 .

Comentário Infelizmente a sua resposta está incorreta. Para responder essa questão, 
da observe que ca mais fácil processar o vetor que corresponde ao número
resposta: binário da ordem do nal (última posição) para o início (posição 0).  Com esse
encaminhamento, observe, também, a variação do expoente.

Terça-feira, 27 de Abril de 2021 11h13min06s BRT

https://fmu.blackboard.com/webapps/late-course_content_soap-BBLEARN/Controller?ACTION=OPEN_TEST_PLAYER&COURSE_ID=_667793… 9/9

Você também pode gostar