Baixe o app para aproveitar ainda mais
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”.
Compartilhar