Buscar

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

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

Prévia do material em texto

Usuário 
 
Curso TÉCNICAS DE PROGRAMAÇÃO 
Teste ATIVIDADE 2 (A2) 
Iniciado AJUDE – SIGA, CURTA, SALVE O TRABALHO, OBRIGADO 
Enviado 17/04/22 15:50 
Status Completada 
Resultado da tentativa 10 em 10 pontos 
Tempo decorrido 
 
Resultados exibidos Respostas enviadas, Respostas corretas, Comentários 
 
• Pergunta 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:
 
 
 
• Pergunta 2 
 
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: 
 
 
 
• Pergunta 3 
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: 
 
 
 
 
• Pergunta 4 
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: 
 
 
 
 
• Pergunta 5 
 
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; 
} 
 
 
 
• Pergunta 6 
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: 
 
 
• Pergunta 7 
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() 
 
 
• Pergunta 8 
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:. 
 
 
 
• Pergunta 9 
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 porreferê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: 
 
 
 
• 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 2i, 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:

Outros materiais