このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1286978599/447
#  [1] 授業単元:C言語基礎実習  
#  [2] 問題文(含コード&リンク):w x y zを入力して 
#  w/x+y/zを計算するプログラムを作成せよ。 
#  ただし例のように帯分数かつ、分母を約分して分数表示させること。 
#  入力 
#  w = 5 
#  x = 3 
#  y = 2 
#  z = 4 
#   
#  表示 
#   5   2    1 
#  ---- + ---- = 2---- 
#   3   4    6 
#   
#  計算した結果が整数になった場合は分数の部分は
#  表示しないということでお願いします。
#  

分数の計算と表示 :-
        分数を2項読み込む([一,分子,一,分母,二,分子,二,分母],[_分子_1,_分母_1,_分子_2,_分母_2]),
        _答え仮分数分子 is _分子_1 * _分母_2 + _分子_2 * _分母_1,
        _答え仮分数分母 is _分母_1 * _分母_2,
        最大公約数(_答え仮分数分子,_答え仮分数分母,_最大公約数),
        _答え仮分数分子_2 is _答え仮分数分子 // _最大公約数,
        _答え仮分数分母_2 is _答え仮分数分母 // _最大公約数,
        帯分数(_答え仮分数分子_2,_答え仮分数分母_2,_答え整数部分, _答え分子,_答え分母),
        分数計算表示(_分子_1,_分子_2,_答え分子,_答え整数部分,_分母_1,_分母_2,_答え分母).

分数を2項読み込む([],[]).
分数を2項読み込む([A,B|R1],[C|R2]) :-
        write_formatted('第%t項の%tを整数で入力してください : ',[A,B]),
        get_integer(C),
        分数を2項読み込む(R1,R2).

分数計算表示(_分子_1,_分子_2,_答え分子,_整数部分,_分母_1,_分母_2,_答え分母) :-
        _整数部分 >= 1,
        \+(_答えの分子=0),
        write(' %2d     %2d       %2d \n',[_分子_1,_分子_2,_答え分子]),
        write('---- + ---- =%2d---- \n',[_整数部分]),
        write(' %2d     %2d       %2d \n',[_分母_1,_分母_2,_答え分母]).
分数計算表示(_分子_1,_分子_2,_答え分子,_整数部分,_分母_1,_分母_2,_答え分母) :-
        _整数部分 >= 1,
        答えの分子=0,
        write(' %2d     %2d\n',[_分子_1,_分子_2]),
        write('---- + ---- =    %2d \n',[_整数部分]),
        write(' %2d     %2d\n',[_分母_1,_分母_2]).
分数計算表示(_分子_1,_分子_2,_答え分子,_整数部分,_分母_1,_分母_2,_答え分母) :-
        _整数部分 = 0,
        write(' %2d     %2d       %2d \n',[_分子_1,_分子_2,_答え分子]]),
        write('---- + ---- =  ---- \n'),
        write(' %2d     %2d       %2d \n',[_分母_1,_分母_2,_答え分子]]).

帯分数(_仮分数分子,_仮分数分母,_帯分数整数部分, _帯分数分子,_帯分数分母) :-
        _帯分数整数部分 is _仮分数分子 // _仮分数分母,
        _帯分数分子 is _仮分数分子 mod _仮分数分母.
        _帯分数分母 = _仮分数分母.