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

  1. /*  REXX-Programm  gcd(x,y)  */
  2.    signal on syntax name potGCD 
  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.    NDAGCD=Pfd||"NDAGCD.DAT"
  10.    bufND =Pfd||"NDZahl.DAT"
  11.    bufMsg=Pfd||"Meldung.DAT"
  12.  
  13.    arg u,v,s
  14.  
  15.    if length(s) > 0 then
  16.    do
  17.      call charout(NDAGCD) ; Call SysFileDelete NDAGCD
  18.      ret=LineOut(bufMsg, "Im Argument von  gcd(.. , ..)  ist mindestens  1  nicht zulässiges Komma !")
  19.   /* "bufMsg" und  "bufND" werden immer beim Beenden von kzr.cmd gelöscht, */
  20.   /*  damit in den diesbezüglichen temporären Dateien                      */
  21.   /*  Meldungen und ND-Werte nicht aneinandergehängt werden.               */
  22.      EXIT
  23.    end
  24.  
  25.    lu=length(Format(abs(u),,,0))
  26.    lv=length(Format(abs(v),,,0))
  27.    lm=Max(lu,lv)
  28.    ND=lm
  29.    NUMERIC DIGITS ND+6
  30.  
  31.    if v==0 then do; v=u; Signal RT; end
  32.    if u==0 then do; v=v; Signal RT; end
  33.    if u<0 then u=-u
  34.    if v<0 then v=-v  
  35.    do until u=0
  36.      if u<v then
  37.      do
  38.        t=u
  39.        u=v
  40.        v=t
  41.      end
  42.      u=u-v
  43.    end
  44. RT: NUMERIC DIGITS ND
  45.     return(Format(v))
  46.  
  47. potGCD:
  48.    sf=ErrorText(RC)
  49.    if  Pos("Bad arithmetic conversion", sf) > 0 then
  50.    do
  51.      call charout(NDAGCD) ; Call SysFileDelete NDAGCD
  52.      ret=LineOut(bufMsg, "Sie haben in  gcd(.. , ..)  keine gültigen Argumente eingegeben !")
  53.   /* "bufMsg" und  "bufND" werden immer beim Beenden von kzr.cmd gelöscht, */
  54.   /*  damit in den diesbezüglichen temporären Dateien                      */
  55.   /*  Meldungen und ND-Werte nicht aneinandergehängt werden.               */
  56.      EXIT
  57.    end
  58.