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

  1. /* REXX-Programm ld.cmd  */
  2.    signal on syntax name ldMsg
  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.    NDAld =Pfd||"NDAld.DAT"
  10.    bufND =Pfd||"NDZahl.DAT"
  11.    bufMsg=Pfd||"Meldung.DAT"
  12.    ND = LineIn(bufND, 1)
  13.    NUMERIC DIGITS (ND+10)
  14.  
  15. /* An dieser Stelle muß  "bufMsg"  gelöscht werden, damit dann,   */
  16. /* die Datei  "Meldung.DAT"  leer ist, diese auch leer bleibt.    */
  17.    call charout(bufMsg)
  18.    Call SysFileDelete bufMsg
  19.  
  20.    if ND > 450 then
  21.    do
  22.      ND=450
  23.      call charout(NDAld) ; Call SysFileDelete NDAld
  24.      ret=LineOut(NDAld, 450)
  25.      Call Charout,"   Achtung, nur 450 Dezimalstellen bei der Berechnung von   ld(...)"
  26.      say
  27.      Beep(444, 200); Beep(628,300)  /* Hier kein EXIT ! */
  28.    end
  29.  
  30.    /* Wenn ND <= 450 ist, wird ND = ND  weitergegeben */
  31.    call charout(NDAld) ; Call SysFileDelete NDAld
  32.    ret=LineOut(NDAld, ND)
  33.  
  34.    /* lna1 = ln(1.69) */
  35.    lna1=0.||,
  36.    5247285289349821040709919737619087944083329122628682807714352193917||,
  37.    841152941153983271549167017823808545808161009529459962452580538075605143||,
  38.    179614957470321246015797443040147265215320127063135916286921788619242526||,
  39.    575215249400686632216631794011227950002119245158263789878915397341784224||,
  40.    036001931559858474752982104716769644711036227308178568176895075832529284||,
  41.    232546039929327153868686072445084165605817063965568882069930595207030840||,
  42.    9660140381917978653590041436934688403145311165682227293922935107690474705
  43.  
  44.    /* lna2 = ln(3.49) */
  45.    lna2=1.||,
  46.    2499017362143357951634986131299112939466823602028164371597327972818||,
  47.    379181900889747291289440245239282509867619774937415989840364673381082569||,
  48.    214417875411147801968539067758474601483417628517197130791023958191843818||,
  49.    414009839452902151163994500318180865847594804307169876881964505466838103||,
  50.    221492536478446093780088944130981471122649198384614405790745449910842241||,
  51.    934168422623424820130114818783092800899731734225475602660107791102746614||,
  52.    760700072592629269363017609250380628876450730290050619407723681593250485
  53.  
  54.    /* lna3 = ln(7) */
  55.    lna3=1.||,
  56.    9459101490553133051053527434431797296370847295818611884593901499375||,
  57.    798627520692677876584985878715269930616942058511409117237522576777868431||,
  58.    489580951639007759078244681042747833822593490084673744125049737048535517||,
  59.    678355774862401510277418088686710751412134809387974183108102518231684930||,
  60.    140733063932877119341121406876924002605769358524796053502857536256906187||,
  61.    920955021911641759086475695432943962682703455511789841649613810686409244||,
  62.    5160419227745099543528972772872862328141474249580376618676174693688509687
  63.  
  64.    /* ln10 = ln(10) */
  65.    ln10=2.||,
  66.    3025850929940456840179914546843642076011014886287729760333279009675||,
  67.    726096773524802359972050895982983419677840422862486334095254650828067566||,
  68.    662873690987816894829072083255546808437998948262331985283935053089653777||,
  69.    326288461633662222876982198867465436674744042432743651550489343149393914||,
  70.    796194044002221051017141748003688084012647080685567743216228355220114804||,
  71.    663715659121373450747856947683463616792101806445070648000277502684916746||,
  72.    5505868569356734206705811364292245544057589257242082413146956890167589403
  73.  
  74.    m2=1.||,
  75.    442695040888963407359924681001892137426645954152985934135449406931||,
  76.    109219181185079885526622893506344496997518309652544255593101687168359642||,
  77.    720662158223479336274537369884718493630701387663532015533894318916664837||,
  78.    643128615424047478422289497904795091530351338588054968865893096996368036||,
  79.    110511075630844145427215828344941891933908577715790044171280246848341374||,
  80.    522695182369011239094034459968539906113421722886278029158010630061976762||,
  81.    445652605995073753240625655815475938178305239725510724813077156267545808
  82.  
  83.    arg x,y
  84.    p0p=x*x /* Diese Anweisung provoziert eine Syntax-Fehlermeldung */
  85.  
  86.    if length(y) > 0 then
  87.    do
  88.      call charout(NDAld) ; Call SysFileDelete NDAld
  89.      ret=LineOut(bufMsg, "Im Argument von  ld(...)  ist mindestens  1  nicht zulässiges Komma !")
  90.   /* "bufMsg" und  "bufND" werden immer beim Beenden von kzr.cmd gelöscht, */
  91.   /*  damit in den diesbezüglichen temporären Dateien                      */
  92.   /*  Meldungen und ND-Werte nicht aneinandergehängt werden.               */
  93.      EXIT
  94.    end
  95.  
  96.    if x<=0 then
  97.    do
  98.      call charout(NDAld) ; Call SysFileDelete NDAld
  99.      ret=LineOut(bufMsg, "Der Logarithmus ist für  x <= 0  nicht definiert !")
  100.   /* "bufMsg" und  "bufND" werden immer beim Beenden von kzr.cmd gelöscht, */
  101.   /*  damit in den diesbezüglichen temporären Dateien                      */
  102.   /*  Meldungen und ND-Werte nicht aneinandergehängt werden.               */
  103.      EXIT
  104.    end
  105.  
  106.    if x  = 1    then do y=0;    return(y);   EXIT; end
  107.    if x >= 1    then do z=x;    sgn=+1;  SIGNAL A; end
  108.    if x <= 1    then do z=1/x;  sgn=-1;  SIGNAL A; end
  109.  
  110. A: p=10; n=0; do while (z>9.5); z=z/p; n=n+1; end
  111.  
  112.    if (5.0   <  z) then if (z <= 9.50 ) then
  113.            do aa=7.00; aln=lna3; SIGNAL B; end
  114.    if (2.430 <  z) then if (z <= 5.00 ) then
  115.            do aa=3.49; aln=lna2; SIGNAL B; end
  116.    if (1.05  <  z) then if (z <= 2.430) then
  117.            do aa=1.69; aln=lna1; SIGNAL B; end
  118.    if (0.95  <  z) then if (z <= 1.05 ) then SIGNAL C
  119.  
  120. B: tt=(z-aa)/(z+aa); t=tt*tt; u=1; m=1; v=1
  121.    do while ((u/v) > 10**(-ND-7))
  122.        g=t*(2*m-1)/(2*m+1); u=u*g; v=v+u; m=m+1; end
  123.    y=sgn*(n*ln10 + aln+2*tt*v); SIGNAL E
  124.  
  125. C: tt=(z-1)/(z+1); t=tt*tt; u=1; m=1; v=1
  126.    do while ((u/v) > 10**(-ND-7))
  127.        g=t*(2*m-1)/(2*m+1); u=u*g; v=v+u; m=m+1; end
  128.    y=sgn*(n*ln10 + 2*tt*v)
  129.  
  130. E: u=m2*y
  131.    NUMERIC DIGITS ND
  132.    return(Format(u))
  133.  
  134. ldMsg:
  135.    sf=ErrorText(RC)
  136.    if  Pos("Bad arithmetic conversion", sf) > 0 then
  137.    do
  138.      call charout(NDAld) ; Call SysFileDelete NDAld
  139.      ret=LineOut(bufMsg, "Sie haben in  ld(...)  kein gültiges Argument eingegeben !")
  140.   /* "bufMsg" und  "bufND" werden immer beim Beenden von kzr.cmd gelöscht, */
  141.   /*  damit in den diesbezüglichen temporären Dateien                      */
  142.   /*  Meldungen und ND-Werte nicht aneinandergehängt werden.               */
  143.      EXIT
  144.    end
  145.  
  146.