第23講 数独を解くソフトVer.1の制作
第8話 条件の厳しい順にするには?
入門
入門
上のように条件の厳しい順にするにはどうしたらよいでしょうか。
これもかなりの難問です。
何回も作っている私ですら、
昨日は、試行錯誤で1日かかってしまいました。
講義題材を考えるときは、前に作ったものを参照しないでもう一度最初から作り直しているのです。
ですから、基本は押さえているとはいえ本サイトに載っている数独の問題を解くプログラムVer1とは微妙に違います。
3年ぐらい前に作ったプログラムを何も見ないで作り直しているのですから、
細部が異なってしまうのは当然です。
何回も作っているというのは、
VC++版で作ったり、
初心者のための C++ 入門 VC++ 入門 C 入門 基礎から応用までの講義題材のために作ったりしているからです。
それにもかかわらず、難問すぎて頭が混乱しました。

では、どのようにしたらよいのでしょうか。
基本は、並び替えプログラムと同じです。
並び替えプログラムとは、例えば
2,6,4,8,3,2,1,5
と並んでいる数字を大きい順
8,6,5,4,3,2,2,1
に並べ直すプログラムです。
いろいろな方法が考え出されていますが、
ネットや書籍を参照しないで、やはり自分で考えたいものです。

1つの考え方を示しましょう。
最初に
2,6,4,8,3,2,1,5
の最大値を求めます。
この例では8です。8をセルにアウトプットします。


次に、その8を除いた
2,6,4,3,2,1,5
から最大値を求めます。
今度は6です。セルにアウトプットします。
8,6
そして、その6を除いた
2,4,3,2,1,5
の最大値を求めます。5です。セルにアウトプットします。
8,6,5
残っているのは
2,4,3,2,1
の5つです。最大値4をアウトプットして、4を除外します。
セル画面
8,6,5,4
残り
2,3,2,1

最大値3をアウトプットして、3を外します。
セル画面
8,6,5,4,3
残り
2,2,1
最大値をセルに掃き出します。
セル画面
8,6,5,4,3,2
残り
2,1
最大値2を掃き出して
セル画面
8,6,5,4,3,2,2
残り

最後の最大値1を取り除き、
セル画面
8,6,5,4,3,2,2,1
で並び替えが成功します。

つまり、まとめると最大値を求め、それを除外するを繰り返すのです。

では、その最大値を求めるにはどうしたらよいでしょうか。
例えば、
Dim max As Integer
max=0
としておいて、整数がmaxより大きいときは、その整数をmaxに代入し直します。
そして、次の整数とmaxを比べ再び大きければ、maxに入れます。
それを繰り返していけば、最大値を求めることができます。

小さい順への並び替えは、最小値を求めそれを除外するを繰り返せばよいですね。
最小値の求め方は、もうお分かりですね。

では、
次のファイル ダウンロード用参考ファイル
入門
開き並び替えの部分をコーティングして、並び替えボタンを押すと、
大きい順に並び変わったものがE5以降に表示されるようにしましょう。
また、小さい順に並び替えるもコーティングしましょう。





第7話へ 第9話へ

004
  


VBA講義第1部へ
vc++講義へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ

数学研究室に戻る