第3話 プログラム解説(2)

For i = 1 To 4
  For j = 1 To 4
    For k = 1 To 4
      For l = 1 To 4
        koujimah(4 * (i - 1) + k, 4 * (j - 1) + l) = 16 * (kisomah(i, j) - 1) + kisomah(k, l)
      Next
    Next
  Next
Next

再度、ループ順とi,j,k,lの関係を掲示しましょう。
図の中の緑色の番号はループ順を表しています。

1 2 3 4
1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4
1 1 1 2 3 4 17 18 19 20 33 34 35 36 49 50 51 52
2 5 6 7 8 21 22 23 24 37 38 39 40 53 54 55 56
3 9 10 11 12 25 26 27 28 41 42 43 44 57 58 59 60
4 13 14 15 16 29 30 31 32 45 46 47 48 61 62 63 64
2 1 65 66 67 68 81 82 83 84 97 98 99 100 113 114 115 116
2 69 70 71 72 85 86 87 88 101 102 103 104 117 118 119 120
3 73 74 75 76 89 90 91 92 105 106 107 108 121 122 123 124
4 77 78 79 80 93 94 95 96 109 110 111 112 125 126 127 128
3 1 129 130 131 132 145 146 147 148 161 162 163 164 177 178 179 180
2 133 134 135 136 149 150 151 152 165 166 167 168 181 182 183 184
3 137 138 139 140 153 154 155 156 169 170 171 172 185 186 187 188
4 141 142 143 144 157 158 159 160 173 174 175 176 189 190 191 192
4 1 193 194 195 196 209 210 211 212 225 226 227 228 241 242 243 244
2 197 198 199 200 213 214 215 216 229 230 231 232 245 246 247 248
3 201 202 203 204 217 218 219 220 233 234 235 236 249 250 251 252
4 205 206 207 208 221 222 223 224 237 238 239 240 253 254 255 256


基礎魔方陣(kisomah(i,j))

16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1

以下の説明は一番上の図(ループ順とi,j,k,lの関係図)、上図の基礎魔方陣、
説明の下にある高次魔方陣(完成魔方陣)の3つを参照しながら読んでください。
その際、色の対応にもご注意ください。

ループ順とi,j,k,lの関係図の黄色のセル(ループ順1)はi=1、j=1、k=1、l=1の場合ですから
koujimah(4 * (i - 1) + k, 4 * (j - 1) + l) = 16 * (kisomah(i, j) - 1) + kisomah(k, l)は
koujimah(4 * (1 - 1) + 1, 4 * (1- 1) + 1) = 16 * (kisomah(1, 1) - 1) + kisomah(1, 1)すなわち
koujimah(1, 1) = 16 * (16−1) + 1616+16 * (16−1)=256(下図完成魔方陣参照)
となります。

次の水色のセル(ループ順2)はi=1、j=1、k=1、l=2の場合ですから
koujimah(4 * (i - 1) + k, 4 * (j - 1) + l) = 16 * (kisomah(i, j) - 1) + kisomah(k, l)は
koujimah(4 * (1 - 1) + 1, 4 * (1- 1) + 2) = 16 * (kisomah(1, 1) - 1) + kisomah(1, 2)すなわち
koujimah(1, 2) = 16 * (16−1) + +16 * (16−1)=242(下図完成魔方陣参照)
となります。

薄緑のセル(ループ順3)はi=1、j=1、k=1、l=3の場合ですから
koujimah(4 * (i - 1) + k, 4 * (j - 1) + l) = 16 * (kisomah(i, j) - 1) + kisomah(k, l)は
koujimah(4 * (1 - 1) + 1, 4 * (1- 1) + 3) = 16 * (kisomah(1, 1) - 1) + kisomah(1, 3)すなわち
koujimah(1, 3) = 16 * (16−1) + +16 *(16−1) =243(下図完成魔方陣参照)
となります。

薄紫色のセル(ループ順4)はi=1、j=1、k=1、l=4の場合ですから
koujimah(4 * (i - 1) + k, 4 * (j - 1) + l) = 16 * (kisomah(i, j) - 1) + kisomah(k, l)は
koujimah(4 * (1 - 1) + 1, 4 * (1- 1) + 4) = 16 * (kisomah(1, 1) - 1) + kisomah(1, 4)すなわち
koujimah(1, 3) = 16 * (16−1) + 1313+16 * (16−1)=253(下図完成魔方陣参照)
となります。

以下同様なわけですが、i=1、j=1においては基礎魔方陣のすべてのセルに
16 * (16−1)=16 *15=240を加えています。
これはどういうことでしょうか。

一番わかりやすいのは、i=4、j=4(一番上の図と下図のオレンジの場合)です。
ここでは基礎魔方陣のすべてのセルに16* (−1)=0を加えています。
つまりオレンジのところは基礎魔方陣をそのままコピーしているのです。

高次魔方陣(完成魔方陣)

256 242 243 253 32 18 19 29 48 34 35 45 208 194 195 205
245 251 250 248 21 27 26 24 37 43 42 40 197 203 202 200
249 247 246 252 25 23 22 28 41 39 38 44 201 199 198 204
244 254 255 241 20 30 31 17 36 46 47 33 196 206 207 193
80 66 67 77 176 162 163 173 160 146 147 157 128 114 115 125
69 75 74 72 165 171 170 168 149 155 154 152 117 123 122 120
73 71 70 76 169 167 166 172 153 151 150 156 121 119 118 124
68 78 79 65 164 174 175 161 148 158 159 145 116 126 127 113
144 130 131 141 112 98 99 109 96 82 83 93 192 178 179 189
133 139 138 136 101 107 106 104 85 91 90 88 181 187 186 184
137 135 134 140 105 103 102 108 89 87 86 92 185 183 182 188
132 142 143 129 100 110 111 97 84 94 95 81 180 190 191 177
64 50 51 61 224 210 211 221 240 226 227 237 16 2 3 13
53 59 58 56 213 219 218 216 229 235 234 232 5 11 10 8
57 55 54 60 217 215 214 220 233 231 230 236 9 7 6 12
52 62 63 49 212 222 223 209 228 238 239 225 4 14 15 1


続きは第4話で。

第2話へ 第4話へ


VB講義応用編トップへ

VB講義トップへ