72 lines
1.1 KiB
Rexx
72 lines
1.1 KiB
Rexx
/* REXX ***************************************************************
|
|
* 24.05.2013 Walter Pachl translated from PL/I
|
|
**********************************************************************/
|
|
Numeric Digits 100
|
|
T0=100
|
|
Tr=20
|
|
k=0.07
|
|
|
|
h=2
|
|
x=t0
|
|
Call head
|
|
do t=0 to 100 by 2
|
|
Select
|
|
When t<=4 | t>=96 Then
|
|
call o x
|
|
When t=8 Then
|
|
Say '...'
|
|
Otherwise
|
|
Nop
|
|
End
|
|
x=x+h*f(x)
|
|
end
|
|
|
|
h=5
|
|
y=t0
|
|
Call head
|
|
do t=0 to 100 by 5
|
|
call o y
|
|
y=y+h*f(y)
|
|
end
|
|
|
|
h=10
|
|
z=t0
|
|
Call head
|
|
do t=0 to 100 by 10
|
|
call o z
|
|
z=z+h*f(z)
|
|
end
|
|
Exit
|
|
|
|
f: procedure Expose k Tr
|
|
Parse Arg t
|
|
return -k*(T-Tr)
|
|
|
|
head:
|
|
Say 'h='h
|
|
Say ' t By formula By Euler'
|
|
Return
|
|
|
|
o:
|
|
Parse Arg v
|
|
Say right(t,3) format(Tr+(T0-Tr)/exp(k*t),5,10) format(v,5,10)
|
|
Return
|
|
|
|
exp: Procedure
|
|
Parse Arg x,prec
|
|
If prec<9 Then prec=9
|
|
Numeric Digits (2*prec)
|
|
Numeric Fuzz 3
|
|
o=1
|
|
u=1
|
|
r=1
|
|
Do i=1 By 1
|
|
ra=r
|
|
o=o*x
|
|
u=u*i
|
|
r=r+(o/u)
|
|
If r=ra Then Leave
|
|
End
|
|
Numeric Digits (prec)
|
|
r=r+0
|
|
Return r
|