Buscar

Respostas atividade 2 - Técnicas de Programação FMU

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 7 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 7 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

12/1/2020 Blackboard Learn
https://fmu.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller# 1/7
Pergunta 1
Resposta
Selecionada:
Resposta
Correta:
Feedback
da
resposta:
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 
#define _ARQHEADER 
  
int func1(int *, int); 
float func2(float, char []); 
void func3(int *, int *, float); 
int func4(char[],int, char); 
  
#endif 
 
(B) Arquivo de implementação
 
int main() 
{ 
  int a,b,c;              
  float 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:
.Na linha 1, o parâmetro “ a” não está sendo passado por referência (falta o “ &”); 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.
.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.
Infelizmente a sua resposta está incorreta. Para responder essa questão, analise os
parâmetros das e o tipo de retorno das funções descritos no arquivo de cabeçalhos e
faça a correspondência exata nas chamadas das funções. Os tipos devem bater com
exatidão.
Pergunta 2
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 idenota 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,____,____); 
0 em 1 pontos
1 em 1 pontos
12/1/2020 Blackboard Learn
https://fmu.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller# 2/7
Resposta Selecionada:  
Resposta Correta:  
Feedback
da
resposta:
} 
  
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 3
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 4
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); 
} 
1 em 1 pontos
0 em 1 pontos
12/1/2020 Blackboard Learn
https://fmu.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller# 3/7
Resposta Selecionada:  
Resposta Correta:  
Feedback
da
resposta:
  
___ 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 .
.  __  ;  __  ; int ; (rand()%6)+1 .
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 5
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; 
}1 em 1 pontos
12/1/2020 Blackboard Learn
https://fmu.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller# 4/7
Resposta Selecionada:  
Resposta Correta:  
Feedback
da
resposta:
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”.
Pergunta 6
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
passados como referência usando o símbolo “ *” no protótipo da função e “ &” na
chamada da função.
Pergunta 7
Resposta
Selecionada:
 
Resposta Correta:  
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[]) .
1 em 1 pontos
1 em 1 pontos
12/1/2020 Blackboard Learn
https://fmu.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller# 5/7
Feedback
da
resposta:
. 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
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 8
Resposta Selecionada:  
Resposta Correta:  
Feedback
da
resposta:
Funções são blocos funcionais modulares presentes nas linguagens de programação estruturadas. A
criação de funções, por exemplo, em C, deve seguir a sintaxe: <tipo_de_retorno> nome_da_função
(lista_de_parâmetros). Para essa questão, suponha o trecho de código a seguir:
 
int funcao(int a, int *b) 
  { 
     a++; 
     *b = a * 2; 
     return b+5; 
  } 
  
int main() 
{ 
   int x=4,y=8,z; 
   z = funcao(x,&y); 
   printf(“%d    %d    %d\n”,x,y,z); 
   return 0; 
} 
 
Assinale a alternativa que apresenta os valores impressos pela função “ printf ”:
.4    10    15.
.4    10    15.
Parabéns! Sua resposta foi a correta! Você utilizou, com sucesso, os conceitos de
passagem de parâmetros por valor e por referência. No caso, realmente, devido à
passagem por valor, a variável “ a”, apesar da alteração internamente à função, não
influenciará o valor de “ x” - variável de origem.
Pergunta 9
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 
1 em 1 pontos
0 em 1 pontos
12/1/2020 Blackboard Learn
https://fmu.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller# 6/7
Resposta
Selecionada:
 
Resposta Correta:  
Feedback
da
resposta:
  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 ;  deixar em branco ; deixar em branco ; deixar em
branco 
 ; deixar em branco.
.int ;  * ;  deixar em branco ; * ; * ; & .
Infelizmente a sua resposta está incorreta. Por favor, dê uma melhor observada no ponto
de instanciação das variáveis para que se possa chegar à conclusão quanto ao tipo de
passagem dos parâmetros.
Pergunta 10
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 passadasposições específicas, ou seja, foram
passados apenas caracteres. Sendo assim, é necessário passar as referências dos itens
1 em 1 pontos
12/1/2020 Blackboard Learn
https://fmu.blackboard.com/webapps/late-Course_Landing_Page_Course_100-BBLEARN/Controller# 7/7
“ str[i]” e “ str[j]” para que as alterações realizadas dentro da função “ swap” tenham
validade na função “ Ordena”.

Outros materiais