このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1288531658/238
#  ../test/read.cgi/tech/1288531658/236 
#  すいません、テンプレでも書いておきます 
#   
#  [1] 授業単元:情報 
#  [2] 問題文(含コード&リンク):キーボードから入力された正の整数xに対して、2^n < x を満たす最も大きな整数nを求めるプログラムをwhile分を用いて書きなさい 
#  

'キーボードから入力された正の整数xに対して、2^n < x を満たす最も大きな整数nを求める' :-
        キーボードから入力された正の整数(_x),
        '2^n < x を満たす最も大きな整数nを求める'(_x,_n),
        write_formatted('キーボードから入力された正の整数x=%t に対して、2^n < x を満たす最も大きな整数nは %t\n',[_x,_n]).

キーボードから入力された正の整数(_x) :-
        write('正の整数を入力してください : '),
        get_line(Line),
        キーボードから入力された値の診断(Line,_x),!.
キーボードから入力された正の整数(_x) :-
        キーボードから入力された正の整数(_x).

キーボードから入力された値の診断(Line,_x) :-
        atom_to_term(Line,_x,_),
        integer(_x),
        _x > 0,!.
キーボードから入力された値の診断(Line,_x) :-
        write('入力された %t は正の整数ではありません。再入力をお願いします。\n',[Line]),
        fail.

'2^n < x を満たす最も大きな整数nを求める'(_x,0) :- _x =< 2,!.
'2^n < x を満たす最も大きな整数nを求める'(_x,_n) :-
        _x_2 is _x // 2,
        '2^n < x を満たす最も大きな整数nを求める'(_x_2,_n_2),
        _n is _n_2 + 1.