Baixe o app para aproveitar ainda mais
Prévia do material em texto
UNIFEI – Universidade Federal de Itajubá Campus Avançado de Itabira Laboratório de Lógica de Programação – ECOI02 Profa. Claudia A. Izeki Laboratório – Funções Objetivos da atividade: • Entender e aplicar os conceitos de funções. Procedimentos da atividade: • Utilize a apostila de Lógica de Programação como material base; • Se tiver alguma dúvida, verifique com seu colega, depois com a professora. Caso a dúvida ocorra fora do horário de aula, utilize o fórum da disciplina teórica no SIGAA; • Não é permitido jogar durante a aula, nem ver vídeos ou redes sociais que não estejam associados diretamente com a disciplina. Após o término desta atividade, você deverá ser capaz de: • Distinguir passagem de parâmetros por valor e passagem de parâmetros por referência e entender quando usá-los; • Entender e aplicar o uso do operador de endereços; • Entender os termos protótipo de função, chamada à função e definição de função, bem como suas sintaxes; • Entender o cabeçalho de definição de função e saber implementar o seu corpo, além de entender e aplicar como chamar funções e como obter seu valor de retorno, caso haja; • Entender que funções void não possuem valor de retorno e, por isso, não devem ser chamados em couts ou como condições de condicionais ou laços. 1) Quando se trabalha com funções existem 3 conceitos importantes que devem ser fixados: a. Protótipo de função: serve para indicar ao compilador da existência de uma função que possui um nome, parâmetros e seus tipos (se houver) e seu tipo de retorno (se houver). É escrito antes da função main e de qualquer função que a chame; b. Definição de função: é a codificação da função, composta por cabeçalho de definição da função e corpo da função entre chaves; c. Chamada à função: serve para executar, ativar a função definida. No programa da página a seguir são apresentadas cada uma dessas partes. Digite o programa, compile-o e execute-o. A seguir, retire o protótipo da função calculaMedia e compile o programa. O que aconteceu? Verifique o erro dado pelo compilador. 2) Existe uma alternativa para não escrever o protótipo da função antes da main: apagar o protótipo e copiar a definição da função antes da main. Altere o programa anterior para que funcione sem o protótipo. Compile-o e execute-o. 3) O operador & antes do nome de uma variável retorna o endereço de memória da variável. Para provar que as variáveis da função main() não são as mesmas da função calculaMedia() no programa do Exercício 2, adicione os seguintes trechos de código destacados em vermelho no programa anterior. Quais foram os endereços de memória impressos? O que isso significa? 4) Por que ocorreu um erro na linha 13 na chamada à função maior() do programa abaixo? Corrija-o. Dica: verifique a sintaxe da chamada à função calculaMedia() no exercício anterior. 5) Por que ocorreu um erro na linha 6 do programa abaixo? 6) No programa abaixo não ocorreu erro na compilação, mas a temperatura em Fahrenheit não foi impressa. Por quê? 7) Quando uma função possui um valor de retorno do tipo int, ela é dita “função int”. Quando ela possui um valor de retorno float, ela é dita “função float”; e assim por diante. A função calculaMedia() do Exercício 1 é float. A função maior() do Exercício 4 é int. Quando uma função não possui valor de retorno, ela é dita “função void”. “void” significa vazio. Digite, compile e execute o seguinte programa. 8) Por que ocorreu um erro na linha 11 do programa abaixo? Corrija-o. 9) Complete o programa a seguir, definindo as funções validaNotas() e media(), não esquecendo de incluir os protótipos, caso os use. Suponha que a média seja aritmética simples. Dica para definir a função validaNotas: verifique que a chamada à função validaNotas está dentro da condição da estrutura condicional; assim, deve-se retornar um valor booleano (true ou false) dessa função. Verifique, também, que deverá haver 3 parâmetros do tipo float na definição dessa função. int main() { float n1, n2, n3; cout << "Digite 3 notas: "; cin >> n1 >> n2 >> n3; if(validaNotas(n1, n2, n3)) { cout << "Media: " << media(n1, n2, n3); } else cout << "Alguma nota nao estah no intervalo de 0 a 10"; return 0; } 10) O índice de massa corporal (IMC) é uma fórmula que indica se um indivíduo está acima do peso, se está obeso ou abaixo do peso ideal considerado saudável. A fórmula para calcular o IMC é dividir o peso, medido em quilos, pelo quadrado da altura, em metros. Assim, escreva um programa cujo objetivo é saber o IMC de uma pessoa e sua classificação. Esse programa deverá definir e chamar todas as funções que possuam os protótipos apresentados na página a seguir. /* Retorna falso caso peso e/ou altura forem inválidos (negativos ou zero); ou verdadeiro, caso contrário */ bool validaEntrada(float peso, float altura); /* Calcula e retorna o IMC */ float calculaIMC(float peso, float altura); /* Imprime a classificação de acordo com o IMC */ void exibeClassificacaoIMC(float imc); /* Imprime a tabela de classificação do IMC */ void exibeTabelaIMC(); IMC Classificação < 18,5 Abaixo do peso 18,5 a < 25,0 Peso ideal 25,0 a < 30,0 Sobrepeso 30,0 a < 35 Obesidade Grau I 35,0 a < 40 Obesidade Grau II (severa) ≥ 40,0 Obesidade Grau III (mórbida) 11) Deseja-se trocar os valores entre duas variáveis. Por exemplo, as variáveis x e y possuem os valores 1 e 2, respectivamente. Após a troca de valores, x deverá ter o valor 2 e y o valor 1. Para alcançar esse objetivo foi definida uma função chamada troca(). Edite, compile e execute o programa da página a seguir. O que foi impresso na tela? Verifique que houve passagem de parâmetros por valor, ou seja, os valores de x e y foram copiados para as variáveis a e b, respectivamente. 12) Verifique o código a seguir para corrigir a função troca() do exercício anterior. Deve-se incluir o & antes do nome da variável no cabeçalho de definição da função. Esse & não significa endereço de memória como no Exercício 3. Significa apenas que “a é um outro nome, um apelido, para a variável x”. Da mesma forma, “b é um outro nome, apelido, para a variável y”. Com isso, qualquer alteração no valor da variável a também afeta o conteúdo da variável x. Sendo assim, corrija seu programa. Esse tipo de passagem de parâmetros é dito por referência. 13) Para provar que x e a estão na mesma posição de memória, adicione os seguintes trechos de código pontilhados de vermelho no programa anterior. Que semelhanças há nos endereços de memória de a e b com x e y?
Compartilhar