ou simplesmentevoid imprimeValorLógico(bool b);
são possíveis declarações da função imprimeValorLógico() que se define abaixo:void imprimeValorLógico(bool);
Repare que na declaração não é necessário indicar os nomes dos parâmetros (se bem que na maioria dos casos seja conveniente fazê-lo para mostrar claramente ao leitor o que faz a função).// Esta função imprime "verdadeiro" ou "falso" consoante o valor // lógico do argumento: void imprimeValorLógico(bool b) { if(b) cout << "verdadeiro"; else cout << "falso"; }
A sintaxe das declarações em sentido estrito é
simples: o cabeçalho da função (como na definição)
mas seguido de ;. O facto de uma função
estar declara não a dispensa de ter de ser definida mais cedo ou
mais tarde: todas as funções têm de estar definidas
em algum lado.
Uma definição, contendo também o cabeçalho
da função, serve de declaração, pelo que após
uma definição as declarações são redundantes.
Ao executar o seguinte código:int soma(int, int); float soma(float, float); double soma(double, double);
são chamadas as funções apropriadas para cada tipo de argumentos usados.int i1, i2; float f1, f2; double d1, d2;i2 = soma(i1, 4); // invoca int soma(int, int). f2 = soma(5.6f, f1); // invoca float soma(float, float). d2 = soma(d1, 10.0); // invoca double soma(double, double).
Este tipo de funções pode ser muito útil na resolução de alguns problemas, mas deve ser usado com cautela. A chamada de uma função recursivamente implica que as variáveis locais (parâmetros incluídos) são criadas (colocadas na memória) tantas vezes quantas a função é chamada, e só são destruídas (retiradas de memóra) quando as correspondentes chamadas retornam. Caso ocorram muitas chamadas recursivas, não só pode ser necessária muita memória para para as várias versões das variáveis locais (uma versão por cada chamada), como também a execução pode tornar-se bastante lenta, pois a chamada de funções implica alguma perda de tempo nas tarefas de "arrumação da casa" do processador. Para uma explicação mais detalhada do funcionamento deste tipo de funções, e das chamadas a funções em geral, aconselha-se a leitura do texto referente à aula teórica 4 (Capítulo 3).int factorial(int n) { if(n == 0 || n == 1) return 1; else return n * factorial(n - 1); }
No caso das primeiras duas expressões, colocar o operador (++ ou --) antes (prefixo) ou depois (sufixo) da variável tem, em certos casos, consequências diferentes. Mais adiante discutiremos a diferença entre estas duas maneiras de incrementar ou decrementar o valor de uma variável.i = i + 1; i++; ou ++i; i = i - 1; i--; ou --i; i = i + n; i += n; i = i - n; i -= n; i = i * n; i *= n; i = i / n; i /= n; i = i % n; i %= n;
Os operadores usados neste tipo de expressões são os seguintes (relacionais, de igualdade, e lógicos):a > 5 // verdadeira se a maior que 5. a < 5 && b <= 7 // verdadeira se a menor que 5 e b menor ou igual a 7. a < 5 || b <= 7 // verdadeira se a menor que 5 ou b menor ou igual a 7.
const int primeiro_primo = 1;
const char primeira_letra_do_alfabeto_latino = 'a';
1.b) Crie um procedimento que divida três números de vírgula flutuante pela sua média. Use a função criada acima para calcular a média.
2. Crie três funções de soma (com o mesmo nome) para três tipos de dados diferentes (int, float e double). Verifique, fazendo o traçado do programa, que o computador executa a função correcta para o tipo de argumentos usado quando é invocada a função.
3. Faça um programa que teste os operadores relacionais, de igualdade, lógicos e de atribuição abreviados indicados acima. Verifique o resultado de cada operação. O resultado da execução do seu programa deve ser aproximadamente:
Nota: Para que os booleanos sejam escritos por extenso, faça: cout << boolalpha; no início do programa (experimente primeiro sem esta instrução e interprete o resultado).Insira dois numeros inteiros: 3 5 Atribuí a m o valor 3 Atribuí a n o valor 5 O resultado de m-- é: 2 O resultado de n++ é: 6 O resultado de n += m é: 8 ... O resultado de n > m é: false O resultado de n <= m é: true
4. Escreva uma função que calcule recursivamente uma potência inteira de um número decimal. Lembre-se que xn = x xn-1.