Buscar

TÉCNICAS DE PROGRAMAÇÃO_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

• Pergunta 1 
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 ; * . 
Comentário 
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 2 
1 em 1 pontos 
 
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 ”: 
Resposta Selecionada: 
.4 10 15. 
Resposta Correta: 
.4 10 15. 
Comentário 
da resposta: 
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 3 
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); } 
 . 
Comentário 
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 4 
1 em 1 pontos 
 
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: 
 
#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 
da resposta: 
Parabéns! Sua resposta foi a correta! Você observou 
corretamente a ordem de chamada e impressão do 
resultado. Na pré-ordem, a impressão acontece antes 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. 
 
• Pergunta 5 
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 . 
Comentário 
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). 
 
 
• Pergunta 6 
1 em 1 pontos 
 
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: 
 
Resposta Selecionada: 
. float CalculaIRPF(float, float *); . 
Resposta Correta: 
. float CalculaIRPF(float, float *); . 
Comentário 
da resposta: 
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 
1 em 1 pontos 
 
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 
cadavendedor. 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: 
 
. int NomeVendedorMaiorQtdVendas(float 
vendas[][30], char nomes[][40], 
 char 
nomemaior[]) ; 
 float 
NomeVendedorMaiorValorVendas(float 
vendas[][30], char nomes[][40], 
 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 
da resposta: 
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 
1 em 1 pontos 
 
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: 
 
Resposta Selecionada: 
.F ; V ; V ; F . 
Resposta Correta: 
.F ; V ; V ; F . 
Comentário 
da resposta: 
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 
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 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: 
Resposta 
Selecionada: 
 
. float CalculaQtdCarbono(unsigned char, 
float, float *); . 
Resposta 
Correta: 
 
. float CalculaQtdCarbono(unsigned char, 
float, float *); . 
Comentário 
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 
 
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): 
Resposta Selecionada: 
. * ; * ; * ; * ; * ; * ; & ; & . 
Resposta Correta: 
. * ; * ; * ; * ; * ; * ; & ; & . 
Comentário 
da resposta: 
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”. 
 
 
Sexta-feira, 10 de Dezembro de 2021 18h18min53s BRT

Continue navegando