第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
では、両方の全体リスト構造解析を有効範囲内で調べ、
不一致があった場合そのセルを赤に塗り直して、
どこに不一致があるかを示しています。
k
基本的には、ほとんど一致するので肉眼で探すのは大変ですから、
自動的に表示させることによって、間違いを発見するものです。
図の下は本当は昇順に並び換えられているはずですから、  
並び換えが上手くいっていないことも判明します。

以上のようにして数独作成ソフトVer.1一歩前の誤り、
を発見して数独作成アプリVer.1の完成に至ったわけです。

皆さん、
原因究明プログラムファイル1
別解のあるなし検証プログラムファイル
実験用100題生成数度作成アプリ添付ファイル
数独の問題の適正を調べるプログラム添付ファイル
の注釈文で外してあるところの’をとって、
実行ボタンを押していろいろ試してみて下さい。
私がいかに完成させるために労を費やしたがが分かると思います。

皆さんもいろいろアイテムを工夫して、
内容上の論理的ミスを発見するようにして下さい。
優秀な皆さんにいうことではありませんが、
プログラミングには粘り=不屈の精神が必要です。

さて、Ver.1を改良して、
数秒以内で作成できて、
しかも仮定法を使わずに解ける問題のみを生成するソフトへと一歩一歩
近づいていくことにしましょう。
第6講は、ライン排除による確定セルの決定です。
例えばmx(i ,j) = 6であったセルを一気に0にしてしまう夢のような方法を研究します。


第7話へ 第6講第1話へ
004

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入門へ
本サイトトップへ