Pascal's triangle: Difference between revisions
Content added Content deleted
No edit summary |
|||
Line 1,232: | Line 1,232: | ||
</lang> |
</lang> |
||
=={{header|Component Pascal}}== |
|||
{{Works with|BlackBox Component Builder}} |
|||
<lang oberon2> |
|||
MODULE PascalTriangle; |
|||
IMPORT StdLog, DevCommanders, TextMappers; |
|||
TYPE |
|||
Expansion* = POINTER TO ARRAY OF LONGINT; |
|||
PROCEDURE Show(e: Expansion); |
|||
VAR |
|||
i: INTEGER; |
|||
BEGIN |
|||
i := 0; |
|||
WHILE (i < LEN(e)) & (e[i] # 0) DO |
|||
StdLog.Int(e[i]); |
|||
INC(i) |
|||
END; |
|||
StdLog.Ln |
|||
END Show; |
|||
PROCEDURE GenPascalTriangleFor*(p: LONGINT): Expansion; |
|||
VAR |
|||
expA,expB: Expansion; |
|||
i,j: LONGINT; |
|||
PROCEDURE Swap(VAR x,y: Expansion); |
|||
VAR |
|||
swap: Expansion; |
|||
BEGIN |
|||
swap := x; x := y; y := swap |
|||
END Swap; |
|||
BEGIN |
|||
ASSERT(p > 0); |
|||
DEC(p); (* adjust p to work with arrays starting at 0 index *) |
|||
NEW(expA,p + 2);NEW(expB,p + 2); |
|||
FOR i := 0 TO p DO |
|||
IF i = 0 THEN expA[0] := 1 |
|||
ELSE |
|||
FOR j := 0 TO i DO |
|||
IF j = 0 THEN |
|||
expB[j] := expA[j] |
|||
ELSE |
|||
expB[j] := expA[j - 1] + expA[j] |
|||
END |
|||
END; |
|||
Swap(expA,expB) |
|||
END; |
|||
END; |
|||
expB := NIL; (* for the GC *) |
|||
RETURN expA |
|||
END GenPascalTriangleFor; |
|||
PROCEDURE Do*; |
|||
VAR |
|||
s: TextMappers.Scanner; |
|||
exp: Expansion; |
|||
BEGIN |
|||
s.ConnectTo(DevCommanders.par.text); |
|||
s.SetPos(DevCommanders.par.beg); |
|||
s.Scan; |
|||
WHILE (~s.rider.eot) DO |
|||
IF (s.type = TextMappers.char) & (s.char = '~') THEN |
|||
RETURN |
|||
ELSIF (s.type = TextMappers.int) THEN |
|||
exp := GenPascalTriangleFor(s.int); |
|||
Show(exp) |
|||
END; |
|||
s.Scan |
|||
END |
|||
END Do; |
|||
END PascalTriangle. |
|||
</lang> |
|||
<pre>Execute: ^Q PascalTriangle.Do 1 2 3 4 5 6 7 8 9 10 11 12~</pre> |
|||
{{out}} |
|||
<pre> |
|||
1 |
|||
1 1 |
|||
1 2 1 |
|||
1 3 3 1 |
|||
1 4 6 4 1 |
|||
1 5 10 10 5 1 |
|||
1 6 15 20 15 6 1 |
|||
1 7 21 35 35 21 7 1 |
|||
1 8 28 56 70 56 28 8 1 |
|||
1 9 36 84 126 126 84 36 9 1 |
|||
1 10 45 120 210 252 210 120 45 10 1 |
|||
1 11 55 165 330 462 462 330 165 55 11 1 |
|||
</pre> |
|||
=={{header|D}}== |
=={{header|D}}== |
||
===Less functional Version=== |
===Less functional Version=== |