このディレクトリの索引

http://pc12.2ch.net/test/read.cgi/tech/1245853701/949
# 【質問テンプレ】 
# [1] 授業単元: C言語 
# [2] 問題文(含コード&リンク): 
# http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9733.txt 
# 課題:
# ・キーボードから正整数を入力し、その逆数を正確に計算し、ディスプレイに
# 表示させる。(循環小数である場合には、循環部分が分かるように表示を工夫する。)# 内容:
# n(nは任意の正整数)の逆数を正確に計算し、計算過程で出た商、余りを逐次
# 配列に入れていく。計算途中で同じ商、余りが出たら循環小数と判定でき、
# 0が出たら割り切れると判定できる。

逆数を正確に計算(_最大桁,_正整数,_逆数表示) :-
    逆数表示(_最大桁,_正整数,[[0,1]],_逆数表示),!.

逆数表示(N,_,Y,X) :- N < 0,逆数表示(Y,[],X),!.
逆数表示(N,_整数,[[D,0]|Y],X) :- 逆数表示([[D,0]|Y],[],X),!.
逆数表示(N,_整数,[[_商,_剰余]|Y],X) :-
    _商2 is _剰余 // _整数,
    _剰余2 is (_剰余 mod _整数) * 10,
    append(L1,[[_商2,_剰余2]|L2],[[_商,_剰余]|Y]),
    append([[']...',_]|L1],[[_商2,_剰余2],['[',_]|L2],Z),
    逆数表示(Z,[],X),!.
逆数表示(N,_整数,[[_商,_剰余]|Y],X) :-
    _整数 > _剰余,
    _剰余2 is _剰余 * 10,
    N2 is N - 1,
    逆数表示(N2,_整数,[[0,_剰余2],[_商,_剰余]|Y],X),!.
逆数表示(N,_整数,[[_商,_剰余]|Y],X) :-
    _整数 < _剰余,
    _商2 is _剰余 // _整数,
    _剰余2 is (_剰余 mod _整数) * 10,
    N2 is N - 1,
    逆数表示(N2,_整数,[[_商2,_剰余2],[_商,_剰余]|Y],X),!.

逆数表示([],[_|X],S) :- concat_atom(['0','.'|X],S),!.
逆数表示([[A|_]|R1],Y,S) :- 逆数表示(R1,[A|Y],S).