2

数独パズルを解くためのAdaプログラムを書いています。今、私は配列を正しく埋めて出力しようとしています。私は次のようなテキストドキュメントを取ります:

4 5 7 89 
  2 5 6  
  79  542
  35 6489
   3 8   
 6847 91 
 238  59 
 79 3 2 1
1  6  7 3

ここで、スペースは空の正方形です。配列宣言:

Sudoku_Array : array (1..9, 1..9) of Integer;

配列に値を割り当てるためのコードは次のとおりです。Is_Char_Numberは、文字が0〜9であるかどうかをチェックし、ConverttoNumはCharを整数に変換します。配列には、スペースがある場合はnull値が必要です。

Open(File, In_File, Argument(1));
while not End_Of_File(File) loop
    for R in 1..9 loop
        for C in 1..9 loop
            Get(File, Char);
            if Is_Char_Number(Char) then
                Sudoku_Array(R,C) := ConverttoNum(Char);
            end if;
        end loop;
    end loop;
end loop;

したがって、上記の未完成の数独パズルを入力すると、これが出てきます(幅2で入れてください)。

 4 0 5 0 732630 8 9-1620489328
326304196088 2 0 56846 6 0 0
-161330220832630 7 91163006750 0 5 4 2
32767-1613303064 3 532630 6 4 8 9
 1 1 0 3 1 8-161330306432630 0
 0 6 8 4 7-1613314008 9 1 1
 0 2 3 8-161330220832630 5 9-1623044096
32630 7 94198472 31264732688 2-1615461819 1
 1 0 6 6-162053872032630 732630 3

クレイジーな数値はnull配列インスタンスであると想定していますが、整数0として設定されているかのように、それらの一部はゼロとして出力されます。

それで、整数配列値をnullに適切に設定する方法はありますか?そして、結果を画面に表示する方法はありますか?非常識な数字ではなくスペースを表示します。

ありがとう

編集:みんなありがとう、私はこれについて間違った方法で来ていたかもしれません。空のスペースをnull配列値として設定する代わりに、ゼロとして設定できると思います。数独にはゼロがないので、とにかくすべてを変更する必要があります。みんなありがとう!とても有難い。

4

2 に答える 2

4

2つの簡単な方法:1つを選択します。

1)アレイを初期化します:

Sudoku_Array : array (1..9, 1..9) of Integer := (others => (others => 0));

これは奇妙に見えるかもしれませんが(others => 0)、1-D配列のすべての要素を0に設定し、他のothers =>句はすべての行に対してこれを行います。

else2)句にデフォルトのアクションを追加します。

if Is_Char_Number(Char) then
   Sudoku_Array(R,C) := ConverttoNum(Char);
else 
   Sudoku_Array(R,C) := 0;
end if;

ここでは初期化が適切だと思いますが、どちらの方法にも用途があります。

于 2013-02-19T20:05:34.457 に答える
2

エイダがどのように機能するのかわかりませんが、あなたは文字があるかどうかだけをチェックしているようです

if Is_Char_Number(Char) then
      Sudoku_Array(R,C) := ConverttoNum(Char);
end if;

それで、それがcharである場合、それを変換して配列に入れます。そうでない場合はどうでしょうか。次に、私が思うにあなたが望むことをするゼロを挿入します

于 2013-02-19T20:07:47.333 に答える