このディレクトリの索引
#  [1] 授業単元: プログラミング  
#  [2] 問題文(含コード&リンク):入力仕様を、入力座標は最大2桁までの整数を 
#  最大10件までとし、入力範囲のチェックと、最大件数のチェックを行うプログラムの 
#  作成。 
#  [3] 環境 
#   [3.1] OS: xp 
#   [3.2] コンパイラ名とバージョン: MSC Ver.5.1 
#   [3.3] 言語: C 
#  [4] 期限: 今週中 
#  [5] その他の制限: 出来れば、各所にコメントを入れて下さい。 
#  どういうプログラムなのか自分でも把握したいのと、コードの勉強も兼ねて。 
#  
#  よろしくお願いします。 

'入力仕様を、入力座標は最大2桁までの整数を最大10件までとし、入力範囲のチェックと、最大件数のチェックを行う'(_入力座標ならび,_桁数最大件数範囲で修正した入力座標ならび) :-
        '座標をX,Y最大2桁、(X,Y) の空白区切り形式で最大10件まで一行で入力する'(_座標ならび文字列),
        split(_座標ならび文字列,[' '],L1),
        座標ならびに変換(L,_入力座標ならび),
        最大件数のチェック(_入力座標ならび,_最大件数を超えた部分を除外した入力座標ならび),
        入力範囲のチェック(_最大件数を超えた部分を除外した入力座標ならび,_桁数最大件数範囲で修正した入力座標ならび).

'座標をX,Y最大2桁、(X,Y) の空白区切り形式で最大10件まで一行で入力する'(_座標ならび文字列) :-
        write('座標をX,Y最大2桁、(X,Y) の空白区切り形式で最大10件まで一行で入力する : '),
        get_line(_座標ならび文字列).

最大件数のチェック(L,L) :-
        length(L,_要素数),
        _要素数 =< 10,!.
最大件数のチェック(L1,L) :-
        length(L1,_要素数),
        length(L,10),
        append(L,_,L1),
        writef('要素数が%tで最大件数10件を超えています。\n',[_要素数]).

座標ならびに変換([],[]).
座標ならびに変換([_座標ならび文字列|R1],[[X,Y]|R2]) :-
        atom_to_term(_座標ならび文字列,(X,Y),_),
        座標ならびに変換(R1,R2).

入力範囲のチェック([],[]).
入力範囲のチェック([[X,Y]|R1],[[X,Y]|R2]) :-
        'X,Yが2桁の範囲'(X,Y),
        入力範囲のチェック(R1,R2),!.
入力範囲のチェック([[X,Y]|R1],R2) :-
        writef('入力範囲にエラーがありました (%t,%t) \n',[X,Y]),
        入力範囲のチェック(R1,R2).

'X,Yが2桁の範囲'(X,Y) :-
        '2桁の範囲'(X),
        '2桁の範囲'(Y).

'2桁の範囲'(X) :-
        X < 100,!.
'2桁の範囲'(X) :-
        X < 100.0.