home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / forth / compiler / fpc / source / l5p040.seq < prev    next >
Text File  |  1989-03-04  |  3KB  |  107 lines

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