Buscar

Algoritmos e Programação Estruturada

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

Continue navegando


Prévia do material em texto

Algoritmos e Programação Estruturada: Programação Estruturada para Dev 
 
 
Questão 1 
Incorreta 
Questão com problema? 
De acordo com Mizrahi (2008) as funções dividem grandes tarefas de programação em 
tarefas menores, permitindo aos programadores reprogramarem a partir de códigos que 
já foram produzidos, facilitando e acelerando o trabalho de programação. 
 
Observe o programa que demonstra o uso de uma função na linguagem C: 
 
#include <stdio.h>#define pi 3.1415float 
raio ( ){ float r, area; printf("Digite o 
raio: "); scanf("%f",&r); area = pi * r * 
r; }int main(){ float result; result = raio 
(); printf("Area do circulo = %.2f 
\n",result); return 0;} 
O programa demonstrado não compila pois possui um erro, escolha a opção correta que 
mostra o erro do programa. 
Sua resposta 
Incorreta 
O programa está errado pois não foi utilizado um ponto e vírgula após o int main ( ) e o 
programa deverá ficar da seguinte forma: int main ( ); . 
Solução esperada 
O que causa o erro do programa é a falta do return na função raio ( ), o correto seria 
adicionar a seguinte linha: return area; isso fará com que o valor seja repassado para a 
variável result. 
Comentário 
Este não é o erro do programa, tente novamente! 
 
 
 
Questão 2 
Incorreta 
Questão com problema? 
Nas linguagens de programação funcional, diz-se que é possível evitar estouros de pilha 
usando "recursão de cauda". A diferença entre recursiva normal e de cauda é justamente 
aonde a chamada recursiva é chamada. Caso seja chamada na "cauda" da função, é uma 
chamada de cauda recursiva. A "cauda" da função é sua última chamada. É a última 
computação / cálculo feito pela função, e logo depois dela, nenhum tratamento é feito 
antes de retornar seu valor. Neste contexto, analise as figuras 16(a) e 16(b). 
 
 
Figura 16 – (a) recursão normal e (b) recursão de cauda 
 
 
Considerando as imagens apresentadas julgue as afirmações que se seguem. 
I - Na figura 16(a), cada chamada recursiva aumenta porque o programa só pode 
calcular o resultado da primeira função chamada, para depois calcular o resultado das 
que a chamaram. Assim, a pilha estoura. 
 
II - Na figura 16(b), cada passo de chamadas nem aumenta nem diminui. A partir do 
momento que a função recursiva é chamada, todas são chamadas no final, sem precisar 
de mais cálculos. 
 
 
III - Quando um compilador pronto para isso vê uma chamada recursiva na cauda, 
ele automaticamente a transforma em um laço durante as otimizações. Desta 
forma não perde as vantagens, nem a elegância da programação funcional, mas 
também não corre o risco de passar por um estouro de pilha. 
É correto apenas o que se afirma em: 
Sua resposta 
Incorreta 
II e III. 
Solução esperada 
III. 
Comentário 
I - FALSA - Na figura 16(a), cada chamada recursiva aumenta porque o programa só 
pode calcular o resultado da primeira função chamada, para depois calcular o resultado 
das que a chamaram. Assim, a pilha estoura. O CORRETO É: Na figura 16(a), A 
CADA chamada recursiva, O NÚMERO DE FUNÇÕES aumenta porque o programa só 
pode calcular o resultado da ÚLTIMA função chamada, para depois calcular o resultado 
das que a chamaram. Assim, a pilha estoura. II - FALSA - Na figura 16(b), cada passo 
de chamadas nem aumenta nem diminui. A partir do momento que a função recursiva é 
chamada, todas são chamadas no final, sem precisar de mais cálculos. O CORRETO É: 
Na figura 16(b), A CADA PASSO, A QUANTIDADE de chamadas nem aumenta nem 
diminui. A partir do momento que a função recursiva é chamada, APENAS ELA é 
chamada no final, sem precisar de mais cálculos. III - VERDADEIRA - Quando um 
compilador pronto para isso vê uma chamada recursiva na cauda, ele automaticamente a 
transforma em um laço durante as otimizações. Desta forma não perde as vantagens, 
nem a elegância da programação funcional, mas também não corre o risco de passar por 
um estouro de pilha. 
7Questão 3 
Correta 
Questão com problema? 
Conforme Salvetti e Barbosa (1998) as variáveis e constantes, são espaços reservados 
na memória RAM (Random Access Memory - Memória de Acesso Aleatório) do 
computador para guardar informações que serão utilizadas durante o código do 
programa. Podem ter valores de diversos tamanhos e tipos, tais como números inteiros, 
números reais, caracteres, frases, enfim, diversas coisas. 
Fonte:SALVETTI, D. D., BARBOSA, L. M. Algoritmos. São Paulo: Makron Books, 
1998. 
 
Com base no contexto apresentado, avalie as seguintes asserções e a relação proposta 
entre elas: 
 
 
I. Para usar de forma mais otimizada a memória RAM do computador, existe uma 
alternativa chamada recursividade em cauda. Nesse tipo de técnica a recursividade 
funcionará como uma função iterativa. 
 
 
 
PORQUE 
 
 
II. Uma função é caracterizada como recursiva em cauda quando a chamada a si mesmo 
é a última operação a ser feita no corpo da função. Nesse tipo de função, o caso base 
costuma ser passado como parâmetro, o que resultará em um comportamento diferente. 
Analise atentamente as asserções e assinale a alternativa correta. 
Sua resposta 
Correta 
As asserções I e II são proposições verdadeiras, e a II é uma justificativa da I. 
Comentário 
A frase corretamente preenchida é: As asserções I e II são proposições verdadeiras, mas 
a II é uma justificativa da I. Para otimizar a memória, utilizamos a recursividade em 
cauda. Nesse tipo de técnica a recursividade funcionará como uma função iterativa. 
Porque, uma função é caracterizada como recursiva em cauda quando a chamada a si 
mesmo é a última operação a ser feita no corpo da função. Nesse tipo de função, o caso 
base costuma ser passado como parâmetro, o que resultará em um comportamento 
diferente. 
 
Questão 4 
Correta 
Questão com problema? 
Para criar uma função utiliza-se a seguinte sintaxe: 
 
 
<tipo de retorno> <nome> (<parâmetros>) 
{ 
<comandos da função> 
<retorno> ( ) 
} 
 
Para cada declaração da função existem parâmetros que são obrigatórios e outros que 
são opcionais. Neste contexto, relacione a Coluna A que contém as sintaxe com a 
Coluna B que contém as funções. 
 
Coluna A (Sintaxe) Coluna B (Função) 
 I. <tipo de retorno> A. Identificará a função. 
 II. <nome> 
B. Indica qual o tipo de valor a função 
retornará. 
 III. <parênteses 
depois do nome> 
C. Toda função terá o nome 
acompanhado por eles. 
 IV. <comandos da 
função> 
D. Se for void é opcional, porém, 
quando não for void é obrigatório. 
 V. <retorno> 
E. Só justifica criar se tiver um 
conjunto de comandos para realizar. 
Assinale a alternativa que contém a associação correta entre as colunas: 
Sua resposta 
Correta 
I-B / II-A / III-C / IV-E / V-D. 
Comentário 
I-B / II-A / III-C / IV-E / V-D. <tipo de retorno> - Indica qual o tipo de valor a função 
retornará. <nome> - Identificará a função. <parênteses depois do nome> - Toda função 
terá o nome acompanhado por eles. <comandos da função> - Só justifica criar se tiver 
um conjunto de comandos para realizar. <retorno> - Se for void é opcional, porém, 
quando não for void é obrigatório. 
 
Questão 5 
Correta 
Questão com problema? 
A recursividade é uma técnica programação usada para tornar o código mais elegante, 
organizado, o que pode facilitar a manutenção. Essa técnica, em muitos casos, pode ser 
usada para substituir uma estrutura de repetição iterativa, por exemplo, uma que use o 
comando for. Uma função recursiva pode substituir uma estrutura de repetição, porém 
nem sempre é viável, visto os recursos computacionais necessários para a execução da 
recursividade. Uma função recursiva funciona como um laço de repetição, o qual, será 
interrompido somente quando o caso base for satisfeito. 
 
Considerando o contexto, avalie o programa a seguir, observando as duas funções 
criadas sobre a recursividade. 
 
#include<stdio.h> 
int fatNaoRecursivo(int n){ 
 if(n<2) return 1; 
 int f=1; 
 int i; 
 for(i=2; i<=n; i++) f*=i; 
 return f; 
} 
int fatRecursivo(int n){ 
 if(n<2) return 1; 
 return fatRecursivo(n-1)*n; 
} 
int main() 
{ printf("%d\n",fatNaoRecursivo(6)); 
 printf("%d\n",fatRecursivo(6)); 
 return 0; 
} 
Analisando o programa proposto, assinale a alternativa correta. 
Sua resposta 
Correta 
O programa demonstra o uso de duas funções, uma com recursividade e a outra não, as 
duas funções funcionam, a diferença está na quantidade de linha entre as duas 
técnicas. e não há erros de compilação. 
Comentário 
A frase corretamente preenchida é: O programa demonstra o uso de duas funções, uma 
com recursividade e a outra não, as duas funções funcionam, a diferença está na 
quantidade de linha entre as duas técnicas. O programa apresenta a diferença entre 
uma função com recursividade e uma função sem recursividade, podemos observar que 
existe uma grande diminuição na quantidade de linhas utilizadas para programar. 
Pontuação 
6/10 
Questões realizadas: 5 de 5 
1 
2 
3 
4 
5 
Acertou 
Errou