第5講 第4講のプログラムエラー原因探索各アイテムの解説
第8話 全体リスト構造解析の一致・不一致を検証する検証Functionプロシージャknの解説
For i = 0 To n_1
For j = 0 To n_1
For k = 0 To mx(i, j)
If mx(i, j) > 0 Then
For l = 0 To mx(i, j) - 1
If lst(i, j, l) > lst(i, j, l + 1) Then
w = lst(i, j, l)
lst(i, j, l) = lst(i, j, l + 1)
lst(i, j, l + 1) = w
End If
Next
End If
Next
Next
Next
では、Ver.1のリスト構造解析の有効範囲内を昇順に並べ直しています。
並び換えについては
第2部第15講第6話隣項交換繰り返し法を参照して頂ければと思います。
次の
For i = 0 To n_1
For j = 0 To n_1
If p(i, j) = 0 Then
For k = 0 To n_1
Cells(45 + i, 2 + 10 * j + k) = lst(i, j, k)
Next
For k = 0 To ccmx(i, j) - 1
'以下は、マクロの記録から学んだもの
Cells(45 + i, 2 + 10 * j + k).Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent5
.TintAndShade = 0
.PatternTintAndShade = 0
End With
'以上は、マクロの記録から学んだもの
Next
For k = ccmx(i, j) To n_1
'以下は、マクロの記録から学んだもの
Cells(45 + i, 2 + 10 * j + k).Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent2
.TintAndShade = 0.388845066682843
.PatternTintAndShade = 0
End With
'以上は、マクロの記録から学んだもの
Next
Else
For k = 0 To n_1
Cells(45 + i, 2 + 10 * j + k) = "*"
Next
End If
Next
Next
For i = 0 To n_1
For j = 0 To n_1
If p(i, j) = 0 Then
For k = 0 To mx(i, j)
If lst(i, j, k) <> ccrlst(i, j, k) Then
Cells(45 + i, 2 + 10 * j + k).Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 255
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Exit Function
End If
Next
End If
Next
Next
では、両方の全体リスト構造解析を有効範囲内で調べ、
不一致があった場合そのセルを赤に塗り直して、
どこに不一致があるかを示しています。
基本的には、ほとんど一致するので肉眼で探すのは大変ですから、
自動的に表示させることによって、間違いを発見するものです。
図の下は本当は昇順に並び換えられているはずですから、
並び換えが上手くいっていないことも判明します。
以上のようにして数独作成ソフトVer.1一歩前の誤り、
を発見して数独作成アプリVer.1の完成に至ったわけです。
皆さん、
原因究明プログラムファイル1
別解のあるなし検証プログラムファイル
実験用100題生成数度作成アプリ添付ファイル
数独の問題の適正を調べるプログラム添付ファイル
の注釈文で外してあるところの’をとって、
実行ボタンを押していろいろ試してみて下さい。
私がいかに完成させるために労を費やしたがが分かると思います。
皆さんもいろいろアイテムを工夫して、
内容上の論理的ミスを発見するようにして下さい。
優秀な皆さんにいうことではありませんが、
プログラミングには粘り=不屈の精神が必要です。
さて、Ver.1を改良して、
数秒以内で作成できて、
しかも仮定法を使わずに解ける問題のみを生成するソフトへと一歩一歩
近づいていくことにしましょう。
第6講は、ライン排除による確定セルの決定です。
例えばmx(i ,j) = 6であったセルを一気に0にしてしまう夢のような方法を研究します。
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入門へ
本サイトトップへ