1.a) Ver ex1a.C
.
1.b) A simples transferência dos procedimentos para depois da função main()
leva o compilador a gerar mensagens de erro, pois necessita de conhecer o
cabeçalho de uma rotina para saber como pode ser feita a sua invocação: o
compilador lê o programa de cima para baixo, e por isso quando compila a
função main()
ainda não viu as definições dos procedimentos. A solução passa por
declarar os procedimentos, sem os definir, antes da função main()
.
Ver ex1b.C
.
2. Os valores constantes na tabela estão correctos.
3.a) Ver ex3a.C
.
A tabela fica:
valor de base :
|
valor de expoente :
|
devolução de: | |
1ª chamada: | 2 | 4 | 2 × 8 = 16 |
2ª chamada: | 2 | 3 | 2 × 4 = 8 |
3ª chamada: | 2 | 2 | 2 × 2 = 4 |
4ª chamada: | 2 | 1 | 2 × 1 = 2 |
5ª chamada: | 2 | 0 | 1 |
3.b) A utilização de expoentes negativos obriga a devolver valores
decimais. Nesse caso torna-se absurdo não aceitar também como base da
potência valores decimais. Assim, em vez de "corrigir" a
função, escreveu-se uma nova versão, sobrecarregada com a primeira.
Note-se que a nova versão não admite que a base seja nula e o expoente
negativo. Ver ex3b.C
.