杨辉三角形
【打印文章】
(一)杨辉三角形
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
这是我国宋朝数学家杨辉在公元1261年著书《详解九章算法》里画的一张图,这便是著名的杨辉三角形。
(二)程序设计
由笔算过程已经分析出算法,可利用循环控制变量算出。我们除掉最上层仅有一个数字的1,其下算做第一行,依次可递推至任意N行。可随机输入要算的N行数字置入数组M(15)中,而后赋给数组IM(90)。输出数组IM(90)时,形象地打印出三角形的层次和各行各位的数字,并打印汉语拼音“杨辉三角形”。本程序设计最多为12行。
FORTRAN语言源程序:
INTEGER M(15),IM(90)
WRITE (*,10)
10 FORMAT(10X,22HYang-Hui San Jiao Xing/5X,’N
READ(*,20)N
20 FORMAT(I2)
JJ=0
DO 44 I=1,N
DO 30 L=1,N
M(L)=0
30 CONTINUE
K=1
M(1)=1
L=I+1
DO 50 J=1,L
K=K*(I-J+1)/J
M(J+1)=K
50 CONTINUE
DO 40 IJ=1,L
JI=JJ+IJ
IM(JI)=M(IJ)
40 CONTINUE
JJ=JJ+L
44 CONTINUE
WRITE(5,60) (IM(I),I=1,JJ)
60 FORMAT(33X,2I6/,30X,3I6/,28X,4I6/,25X,5I6/,22X,6I6/,
1 19X,7I6/,16X,8I6/,13X,9I6/,10X,10I6/,7X,11I6/,4X,12I6/,
2 1X,13I6/)
END
BASIC语言源程序:
10 DIM m(15): DIM im(90)
20 PRINT "Yang-Hui San Jiao Xing"
30 INPUT n
40 jj = 0
50 FOR i = 1 TO n
60 FOR l = 1 TO n
70 m(l) = 0
80 NEXT l
90 k = 1: m(1) = 1
100 l = i + 1
110 FOR j = 1 TO l
120 k = k * (i - j + 1) / j
130 m(j + 1) = k
140 NEXT j
150 FOR ij = 1 TO l
160 ji = jj + ij
170 im(ji) = m(ij)
180 NEXT ij
190 jj = jj + l
200 NEXT i
210 j = 1
220 FOR i = 1 TO n
230 FOR k = 1 TO i + 1
240 PRINT TAB(30 - i * 3 + k * 6); im(j);
250 j = j + 1
260 NEXT k
270 PRINT
280 NEXT i
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
这是我国宋朝数学家杨辉在公元1261年著书《详解九章算法》里画的一张图,这便是著名的杨辉三角形。
(二)程序设计
由笔算过程已经分析出算法,可利用循环控制变量算出。我们除掉最上层仅有一个数字的1,其下算做第一行,依次可递推至任意N行。可随机输入要算的N行数字置入数组M(15)中,而后赋给数组IM(90)。输出数组IM(90)时,形象地打印出三角形的层次和各行各位的数字,并打印汉语拼音“杨辉三角形”。本程序设计最多为12行。
FORTRAN语言源程序:
INTEGER M(15),IM(90)
WRITE (*,10)
10 FORMAT(10X,22HYang-Hui San Jiao Xing/5X,’N
READ(*,20)N
20 FORMAT(I2)
JJ=0
DO 44 I=1,N
DO 30 L=1,N
M(L)=0
30 CONTINUE
K=1
M(1)=1
L=I+1
DO 50 J=1,L
K=K*(I-J+1)/J
M(J+1)=K
50 CONTINUE
DO 40 IJ=1,L
JI=JJ+IJ
IM(JI)=M(IJ)
40 CONTINUE
JJ=JJ+L
44 CONTINUE
WRITE(5,60) (IM(I),I=1,JJ)
60 FORMAT(33X,2I6/,30X,3I6/,28X,4I6/,25X,5I6/,22X,6I6/,
1 19X,7I6/,16X,8I6/,13X,9I6/,10X,10I6/,7X,11I6/,4X,12I6/,
2 1X,13I6/)
END
BASIC语言源程序:
10 DIM m(15): DIM im(90)
20 PRINT "Yang-Hui San Jiao Xing"
30 INPUT n
40 jj = 0
50 FOR i = 1 TO n
60 FOR l = 1 TO n
70 m(l) = 0
80 NEXT l
90 k = 1: m(1) = 1
100 l = i + 1
110 FOR j = 1 TO l
120 k = k * (i - j + 1) / j
130 m(j + 1) = k
140 NEXT j
150 FOR ij = 1 TO l
160 ji = jj + ij
170 im(ji) = m(ij)
180 NEXT ij
190 jj = jj + l
200 NEXT i
210 j = 1
220 FOR i = 1 TO n
230 FOR k = 1 TO i + 1
240 PRINT TAB(30 - i * 3 + k * 6); im(j);
250 j = j + 1
260 NEXT k
270 PRINT
280 NEXT i
本栏文章均来自于互联网,版权归原作者和各发布网站所有,本站收集这些文章仅供学习参考之用。任何人都不能将这些文章用于商业或者其他目的。( Pfan.cn )
【编程爱好者论坛】