home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 18 REXX
/
18-REXX.zip
/
kzr_0899.zip
/
EXP.CMD
< prev
next >
Wrap
OS/2 REXX Batch file
|
1998-07-11
|
3KB
|
93 lines
/* REXX-Funktion exp.CMD */
signal on syntax name expMsg
/* Diese Variablen müssen für jede Prozedur definiert werden, damit die */
/* Prozedur die Variable bufND kennt und die Variable ND übernehmen kann.*/
Pfd=SysSearchPath("PATH", "kzr.cmd")
lp=LastPos("\", Pfd)
Pfd=DelStr(Pfd, 1+lp)
bufND =Pfd||"NDZahl.DAT"
NDAexp=Pfd||"NDAexp.DAT"
bufMsg=Pfd||"Meldung.DAT"
ND = LineIn(bufND, 1)
NUMERIC DIGITS ND+10
/* An dieser Stelle muß "bufMsg" gelöscht werden, damit dann, */
/* die Datei "Meldung.DAT" leer ist, diese auch leer bleibt. */
call charout(bufMsg)
Call SysFileDelete bufMsg
parse UPPER arg x,y
p0p=x*x /* Diese Anweisung provoziert eine Syntax-Fehlermeldung */
if length(y) > 0 then
do
call charout(NDAexp); Call SysFileDelete NDAexp
ret=LineOut(bufMsg, "Im Argument von exp(...) ist mindestens 1 nicht zulässiges Komma !")
/* "bufMsg" und "bufND" werden immer beim Beenden von kzr.cmd gelöscht, */
/* damit in den diesbezüglichen temporären Dateien */
/* Meldungen und ND-Werte nicht aneinandergehängt werden. */
EXIT
end
if x=0 then do; u=1; signal W; end
if abs(x) >= 1.0E+9 then
do
call charout(NDAexp); Call SysFileDelete NDAexp
ret=LineOut(bufMsg, " Der absolute Betrag des Argumentes der Funktion exp(...)",
" ",
"darf nicht größer als 1.0E+9 sein.")
/* "bufMsg" und "bufND" werden immer beim Beenden von kzr.cmd gelöscht, */
/* damit in den diesbezüglichen temporären Dateien */
/* Meldungen und ND-Werte nicht aneinandergehängt werden. */
EXIT
end
xg=trunc(x)
xr=x-xg
yxg=efunk(1,ND)
yxr=efunk(xr,ND)
u=yxr*yxg**xg
W: numeric digits ND
return(Format(u))
EXIT
efunk:
Procedure
arg x, ND
g=1; n=1; y=1
do forever
g=g*x/n
if abs(g/y) < 10**(-ND-10) then leave
y=y+g
n=n+1
end
return(y)
expMsg:
sf=ErrorText(RC)
if Pos("Arithmetic overflow", sf) > 0 | Pos("Invalid whole", sf) >0 then
do
call charout(NDAexp); Call SysFileDelete NDAexp
ret=LineOut(bufMsg, "Es müssen zu große Zahlenwerte verarbeitet werden !")
/* "bufMsg" und "bufND" werden immer beim Beenden von kzr.cmd gelöscht, */
/* damit in den diesbezüglichen temporären Dateien */
/* Meldungen und ND-Werte nicht aneinandergehängt werden. */
EXIT
end
if Pos("Bad arithmetic conversion", sf) > 0 then
do
call charout(NDAexp); Call SysFileDelete NDAexp
ret=LineOut(bufMsg, "Sie haben in exp(...) kein gültiges Argument eingegeben !")
/* "bufMsg" und "bufND" werden immer beim Beenden von kzr.cmd gelöscht, */
/* damit in den diesbezüglichen temporären Dateien */
/* Meldungen und ND-Werte nicht aneinandergehängt werden. */
EXIT
end