このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1322562648/42
#  [1] 授業単元:楽しいC(ポインタと関数) 
#  [2] 問題文(含コード&リンク): 
#  秒数を与えると,それが何日何時間何分何秒にあた 
#  るかを計算する関数 
#  calctime(long sec, int *dp, int *hp, int *mp, 
#  int *sp); 
#  を作成せよ.例えば 
#  calctime(100000, &d, &h, &m, &s); 
#  として呼び出すとd=1, h=3,m=46,s=40 となる 
#  (100,000 秒=1 日3 時間46 分40 秒).以下の実行例の 
#  ように,関数の動作を確認できるmain 関数も作成すること. 
#  (出力例) 
#   秒数を入力してください:100000 
#  100000 秒= 1 日3 時間46 分40 秒 
#   秒数を入力してください:3725 
#  3725 秒= 0 日1 時間2 分5 秒 
#  

'秒数を与えると,それが何日何時間何分何秒にあたるかを計算する' :-
        秒数の入力(_秒数),
        '秒数を与えると,それが何日何時間何分何秒にあたるかを計算する'(_秒数,_日数,_時間,_分,_秒),
        '0は表示せず日数,時間,分,秒を表示する'(_日数,_時間,_分,_秒).

秒数の入力(_秒数) :-
        write('秒数を入力してください : '),
        get_line(Line),
        秒数の入力診断(Line,_秒数),!.
秒数の入力(_秒数) :-
        秒数の入力(_秒数).

秒数の入力診断(Line,_秒数) :-
        atom_to_term(Line,_秒数,_),
        integer(_秒数),
        _秒数 >= 0,!.
秒数の入力診断(Line,_秒数) :-
        writef('入力された %t からは適切な秒数が得られません。再入力をお願いします。\n',[Line]),
        fail.

'秒数を与えると,それが何日何時間何分何秒にあたるかを計算する'(_秒数,_日数,_時間,_分,_秒) :-
        _日数 is _秒数 // 86400,
        _余り_1 is _日数 mod 86440,
        _時間 is _余り_1 // 3600,
        _余り_2 is _余り_1 mod 3600,
        _分 is _余り_2 // 60,
        _秒 is _余り_2 mod 60.

'0は表示せず日数,時間,分,秒を表示する'(_日数,_時間,_分,_秒) :-
        append(_,[[N,S]|R],[[_日数,日],[_時間,時間],[_分,分],[_秒,秒]]),
        表示(N,S),
        R = [],
        write('\n').

表示(0,_) :- !.
表示(N,S) :-
        writef('%t%t ',[N,S]).