このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1309076891/945
#  【課題】最終課題のプログラムを,テキストフィールドから入力した学習時間の平均を求めるように書き換えてみよう。  
#       例えば,次のような仕様にするといいでしょう。(paintメソッドではなく,actionPerformedメソッドで合計していく) 
#   
#           仕様 
#           合計時間を参照するMyTime型の変数を,アプレットクラスのフィールドとして用意しておき, actionPerformedメソッド内で,テキストフィールドから入力された時間データを加えていく。 
#           学習時間を1人分ずつ(時間,分,秒)を3つのテキストフィールドから入力していく。 
#           合計の学習時間も,テキストフィールドに表示する。 
#           時間が入力されてEnterキーが押されると, actionPerfomedメソッドが呼び出されるので,そこでそれまでに入力された学習時間の平均を求めて,表示する。 
#           「何人分のデータが入力されたか」なども表示するようにするといいかもしれません。 
#       
#  【形態】Javaアプレット 
#  【期限】2012年4月27日(金)15時まで 
#  【補足】Eclipse 3.1で動作できるソース 
#   
#   
#  よろしくお願いします。 
# 
# 

テキストフィールドから入力した学習時間の平均を求める(_学習時間の平均) :-
        テキストフィールドから入力した学習時間の(_学習時間ならび),
        学習時間の平均を求める(_学習時間ならび,_学習時間の平均).

テキストフィールドから入力した学習時間の(_学習時間ならび) :-
        テキストフィールドから入力した学習時間(_学習時間),
        テキストフィールドから入力した学習時間の(_学習時間,_学習時間ならび).

テキストフィールドから入力した学習時間の([],[]) :- !.
テキストフィールドから入力した学習時間の(_学習時間,[_学習時間|R]) :-
        テキストフィールドから入力した学習時間(_学習時間_2),
        テキストフィールドから入力した学習時間の(_学習時間_2,R).

テキストフィールドから入力した学習時間(_学習時間) :-
        write('学習時間をスペース区切りで _時 _分 _秒 : '),
        readln(L),
        テキストフィールドから入力した学習時間診断(L,_学習時間),!.
テキストフィールドから入力した学習時間(_学習時間) :-
        テキストフィールドから入力した学習時間(_学習時間).

テキストフィールドから入力した学習時間診断([],[]) :- !.
テキストフィールドから入力した学習時間診断([_時,_分,_秒],[_時,_分,_秒]) :-
        時の範囲内(_時),
        分の範囲内(_分),
        秒の範囲内(_秒),!.
テキストフィールドから入力した学習時間診断(L,_学習時間) :-
        writef('%t Input Error: ',[L]),
        fail.

時の範囲内(_時) :-
        integer(_時),
        _時 >= 0.

分の範囲内(_分) :-
        integer(_分),
        _分 >= 0,
        _分 < 60,!.

秒の範囲内(_秒) :-
        integer(_秒),
        _秒 >= 0,
        _秒 < 60,!.

学習時間の平均を求める([],_) :-
        write('テキストフィールドから入力した学習時間が有りません\n'),
        fail,!.
学習時間の平均を求める(_学習時間ならび,_学習時間の平均) :-
        length(_学習時間ならび,_人数),
        findsum([_時,_分,_秒],(
                    member([_時,_分,_秒],_学習時間ならび)),
                [_合計時,_合計分,_合計秒]),
        学習時間の平均を求める(_人数,_合計時,_合計分,_合計秒,_平均時,_平均分,_平均秒).

学習時間の平均を求める(_人数,_合計時,_合計分,_合計秒,_平均時,_平均分,_平均秒) :-        一旦秒に換算する(_合計時,_合計分,_合計秒,_換算された秒),
        _平均秒 is truncate((_換算された秒 + 0.5) / _人数),
        '換算された秒を時、分、秒に還元'(_換算された秒,_平均時,_平均分,_平均日).

一旦秒に換算する(_合計時,_合計分,_合計秒,_換算された秒) :-
        _換算された秒 is _合計時 * 3600 + _合計分 * 60 + _合計秒.

'換算された秒を時、分、秒に還元'(_換算された秒,_時,_分,_秒) :-
        _時 is _換算された秒 // 3600,
        _剰余_1 is _換算された秒 mod 3600,
        _分 is _剰余_1 // 60,
        _秒 is _剰余_1 mod 60.