UNIFEI – Universidade Federal de Itajubá Campus Avançado de Itabira
Laboratório de Programação – BAC004 Profa. Claudia A. Izeki
Laboratório 3 – Estudo Dirigido de Funções
Objetivos da atividade: Entender, aplicar e avaliar os conceitos de funções.
Procedimentos da atividade:
Você deverá resolver todos os 14 exercícios desta lista em seu caderno, com sua própria caligrafia. Nesta aula, resolva os exercícios na sequência: 1, 2, 3, 12, 13 e 14, pois serão discutidos na aula teórica da tarde. Em sua casa, resolva os demais;
Utilize o material de referência da disciplina: http://bac004.wikidot.com. Observação: sempre traga esse material na forma impressa ou digital para não depender do funcionamento de Internet no laboratório;
Quando tiver alguma dúvida, verifique-a com seu colega ou acesse o material de aula. Se a dúvida persistir, contate o monitor e/ou professor. Caso a dúvida ocorra fora do horário de aula, favor enviar um e-mail para [email protected].
A nota desta lista de exercícios, juntamente com outras, valerá 20% da nota da
prática de ECOI02;
Você terá uma semana para resolver esta lista, que deverá ser apresentado no início da aula do dia 31 de março de 2015, para ser vistado;
Ao terminar os exercícios você deverá se retirar do laboratório;
Não é permitida a realização de atividades que não as relacionadas à disciplina, como o acesso a redes sociais (Facebook), execução de trabalhos de outras disciplinas, entre outras.
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;
c. Chamada à função: serve para executar a função definida. No programa 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. Anote em seu caderno a mensagem de erro apresentada.
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. Escreva o programa inteiro em seu caderno.
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. Anote em seu caderno os endereços de memória impressos.
4) Por que ocorreu um erro na linha 13 na chamada à função maior() do programa a seguir? Escreva somente esta linha corrigida em seu caderno. Dica: verifique a sintaxe da chamada à função calculaMedia() no exercício anterior.
5) Por que ocorreu um erro na linha 6 do programa a seguir?
6) No programa a seguir 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”. Digite, compile e execute o seguinte
programa. Escreva-o em seu caderno.
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. 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. Escreva o programa inteiro em seu caderno. 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) Chame corretamente as funções necessárias nas linhas 16 e 17 para que o programa a seguir fique correto. Dica: tente entender o que o programa faz, assim você conseguirá resolvê-lo. Escreva o programa inteiro em seu caderno. 1 #include <iostream>
2 using namespace std;
3
4 float imposto(float s, float p);
5 float salarioLiquido(float s, float v); 6
7 int main() 8 {
10 p_imp, // percentual de imposto 11 v_imp, // valor em reais do imposto 12 sal_liq; // salario líquido
13
14 cout << "Digite o salario e o percentual (%) de imposto: ";
15 cin >> sal >> p_imp;
16 ____________________________________________; 17 _____________________________________________;
18
19 cout << "\nSalario Bruto: " << sal 20 << "\nValor do imposto: " << v_imp 21 << "\nSalario Liquido: " << sal_liq; 22
23 return 0; 24 }
25
26 // Recebe o salario e o percentual de imposto, nesta ordem
27 // Retorna o imposto em reais 28 float imposto(float s, float p) 29 {
30 return s*(p/100); 31 }
32
33 // Recebe o salario bruto e o valor do imposto em reais 34 // Retorna o salario liquido
35 float salarioLiquido(float s, float v) 36 {
37 return s-v; 38 }
11) 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 a seguir. Observação: escreva o programa inteiro em seu caderno.
/* 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 */
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)
12) 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 a seguir. Escreva e comente o resultado (a impressão na tela) em seu caderno. 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.
13) 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. 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, escrevendo-o inteirescrevendo-o em seu cadernescrevendo-o. Esse tipescrevendo-o de passagem de parâmetrescrevendo-os é ditescrevendo-o pescrevendo-or referência.
14) Para provar que x e a estão na mesma posição de memória, adicione os seguintes trechos de código no programa anterior. Escreva em seu caderno os endereços de memória das variáveis x, y, a e b.