Sempre pensei de fora pra dentro, mas de dentro pra fora fica muuuito mais fácil.
Acompanhem....
Regra básica de programação:
Dividir o problemão em probleminhas....
O menor problema é..... um único número.
Sem usar array, ou economia de fonte...
FUNCTION ExtensoUnidade( nValor )
LOCAL cTxt := ""
DO CASE
CASE nValor == 1; cTxt := "HUM"
CASE nValor == 2; cTxt := "DOIS"
CASE nValor == 3; cTxt := "TRES"
CASE nValor == 4; cTxt := "QUATRO"
CASE nValor == 5; cTxt := "CINCO"
CASE nValor == 6; cTxt := "SEIS"
CASE nValor == 7; cTxt := "SETE"
CASE nValor == 8; cTxt := "OITO"
CASE nValor == 9; cTxt := "NOVE"
CASE nValor == 10; cTxt := "DEZ"
CASE nValor == 11; cTxt := "ONZE"
CASE nValor == 12; cTxt := "DOZE"
CASE nValor == 13; cTxt := "TREZE"
CASE nValor == 14; cTxt := "QUATORZE"
CASE nValor == 15; cTxt := "QUINZE"
CASE nValor == 16; cTxt := "DEZESSEIS"
CASE nValor == 17; cTxt := "DEZESSETE"
CASE nValor == 18; cTxt := "DEZOITO"
CASE nValor == 19; cTxt := "DEZENOVE"
ENDCASE
RETURN cTxt
Olhem com atenção:
NADA complicado, tudo simples, resolvido de 1 a 19.
Qualquer programador consegue fazer isso, em qualquer linguagem de programação, porque só tem comando básico.