Buscar

Atividade Final - Unidade 2 - 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 14 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 14 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 14 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. 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); }   .
	
	
	.  int dois_a_n(int n) { if(n == 0) return 1;  return 2*dois_a_n(n+1); } .
	
	
	.  int dois_a_n(int n) { return 2*dois_a_n(n-1); }  .
	
	
	.  int dois_a_n(int n) { return 2*dois_a_n(n+1); }  .
1 pontos   
PERGUNTA 2
1. 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);
}
 
 
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
; & .
	
	
	.12  12 ;  *  ; * ; * .
	
	
	.11  11 ;  *  ;  deixar em branco ; * .
	
	
	.11  11 ;  *  ;  * ; * .
1 pontos   
PERGUNTA 3
1. 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.
	
	
	.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); na linha 5, falta uma variável para receber o retorno da função “func1”. A linha 4 está 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”; as demais linhas estão corretas.
	
	
	.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.
1 pontos   
PERGUNTA 4
1. 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[])
 
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 ; V; V ; F .
	
	
	.F ; F; V ; F .
	
	
	.V ; F; V ; V .
	
	
	.V ; F; F ; V .
	
	
	.F ; V; F ; F .
1 pontos   
PERGUNTA 5
1. 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 ; * ; deixar em branco ; & .
	
	
	.int
;  deixar em branco ;  deixar em branco ; deixar em branco ; deixar em branco
; deixar em branco.
	
	
	.int
;  * ;  deixar em branco ; * ; * ; deixar em branco .
	
	
	.int ;  * ;  deixar em branco ; * ; * ; & .
	
	
	.int
;  * ; *  ; * ; * ; & .
1 pontos   
PERGUNTA 6
1. 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() .
	
	
	.   *  ;   *  ; int ; rand()%6 .
	
	
	.  __  ;  __  ; int ; (rand()%6)+1 .
	
	
	.  __  ;  __  ; int ; rand()%6 .
1 pontos   
PERGUNTA 7
1. 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çõespara 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:
	
	
	.V; F; F; V.
	
	
	.V; V; F; V.
	
	
	.F; F; F; V.
	
	
	.F; V; F; V.
	
	
	.V; F; V; V.
1 pontos   
PERGUNTA 8
1. 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:
	
	
	.int ; deixar em branco ; deixar em branco ; deixar em branco  .
	
	
	.void ; * ; deixar em branco ; deixar em branco  .
	
	
	.void ; deixar em branco ; deixar em branco ; deixar em branco  .
	
	
	.void ; * ; * ; *  .
	
	
	.void ; deixar em branco ; * ; deixar em branco  .
1 pontos   
PERGUNTA 9
1. 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(float, float, float); .
	
	
	. float CalculaQtdCarbono(unsigned char, float, float *); .
	
	
	. float CalculaQtdCarbono(float, float, float *); .
	
	
	. float CalculaQtdCarbono(unsigned char, float, int *); .
1 pontos   
PERGUNTA 10
1. 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 ; pos+1 ; exp*2 .
	
	
	.  pos<0 ; pos-1 ; exp*2 .
	
	
	.  pos<0 ; pos+1 ; exp*2 .
	
	
	.  !pos ; pos-1 ; exp*2 .
· 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:
	 
.  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); }
 .
	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
1 em 1 pontos
	
	
	
	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);
}
 
 
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:
	 
.12  12 ;  *  ;  deixar em branco ; * .
	Resposta Correta:
	 
.12  12 ;  *  ;  deixar em branco ; * .
	Feedback da resposta:
	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 3
1 em 1 pontos
	
	
	
	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:
	
	
	
	
		Resposta Selecionada:
	 
.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.
	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.
	Feedback daresposta:
	Parabéns! Sua resposta foi a correta! Você fez a correspondência correta dos protótipos das funções (interfaces) definidos no arquivo de cabeçalhos nas chamadas inseridas no programa principal. Você observou bem que, apesar de uma função retornar um valor, não é obrigatório fazer uso do retono no momento da chamada da função (como está codificada a linha 5).
	
	
	
· Pergunta 4
0 em 1 pontos
	
	
	
	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[])
 
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:
	
	
	
	
		Resposta Selecionada:
	 
.V ; F; F ; V .
	Resposta Correta:
	 
.V ; F; V ; V .
	Feedback da resposta:
	Infelizmente a sua resposta está incorreta. Para responder essa questão,  lembre-se que o nome do arquivo executável sempre é passado como parâmetro pelo sistema operacional e que é possível passar, ao programa, uma lista de parâmetros para que sejam manipulados pelo programa em questão.
	
	
	
· Pergunta 5
0 em 1 pontos
	
	
	
	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:
	
	
	
	
		Resposta Selecionada:
	 
. int
;  * ; *  ; * ; * ; & .
	Resposta Correta:
	 
.int ;  * ;  deixar em branco ; * ; * ; & .
	Feedback da resposta:
	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 6
1 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:
	 
.  __  ;  __  ; int ; (rand()%6)+1 .
	Resposta Correta:
	 
.  __  ;  __  ; int ; (rand()%6)+1 .
	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 7
0 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:
	 
.V; F; V; V.
	Resposta Correta:
	 
.V; F; F; V.
	Feedback da resposta:
	Infelizmente a sua resposta está incorreta. Para responder essa questão, pense que o retono para os pontos de chamada devem ocorrer de ordem inversa à evocação. Pense, também, que as interrupções são uma espécie de funções executadas por ocasião das demandas dos recursos de hardware/ software.
	
	
	
· Pergunta 8
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:
	 
. void ; deixar em branco ; deixar em branco ; deixar em branco  .
	Resposta 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 9
1 em 1 pontos
	
	
	
	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 existamdisponí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:
	
	
	
	
		Resposta Selecionada:
	 
. float CalculaQtdCarbono(unsigned char, float, float *); .
	Resposta Correta:
	 
. float CalculaQtdCarbono(unsigned char, float, float *); .
	Feedback da resposta:
	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 10
1 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:
	 
.  pos<0 ; pos-1 ; exp*2 .
	Resposta Correta:
	 
.  pos<0 ; pos-1 ; exp*2 .
	Feedback da resposta:
	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).
	
	
	
Segunda-feira, 9 de Novembro de 2020 23h10min10s BRT

Outros materiais