编程与数学(编辑修改稿)内容摘要:

值的语句要改成: IF i+j1 = n THEN k = (i+j1)*(i+j2)\2+i ELSE ░ k = n*(n+1)\2 + (3*n(i+j1))*(i+j2n)\2 + (n+1j) END IF 练习 6: 修改上面的程序 , 使之能够显示 “ 蛇行 矩阵 ”, 它们的样子如下所示 : 1 2 6 7 15 16 28 3 5 8 14 17 27 29 4 9 13 18 26 30 39 10 12 19 25 31 38 40 11 20 24 32 37 41 46 21 23 33 36 42 45 47 22 34 35 43 44 48 49 授课教师:南京师范大学数科院 朱玉龙 7 4, 螺旋矩阵 例 4,对于键入的 n( 1≤ n≤ 20),显示一个 n 行 n 列的 斜行 矩阵。 下面给出的是 n=7 时的 斜行 矩阵。 1 2 3 4 5 6 7 24 25 26 27 28 29 8 23 40 41 42 43 30 9 22 39 48 49 44 31 10 21 38 47 46 45 32 11 20 37 36 35 34 33 12 19 18 17 16 15 14 13 为了推导此矩阵的解析式, 就要按照数字填写的次序来寻找规律。 我们可以把此矩阵分成若干圈,每一圈再 分成 4段,如下图所示: 1 2 3 4 5 6 7 24 25 26 27 28 29 8 23 40 41 42 43 30 9 22 39 48 49 44 31 10 21 38 47 46 45 32 11 20 37 36 35 34 33 12 19 18 17 16 15 14 13 图上从外向里各圈的圈号 c依次为 „ ,每圈 分 4段,段号 s按顺时针方向为 0、 3,矩阵中的每一个元素都有自己的所在圈号 c和所在段号 s,以及它在段中的“个号” d。 如位置( 4, 3)处的元素 48,它的圈号 c为 3,段号 s为 3,个号 d为 1。 复习回形矩阵 、练习 练习 4中的三个矩阵,它们分别显示了圈号、段号和个号。 用两条对角线把矩阵分成 4个三角形,每个包括 半条对角线。 在每个三角形中按照不同的公式计算出每个元素的 c、 s、d,如右图所示。 对于每个元素,计算出 c、 s、 d之后,容易算出元素值 k: k=前 c1圈元素总数 +第 c圈的前 s段元素总数 +个号 d+1 注意, 第 1圈的每段元素个数 =n1,第 2圈的每段元素个数 =n3, ...,第 c圈的每段元素个数 =n+12c,所以, k=4*(n1+n3+...+n+32*c)+s*(n+12*c)+d+1 =4*(c1)*(n+1c)+s*(n+12*c)+d+1 综上所述 ,容易写出实现解析式的程序: INPUT n : , n FOR i = 1 TO n FOR j = 1 TO n IF i + j = n + 1 AND i j THEN c = n + 1 j: s = 1: d = i c ELSEIF i = j AND i + j n + 1 THEN c = n + 1 i: s = 2: d = n + 1 j c ELSEIF i + j = n + 1 AND i j THEN c = j: s = 3: d = n + 1 i c ELSE c=i s=0 d=jc c=j c=n+1j s=3 s=1 d=n+1ic d=ic c=n+1i s=2 d=n+1jc 授课教师:南京师范大学数科院 朱玉龙 8 c = i: s = 0: d = j c END IF k = 4 * (c 1) * (n + 1 c) + s * (n + 1 2 * c) + d + 1 PRINT USING。 k。 NEXT PRINT NEXT END 注意,为下面修改程序方便,本程序中的两条 NEXT语句省去了循环变量。 练习 7: 修改上面的程序 , 使之能够显示 “ 反向 的螺旋 矩阵 ”, 它们的样子如下所示 : 1 24 23 22 21 20 19 2 25 40 39 38 37 18 3 26 41 48 47 36 17 4 27 42 49 46 35 16 5 28 43 44 45 34 15 6 29 30 31 32 33 14 7 8 9 10 11 12 13 第 3 节 对称性 我们经常碰到这种情况,一个新的题目同我们以前编过的题目极为相似,那么此时最好的办法就是找出它们的共同点和差别处, 对原来程序稍加修改,此乃上策也。 充分利用已有的成果是编程者能力和修养的体现, 对问题本身求同存异是编程者必须掌握的技巧。 下面我们举几个矩阵的例子,说明这个道理。 1, 改变出发点 在上一节拐角矩阵之后 的练习中 , 我们提到拐角矩阵的拐角可以在左上角、右上角、左下角和右下角。 如何修改例 4中的程序,使之能够显示各角的拐角矩阵 呢。 下面 我们给出三种方法。 方法 1: 按上一节的思想推导 出 各拐角矩阵的解析式 ,再转换成相应的程序语句,因为问题比较简单,这里直接写出程序语句: 左上角: IF i j THEN k = j ELSE k = i 右上角 : IF i + j n + 1 THEN k = n + 1 j ELSE k = i 左下角 : IF i + j n + 1 THEN k = j ELSE k = n + 1 i 右下角 : IF i j THEN k = n + 1 j ELSE k = n + 1 i 方法 2: 观察左上角矩阵和 左下 角矩阵,把其中的一个 上下 翻转 180度就会得到另一个。 左上角程序是从第 1行开始一直显示到第 n行 ,如果我们从它的第 n行开始一直显示到第 1行,那么就会得到左下角矩阵,为此只需要修改第一个 FOR语句: INPUT n ; n FOR i = n TO 1 STEP 1 FOR j = 1 TO n IF i j THEN k = j ELSE k = i PRINT USING。 k。 NEXT 授课教师:南京师范大学数科院 朱玉龙 9 PRINT NEXT END 类似地,修改左上角程序的第二个 FOR,就会得到右上角矩阵: „ FOR i = 1 TO n FOR j = n TO 1 STEP 1 „ 如果把 左上角程序的两个 FOR语句都改了 ,就得到右下角的拐角矩阵 : „ FOR i = n TO 1 STEP 1 FOR j = n TO 1 STEP 1 „ 方法 3: 比较方法 1中给出的 4个语句,我们会发现 , 后 3个语句可以通过 变换 第 1个语句中的 i、j变量得到 : 把“ 左上角” 语句中的 i换成 n+1i就得到“ 左下角 ”语句 把“ 左上角” 语句中的 j换成 n+1j就得到“ 右上 角”语句 把“ 左上角” 语句中的 i换成 n+1i并且把 j换成 n+1j就得到“右下角”语句 因此,我们可以不改变原有的 “ 左上角” 语句 ,而是改变变量 i 和 j 的内容,以达到同样的目的。 但是 i和 j 都是循环变量,不允许在循环体中修改,为此我们不妨把 FOR语句中的 i和 j 改名为 i1 和 j1,于是就得到了下面的程序 : 左下角螺旋矩阵 : INPUT n ; n FOR i1 = 1 TO n FOR j1 = 1 TO n i = n + 1 i1: j = j1 IF i j THEN k = j ELSE k = i PRINT USING。 k。 NEXT PRINT NEXT 右上角螺旋矩阵 : „ i = i1: j = n + 1 j1 „ 右下角螺旋矩阵 : „ i = n + 1 i1: j = n + 1 j1 „ 练习 8: 以上三种改变出发点的方法不仅适合于 拐角 阵,也适合于斜行矩阵、螺旋矩阵。 作为练习,请你在机器上验证一下。 2,改变矩阵方向 拐角矩阵有 4 种不同出发点的图案,但是对于斜行 矩阵和螺旋矩阵的每一个出发点还可以有两个方向。 例如,练习 7让你修改螺旋矩阵程序,使之能够显示反向的螺旋矩阵。 怎样修改最简单呢。 “正向的矩阵”和“反向的矩阵”是以主对角线为对称的,换句话说,把一个矩阵沿授课教师:南京师范大学数科院 朱玉龙。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。