このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1308749241/770
#  ../test/read.cgi/tech/1308749241/765 の続きです 
#  (1)c言語 
#  (2)問題:「偶数なら2で割る、奇数なら3倍して1を足す」処理をして、さらにその関数に偶数処理と奇数処理の回数を表示するプログラムの作成をお願いします。 
#  実行結果 
#  2以上の自然数を入力してください。 
#  11 
#  11→34→17→52→26→13→40→20→10→5→16→8→4→2→1 
#  偶数処理の回数:10回 
#  奇数処理の回数:4回 
# 

'偶数なら2で割り、奇数なら3倍して1を足し、1になるまで繰り返し、さらに偶数処理と奇数処理の回数を表示する' :-
        2以上の自然数を入力(_自然数),
        '偶数なら2で割り、奇数なら3倍して1を足し、1になるまで繰り返し、さらに偶数処理と奇数処理の回数を表示する'(_自然数,0,0).

'偶数なら2で割り、奇数なら3倍して1を足し、1になるまで繰り返し、さらに偶数処理と奇数処理の回数を表示する'(1,_偶数処理の回数,_奇数処理の回数) :-
        write('->1\n'),
        writef('偶数処理の回数: %t回\n奇数処理の回数: %t回\n',[_偶数処理の回数,_奇数処理の回数]),!.
'偶数なら2で割り、奇数なら3倍して1を足し、1になるまで繰り返し、さらに偶数処理と奇数処理の回数を表示する'(N,_偶数処理の回数1,_奇数処理の回数) :-
        偶数(N),
        _偶数処理の回数2 is _偶数処理の回数1 + 1,
        N2 is N // 2,
        writef('%t->',[N]),
        '偶数なら2で割り、奇数なら3倍して1を足し、1になるまで繰り返し、さらに偶数処理と奇数処理の回数を表示する'(N2,_偶数処理の回数2,_奇数処理の回数).
'偶数なら2で割り、奇数なら3倍して1を足し、1になるまで繰り返し、さらに偶数処理と奇数処理の回数を表示する'(N,_偶数処理の回数,_奇数処理の回数1) :-
        奇数(N),
        _奇数処理の回数2 is _奇数処理の回数1 + 1,
        N2 is N * 3 + 1,
        writef('%t->',[N]),
        '偶数なら2で割り、奇数なら3倍して1を足し、1になるまで繰り返し、さらに偶数処理と奇数処理の回数を表示する'(N2,_偶数処理の回数,_奇数処理の回数2).

2以上の自然数を入力(_自然数) :-
        write('2以上の自然数を入力してください。\n'),
        get_line(Line),
        2以上の自然数を入力診断(Line,_自然数),!.
2以上の自然数を入力(_自然数) :-
        2以上の自然数を入力(_自然数).

2以上の自然数を入力診断(Line,_自然数) :-
        atom_to_term(Line,_自然数,_),
        integer(_自然数),
        _自然数 >= 2,!.
2以上の自然数を入力診断(Line,_自然数) :-
        writef('入力された%tからは2以上の自然数を得られません。再入力をお願いします\n',[Line]),
        fail.

偶数(N) :- 0 is N mod 2.

奇数(N) :- 1 is N mod 2.