このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1335517816/755
#  【質問テンプレ】 
#  [1] 授業単元:c言語 
#  [2] 問題文(含コード&リンク):http://ime.nu/uproda.2ch-library.com/533330Hsq/lib533330.png 
#  

'実数を入力してsin(x)の近似値を無限級数展開を利用して求める'(_sin_x_の近似値) :-
        '実数を入力して'(_実数),
        'sin(x)の近似値を無限級数展開を利用して求める'(1,_実数,0.0,_sin_x_の近似値).

'実数を入力して'(_実数) :-
        write('実数を入力しなさい : '),
        get_line(Line),
        実数入力診断(Line,_実数),!.
'実数を入力して'(_実数) :-
        '実数を入力して'(_実数).


実数入力診断(Line,_実数) :-
        atom_to_term(Line,_実数,_),
        float(_実数),!.
実数入力診断(Line,_実数) :-
        writef('入力された %t からは実数が得られません。再入力をお願いします。\n',[Line]),
        fail.

'sin(x)の近似値を無限級数展開を利用して求める'(_,_v,_sin_x_の近似値,_sin_x_の近似値) :-
        _v < 1e-10,!.
'sin(x)の近似値を無限級数展開を利用して求める'(_k,_v_1,_x_1,_x) :-
        _i is (2 * _k - 1),
        階乗(_i,_j),
        符号の決定(_k,_1またはマイナス1),
        _v_2 is (_1またはマイナス1 * _v_1 ^ (2 * _k - 1)) / _j,
        _x_2 is _x_1 + _v_2,
        _k_2 is _k + 1,
        'sin(x)の近似値を無限級数展開を利用して求める'(_k_2,_v_2,_x_2,_x).

符号の決定(_k,-1) :-
       1 is (_k + 1) mod 2,!.
符号の決定(_k,1) :-
       0 is (_k + 1) mod 2,!.