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

  1.  \ File trip2.seq  Solutions to problem 4.4 by Dave Brown
  2.  
  3.  \ 2nd Pythagoreon Triples Generator.
  4.  \ Same method as the First but uses no variables and instead
  5.  \ maintains all information on the stack.
  6.  
  7.  \ This generates Triples for all levels up to and including N.
  8.  : ?CR  #OUT @ 70 > IF CR THEN ;  \ Checks to see if cursor is
  9.                                   \ at column 70 yet.
  10.  
  11.  : TRIPLE ( N  -- ) \ Finds Triples at Level N.
  12.          DUP 1
  13.          DO ?CR DUP DUP * I I * - 8 U.R  \ N*N - X*X
  14.             DUP I 2 * * 8 U.R            \ 2*N*X
  15.             DUP DUP * I I * + 8 U.R      \ N*N + X*X
  16.          LOOP DROP ;
  17.  
  18.  : TRIP2A  ( -- )  \ No stack input required.
  19.             CR ." Generate up to what level? " CR ." -->"
  20.             #IN   1+ 2 ?DO CR CR ." Level " I . CR
  21.                      I TRIPLE KEY? ?LEAVE LOOP ;
  22.  
  23.  \ DTB's Version using GCD.Finds only Prime     20:07DTB04/12/87
  24.  \ THEOREM: All solutions x = a, y = b, z = h, to
  25.  \ x*x + y*y = z*z, where a, b, h have no common factor and a is
  26.  \ even , are given by:
  27.  \         a = 2mn
  28.  \         b = m*m - n*n
  29.  \         h = m*m + n*n
  30.  \ where m and n are any relatively prime integers, not both odd
  31.  
  32.  \ GCD1? leaves a true flag if m and n are relatively prime.
  33.  : GCD1?  ( m n --  flag )
  34.          BEGIN ?DUP
  35.          WHILE SWAP OVER MOD
  36.          REPEAT 1 = ;
  37.  
  38.  \ Leaves a true flag if both m and n are even.
  39.  : M=N(MOD2)?   ( m n --  flag )
  40.          2 MOD SWAP 2 MOD = ;
  41.  
  42.  \ Pythagoreon Triple Generator                 20:04DTB04/12/87
  43.  \ Third Version Continuation.
  44.  
  45.  : ?CR   #OUT @ 72 > IF CR THEN ;
  46.  
  47.  \ Does not require stack input
  48.  \ Generates Triples up to and including N.
  49.  : TRIP2B ( --  )
  50.          CR ." Generate Triples up to what level?"
  51.          CR ." -->" #IN 1 + 2 DO CR CR
  52.             I   1 DO I J GCD1? I J M=N(MOD2)? NOT AND
  53.                IF  ?CR J 5 .R I 5 .R SPACE ASCII > EMIT SPACE
  54.                   I J 2 * * 7 .R
  55.                   J J * I I * 2DUP - 7 .R + 7 .R
  56.                   2 SPACES  ASCII | EMIT 2 SPACES
  57.                THEN LOOP  LOOP ; 
  58.  
  59.