Buscar

A2_Programacao

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

Prévia do material em texto

Curso GRA1033 TÉCNICAS DE PROGRAMAÇÃO GR3342202 - 202020.ead-
29774633.06 
Teste ATIVIDADE 2 (A2) 
Iniciado 03/11/20 01:22 
Enviado 03/11/20 02:24 
Status Completada 
Resultado da 
tentativa 
9 em 10 pontos 
Tempo decorrido 1 hora, 1 minuto 
Resultados exibidos Respostas enviadas, Respostas corretas, Comentários 
• Pergunta 1 
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 . 
Feedback 
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 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 
 
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. 
Feedback 
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 4 
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 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: 
 
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[]) . 
Feedback 
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 5 
1 em 1 pontos 
 
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; 
} 
 
Assinale a opção abaixo que contenha a ordem correta de aparição dos comandos 
“ return ”, “ break ” e “ continue ”: 
Resposta Selecionada: 
. continue ; break ; return . 
Resposta Correta: 
. continue ; break ; return . 
Feedback 
da 
resposta: 
Parabéns! Sua resposta foi a correta! Realmente, para pular os 
ímpares, deve-se incrementar o contadorde 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 
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). 
 
 
• Pergunta 7 
1 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; F; V. 
Resposta Correta: 
.V; F; F; V. 
Feedback 
da 
resposta: 
Parabéns! Sua resposta foi a correta! Realmente, o sistema 
operacional deve salvar o endereço da linha na qual ocorreu a 
evocação da função para que se possa, ao término da função, 
voltar à linha subsequente à chamada. Esse salvamento ocorre 
em uma estrutura de pilha ( stack) da memória principal. Essa 
região de pilha pode ser extremamente limitada em ambientes 
com pouca memória, tal como nos sistemas embarcados. As 
interrupções da máquina são tratadas, superficialmente falando, 
de forma análoga às funções. 
 
 
• Pergunta 8 
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 9 
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 10 
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. 
 
 
Quinta-feira, 12 de Novembro de 2020 19h40min38s BRT

Outros materiais