このディレクトリの索引

# 出典 :: C/C++の宿題片付けます 136代目 #518 # [1] 授業単元:プログラミング演習 # [2] 問題文:整数nを入力し、以下のようにサイズnの“N型の図形”を、奇数目入力では”*”、偶数目入力では”+”で表示で表示されるプログラムを作成しなさい。なお、処理の終了はnが0以下の時とする。複合条件やスイッチを用いて作製なさい。 # 実行例 # http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10658.txt # '整数nを入力し、奇数入力ではサイズnのN型の図形を*で、偶数入力では+で、表示する' :- '整数nを入力し、'(_n), '奇数入力ではサイズnのN型の図形を*で、偶数入力では+で、表示する'(_n),!. '整数nを入力し、'(_n) :- 行入力(_行), 整数入力検査(_行,_n),!. '整数nを入力し、'(_n) :- '整数nを入力し、'(_n). 行入力(_行) :- read_line_to_codes(current_input,_文字コードならび), atom_codes(_行,_文字コードならび). 整数入力検査(_行,_整数) :- 行は整数に変換できる(_行,_整数),!. 整数入力検査(_行,_n) :- 行は整数に変換できない(_行). 行は整数に変換できる(_行,_整数) :- atom_number(_行,_整数), integer(_整数). 行は整数に変換できない(_行) :- 再入力を促し失敗する(_行). 再入力を促し失敗する(_行) :- writef('入力された %w からは整数が得られません。\n',[_行]), fail. '奇数入力ではサイズnのN型の図形を*で、偶数入力では+で、表示する'(_n) :- '奇数入力ではサイズnのN型の図形を*で、偶数入力では+で、'(_n,LL), 表示する(LL). '奇数入力ではサイズnのN型の図形を*で、偶数入力では+で、'(_n,LL) :- '奇数入力ではサイズnのN型の図形を*で、'(_n,LL). '奇数入力ではサイズnのN型の図形を*で、偶数入力では+で、'(_n,LL) :- '偶数入力ではサイズnのN型の図形を+で、'(_n,LL). '奇数入力ではサイズnのN型の図形を*で、'(_n,LL) :- '奇数入力ではサイズnの'(_n,L), 'N型の図形を*で、'(_n,L,LL). '奇数入力ではサイズnの'(_n,L) :- 奇数(_n), サイズnの(_n,L). 奇数(_n) :- 1 is _n mod 2. サイズnの(_n,L) :- length(L,_n). 'N型の図形を*で、'(_n,L,LL) :- '左右の端が*で中側が全て空白のならびを用意して'(L), '一つずつずらしながら*に置き換えて行く'(L,LL). '左右の端が*で中側が全て空白のならびを用意して'(L) :- '左右の端が*で'(L,L1), '中側が全て空白のならびを用意して'(L1). '左右の端が*で'(L,L1) :- append([[*],L1,[*]],L). '中側が全て空白のならびを用意して'(L1) :- findall(' ',member(_,L1),L1). '一つずつずらしながら*に置き換えて行く'(L,LL) :- findall(L2,( select(_,L,'*',L2)),LL). '偶数入力ではサイズnのN型の図形を+で、'(_n,LL) :- '偶数入力ではサイズnの'(_n,L), 'N型の図形を+で、'(_n,L,LL). '偶数入力ではサイズnの'(_n,L) :- 偶数(_n), サイズnの(_n,L). 偶数(_n) :- 0 is _n mod 2. サイズnの(_n,L) :- length(L,_n). 'N型の図形を+で、'(_n,L,LL) :- '左右の端が+で中側が全て空白のならびを用意して'(L), '一つずつずらしながら+に置き換えて行く'(L,LL). '左右の端が+で中側が全て空白のならびを用意して'(L) :- '左右の端が+で'(L,L1), '中側が全て空白のならびを用意して'(L1). '左右の端が+で'(L,L1) :- append([[+],L1,[+]],L). '一つずつずらしながら+に置き換えて行く'(L,LL) :- findall(L2,( select(_,L,'+',L2)),LL). 表示する(LL) :- forall(表示文字列を(LL,_表示文字列),一行表示する(_表示文字列)). 表示文字列を(LL,_表示文字列) :- member(L,LL), atomic_list_concat(L,_表示文字列). 一行表示する(_表示文字列) :- writef('%w\n',[_表示文字列]).