Resolução da 5ª Aula Prática

Resoluções

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:

Traçado da chamada potência(2, 4)
  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.