home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / forth / compiler / fpc / source / p4_9db3.seq < prev    next >
Text File  |  1989-02-26  |  2KB  |  73 lines

  1.  \ File trip3.seq  Problem 4.4 Solutions by Dave Brown
  2.  
  3.  \ 1st Version of Brute Force Method.  ( Tries every possible
  4.  \ combination  eg. 1 1 1, 1 1 2, 1 1 3, 1 1 4 )
  5.  \ Note: This version does not work by Levels.
  6.  \ This version uses Variables and is also quite slow.
  7.  
  8.  \ A, B, and C hold the sides, AA, BB, and CC hold the sides
  9.  \ squared. N holds the largest A can be, not the Level.
  10.    VARIABLE A    VARIABLE B      VARIABLE C    VARIABLE N
  11.    VARIABLE AA   VARIABLE BB     VARIABLE CC 
  12.  
  13.  : ?CR  #OUT @ 70 > IF CR ASCII | EMIT THEN ; 
  14.  
  15.  : .ABC  ( --  )
  16.         ?CR A @  7 .R  B @  7 .R  C @  7 .R
  17.             SPACE ASCII | EMIT SPACE ;
  18.  
  19.  \ Brute force method..1st Vesion.              20:39DTB04/12/87
  20.  \ Requires no stack input
  21.  : TRIP3A (  -- )
  22.          CR ." What is the largest A can be?"
  23.          CR ." -->" #IN N !
  24.          CR N @ 1 DO   I A !  I DUP *  AA !
  25.                 N @ 2* I DO  I B ! I DUP *  BB !
  26.                       J I + I DO I C ! I DUP *  CC !
  27.                               AA @ BB @ + CC @ =
  28.                               IF .ABC THEN
  29.                      LOOP  LOOP
  30.    KEY?  ?LEAVE   ( any key escape )  LOOP ;
  31.  
  32.  \ 2nd Version of Brute Force Method.           20:43DTB04/12/87
  33.  \ Faster Version of Brute Force, uses only 2 Variables
  34.    VARIABLE N  VARIABLE K
  35.  
  36.  : ?CR  #OUT @ 70 > IF CR ASCII | EMIT THEN ;
  37.  
  38.  : TRIP3B  ( -- )
  39.     CR ." What is the largest A can be?"
  40.     CR ." -->" #IN N ! CR
  41.     72 #OUT ! ?CR
  42.      N @ 1 DO  I K !
  43.         N @ 2* I DO   I DUP * J DUP * +
  44.              J I + I DO   DUP I DUP * =
  45.                      IF  ?CR K @ 7 .R
  46.                          J 7 .R
  47.                          I 7 .R 2 SPACES ASCII | EMIT
  48.                      THEN
  49.                      LOOP DROP LOOP
  50.    KEY?  ?LEAVE   ( any key escape )  LOOP ;
  51.  
  52.  
  53.  \ Sorts Triples out by their small side.       21:13DTB04/12/87
  54.  \ The higher the level is, the slower it will go.
  55.  
  56.  \ Uses only one Variable.
  57.    VARIABLE K
  58.  
  59.  : ?CR  #OUT @ 70 > IF CR THEN ;
  60.  
  61.  : TRIP3C  ( -- )
  62.     CR ." Search up to what level? "
  63.     CR ." -->" #IN
  64.     CR DUP  DUP * 3 DO   I K !
  65.     DUP 2 MAX  1 DO
  66.                 I  1 ?DO
  67.                         J J * I I * - DUP K @ =
  68.                         IF  ?CR  7 U.R  I J 2 * * 7 U.R
  69.                             J J * I I * + 7 U.R  3 SPACES
  70.                         ELSE DROP
  71.                         THEN LOOP LOOP
  72.    KEY? ?LEAVE LOOP DROP  ;  
  73.