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

  1.        ╔════════════════════════════════════════════════════╗
  2.        ║ Lesson 5 Part 040  F-PC 3.5 Tutorial by Jack Brown ║
  3.        ╚════════════════════════════════════════════════════╝
  4.  
  5.  
  6. In Problem 5.1 we suggested that you should provide some
  7. alternate defintions of %R.
  8. \ Using */ we rounded this way.
  9. : %R1  ( p n -- m )  10 */     5 +            10 /   ;
  10. : %R2  ( p n -- m )  50 */     1+             2/     ;
  11.  
  12. \ Rounding using */MOD
  13. : %R3  ( p n -- m ) 100 */MOD  SWAP 50 +  100 / +    ;
  14. : %R4  ( p n -- m ) 100 */MOD  SWAP 49 > NEGATE +    ;
  15.  
  16. Example of execution, the exact value is 33.6
  17. 15 224 %R1 . 34  ok
  18. 15 224 %R2 . 34  ok
  19. 15 224 %R3 . 34  ok
  20. 15 224 %R4 . 34  ok
  21.  
  22. ╓─────────────╖
  23. ║ Problem 5.4 ║
  24. ╙─────────────╜
  25. Investigate the words TIMER , TIME-RESET and .ELAPSED found in F-PC.
  26. See if you can discover which of the above versions of rounded percent
  27. is the fastest. Well... thats not really a fair question.  All versions
  28. are so fast that you cannot get a proper reading using:
  29.      TIMER 15 224 %R1
  30. Here is a hint on how you might solve the problem.
  31. :  TIME.IT ( -- )
  32.    CR ." This could take several minutes!! please wait!!"
  33.    CR ." as we are executing test loop 1,000,000 times."
  34.    TIME-RESET
  35.    1000   0 DO  1000 0 DO
  36.              \  blank  loop          ( 54 micro-sec?  )
  37.                 15 224 %R1 DROP      (  ??  micro-sec )
  38.             LOOP  LOOP
  39.    TIME-ELAPSED B>SEC  . 230 EMIT ." -seconds for one pass." ;
  40.  
  41.  
  42.           ┌───────────────────────────────────────────┐
  43.           │  The Infinite Loop. ( A review of LOOPs ) │
  44.           └───────────────────────────────────────────┘
  45.  
  46. The infinite loop with no exit.  This is recommended only for an end
  47. user application.  Examples: FORTH's QUIT & our version MYQUIT that was
  48. presented in lesson 1 part 8.  Dave Brown's first solution to problem
  49. 4.4 on Pythagorean triples also used an infinite loop with a hidden
  50. escape hatch.
  51.  
  52.      ... (step 1)  BEGIN   (step2)  AGAIN   (step3) ...
  53.  
  54. step 1 is executed once.
  55. step 2 is repeated forever.
  56. step 3 is never executed.
  57.  
  58.  
  59. The Infinite Loop with EXIT  escape hatch.
  60.  
  61.    ... (step1) BEGIN (step2)
  62.                      (condition) IF EXIT THEN
  63.                      (step3)
  64.                AGAIN (step4) ...
  65. Example:
  66.  
  67. : COUNT.UP  ( -- )
  68.          0                         \ step 1
  69.          BEGIN 1+ DUP CR .         \ step 2
  70.                 KEY?               \ condition
  71.                 IF  DROP EXIT THEN
  72.                                    \ step 3 not present
  73.          AGAIN ." DONE" ;          \ step 4
  74. step 1 is executed once
  75. step 2 is repeated until condition is true.
  76. step 3 is repeated each time exit condition fails.
  77. step 4 will never be executed because EXIT passes control back
  78.        to the calling word!!
  79.  
  80. Examples: See #IN and GAME in lesson 3 part 11 for examples of the
  81. infinite loop with EXIT escape hatch.
  82.  
  83.                   ┌──────────────────────┐
  84.                   │ The Indefinite Loop. │
  85.                   └──────────────────────┘
  86.  
  87. In the indefinite loop the main action is repeated until a condition is
  88. true.
  89.    ... (step1)  BEGIN   (step2)
  90.                         (condition)
  91.                 UNTIL   (step3) ...
  92. Example:
  93. : COUNT-UP  ( -- )
  94.          0                         \ step 1
  95.          BEGIN  1+ DUP CR .        \ step 2
  96.                 KEY?               \ condition
  97.          UNTIL  DROP ." DONE" ;    \ step 3
  98. step 1 is executed once.
  99. step 2 is executed and then
  100. (condition) is tested.
  101. if condition is false step 2 is executed again,
  102. if condition is true then step 3 is executed.
  103.  
  104. ┌─────────────────────────────────────┐
  105. │   Please move to Lesson 5 Part 050  │
  106. └─────────────────────────────────────┘
  107.