RosettaCodeData/Task/Exponentiation-operator/Action-/exponentiation-operator.action

65 lines
947 B
Plaintext

INCLUDE "D2:REAL.ACT" ;from the Action! Tool Kit
INT FUNC PowerI(INT base,exp)
INT res,i
IF exp<0 THEN Break() FI
res=1
FOR i=1 TO exp
DO
res==*base
OD
RETURN (res)
PROC PowerR(REAL POINTER base INT exp
REAL POINTER res)
INT i
REAL tmp
IF exp<0 THEN Break() FI
IntToReal(1,res)
FOR i=1 TO exp
DO
RealMult(res,base,tmp)
RealAssign(tmp,res)
OD
RETURN
PROC TestI(INT base,exp)
INT res
res=PowerI(base,exp)
PrintF("%I^%I=%I%E",base,exp,res)
RETURN
PROC TestR(REAL POINTER base INT exp)
REAL res
PowerR(base,exp,res)
PrintR(base) PrintF("^%I=",exp)
PrintRE(res)
RETURN
PROC Main()
REAL base
Put(125) PutE() ;clear screen
TestI(27,3)
TestI(2,12)
TestI(-3,9)
TestI(1,1000)
TestI(20000,0)
ValR("3.141592654",base)
TestR(base,10)
ValR("-1.11",base)
TestR(base,99)
ValR("0.123456789",base)
TestR(base,1)
ValR("987654.321",base)
TestR(base,0)
RETURN