このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1294061094/824
#  [1] 授業単元:プログラミング 
#  [2] 問題文(含コード&リンク): 
#   http://ime.nu/www.dotup.org/uploda/www.dotup.org1381683.txt 
#  
#  課題4-A
#  九九の表の一部のみを表示するプログラムを作成せよ.
#  始点はbegin_x, begin_y で指定,終点はend_x, end_y で指定すること.
#  例えばbegin_x = 2, begin_y = 3, end_x = 4, end_y = 5 の場合,以下の範囲のみの九九の結
#  果を出力し,それ以外は何も表示しない.ただし,xとyの軸の数値は全部表示すること.
#  画面出力例
#  x=    1  2  3  4  5  6  7  8  9
#  y= 1
#     2
#     3     6  9 12
#     4     8 12 16
#     5    10 15 20
#     6
#     7
#     8
#     9
#  課題4-B
#  九九の表のうち,各桁の数字を合計した数字が7で割り切れるものに”+”を表示,2で割り切
#  れるものには”*”を表示するプログラムを作成せよ.両方で割り切れる場合は”+*”を表示し,
#  それ以外には九九の計算結果を表示すること.
#  (関数を理解している者は関数を利用しても構わない)
#  画面出力例
#  x=   1  2  3  4  5  6  7  8  9
#  y=1  1  *  3  *  5  *  +  *  9
#    2  *  *  *  * 10 12 14  + 18
#    3  3  *  9 12 15 18 21  * 27
#    4  *  * 12  +  *  *  * 32 36
#    5  5 10  *  *  + 30  *  * 45
#    6  * 12 18  * 30 36  *  * 54
#    7  + 14 21  *  *  * 49 56 63
#    8  *  +  * 32  *  *  *  *  *
#    9  9 18 27 36 45 54 63 72 81

'九九の表のうち,各桁の数字を合計した数字が7で割り切れるものに”+”を表示,2で割り切れるものには”*”を表示するプログラムを作成せよ.両方で割り切れる場合は”+*”を表示し,それ以外には九九の計算結果を表示' :-
        write('x=   1  2  3  4  5  6  7  8  9\n'),
        for(1,_y,9),
        y見出し(_y),
        for(1,_x,9),
        _九九の数字 is _x * _y,
        各桁の数字を合計した数字が(_九九の数字,_各桁の数字を合計した数字),
        表示文字列(_各桁の数字を合計した数字,_表示文字列),
        write_formatted(' %t',[_表示文字列]),
        _x = 9,
        nl,
        _y = 9,!.

y見出し(1) :-
        write('y=1').
y見出し(_y) :-
        \+(_y==1),
        write_formatted('  %t',[_y])).

各桁の数字を合計した数字が(M,_各桁の数字を合計した数字) :-
        M1 is M // 10,
        M2 is M mod 10,
        _各桁の数字を合計した数字 is M1 + M2.

表示文字列(M,' +') :-
        '7で割り切れるものに”+”を'(M),!.
表示文字列(M,' *') :-
        '2で割り切れるものに"*”を'(M),!.
表示文字列(M,'+*') :-
        '7と2両方で割り切れるものに"+*”を'(M),!.
表示文字列(M,S) :-
        九九の計算結果を表示(M,S),!.

'7で割り切れるものに”+”を'(M) :-
        0 is M mod 7,!.

'2で割り切れるものに"*”を'(M) :-
        0 is M mod 2,!.

'7と2両方で割り切れるものに"+*”を'(M) :-
        0 is M mod 7,
        0 is M mod 2,!.

九九の計算結果を表示(M,S) :-
        write_formatted_atom(S,' %2d',[M]).