home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 18 REXX / 18-REXX.zip / kzr_0899.zip / COSH.CMD < prev    next >
OS/2 REXX Batch file  |  1998-07-11  |  3KB  |  82 lines

  1. /* REXX-Programm cosh.cmd  */
  2.    Signal on syntax name coshMsg
  3.  
  4. /* Diese Variablen müssen für jede Prozedur definiert werden, damit die  */
  5. /* Prozedur die Variable bufND kennt und die Variable ND übernehmen kann.*/
  6.    Pfd=SysSearchPath("PATH", "kzr.cmd")
  7.    lp=LastPos("\", Pfd)
  8.    Pfd=DelStr(Pfd, 1+lp)
  9.    NDAcosh=Pfd||"NDAcosh.DAT"
  10.    bufND  =Pfd||"NDZahl.DAT"
  11.    bufMsg =Pfd||"Meldung.DAT"
  12.    ND = LineIn(bufND, 1)
  13.  
  14.    if ND > 450 then
  15.    do
  16.      ND=450
  17.      call charout(NDAcosh) ; Call SysFileDelete NDAcosh
  18.      ret=LineOut(NDAcosh, 450)
  19.      Call Charout,"   Achtung, nur 450 Dezimalstellen bei der Berechnung von  cosh(...)"
  20.      say
  21.      Beep(444, 200); Beep(628,300)  /* Hier kein EXIT ! */
  22.    end
  23.  
  24.    /* Wenn ND <= 450 ist, wird ND = ND  weitergegeben */
  25.    call charout(NDAcosh) ; Call SysFileDelete NDAcosh
  26.    ret=LineOut(NDAcosh, ND)
  27.  
  28.    arg x,y  /* y soll "illegale" Komma's im Funktions-Argument aufspüren */
  29.    p0p=x*x /* Diese Anweisung prvoziert eine Syntax-Fehlermeldung       */
  30.  
  31.    if length(y) > 0 then
  32.    do
  33.      call charout(NDAcosh); Call SysFileDelete NDAcosh
  34.      ret=LineOut(bufMsg, "Im Argument von  cosh(...)  ist mindestens  1  nicht zulässiges Komma !")
  35.      /* "bufMsg" und  "bufND" werden immer beim Beenden von kzr.cmd gelöscht, */
  36.      /*  damit in den diesbezüglichen temporären Dateien                      */
  37.      /*  Meldungen und ND-Werte nicht aneinandergehängt werden.               */
  38.      EXIT
  39.    end
  40.  
  41.    Numeric Digits ND+5
  42.  
  43.    if x=0 then do; y=1; Signal W; end
  44.  
  45.    if abs(x) >= 1.0E+9 then
  46.    do
  47.      call charout(NDAcosh); Call SysFileDelete NDAcosh
  48.      ret=LineOut(bufMsg, "     Der absolute Betrag des Argumentes der Funktion cosh(...)",
  49.                          "                     ",
  50.                          "darf nicht größer als  1.0E+9  sein.")
  51.   /* "bufMsg" und  "bufND" werden immer beim Beenden von kzr.cmd gelöscht, */
  52.   /*  damit in den diesbezüglichen temporären Dateien                      */
  53.   /*  Meldungen und ND-Werte nicht aneinandergehängt werden.               */
  54.      EXIT
  55.    end
  56.  
  57.    if abs(x) <  0.1 then SIGNAL A
  58.    if abs(x) >= 0.1 then SIGNAL B
  59.  
  60. A: u=1; v=1; m=2; z=x*x
  61.    do while (abs(u/v) > 10**(-ND-5))
  62.      g=z/(m*(m-1)); u=u*g; v=v+u; m=m+2; end
  63.    y=v; SIGNAL W
  64.  
  65. B: ep=exp(x); em=1/ep; y=(ep+em)/2
  66.  
  67. W: numeric digits ND
  68.    return(Format(y))
  69.  
  70. coshMsg:
  71.    sf=ErrorText(RC)
  72.    if  Pos("Bad arithmetic conversion", sf) > 0 then
  73.    do
  74.      call charout(NDAcosh); Call SysFileDelete NDAcosh
  75.      ret=LineOut(bufMsg, "Sie haben in  cosh(...)  kein gültiges Argument eingegeben !")
  76.   /* "bufMsg" und  "bufND" werden immer beim Beenden von kzr.cmd gelöscht, */
  77.   /*  damit in den diesbezüglichen temporären Dateien                      */
  78.   /*  Meldungen und ND-Werte nicht aneinandergehängt werden.               */
  79.      EXIT
  80.    end
  81.  
  82.