Baixe o app para aproveitar ainda mais
Prévia do material em texto
18/01/2022 Primeiro Caderno - Evernote https://www.evernote.com/client/web?login=true#?b=5ac9b6e0-84a0-4170-a6dc-a5efbf353acc&n=485f1ccd-26f1-ae6f-76c0-536d84c0eafd& 1/4 UNIDADE 3 - Funções e Recursividade UNIDADE 3 - Funções e Recursividade Questão 1 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. Questão 2 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 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 ( ); . O erro do programa é o tipo de retorno da função, deveria ser utilizado o tipo int, ficando da seguinte forma: int raio ( ); . O problema do programa é que o nome da função é raio, como é um cálculo não podemos chamar uma função com o nome do cálculo que será executado. O erro do programa está no return 0, quando há função no programa devemos obrigatoriamente utilizar o return 1. 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. 18/01/2022 Primeiro Caderno - Evernote https://www.evernote.com/client/web?login=true#?b=5ac9b6e0-84a0-4170-a6dc-a5efbf353acc&n=485f1ccd-26f1-ae6f-76c0-536d84c0eafd& 2/4 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. Questão 3 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. As asserções I e II são proposições verdadeiras, e a II não é uma justificativa da II. As asserções I e II são proposições verdadeiras, e a II é uma justificativa da I. A asserção I é uma proposição verdadeira, e a II é uma proposição falsa. A asserção I é uma proposição falsa, e a II é uma proposição verdadeira. As asserções I e II são proposições falsas. 18/01/2022 Primeiro Caderno - Evernote https://www.evernote.com/client/web?login=true#?b=5ac9b6e0-84a0-4170-a6dc-a5efbf353acc&n=485f1ccd-26f1-ae6f-76c0-536d84c0eafd& 3/4 Assinale a alternativa que contém a associação correta entre as colunas: Questão 4 Analise o trecho de programa a seguir: #include<stdio.h> #include<stdlib.h> int* alocar(){ return malloc(200); } int main(){ int *memoria; memoria = alocar(); if(memoria != NULL){ printf("Endereco de memoria alocada = %x",memoria); } else{ printf("Memoria nao alocada"); } return 0; } Agora, avalie as seguintes asserções e a relação proposta entre elas. I - Foi criado um ponteiro inteiro e, após a função ser chamada, seu resultado foi armazenado no ponteiro chamado memoria. PORQUE II - Se o valor do ponteiro memoria é diferente de NULL, então sabe-se que a alocação foi feita com sucesso e imprime o endereço da primeira posição, caso contrário, o usuário é informado que a memória não foi alocada. A respeito dessas asserções, assinale a alternativa correta: I-A / II-C / III-E / IV-B / V-D. I-E / II-D / III-C / IV-B / V-A. I-B / II-A / III-C / IV-E / V-D. I-B / II-D / III-A / IV-C / V-E. I-B / II-A / III-C / IV-D / V-E. As asserções I e II são proposições verdadeiras, e a II é uma justificativa da I. As asserções I e II são proposições verdadeiras, mas a II não é uma justificativa da I. 18/01/2022 Primeiro Caderno - Evernote https://www.evernote.com/client/web?login=true#?b=5ac9b6e0-84a0-4170-a6dc-a5efbf353acc&n=485f1ccd-26f1-ae6f-76c0-536d84c0eafd& 4/4 Questão 5 Conforme Soffner (2013) a utilização funções com de passagem de parâmetros por referência está diretamente ligada aos conceitos de ponteiro e endereço de memória. A ideia da técnica é análoga a passagem por valores, ou seja, a função será definida de modo a receber certos parâmetros e “quem” faz a chamada do método deve informar esses argumentos. Entretanto, o comportamento e o resultado são diferentes. Na passagem por referência não será criada uma cópia dos argumentos passados, na verdade, será passado o endereço da variável e função irá trabalhar diretamente com os valores ali armazenados. Observe o programa a seguir: #include <stdio.h>int testar (int* n1, int* n2){ *n1 = -1; *n2 = -2; printf("\n\n Valores dentro da função testar(): "); printf("\n n1 = %d e n2 = %d",*n1,*n2); return 0;}int main ( ){int n1 = 10;int n2 = 20;printf("\n\n Valores antes de chamar a função: ");printf("\n n1 = %d e n2 = %d",n1,n2);testar(&n1, &n2);printf("\n\n Valores depois de chamar a função: ");printf("\n n1 = %d e n2 = %d",n1,n2);return 0;} Analisando o contexto e o programa apresentado, assinale a alternativa correta quanto ao uso dos sinais * (asterisco) e & (e comercial): As asserções I e II são proposições verdadeiras, mas a II não é uma justificativa da I. A asserção I é uma proposição verdadeira, e a II é uma proposição falsa. A asserção I é uma proposição falsa, e a II é uma proposição verdadeira. As asserções I e II são proposições falsas. O *é para a passagem de parâmetros por valor e o & é para a passagem de parâmetros por referência. O * é para o ponteiro e o & é para a passagem de parâmetros por referência.
Compartilhar