このディレクトリの索引
#  [1] 授業単元:プログラミング基礎II
#  [2] 問題文(含コード&リンク):
#  課題:
#   double値を10進数表示せよ。
#  対象:
#   C言語
#  制約:
#   ・出力にはfputc()またはputc()またはputchar()を使うこと。
#   ・printf系の書式変換を一切使ってはならない。
#   ・C標準ライブラリ以外のライブラリの使用は禁止する。
#   ・system()による外部プロセスの利用も禁止する。
#  
#  [3] 環境
#   [3.1] OS: Windows
#   [3.2] コンパイラ名とバージョン: Visual Studio 2010
#   [3.3] 言語: C
#  [4] 期限: 2014年05月31日まで
#  [5] その他の制限: プログラミング基礎I で基本的なところ(入門書1冊丸々程度)は終了してます 

'double値を10進数表示せよ。'(_double値) :-
        _float_integer_part is float_integer_part(_double値),
        _float_fractional_part is float_fractional_part(_double値),
        小数点以上のならび(_float_integer_part,[],_少数点以上のならび),
        小数点以下のならび(_float_fractional_part,_少数点以下のならび),
        '10進数表示せよ。'(_少数点以上のならび,_少数点以下のならび).

小数点以上のならび(0.0,L,L) :- !.
小数点以上のならび(V,L1,L) :-
        N is truncate(V) mod 10,
        V is V / 10,
        小数点以上のならび(V_1,[N|L1],L).

小数点以下のならび(0.0,[]) :- !.
小数点以下のならび(V,[N|R]) :-
        N is truncate(V * 10),
        V_1 is float_fractional_part(V * 10),
        小数点以下のならび(V_1,R).

'10進数表示せよ。'(_少数点以上のならび,_少数点以下のならび) :-
        atomic_list_concat(_少数点以上のならび,_少数点以上表示),
        atomic_list_concat(_少数点以下のならび,_少数点以下表示),
        writef('%t.%t\n',[_少数点以上表示,_少数点以下表示]).