第1講 数字の規則的な配置
第5話 数字を2次元に規則的に並べるプログラム例
を実現するアプリ例
Private Sub CommandButton1_Click()
CommandButton2_Click
Dim m As Integer, n As Integer, h As Integer, i As Integer
Dim s As Integer, t As Integer
Dim a(8, 8) As Integer
m = Cells(1, 2)
n = Cells(2, 2)
h = Cells(3, 2)
For i = 0 To n * n - 1
s = Int(i / n)
t = i Mod n
a(s, t) = (h + i * m) Mod (n * n)
Cells(6 + s, 2 + t) = a(s, t)
Next
If kensyou(a, n) = 1 Then
Cells(4, 2) = "すべての数字が網羅されています。"
Else
Cells(4, 2) = "一部の数字しか入っていません。"
End If
End Sub
Function kensyou(a() As Integer, n As Integer)
Dim b(81) As Byte, i As Integer, j As Integer
For i = 0 To n * n - 1
b(i) = 0
Next
For i = 0 To n - 1
For j = 0 To n - 1
b(a(i, j)) = 1
Next
Next
For i = 0 To n - 1
If b(i) = 0 Then
kensyou = 0
Exit Function
End If
Next
kensyou = 1
End Function
Private Sub CommandButton2_Click()
Rows("4:2000").Select
Selection.ClearContents
Range("A1").Select
End Sub
参考ダウンロード添付ファイル
配列aは2次元にしなくても良かったのですが、
後の数独問題作成につなげるために2次元にしました。
第6話の課題です。
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | |
0 | 12 | 14 | 16 | 18 | 20 | 22 | 24 | 26 | 28 |
1 | 30 | 32 | 34 | 36 | 38 | 40 | 42 | 44 | 46 |
2 | 48 | 50 | 52 | 54 | 56 | 58 | 60 | 62 | 64 |
3 | 66 | 68 | 70 | 72 | 74 | 76 | 78 | 80 | 1 |
4 | 3 | 5 | 7 | 9 | 11 | 13 | 15 | 17 | 19 |
5 | 21 | 23 | 25 | 27 | 29 | 31 | 33 | 35 | 37 |
6 | 39 | 41 | 43 | 45 | 47 | 49 | 51 | 53 | 55 |
7 | 57 | 59 | 61 | 63 | 65 | 67 | 69 | 71 | 73 |
8 | 75 | 77 | 79 | 0 | 2 | 4 | 6 | 8 | 10 |
数字から逆対応させて、座標配列
y(g)とx(g)を作って下さい。
gが表のピンクに、
配列yは赤、配列xは青に対応させて、
y(0)=8,x(0)=3
y(1)=3,x(1)=8
y(2)=8,x(2)=4
y(3)=4,x(3)=0
・
・
・
として、その座標配列を利用して
配列p(y(i),x(i))
(この第4部では配列p(i, j)を数独を収納する配列として講義を進めます。)
を用意して、その配列に1から9までの数字をランダムに選んで入れて、
一部を表示させることによって
あたかも数独の問題であるように表示させて下さい。
第1話で申し上げた通り、各行・列・ブロックの重複検査はしていませんので、
上の例ではブロック内の重複が発生しています。
重複がないようにするには、
第31講の局所リスト構造解析が必要になります。
尚、シートの罫線は手作業で作って下さい。
eclipse c++ 入門
魔方陣 数独(ナンプレ)で学ぶ VBA 入門
数独(ナンプレ)のシンプルな解き方・簡単な解法の研究
vc++講義へ
excel 2013 2010 2007 vba入門へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
専門用語なしの C言語 C++ 入門(Visual C++ 2010で学ぶ C言語 C++ 入門)
専門用語なしの excel vba マクロ 入門 2013 2010 2007 対応講義 第1部
eclipse java 入門へ
excel 2016 vba 入門へ
小学生からエンジニアまでのRuby入門へ
本サイトトップへ