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

  1.        ╔════════════════════════════════════════════════════╗
  2.        ║ Lesson 4 Part 010  F-PC 3.5 Tutorial by Jack Brown ║
  3.        ╚════════════════════════════════════════════════════╝
  4.  
  5.            ┌──────────────────────────────────────┐
  6.            │  Review of Number Display Operators. │
  7.            └──────────────────────────────────────┘
  8.  
  9. Let's begin with a review of some of the words that we covered in the
  10. previous lesson.  One family of words we studied were the number output
  11. operators.
  12.  
  13. \ Single signed 16bit numbers.   -32768 - 32767
  14.   .     ( n     -- )  Display signed 16bit # followed by space.
  15.   .R    ( n w   -- )  Display # right justified in w wide field.
  16.  
  17. \ Single unsigned 16bit numbers.  0 - 65535
  18.   U.    ( u     -- )  Display unsigned 16bit # followed by space
  19.   U.R   ( u w   -- )  Display # right justified in w wide field.
  20.  
  21. \ Double signed 32bit numbers   -2,147,483,648 - 2,147,483,647
  22.  D.     ( d     -- )  Display signed 32bit # followed by space.
  23.  D.R    ( d w   -- )  Display # right justified in w wide field.
  24.  
  25. \ Double unsigned 32bit numbers.  0 - 4,294,967,296
  26.  UD.    ( ud    -- )  Display unsigned 32bit # followed by space
  27.  UD.R   ( ud w  -- )  Display # right justified in w wide field.
  28.  
  29.             ┌───────────────────────────────────────┐
  30.             │  Review of Logicals and Conditionals  │
  31.             └───────────────────────────────────────┘
  32.  
  33. One of the other important family of words covered in lesson 3 were the
  34. logical and conditionals.  The comparison operators took two stack
  35. inputs and after performing the required test left a flag on the stack.
  36.  
  37. REVIEW  OF CONDITIONALS
  38.   tf = -1 = 1111111111111111  binary or base 2
  39.   ff =  0 = 0000000000000000  binary or base 2
  40.   TRUE  ( --   tf )        Leave true flag on top of data stack.
  41.   FALSE ( --   ff )        Leave false flag on top of data stack.
  42.   =     ( n m --  flag )   Leave tf if n = m , otherwise ff.
  43.   <>    ( n m --  flag )   Leave tf if n<> m , otherwise ff.
  44.   <     ( n m --  flag )   Leave tf if n < m , otherwise ff.
  45.   >     ( n m --  flag )   Leave tf if n > m , otherwise ff.
  46.   0=    ( n   --  flag )   Leave tf if n = 0 , otherwise ff.
  47.   0<>   ( n   --  flag )   Leave tf if n<> 0 , otherwise ff.
  48.   0<    ( n   --  flag )   Leave tf if n < 0 , otherwise ff.
  49.   0>    ( n   --  flag )   Leave tf if n > 0 , otherwise ff.
  50.  
  51. ?DUP  ( n   -- n (n)  )  Duplicate n if n is non zero.
  52.  
  53. The word   ?DUP  can come quite handy when setting up for an
  54. IF ... THEN test whose true clause must use the flag or value
  55. that is normally consumed by IF .  Example:
  56.  
  57. : STARS  ( n -- )  ?DUP  IF  0 DO ASCII * EMIT LOOP THEN ;
  58.  
  59. This definition of STARS guarantees that nothing will happen in the
  60. case where n is 0.  See Problem 4.1 for simpler definition of STARS
  61. Another way to code this problem would be to use ?DO as follows
  62.  
  63. : STARS ( n -- )  0 ?DO ASCII * EMIT LOOP ;
  64.  
  65. Here the  ?DO ... LOOP is equivalent to  ?DUP IF DO ... LOOP THEN
  66.  
  67. WARNING  you might like to include a panic exit from the  DO ... LOOPs
  68.          in the these examples and problems.  If you place the phrase
  69.          KEY? ?LEAVE   inside  a loop  as shown below:
  70.  
  71.                DO ... KEY? ?LEAVE .... LOOP
  72.  
  73.          Now a press of any key  will terminate the loop. Incorporate
  74.          this phrase if you wish to have this feature.
  75.  
  76. ╓─────────────╖
  77. ║ Problem 4.1 ║
  78. ╙─────────────╜
  79. a) What would the definition  : STARS 0 DO ASCII * EMIT LOOP ;
  80. output if  0 STARS were executed.
  81.  
  82. b) What would happen if -1 STARS were executed for each of the
  83. three versions ( two above and that of (a)?
  84.  
  85. c) Modify STARS so that if n is positive   n STARS  outputs n stars in a
  86. horizontal row  and if n is negative  n STARS outputs | n | stars in a
  87. vertical column.  Make sure that 0 STARS does nothing.
  88.  
  89. It should be noted that the logical operators AND OR XOR and NOT work at
  90. the binary bit level!!
  91.  
  92.   AND   ( f1 f2 -- flag ) Leave tf only if f1 and f2 are true.
  93.   OR    ( f1 f2 -- flag ) Leave tf if either f1 or f2 are true.
  94.   XOR   ( f1 f2 -- flag ) Leave tf if f1=tf or f2=tf but not both.
  95.   NOT   ( f1  -- not-f1 ) Reverse the flag f1.
  96.  
  97.       1100      1100      1100
  98.       1010      1010      1010      1010
  99.       ----      ----      ----      ----
  100.   AND 1000   OR 1110  XOR 0110  NOT 0101
  101.  
  102. ╓──────────────╖
  103. ║ Problem 4.2  ║
  104. ╙──────────────╜
  105. Write a word called LTEST that will take two numeric stack inputs
  106. and display in tabular form both the stack inputs and the results
  107. of ANDing ORing and XORing them  all in BINARY!!  You could design
  108. your output to look something like the table above.
  109.  
  110. ┌────────────────────────────────────┐
  111. │  Please move to Lesson 4 Part 020  │
  112. └────────────────────────────────────┘
  113.