Prévia do material em texto
06/06/2020 Blackboard Learn
https://fmu.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 1/6
Pergunta 1
Resposta Selecionada:
Resposta Correta:
Feedback
da
resposta:
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ções abaixo, o
símbolo ”_” significa deixar a lacuna sem preenchimento):
. * ; * ; * ; * ; * ; * ; & ; & .
. * ; * ; * ; * ; * ; * ; & ; & .
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 2
Resposta Selecionada:
Resposta Correta:
Feedback
da
resposta:
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:
. float CalculaIRPF(float, float *); .
. float CalculaIRPF(float, float *); .
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
1 em 1 pontos
1 em 1 pontos
06/06/2020 Blackboard Learn
https://fmu.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 2/6
passados como referência usando o símbolo “ *” no protótipo da função e “ &” na
chamada da função.
Pergunta 3
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.
Pergunta 4
Na definição do protótipo da função, em sua interface, temos que definir 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);
}
1 em 1 pontos
1 em 1 pontos
06/06/2020 Blackboard Learn
https://fmu.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 3/6
Resposta Selecionada:
Resposta Correta:
Feedback
da
resposta:
Escolha a afirmativa que contém o resultado da impressão pela função “ printf” e os trechos a serem
inseridos nas lacunas:
.12 12 ; * ; deixar em branco ; * .
.12 12 ; * ; deixar em branco ; * .
Parabéns! Sua resposta foi a correta! Você observou bem o fato de que a chamada da
função, dentro do programa principal, requer uma passagem por 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 “ *”.
Pergunta 5
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 ; break ; return .
. continue ; break ; return .
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”.
1 em 1 pontos
06/06/2020 Blackboard Learn
https://fmu.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 4/6
Pergunta 6
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 carbonoa 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 7
Resposta Selecionada:
Resposta Correta:
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):
. __ ; __ ; int ; (rand()%6)+1 .
. __ ; __ ; int ; (rand()%6)+1 .
1 em 1 pontos
1 em 1 pontos
06/06/2020 Blackboard Learn
https://fmu.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 5/6
Feedback
da
resposta:
Parabéns! Sua resposta foi a correta! Realmente nenhuma função requer passagem de
parâmetros por referência pois o único valor retornado é feito através do retorno da
função “Dado()”. A geração do número aleatório segue a forma “ (rand()%6)+1” pois a
soma por um impede a geração do valor 0 e o resto da divisão define o valor limite
superior do número gerado.
Pergunta 8
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 9
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(float vendas[][30], char nomes[]
[40],
char nomemaior[]) .
Parabéns! Sua resposta foi a correta! Você interpretou bem o enunciado realizando
1 em 1 pontos
1 em 1 pontos
06/06/2020 Blackboard Learn
https://fmu.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller 6/6
Sábado, 6 de Junho de 2020 13h15min07s 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.
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.
1 em 1 pontos