このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1291471791/137
#  [1] 授業単元:情報処理  
#  [2] 問題文(含コード&リンク): 
#    
#  c言語の問題について 
#  10桁以上ある2進数をユーザに入力させ, 
#  それを4桁ずつ区切って(16進数で)表示するプログラムを作成せよ 
#   
#  実行例です。 
#  H:\> prog0904 000111101001001 
#  0001 = 1 
#  1110 = e 
#  1001 = 9 
#  001 = 1  
#   
#  

'10桁以上ある2進数をユーザに入力させ,それを4桁ずつ区切って(16進数で)表示する' :-
        '10桁以上ある2進数をユーザに入力させ'(_10桁以上ある2進数),
        '4桁ずつ区切って(16進数で)表示する'(_10桁以上ある2進数).

'10桁以上ある2進数をユーザに入力させ'(_10桁以上ある2進数) :-
        write('0または1が並ぶ2進数値を入力してください : \n'),
        get_line(Line),
        '10桁以上ある2進数入力診断'(Line,_10桁以上ある2進数),!.
'10桁以上ある2進数をユーザに入力させ'(_10桁以上ある2進数) :-
        '10桁以上ある2進数をユーザに入力させ'(_10桁以上ある2進数).

'10桁以上ある2進数入力診断'(Line,_10桁以上ある2進数) :-
        atom_length(Line,_文字列の長さ),
        _文字列の長さ < 10,
        write_formatted('入力された %t は10桁に達しません。再入力をお願いします。\n',[Line]),!,
        fail.
'10桁以上ある2進数入力診断'(Line,_10桁以上ある2進数) :-
        atom_codes(Line,Codes),
        findall(N,(
                    append(_,[Code|_],Codes),
                    N is Code-48),
                _10桁以上ある2進数),
        '要素は0か1だけである'(_10桁以上ある2進数),!.
'10桁以上ある2進数入力診断'(Line,_10桁以上ある2進数) :-
        write_formatted('入力された文字列 %t には0,1以外の文字が含まれています。再入力をお願いします。\n',[Line]),
        fail.

'要素は0か1だけである'([]) :- !.
'要素は0か1だけである'([0|R]) :-
        '要素は0か1だけである'(R),!.
'要素は0か1だけである'([1|R]) :-
        '要素は0か1だけである'(R),!.

'4桁ずつ区切って(16進数で)表示する'([]) :- !.
'4桁ずつ区切って(16進数で)表示する'([A]) :-
        '16進数'([0,0,0,A]),
        write_formatted('%t = %t\n',[A,X]),!.
'4桁ずつ区切って(16進数で)表示する'([A,B]) :-
        '16進数'(0,0,A,B,X),
        write_formatted('%t%t = %t\n',[A,B,X]),!.
'4桁ずつ区切って(16進数で)表示する'([A,B,C]) :-
        '16進数'(0,A,B,C,X),
        write_formatted('%t%t%t = %t\n',[A,B,C,X]),!.
'4桁ずつ区切って(16進数で)表示する'([A,B,C,D|R]) :-
        '16進数'(A,B,C,D,X),
        write_formatted('%t%t%t%t = %t\n',[A,B,C,D,X]),
        '4桁ずつ区切って(16進数で)表示する'(R).

'16進数'(A,B,C,D,X) :-
        _値 is 8 * A + 4 * B + 2 * C + D,
        '16進数表示'(_値,X).

'16進数表示'(N,X) :-
        N < 10,
        number_to_atom(N,X).
'16進数表示'(10,'A').
'16進数表示'(11,'B').
'16進数表示'(12,'C').
'16進数表示'(13,'D').
'16進数表示'(14,'E').
'16進数表示'(15,'F').