Em autolisp temos a função "expt" para cálculos de potência
2 elevado à 2 = 4
[lsp](expt 2 2) ; retorna 4[/lsp]
[lsp](expt 3 2) ; retorna 9[/lsp]
E se não existisse esta função? como resolveriamos o problema?
Teriamos que criar uma função que recebesse qualquer dupla de valores e retornasse o resultado
exemplo:
[lsp](potencia 10 4) ; deve retornar 10000[/lsp]
da mesma forma que utilizamos:
[lsp](expt 10 4); retorna 10000[/lsp]
Alguem se habilita? Resposta amanhã se ninguem conseguir!
Desafio - Cálculo de potência sem o "expt"!
Moderador: Moderadores
- admin
- Administrador
- Mensagens: 621
- Registrado em: Sex 28 Nov 2003 11:00:00 pm
- Localização: Itu / SP
- Contato:
Desafio - Cálculo de potência sem o "expt"!
Marcos Mendes de Almeida
mmalbr@gmail.com
mmalbr@gmail.com
- ederson
- Prata 1/3
- Mensagens: 414
- Registrado em: Qua 21 Jul 2004 12:00:00 am
- Localização: Belo Horizonte
Marcos, tabajara para expente inteiro. Para expoente fracionário, precisa desenvolver, para encotrar os inteiros que geram a fração.
[lsp](defun c:potencia (/ base expo resu)
(setq base (getreal "\nEntre com a base...")
expo (getint "\nEntre com o expoente...")
resu base
)
(repeat (1- expo)
(setq resu (* resu base))
)
(print (rtos resu))
(princ)
)[/lsp]
[lsp](defun c:potencia (/ base expo resu)
(setq base (getreal "\nEntre com a base...")
expo (getint "\nEntre com o expoente...")
resu base
)
(repeat (1- expo)
(setq resu (* resu base))
)
(print (rtos resu))
(princ)
)[/lsp]
Ederson Ambrosio
031 8893-2947
BH-MG
031 8893-2947
BH-MG
- admin
- Administrador
- Mensagens: 621
- Registrado em: Sex 28 Nov 2003 11:00:00 pm
- Localização: Itu / SP
- Contato:
Ok... Perfeito.. Mas vamos complicar um pouco mais!
não pode utilizar as funções while nem repeat
Depois vão entender onde quero chegar!
A dica está justamente em não poder utilizar while e repeat
aguardo
at
não pode utilizar as funções while nem repeat
Depois vão entender onde quero chegar!
A dica está justamente em não poder utilizar while e repeat
aguardo
at
Marcos Mendes de Almeida
mmalbr@gmail.com
mmalbr@gmail.com
- nuelss
- Bronze 3/3
- Mensagens: 386
- Registrado em: Qui 05 Ago 2004 12:00:00 am
- Localização: São Simão - SP

Boa tarde senhores !!!
Ando meio sumido ...
Segue uma possivel solução - tá meia feinha ... e está dando erro de stacks quando liberada para numeros decimais ... Só ta funcionando com inteiros ... se alguem puder melhorar ... é que fiz correndo, agora no almoço ...
[lsp](defun pot (base expo)
(if (or (null base) (null expo) (null (numberp base)) (null (numberp expo)) (null (equal (fix base) base)) (null (equal (fix expo) expo)))
nil
(progn
(if (null expon)
(setq basen base expon (- expo 1))
)
(if (> expon 0)
(progn
(setq basen (* base basen) expon (- expon 1))
)
)
(if (equal expon 0)
(progn
(setq expon nil base nil expo nil)
basen
)
(pot base expon) ;|Recursãozinha|;
)
)
)
)[/lsp]
Sintaxe:
[lsp](setq valor (pot base expoente))[/lsp]
Flw ...
"É a verdade o que assombra, o descaso que condena,
a estupidez o que destrói eu vejo tudo que se foi e que
não existe mais" (Metal Contra as Nuvens - Legião Urbana)
Abraço,
Emanuel
a estupidez o que destrói eu vejo tudo que se foi e que
não existe mais" (Metal Contra as Nuvens - Legião Urbana)
Abraço,
Emanuel

dica:
usem recursivide e um if....
usem recursivide e um if....
como que usa o html daqui?
visite o meu blog: http://tbn2.blogspot.com
lisps exclusivas pra download!!
visite o meu blog: http://tbn2.blogspot.com
lisps exclusivas pra download!!
- admin
- Administrador
- Mensagens: 621
- Registrado em: Sex 28 Nov 2003 11:00:00 pm
- Localização: Itu / SP
- Contato:
O ederson conseguiu
parabens! he he he he
segue a minha versão:
[lsp]
(defun Expoente (x y)
(IF (zerop y)
1
(* x (Expoente x (- y 1)))
)
)[/lsp]
Realmente o segredo esta em usar recursividade onde a rotina chama ela mesma de forma controlada para não criar um loop infinito!
parabens! he he he he
segue a minha versão:
[lsp]
(defun Expoente (x y)
(IF (zerop y)
1
(* x (Expoente x (- y 1)))
)
)[/lsp]
Realmente o segredo esta em usar recursividade onde a rotina chama ela mesma de forma controlada para não criar um loop infinito!
Marcos Mendes de Almeida
mmalbr@gmail.com
mmalbr@gmail.com