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