Merge pull request #70 from philburk/ignoreds
[pforth] / fth / tut.fth
CommitLineData
8e9db35f
PB
1anew task-tut.fth
2
3: SUM.OF.N.A ( N -- SUM[N] , calculate sum of N integers )
4 0 \ starting value of SUM
5 BEGIN
6 OVER 0> \ Is N greater than zero?
7 WHILE
8 OVER + \ add N to sum
9 SWAP 1- SWAP \ decrement N
10 REPEAT
11 SWAP DROP \ get rid on N
12 ;
13
14: SUM.OF.N.B ( N -- SUM[N] )
15 0 SWAP \ starting value of SUM
16 1+ 0 \ set indices for DO LOOP
17 ?DO \ safer than DO if N=0
18 I +
19 LOOP
20;
21
22: SUM.OF.N.C ( N -- SUM[N] )
23 0 \ starting value of SUM
24 BEGIN ( -- N' SUM )
25 OVER +
26 SWAP 1- SWAP
27 OVER 0<
28 UNTIL
29 SWAP DROP
30;
31
32: SUM.OF.N.D ( N -- SUM[N] )
33 >R \ put NUM on return stack
34 0 \ starting value of SUM
35 BEGIN ( -- SUM )
36 R@ + \ add num to sum
37 R> 1- DUP >R
38 0<
39 UNTIL
40 RDROP \ get rid of NUM
41;
42
43: SUM.OF.N.E { NUM | SUM -- SUM[N] , use return stack }
44 BEGIN
45 NUM +-> SUM \ add NUM to SUM
46 -1 +-> NUM \ decrement NUM
47 NUM 0<
48 UNTIL
49 SUM \ return SUM
50;
51
52: SUM.OF.N.F ( NUM -- SUM[N] , Gauss' method )
53 DUP 1+ * 2/
54;
55
56
57: TTT
58 10 0
59 DO
60 I SUM.OF.N.A .
61 I SUM.OF.N.B .
62 I SUM.OF.N.C .
63 I SUM.OF.N.D .
64 I SUM.OF.N.E .
65 I SUM.OF.N.F .
66 CR
67 LOOP
68;
69TTT
70