Buscar

GRA1033 TÉCNICAS DE PROGRAMAÇÃO GR3342-212-9 - 202120 ead

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

Curso GRA1033 TÉCNICAS DE PROGRAMAÇÃO
GR3342-212-9 - 202120.ead-17808.01
Teste ATIVIDADE 2 (A2)
Pergunta 1 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”.
Pergunta 2
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 .
Comentário
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 3
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 4
1 em 1 pontos
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 por referê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:
Resposta Selecionada:
.Apenas as afirmativas II e II estão corretas.
Resposta Correta:
.Apenas as afirmativas II e II estão corretas.
Comentário
da resposta:
Parabéns! Sua resposta foi a correta! Realmente, a passagem de
parâmetros por referência, a posição de memória é a mesma da
variável origem, o que proporciona que ambas as variáveis
estarão sempre sincronizadas. O acesso às variáveis passadas
por referência, no caso do função da afirmativa IV, é feito
mediante o uso do símbolo “*” (por exemplo, “ &b = 5;”).
Pergunta 5
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 6 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 7 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 8 0 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”; 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.
Comentário
da resposta:
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 9 1 em 1 pontos
Na computação, existem várias formas de representação numérica, dentre as quais,
podemos citar as representações decimal, hexadecimal, octal e binária. Para realizar a
conversão, por exemplo, de um valor formatado na base decimal para uma base K , basta
realizar divisões sucessivas por K e coletar o último quociente e todos os restos das
divisões em ordem inversa.
Suponha a necessidade de criar uma função recursiva para a conversão de um número
na base decimal para a representação binária (base 2). Para essa questão, suponha o
trecho a seguir:
#include <stdio.h>
void Dec2Bin(int n)
{
if(__) printf("%d",n);
else
{
___;
___;
}
}
int main()
{
Dec2Bin(14);
return 0;
}
Assinale a opção abaixo que contenha os trechos de código para preencher as lacunas:
Resposta Selecionada:
. n<2 ; Dec2Bin(n / 2) ; printf("%d",n%2) .
Resposta Correta:
. n<2 ; Dec2Bin(n / 2) ; printf("%d",n%2) .
Comentário
da resposta:
Parabéns! Sua resposta foi a correta! Você interpretou
corretamente o fato de a impressão dos restos das divisões
sucessivas é realizada na ordem reversa às divisões, ou seja, a
impressão necessita ser do tipo “pós-ordem”, inserida após a
chamada recursiva. Como critério de parada, a cláusula que
indica a não possibilidade de continuar as divisões por 2.
Pergunta 10 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.
Comentário
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.

Outros materiais