home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / forth / compiler / fpc / tutor / l2p120 < prev    next >
Text File  |  1990-07-15  |  3KB  |  107 lines

  1.        ╔════════════════════════════════════════════════════╗
  2.        ║ Lesson 2 Part 120  F-PC 3.5 Tutorial by Jack Brown ║
  3.        ╚════════════════════════════════════════════════════╝
  4.  
  5. \ Program:  INTDIV
  6. \ Function: Plots r vs m and q vs m for floored
  7. \           and symmetric division.
  8.  
  9. \ Make grid for plot.
  10. : GRID ( -- )
  11.         0 10 AT 60 0 DO ASCII + EMIT ASCII - EMIT 2 +LOOP
  12.                         ASCII + EMIT
  13.                 21 1 DO 30 I AT ASCII + EMIT LOOP
  14.          9  9 AT -10 .  50  9 AT  10 .
  15.         28  0 AT  10 .  27 20 AT -10 . ;
  16.  
  17. \ Display divisor.
  18. : .DIVISOR ( n -- )
  19.       40 1 AT ." Divisor = n = " . ;
  20.  
  21. \ Display division equations.
  22. : .EQN ( -- )
  23.       40 18 AT ."  m  = nq + r"
  24.       40 19 AT ." m/n =  q + r/n"
  25.       0 22 AT
  26.      ." ( m = dividend, n = divisor, q = quotient, and r = remainder)" ;
  27.  
  28.  
  29. \ Floored integer division... quotient vs dividend.
  30. : FQVSM ( n -- )
  31.        1  1 AT ." FLOORED q vs m"   DUP  .DIVISOR .EQN
  32.       30  0 AT ASCII q EMIT  61 10 AT ASCII m EMIT
  33.        5 21 AT ." Quotient vs Dividend for Floored Integer Division"
  34.       16 -15 DO I OVER /  10 SWAP -
  35.                  I 15 + 2* SWAP AT
  36.                  ASCII o EMIT LOOP DROP ;
  37.  
  38. \ Floored integer divison... remainder vs dividend.
  39. : FRVSM ( n -- )
  40.        1 1 AT ." FLOORED r vs m "   DUP  .DIVISOR .EQN
  41.        30 0 AT ASCII r EMIT 62 10 AT ASCII m EMIT
  42.         5  21 AT ." Remainder vs Dividend for Floored Integer Division"
  43.        16 -15 DO I OVER MOD 10 SWAP -
  44.                  I 15 + 2* SWAP AT
  45.                  ASCII o EMIT LOOP DROP ;
  46.  
  47. \ Symmetric integer division form of /MOD
  48. : S/MOD ( m n -- r q )
  49.        2DUP XOR 0<
  50.        IF   2DUP
  51.             ABS SWAP ABS SWAP    \ m n |m| |n|
  52.             / NEGATE             \ m n q
  53.             -ROT 2 PICK          \ q m n q
  54.             * -                  \ q r=m-nq
  55.             SWAP                 \ r q
  56.        ELSE /MOD
  57.        THEN ;
  58.  
  59. \ Symmetric integer division form of /
  60. : S/   ( m n -- q )
  61.        S/MOD NIP ;
  62.  
  63. \ Symmetric integer division form of MOD
  64. : SMOD ( m n -- r )
  65.        S/MOD DROP ;
  66.  
  67. \ Symmetric integer division... quotient vs dividend.
  68. : SQVSM ( n -- )
  69.        1 1 AT ." SYMMETRIC q vs m"  DUP  .DIVISOR  .EQN
  70.        30 0 AT ASCII q EMIT  62 10 AT ASCII m EMIT
  71.         5  21 AT ." Quotient vs Dividend for Symmetric Integer Division"
  72.        16 -15 DO I OVER S/  10 SWAP -
  73.                  I 15 + 2* SWAP AT
  74.                  ASCII o EMIT LOOP DROP ;
  75.  
  76. \ Symmetric integer division ... remainder vs dividend.
  77. : SRVSM ( n -- )
  78.        1 1 AT ." SYMMETRIC r vs m "  DUP .DIVISOR  .EQN
  79.        31 0 AT ASCII r EMIT 62 10 AT ASCII m EMIT
  80.         5  21 AT ." Remainder vs Dividend for Symmetric Integer Division"
  81.        16 -15 DO I OVER SMOD 10 SWAP -
  82.                  I 15 + 2 * SWAP AT
  83.                  ASCII o EMIT LOOP DROP ;
  84.  
  85.  
  86. \ Run through the four plots for an integer divisor.
  87. : INTDIV ( n -- )
  88.        -10 MAX 10 MIN ?DUP
  89.        IF
  90.        DUP DARK GRID FQVSM  KEY DROP
  91.        DUP DARK GRID FRVSM  KEY DROP
  92.        DUP DARK GRID SQVSM  KEY DROP
  93.        DUP DARK GRID SRVSM  KEY DROP
  94.        DROP 0 22 AT
  95.        ELSE DARK ." Can't divide by zero dummy"
  96.        THEN  ;
  97.  
  98. ╓───────────────╖
  99. ║ Problem 2.16  ║
  100. ╙───────────────╜
  101. Modify the program to use the IBM extended character set to produce
  102. a cleaner display.
  103.  
  104. ┌───────────────────────────────────┐
  105. │  Please Move to Lesson 2 Part 130 │
  106. └───────────────────────────────────┘
  107.