[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 2chのread.cgiへ]
Update time : 06/19 21:59 / Filesize : 314 KB / Number-of Response : 617
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

いろんな言語で宿題スレ



1 名前:a36 ◆K0BqlCB3.k [2009/05/21(木) 12:30:47 ]
他の宿題スレで出された問題を各々好きな言語で解答して言語の良さを競い合うスレです。
なお、宿題スレが存在する言語についてはその言語のスレで解答してください。

C/C++の宿題片付けます 126代目
pc12.2ch.net/test/read.cgi/tech/1242655611/

Python の宿題ここで答えます Part 1
pc12.2ch.net/test/read.cgi/tech/1153585095/

★★ Java の宿題ここで答えます Part 67 ★★
pc12.2ch.net/test/read.cgi/tech/1232627790/

Pascalの宿題は俺にやらせろ!!Part2
pc12.2ch.net/test/read.cgi/tech/1136994325/

BASICの宿題はお前にまかせた
pc12.2ch.net/test/read.cgi/tech/1136788500/

Rubyの宿題教えてください。2限目
pc12.2ch.net/test/read.cgi/tech/1200175247/

C#,C#の宿題片付けます。
pc12.2ch.net/test/read.cgi/tech/1197620454/

232 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 17:46:05 ]
>>228
ニュートン・コーツ とか
区分求積法 でググれ

233 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 18:28:43 ]
pc12.2ch.net/test/read.cgi/tech/1244449887/592
# [1] 授業単元: C
# [2] 問題文(含コード&リンク):入力した文字の種類を表示するプログラムを作成せよ。ただし、表示は次に従うとする
# 入力キーA〜Z 表示メッセージ 英大文字です
# 入力キーa〜z 表示メッセージ  英小文字です
# 入力キー0〜9 表示メッセージ  数字です
# 上記以外    表示メッセージ  その他のキャラクターです

234 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 18:32:23 ]
>>233
% Prolog
入力した文字の種類を表示するプログラム(_文字,_文字の種類) :-
  文字の範疇(_文字の範疇,_文字),
  表示は次に従うとする(_文字の範疇,_,_表示メッセージ),
  write(_表示メッセージ).
 
表示は次に従うとする(入力キーA〜Z,表示メッセージ,英大文字です).
表示は次に従うとする(入力キーa〜z,表示メッセージ,英小文字です).
表示は次に従うとする(入力キー0〜9,表示メッセージ,数字です).
表示は次に従うとする(上記以外,表示メッセージ,その他のキャラクターです).

文字の範疇(入力キーA〜Z,_文字) :-
  member(_文字,['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']).
文字の範疇(入力キーa〜z,_文字) :-
  member(_文字,[a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z]).
文字の範疇(入力キー0〜9,_文字) :-
  member(_文字,['0','1','2','3','4','5','6','7','8','9']).
文字の範疇(上記以外,_文字) :-
  not(member(_文字,['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'])),
文字の範疇(入力キーa〜z,_文字) :-
  member(_文字,[a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z]).
文字の範疇(入力キー0〜9,_文字) :-
  member(_文字,['0','1','2','3','4','5','6','7','8','9']).
文字の範疇(上記以外,_文字) :-
  not(member(_文字,['A','B','C','D','E','F','G','H',
           'I','J','K','L','M','N','O','P',
           'Q','R','S','T','U','V','W','X','Y','Z'])),
  not(member(_文字,[a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z])),
  not(member(_文字,['0','1','2','3','4','5','6','7','8','9'])).

235 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 18:40:39 ]
>>233 訂正
% Prolog
入力した文字の種類を表示するプログラム(_文字) :-
  文字の範疇(_文字の範疇,_文字),

% 2引数ではなく、1引数の述語です。削り忘れてました。
% なんて冗長な馬鹿なプログラムだと思われるでしょうが、渡された
% 仕様を可能な限りそのまま利用して、何も考えずにプログラムすると
% こんな事になるという例です。

入力した文字の種類を表示するプログラム(_文字,_文字の種類) :-
  表示は次に従うとする(_文字の範疇,_,_表示メッセージ),
  文字の範疇(_文字の範疇,_文字),
  write(_表示メッセージ).

% 順序をひっくり返してもちゃんと動作します。開発順序としては
% この述語を作ってから、2行目と3行目を入れ替えました。


236 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 20:51:57 ]
pc12.2ch.net/test/read.cgi/tech/1244449887/615
# [1] 授業単元: C初心者コース
# [2] 問題文(含コード&リンク):試験の点数(100点満点)を入力すると、評価値(A+,A,B,C,F)を表示する
# プログラムを作れ90〜100A+80〜89A70〜79B60〜69C0〜59Fそれ以外error
# [3] 環境
# [3.1]linux
# [3.2] gcc
# [3.3]C
# [4]6月19日
# [5]if文(gotoは論外)while do while for等 ループ文を使ってはいけないそうです

237 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 20:55:20 ]
>>236
% Prolog
評価値(_点数,'A+') :- _点数>=90,_点数=<100.
評価値(_点数,'A') :- _点数>=80,_点数=<89.
評価値(_点数,'B') :- _点数>=70,_点数=<79.
評価値(_点数,'C') :- _点数>=60,_点数=<69.
評価値(_点数,'F') :- _点数>=0,_点数=<59.
評価値(_,error).

238 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 23:44:11 ]
pc12.2ch.net/test/read.cgi/tech/1232627790/737
#【 課題 】適当な文字列を入力して、暗号化するプログラムを作る。
# 暗号キーは2桁で、暗号文は奇数番目と偶数番目の文字列を、
# 暗号キーの値だけ交互にずらして作成する。
# 使用する文字種は「!」から「z」までの90個とする(0x21~0x7A)。
# またを超えたら!に戻すこと。

239 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 23:46:10 ]
>>238
% Prolog
nojiriko.asia/prolog/t238.html

240 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 07:51:19 ]
pc12.2ch.net/test/read.cgi/tech/1244449887/650
# [1] 授業単元: C
# [2] 問題文(含コード&リンク):キーボードから入力された1以上の整数nについて、
# 次の例に示すように行番号と*を表示するプログラムを作成せよ。
# なお、*の数は、1行目はn個とし、1行毎に1ずつへっていくこととする。
# また、0や負の数が入力された場合はプログラムが終了するようにせよ。



241 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 07:58:05 ]
>>240
% Prolog
% 述語 同一要素ならび/3 は事実上の組込述語ですね
t240(N) :-
  for(N,M,1),t240_1(M),N=1.

t240_1(N) :-
  同一要素ならび(*,L,N),
  concat_atom([N|L],S),
  write_formatted('%t\n',[S]).

同一要素ならび(_要素,List,Length) :-
  length(List,Length),
  同一要素ならび(_要素,List) .

同一要素ならび(_,[]).
同一要素ならび(A,[A|R]) :-
  同一要素ならび(A,R).

242 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 14:42:10 ]
pc12.2ch.net/test/read.cgi/tech/1244449887/674
# [1] 授業単元:プログラム
# [2] 4*3行列Aと 3*5行列B の各要素をキーボードから入力し、
# C = A*B を計算し、表示するプログラムを作成せよ。

243 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 14:43:51 ]
>>242
% Prolog 少し前に一度あった。
nojiriko.asia/prolog/t242.html

244 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 14:47:02 ]
pc12.2ch.net/test/read.cgi/tech/1244449887/669
# 内容:
# [1] 授業単元: プログラミング論
# [2] 問題文(含コード&リンク):
# 1からnまでの整数値の和を再帰的に求めるプログラムを作成する
# [実行結果の例]
# 1からnまでの整数値の和を計算します
# nの値を入力してください:100
# 1から100までの整数値の和は5050です

245 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 04:31:12 ]
>>149 >>150
% Prolog (下請け述語を改変)
% pc12.2ch.net/test/read.cgi/tech/1235561034/289 参照

交互にならべた文字列(Str1,Str2,Str) :-
  atom_chars(Str1,Chars1),
  atom_chars(Str2,Chars2),
  交互にならべた文字列_1(Chars1,Chars2,Chars3),
  atom_chars(Str,chars3).

交互にならべた文字列_1([],L,L) :- !.
交互にならべた文字列_1([A|R1],L2,[A|R]) :-
  交互にならべた文字列_1(L2,R1,R)..

?- 交互にならべた文字列(abcde,opq,X).
X = aobpcqde;
no
?-


246 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 04:58:24 ]
>>246
もっと一般化したら・・

二つの文字列を交互に併合する(Str1,Str2,Str) :-
  atom_chars(Str1,Chars1),
  atom_chars(Str2,Chars2),
  順併合(Chars1,Chars2,Chars3),
  atom_chars(Str,chars3).

順併合([],L,L) :- !.
順併合([A|R1],L2,[A|R]) :-
  順併合(L2,R1,R).

247 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 05:37:07 ]
>>246
順併合というソートと誤解されるかな。

二つの文字列を交互に併合する(Str1,Str2,Str) :-
  atom_chars(Str1,Chars1),
  atom_chars(Str2,Chars2),
  交互併合(Chars1,Chars2,Chars3),
  atom_chars(Str,chars3).

交互併合([],L,L) :- !.
交互併合([A|R1],L2,[A|R]) :-
  交互併合(L2,R1,R).

248 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 08:33:46 ]
ということは、
>>238 >>239 文字コードによる暗号化/3 も以下がよい。

文字列の暗号化(_鍵整数,_元の文字列,_暗号文字列) :-
  integer(_鍵整数),
  _鍵整数>=10
  _鍵整数=<99,
  atom_codes(_元の文字列,Codes),
  _奇数番目の鍵 is _鍵整数 // 10,
  _偶数番目の鍵 is _鍵整数 mod 10,
  文字コードによる暗号化(_奇数番目の鍵,_偶数番目の鍵,Codes,_暗号Codes),
  atom_codes(_暗号文字列,_暗号Codes).

文字コードによる暗号化(_,_,[],[]) :- !.
文字コードによる暗号化(_鍵1,_鍵2,[A|R1],[B|R2]) :-
  一文字の暗号化(_鍵1,A,B),
  文字コードによる暗号化(_鍵2,_鍵1,R1,R2).

一文字の暗号化(_変位,_文字コード,_暗号化された文字コード) :-
  _文字コード+_変位 =< 122,!,
  _暗号化された文字コード is _文字コード+_変位.
一文字の暗号文字化(_変位,_文字コード,_暗号化された文字コード) :-
  _文字コード+_変位 >122,!,
  _暗号化された文字コード is _文字コード+_変位-90.

249 名前:248 mailto:sage [2009/06/20(土) 08:47:22 ]
ごめんなさい。>>238 を更新してしまった。
これでは以前との比較ができない。もう一度復元しますから、少し待って。

250 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 09:01:05 ]
>>249 >>239 の話でした。元々はこうなっていたはずです。

文字コードによる暗号化(_,_,[],[]).
文字コードによる暗号化(_奇数番目の鍵,_,[A],[C]) :-
  一文字の暗号化(_奇数番目の鍵,A,C).  
文字コードによる暗号化(_奇数番目の鍵,_偶数番目の鍵,[A,B|R1],[C,D|R2]) :-
  一文字の暗号化(_奇数番目の鍵,A,C),
  一文字の暗号化(_偶数番目の鍵,B,D),
  文字コードによる暗号化(_奇数番目の鍵,_偶数番目の鍵,R1,R2).



251 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 19:19:22 ]
pc12.2ch.net/test/read.cgi/tech/1232627790/750# 【 課題 】
# String a ="@test あいう@aaaおえてtest.com/と";
# aから@から始まるアルファベットとURLを取り除く処理
# System.out.println(a);
#
# 出力結果
# あいうおえてと
#
# aから@から始まるアルファベットとURLを取り除く処理はどのように書けばいいのでし
ょうか?


252 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 19:44:01 ]
>>251
% Prolog
t251(_文字列,_取り除いた文字列) :-
  atom_chars(_文字列,Chars),
  t251_1(Chars,L),
  atom_chars(_取り除いた文字列,L).

t251_1([],[]) :- !.
t251_1([@|R1],R2) :-
  t251_2(R1,R2),!.
t251_1([h,t,t,p,:,/,/|R1],R2) :-
  t251_2(R1,R2),!.
t251_1([A|R1],[A|R2]) :-
  t251_1(R1,R2).

t251_2([],[]) :- !.
t251_2([A|R1],R2) :-
  A @>=' ',
  A @=< z,!,
  t251_2(R1,R2).
t251_2(L,R2) :-
  t251_1(L,R2).


253 名前:デフォルトの名無しさん mailto:sage [2009/06/21(日) 04:51:24 ]
pc12.2ch.net/test/read.cgi/tech/1244449887/708
# 入力件数nをキーボードより入力し、n人分のテストデータを入力する。
# その際、合計点、最高点、最低点を求め、最後に平均点を計算しそれぞれを出力するプログラムを作成せよ。
# ただし、平均点は実数型とし小数点第2位まで出力する。
# 平均点以外の変数は整数型とする。
#
# 問A棒グラフ出力プログラム
# 値2つを入力し、*を横に並べて棒グラフ状に出力するプログラム。
# 大きい値の方の棒グラフが上に来るようにすること。
# (値として0〜50までしか入力されないものとする)

254 名前:デフォルトの名無しさん mailto:sage [2009/06/21(日) 05:43:15 ]
>>253 問A棒グラフ出力プログラム
% Prolog

t253_2(A,B) :-
  t253_2_make_list(50,A,B,L),
  t253_2_print(L).

t253_2_make_list(0,_,_,[]).
t253_2_make_list(N,A,B,[[X1,X2]|R]) :-
  ( N > A,X1=' ';N =< A,X1='*'),
  ( N > B,X2=' ';N =< B,X2='*'),
  N2 is N - 1,
  t253_2_make_list(N2,A,B,R).

t253_2_print([],[]).
t253_2_print([F|R1],[B|R2]) :-
  write_formatted(' %t %t\n',F),
  t253_2_print(R1,R2).

255 名前:デフォルトの名無しさん mailto:sage [2009/06/21(日) 05:47:01 ]
>>254 間違えた。t253_2_printを直すの忘れてた。
% Prolog

t253_2(A,B) :-
  t253_2_make_list(50,A,B,L),
  t253_2_print(L).

t253_2_make_list(0,_,_,[]).
t253_2_make_list(N,A,B,[[X1,X2]|R]) :-
  ( N > A,X1=' ';N =< A,X1='*'),
  ( N > B,X2=' ';N =< B,X2='*'),
  N2 is N - 1,
  t253_2_make_list(N2,A,B,R).

t253_2_print([]).
t253_2_print([L|R]) :-
  write_formatted(' %t %t\n',L),
  t253_2_print(R).

256 名前:デフォルトの名無しさん mailto:sage [2009/06/21(日) 06:25:06 ]
pc12.2ch.net/test/read.cgi/tech/1244449887/742
# [1] 授業単元: C
# [2] 問題文(含コード&リンク):年r%の複利でy円を借り、n年後に一括返済する場合の返済額を計算するプログラムを作成せよ
#               ただしr%の複利でn年借りた場合の利率を計算する部分を関数として作成すること。
# 表示結果の例
#     利率(r):7.5
#     金額(y):1000000
# 期間(n):2
# 返済金額は1155625
# ヒント:返済金額はy(1+r/100)のn乗円である。r%の複利でn年間の利率(1+r/100)のn乗を計算する関数
#     float interest(float r, int n)を作る。そしてmain()からinterest()を呼び出し、返された値にyを掛けて返済額を求める。

257 名前:デフォルトの名無しさん mailto:sage [2009/06/21(日) 12:51:45 ]
pc12.2ch.net/test/read.cgi/tech/1232627790/748
#【 課題 】rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/712.txt
#【 形態 】Javaアプリケーション(main()で開始)
# rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/716.txt
上記仕様は意味不明のところがあり、
入力ファイルを以下のように変更しましょう。

売上明細ファイル
1)支店コード(数値3byte)
2)販売日(yyyymmdd)
3)販売先コード(数値6byte)
4)売上金額(数値8byte)

支店名ファイル
1)支店コード(数値3byte)
2)支店名(文字10byte)

販売先名ファイル
1)販売先コード(数値6byte)
2)販売先名(文字30byte)

258 名前:デフォルトの名無しさん mailto:sage [2009/06/21(日) 15:00:09 ]
>>251 >>252 URLのチェックの認識部分を修正
% Prolog
t251(_文字列,_取り除いた文字列) :-
  atom_chars(_文字列,Chars),
  t251_1(Chars,L),
  atom_chars(_取り除いた文字列,L).

t251_1([],[]) :- !.
t251_1([' '|R1],R2) :-
  t251_1(R1,R2),!.
t251_1([@|R1],R2) :-
  t251_2(R1,R2),!.
t251_1(L,R2) :-
  url_check(L,R1),
  t251_2(R1,R2),!.
t251_1([A|R1],[A|R2]) :-
  t251_1(R1,R2).

url_check([h,t,t,p,:,/,/|R],R) :- !.
url_ckeck([h,t,t,p,s,:,/,/,|R],R) :- !.
url_check([f,t,p,:,/,/|R],R) :- !.
url_check([f,i,l,e,:,/,/|R],R) :- !.

t251_2([],[]) :- !.
t251_2([A|R1],R2) :-
  A @>' ',
  A @=< z,!,
  t251_2(R1,R2).
t251_2(L,R2) :-
  t251_1(L,R2).

259 名前:デフォルトの名無しさん mailto:sage [2009/06/21(日) 19:17:19 ]
pc12.2ch.net/test/read.cgi/tech/1244449887/765
# [1] 授業単元:プログラミング
# [2] 問題文(含コード&リンク):
# 診断プログラムを作ろう
# 「計算ドリル」。質問文全てを一つの文字列配列に格納し、その順番に表示しましょう
。正解するたびに、
# tokuten を増やすことで、最後に「あなたは 5 問正解です」みたいな結果を表示させ
ることが出来ます。
# char questions[6][100]={
# “12×(3+4)=”, “(1+1÷9)×9=”,
# “(29‐5)÷(17‐11)=”, “2の10乗=”,
# “(3×9+44÷2)のルート=”, “8の階乗=”};
# ソースプログラム、変数の意味、工夫した点を書きなさい


260 名前:デフォルトの名無しさん mailto:sage [2009/06/21(日) 19:21:42 ]
>>259
% Prolog
計算ドリル :-
  write('五問出題します。すぐに答えてください\n'),
  質問(L1),
  正解(L2),
  計算ドリル(L1,L2,0,X),
  write_formatted('%t問正解です\n',[X]).

計算ドリル([],_,N,N) :- !.
計算ドリル([A|R1],[B|R2],N,X) :-
  write(A),
  get_line(S),
  atom_to_term(S,B),
  M is N + 1,
  計算ドリル([A|R1],[B|R2],M,X),!.
計算ドリル([_|R1],[_|R2],N,X) :-
  計算ドリル(R1,R2,N,X).

質問(['12×(3+4)=',
'(1+1÷9)×9=',
'(29‐5)÷(17‐11)=',
'2の10乗=',
'(3×9+44÷2)のルート=',
'8の階乗=']).

正解([84,10,4,1024,7,40320]).



261 名前:260 mailto:sage [2009/06/21(日) 20:08:59 ]
% 正解かどうかを示すタイミングは
計算ドリル([],_,N,N) :- !.
計算ドリル([A|R1],[B|R2],N,X) :-
  write(A),
  get_line(S),
  atom_to_term(S,B),
  write('正解です!\n'),
  M is N + 1,
  計算ドリル([A|R1],[B|R2],M,X),!.
計算ドリル([_|R1],[B|R2],N,X) :-
  write('残念でした!! 正解は%tですね\n',[B]),
  計算ドリル(R1,R2,N,X).

262 名前:デフォルトの名無しさん mailto:sage [2009/06/21(日) 20:37:25 ]
% 一般的には以下のような定義にします。これだと不正解の時にもSを表示できます。
計算ドリル([],_,N,N) :- !.
計算ドリル([A|R1],[B|R2],N,X) :-
  write(A),
  get_line(S),
  正誤の判定(S,B,N,N2),
  計算ドリル(R1,R2,N2,X).

正誤の判定(S,B,N,N2) :-
  atom_to_term(S,B1),
  B1 = B,
  write('正解です!\n'),N2 is N + 1,!.
正誤の判定(S,B,N,N) :-
  atom_to_term(S,B1),
integer(B1),
not(B1=B),
write_formatted('残念でした!! 正解は%tですね\n',[B]),!.
正誤の判定(S,B,N,N) :-
  atom_to_term(S,B1),
  not(integer(B1)),
  write_formatted('入力に形式的な誤りがあったようです\nあなたは%tと入力しました\n',[S]).

263 名前:デフォルトの名無しさん mailto:sage [2009/06/21(日) 22:02:23 ]
>>256
% Prolog

interest(R,N,X) :-
  X is (1+R/100)^N.

返済額(Y,R,N,,X) :-
  interrest(R,N,Z),
X is Y * Z.

264 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 04:34:04 ]
pc12.2ch.net/test/read.cgi/tech/1244449887/580
# 【質問テンプレ】
# [1] 授業単元: プログラミング演習
# [2] 問題文: 人の名前(ローマ字)を検索(部分一致)することができるプログラム
を作成せよ。


265 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 14:46:14 ]
>>264
% Prolog こういう処理のためのユーティリティ sub_atom/10 を提案する。
nojiriko.asia/prolog/t264_u.html

266 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 17:23:44 ]
pc12.2ch.net/test/read.cgi/tech/1153585095/878
#エラトステネスの篩
#(コードは煩雑そうに見えるが、速度が圧倒的に速い。
# 大きな数までの素数表が必要な場合に必要な方法。)
% 宿題には見えないんだが・・

267 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 17:27:40 ]
>>266
% Prolog

素数生成(N,X) :-
  findall(M,for(2,M,N),L),
  エラトステネスの篩(L,X).

エラトステネスの篩([],[]) :- !.
エラトステネスの篩([A|R1],[A|R2]) :-
  エラトステネスの篩(A,R1,L),
  エラトステネスの篩(L,R2).

エラトステネスの篩(_,[],[]) :- !.
エラトステネスの篩(N,[A|R1],R2) :-
  0 is A mod N,
  エラトステネスの篩(N,R1,R2),!.
エラトステネスの篩(N,[A|R1],[A|R2]) :-
  エラトステネスの篩(N,R1,R2).

268 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 22:55:11 ]
pc12.2ch.net/test/read.cgi/tech/1244449887/842
# [1] C言語
# [2]1〜5の数字の組み合わせをを2次元配列index[][]に格納し、表示しなさい。


269 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 22:59:07 ]
>>268
% Prolog
t268(X) :- 組合せ([1,2,3,4,5],2,X).

組合せ(X,1,[A]) :-
member(A,X) .
組合せ([A|Y],N,[A|X]) :-
N > 1,
M is N - 1,
組合せ(Y,M,X) .
組合せ([_|Y],N,A) :-
N > 1,
組合せ(Y,N,A) .

270 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 23:01:19 ]
>>268
% Prolog
t268(X) :- 組合せ([1,2,3,4,5],2,X).

組合せ(X,1,[A]) :- member(A,X) .
組合せ([A|Y],N,[A|X]) :- N > 1,M is N - 1,組合せ(Y,M,X) .
組合せ([_|Y],N,A) :- N > 1,組合せ(Y,N,A) .



271 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 23:05:33 ]
pc12.2ch.net/test/read.cgi/tech/1244449887/837
# キーボードから入力した数値の段数を持つ逆ピラミッドを表示するプログラム。
#
# 例えば3と入力した時、
#
# *****
# ***
# *
#
# となるようなプログラムです。
# どうか早急にお願いします。

272 名前:デフォルトの名無しさん [2009/06/22(月) 23:08:00 ]
>>271
問題が面白くないっす
やる気起きないっす


273 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 23:17:35 ]
% Prolog
:- op(250,xfx,対).

t271(N,1 対 M) :-
  for(N,N2,1),
  N3 is (N2 - 1) * (M - 1) + 1,
  for(1,N4,N3),write(*),N3=N4,
  N=N2.

274 名前:デフォルトの名無しさん mailto:sage [2009/06/23(火) 04:33:24 ]
pc12.2ch.net/test/read.cgi/tech/1244449887/851
# あいうえお
# /*かきくけこ*/
# さしす/*せそ
# なにぬ*/ねの
#
# というファイル(test.txt)から文字数、改行数、コメント文字数をカウントし、出力するプログラムです。
# お願いいたします。

275 名前:デフォルトの名無しさん mailto:sage [2009/06/23(火) 05:03:46 ]
>>274
% Prolog
t274(_文字数,_改行数,_コメント数) :-
  get_chars('test.txt',Chars),
  length(Chars,_文字数),
  改行数を数える(Chars,_改行数),
  コメント数を数える(Chars,_コメント).

改行数を数える(Chars,_改行数) :-
  findall(_,append(_,['\n'|_],Chars),L),
  length(L,_改行数).

コメント文字数を数える(Chars,_コメント文字数) :-
  append(_,['/','*'|L2],Chars),
  append(_コメント文字候補,['*','/'|_],L2),
  not(append(_,['/','*'|_],_コメント文字候補)),
  改行を取り除く(_コメント文字候補,_改行を取り除いたコメント文字候補),
  length(_改行を取り除いたコメント文字候補,_コメント文字数).

改行を取り除く([],[]).
改行を取り除く(['\n'|R1],R2) :-
  改行を取り除く(R1,R2),!.
改行を取り除く([A|R1],[A|R2]) :-
  not(A='\n'),
  改行を取り除く(R1,R2).

276 名前:デフォルトの名無しさん mailto:sage [2009/06/23(火) 05:11:18 ]
>>274 >>275
% Prolog (訂正) コメント数 ではなく コメント文字数 です。
t274(_文字数,_改行数,_コメント文字数) :-
  get_chars('test.txt',Chars),
  length(Chars,_文字数),
  改行数を数える(Chars,_改行数),
  コメント文字数を数える(Chars,_コメント文字数).

改行数を数える(Chars,_改行数) :-
  findall(_,append(_,['\n'|_],Chars),L),
  length(L,_改行数).

コメント文字数を数える(Chars,_コメント文字数) :-
  append(_,['/','*'|L2],Chars),
  append(_コメント文字候補,['*','/'|_],L2),
  not(append(_,['/','*'|_],_コメント文字候補)),
  改行を取り除く(_コメント文字候補,_改行を取り除いたコメント文字候補),
  length(_改行を取り除いたコメント文字候補,_コメント文字数).

改行を取り除く([],[]).
改行を取り除く(['\n'|R1],R2) :-
  改行を取り除く(R1,R2),!.
改行を取り除く([A|R1],[A|R2]) :-
  not(A='\n'),
  改行を取り除く(R1,R2).

277 名前:デフォルトの名無しさん mailto:sage [2009/06/23(火) 05:19:10 ]
pc12.2ch.net/test/read.cgi/tech/1244449887/861
# 以下のように出力されるプログラムを作成せよ
# 年齢を入力してください
# 16
# 生まれた年を入力してください
# 1986
# 好きな数字を入力してください
# 7
# あなたは1986年生まれの16才で、7が好きですね

278 名前:デフォルトの名無しさん mailto:sage [2009/06/23(火) 05:30:30 ]
>>277
% Prolog
t277 :-
  質問文(L),
  findall(U,(member(A,L),write(A),nl,get_line(U)),VL),
  write_formatted('あなたは%t年生まれの%才で、%tが好きですね\n',VL).

質問文([年齢を入力してください,生まれた年を入力してください,好きな数字を入力してください]).


279 名前:デフォルトの名無しさん mailto:sage [2009/06/23(火) 05:41:29 ]
pc12.2ch.net/test/read.cgi/tech/1244449887/879
# [1] 授業単元:プログラミング
# [2] 問題文(含コード&リンク):
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9519.txt

280 名前:デフォルトの名無しさん mailto:sage [2009/06/23(火) 07:00:07 ]
>>279
% Prolog
t279(M,N,StartX,StartY,_壁衝突回数,_ポケットX,_ポケットY) :-
  t279(M,N,StartX,StartY,1,1,0,_壁衝突回数,_ポケットX,_ポケットY),!.

t279(M,N,X,Y,_,_,Count,Count,X,Y) :-
  member([X,Y],[[M,0],[0,N],[N,0],[M,N]]),!.
t279(M,N,X1,Y1,VX,VY,Count1,Count,X,Y) :-
  member(X1,[0,M]),
  VX1 is (-1) * VX,
  Count2 is Count1 + 1,
  X2 is X1 + VX1,
  Y2 is Y1 + VY,
  t279(M,N,X2,Y2,VX1,VY,Count2,Count,X,Y).
t279(M,N,X1,0,VX,VY,Count1,Count,X,Y) :-
  member(Y1,[0,N]),
  VY1 is (-1) * VY,
  Count2 is Count + 1,
  X2 is X1 + VX,
  Y2 is Y1 + VY1,
  t279(M,N,X2,Y2,VX,VY1,Count2,Count,X,Y).
t279(M,N,X1,Y1,VX,VY,Count1,Count,X,Y) :-
  X2 is X1 + VX,
  Y2 is Y1 + VY,
  t279(M,N,X2,Y2,VX,VY,Count1,Count2,X,Y).




281 名前:デフォルトの名無しさん mailto:sage [2009/06/23(火) 07:26:37 ]
pc12.2ch.net/test/read.cgi/tech/1244449887/849
# [1]授業単元:プログラミング演習課題3
# [2]問題文:kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9516.txt
# ファイルに登録された成績コードを読み、構造体列にデータを編集し指定された項目で
# ソート処理を行って、画面に一覧(見出しと明細データ)を出力する。
# ソートの順序は降順とし、10行毎に見出しを入れる。
#
# 成績ファイル:
# コード(6桁),氏名(20桁),国語(3桁),算数(3桁),理科(3桁),社会(3桁)
#
# 構造体の定義:
# struct seito {
# char cd[7];
# char simei[21];
# int kokugo;
# int sansu;
# int rika;
# int syakai;
# };
#
# ソート項目は、コード、氏名、国語、算数、理科、社会が選択できるようにする。


282 名前:デフォルトの名無しさん mailto:sage [2009/06/23(火) 15:12:50 ]
>>281
% Prolog
nojiriko.asia/prolog/t281.html

283 名前:デフォルトの名無しさん mailto:sage [2009/06/23(火) 15:20:30 ]
pc12.2ch.net/test/read.cgi/tech/1244449887/890
# [1] 授業単元:数理物理
# [2] 問題文(含コード&リンク):www.mns.kyutech.ac.jp/~kamada/suuributuri/
sub8.html
#   の課題3のプログラムで解くところまで
# 課題(3)
#
# 次の力が働いているときの、運動方程式を解く。
#
# F = -x - v ^ 3 + 1 + cos(t)
#
# 初期条件:t=0の時、x(0)=1.0、速度v(0)=‐0.5
# として解き、0<t<10までをgnuplot(など)で、プロットせよ。
#
# ヒント:
# 6章の減衰振動のプログラム(C言語)
# www.mns.kyutech.ac.jp/~kamada/keisan6/

284 名前:デフォルトの名無しさん mailto:sage [2009/06/23(火) 20:03:38 ]
pc12.2ch.net/test/read.cgi/tech/1244449887/905
# [1]c++
# [2]2次元配列n[10][10]のすべての要素に1を代入してから、その内容を表示しなさい。

# また、対角要素だけを1を代入し、ほかはすべて0を代入してから、表示しなさい。
# ただし、対角要素は左上隅から右下隅への対角線上の要素とする。次の図は実行例であ
る。
#  --- (2)配列nの内容 ---
#
# 100000000
# 010000000
# 001000000
# 000100000
# 000010000
# 000001000
# 000000100
# 000000010
# 000000001


285 名前:デフォルトの名無しさん mailto:sage [2009/06/23(火) 20:27:54 ]
>>284
% Prolog
t284_1 :-
  findall(L,(for(1,M,10),findall(1,for(1,N,10),L)),LX),
  member(U,LX),
  concat_atom(U,A),
  write_formatted('%t\n',[A]),
  fail;
  true.

t284_2 :-
  findall(L,(for(1,M,10),findall(B,(for(1,N,10),
        (N=M,B=1;not(N=M),B=0))),LX),
  member(U,LX),
  concat_atom(U,A),
  write_formatted('%t\n',[A]),
  fail;
  true.


286 名前:デフォルトの名無しさん mailto:sage [2009/06/24(水) 04:35:26 ]
>>284
% Prolog for/3を使いたくない場合。表示は省略。
t284_2(X) :- length(L,10),findall(L,一つだけ1で他は全部零(L),X).
一つだけ壱で他は全部零(L) :- append(L1,[1|R],L),零ならび(L1),零ならび(R).
零ならび([]).
零ならび([0|R]) :- 零ならび(R).


287 名前:デフォルトの名無しさん mailto:sage [2009/06/24(水) 04:52:46 ]
>>284 一ヶ所間違えた。
% Prolog for/3を使いたくない場合。表示は省略。
t284_2(X) :- length(L,10),findall(L,ひとつだけ壱で他は全部零(L),X).
ひとつだけ壱で他は全部零(L) :- append(L1,[1|R],L),零ならび(L1),零ならび(R).
零ならび([]).
零ならび([0|R]) :- 零ならび(R).

288 名前:デフォルトの名無しさん mailto:sage [2009/06/24(水) 08:30:30 ]
>>287
forループがlengthの中に閉じ込められているんだね。

これぞ宣言型プログラミング!


289 名前:デフォルトの名無しさん mailto:sage [2009/06/24(水) 12:04:36 ]
>>257
% Prolog
nojiriko.asia/prolog/t257.html

290 名前:デフォルトの名無しさん mailto:sage [2009/06/24(水) 19:14:07 ]
pc12.2ch.net/test/read.cgi/tech/1244449887/953
# [1] 授業単元: ピラミッドアート
# [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9534.txt
課題「ピラミッドアート」

数値を一つ入力し、その個数分の'*'を1辺とする
@ダイヤ型、A八角形、B星型 などを描画する

実行画面例@ダイヤ型
数字(2〜9)を入力してください:3
*
***
*****
***
*

実行画面例A八角形
数字(2〜9)を入力してください:2
**
****
****
**

実行画面例B星型
数字(2〜9)を入力してください:7
* * *
* * *
***
*******
***
* * *
* * *



291 名前:デフォルトの名無しさん mailto:sage [2009/06/24(水) 19:16:01 ]
>>290
空白がうまく表示できなかった。
ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9534.txt
で確認してください。

292 名前:デフォルトの名無しさん mailto:sage [2009/06/24(水) 20:15:45 ]
>>290
% Prolog
nojiriko.asia/prolog/t290.html

293 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 16:58:48 ]
pc12.2ch.net/test/read.cgi/tech/1245853701/75
# [1] 授業単元: C
# [2] 問題文(含コード&リンク):
# キーボードから入力された1以上の整数nについて、次の例に示すように行番号と*を表示するプログラムを作成せよ
# 。また、0や負の数が入力された場合はプログラムが終了するようにせよ。
# 表示結果の例
# 正の整数:6
# 1******
# 2 *****
# 3  ****
# 4   ***
# 5    **
# 6 *


294 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 17:14:14 ]
>>293
% Prolog 最後6の表示が間違ってるが。

t293(N) :-
  length(L,N),
  append(L1,L2,L),
  not(L2=[]),
  all(L1,' '),
  all(L2,'*'),
  length(L1,N),
  N2 is N + 1,
  concat_atom(L,S),
  write_formatted('%t %t\n',[N2,S]),
  fail;
  true.

all([],_).
all([A|R],A) :- all(R,A).

295 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 17:16:07 ]
>>294
  all(L1,' '), はスペース2個だと思ってください。

296 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 18:11:51 ]
pc12.2ch.net/test/read.cgi/tech/1245853701/83
# [1] 授業単元:プログラミング
# [2] 問題文(含コード&リンク):
# 自分の名前の英字名のASCIIコードを順番に表示するプログラムを作りなさい。

297 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 18:13:37 ]
>>296
% Prolog

t296(Name) :-
  sub_atom(Name,S,1,R,A),
  not(A=' '),
  char_code(A,C),
  N is S+1,
  write_formatted('%2d: %t\n',[N,C]),
  fail;
  true.

298 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 18:41:30 ]
pc12.2ch.net/test/read.cgi/tech/1245853701/85
# [1] 授業単元: プログラミング演習
# [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9554.txt

299 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 19:17:51 ]
>>298
% Prolog

phon(_フォネティックコードファイル,_文字列) :-
  assertz_フォネティックコード(_フォネティックコードファイル),
  sub_atom(_文字列,_,1,_,A),
  フォネティックコード(A,B),
  write_formatted('%t ',[B]),
  fail;
  true.

assertz_フォネティックコード(_フォネティックコードファイル) :-
  abolish(フォネティックコード/2),
  get_lines(_フォネティックコード,Lines),
  member(Line,Lines),
  split(Line,[','],[A,B]),
  assertz((フォネティックコード(A,B) :- !)),
  fail;
  assertz((フォネティックコード(A,A))).

300 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 19:32:49 ]
>>298
-- Haskell

import IO
import Data.Char (isAlpha, toLower)
import Data.Maybe (fromJust)

main = do
fname <- getLine
h <- openFile fname ReadMode
phon <- readPhon h
str <- getLine
putStrLn $ t298 phon str
hClose h

readPhon :: Handle -> IO [(Char,String)]
readPhon h = hGetContents h >>= return . map parse . lines
where
parse :: String -> (Char,String)
parse (c:',':p) = (c,p)

t298 :: [(Char,String)] -> String -> String
t298 phon [] = []
t298 phon (x:xs) | isAlpha x = (fromJust $ lookup (toLower x) phon) ++ ' ' : t298 phon xs
| otherwise = x : t298 phon xs



301 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 19:49:43 ]
>>299 違ったみたい。どこが違ってたか捜してみて下さい。
% Prolog

phon(_フォネティックコードファイル,_文字列) :-
  assertz_フォネティックコード(_フォネティックコードファイル),
  atom_chars(_文字列,Chars),
  phon_1(Chars,XL),
  phon_2(XL).

phon_1([],[]) :- !.
phon_1([A,B|R1],[C,' '|R2]) :-
  フォネティックコード(A,C),
  フォネティックコード(B,_),
  phon_1([B|R1],R2).
phon_1([A,B|R1],[C,' '|R2]) :-
  フォネティックコード(A,C),
  not(フォネティックコード(B,_)),
  phon_1([B|R1],R2).
phon_1([A,B|R1],[A,' '|R2]) :-
  not(フォネティックコード(A,_)),
  フォネティックコード(B,_),
  phon_1([B|R1],R2).
phon_1([A,B|R1],[A|R2]) :-
  not(フォネティックコード(A,_)),
  not(フォネティックコード(B,_)),
  phon_1([B|R1],R2).

phon_2([]).
phon_2([A|R]) :-
  write(A),
  phon_2(R).


302 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 19:56:51 ]
>>301 さらに訂正。
phon_1([],[]) :- !. の後に、
phon_1([A],[C]) :-
  フォネティックコード(A,C),!.
phon_1([A],[A]) :-
  not(フォネティックコード(A,_)),!.

の2節を追加してください。
nojiriko.asia/prolog/t298.html
に書き直しておきます。

303 名前:299 mailto:sage [2009/06/26(金) 20:35:21 ]
なぜこうまでも全編の書き直しを余儀なくされたかというと、
123abc の場合の 123 Alfa ... 3とAlfaの間のスペースを入れることが
難しかったと言うことです。sub_atomで次の文字をこっそり見てしまえば
いいだけの事なのですが、潔しとせずと言うところでしょうか。

304 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 20:44:07 ]
>>303
前後関係を検査しやすいパターンで記述するので正解じゃないか。
ご苦労様ですw


305 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 22:04:55 ]
pc12.2ch.net/test/read.cgi/tech/1245853701/46
# [1] 授業単元:プログラミング
# [2] 問題文(含コード&リンク):入力した数を2の何乗より大きいかを求めるプログラム。

306 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 22:15:19 ]
>>305
% Prolog

t305(N,X) :-
for(1,M,N),
2 ^ M > N,
X is M - 1.

307 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 22:29:32 ]
>>305
-- Haskell

import Data.List (find)
main = do
n <- getLine
let Just m = find ((read n <=) . (2^)) [1..] in print (m-1)

308 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 14:57:43 ]
「いろんな言語で宿題スレ」の中で
pc12.2ch.net/test/read.cgi/tech/1242876647/168
pc12.2ch.net/test/read.cgi/tech/1242876647/225
といったProlog向き問題が未回答となっています。
どなたか、よろしくお願いします。

309 名前:308 mailto:sage [2009/06/28(日) 14:59:04 ]
「Prologでまったり」スレに書き込んだつもりでした。失礼しました。

310 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 04:55:03 ]
pc12.2ch.net/test/read.cgi/tech/1245853701/162
# [1] 授業単元:数値計算
# [2] 問題文(含コード&リンク):の連立1次方程式の解をガウスの消去法用いて解くプログラムを作成しなさい。
#    (この行列を使用してください
#      {{10,-9,0,0,0,0,0,0},
#   {-9,17,-8,0,0,0,0,0},
#   {0,-8,17,-9,0,0,0,0},
# {0,0-9,13,-4,0,0,0},
# {0,0,0,-4,12,-8,0,0},
# {0,0,0,0,-8,10,-2,0},
#   {0,0,0,0,0,-2,2,7}})





311 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 11:08:26 ]
pc12.2ch.net/test/read.cgi/tech/1232627790/856
# 【 課題 】百ます計算プログラムの作成
# 足す数、足される数は実行毎にランダムな順番にする。
# スタートボタンを押すと同時に問題が表示され、答えをキー入力しおわるとストップボタンを押す。
# 終了までの時間と、正解数を表示する。

百ます計算ってなんですか? ゲームに参加した人が行、列の先頭から
数字を得て百桝計算し終わるまでの時間でも競うのですか?

312 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 13:29:06 ]
pc12.2ch.net/test/read.cgi/tech/1245853701/184
# [1] 授業単元:アルゴリズム
# [2] 問題文(含コード&リンク):
#   kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9583.txt


313 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 13:30:41 ]
>>312
% Prolog
t312(StackIn,StackOut) :-
  new_stack(StackIn,NewStack),
  get_chars(Chars),
  t312_1(Chars,NewStack,StackOut,_).

t312_1([],X,X,true).
t312_1([A|R1],Stack1,Stack2,Return) :-
  stack(A,Stack1,Stack3,Return1),
  t312_2(Return1),
  t312_1(R1,Stack3,Stack2,Return).

t312_2(true) :- !.
t312_2(C) :- write(C).

new_stack(Var,[]) :- var(Var),!.
new_stack([],[]) :- !.
new_stack(Stack,Stack).

stack_1('/',[A|R2],R2,A) :- !.
stack_1(C,Stack1,[C|Stack1],true).

314 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 13:45:08 ]
>>313 まちがえた。stackという述語のところ。stack/4 stack_1/4
と出てきますが、stack_op/4にします。
% Prolog

t312(StackIn,StackOut) :-
  new_stack(StackIn,NewStack),
  get_chars(Chars),
  t312_1(Chars,NewStack,StackOut,_).

t312_1([],X,X,true).
t312_1([A|R1],Stack1,Stack2,Return) :-
  stack_op(A,Stack1,Stack3,Return1),
  t312_2(Return1),
  t312_1(R1,Stack3,Stack2,Return).

t312_2(true) :- !.
t312_2(C) :- write(C).

new_stack(Var,[]) :- var(Var),!.
new_stack([],[]) :- !.
new_stack(Stack,Stack).

stack_op('/',[A|R2],R2,A) :- !.
stack_op(C,Stack1,[C|Stack1],true).

315 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 03:45:34 ]
pc12.2ch.net/test/read.cgi/tech/1245853701/222
# [1] 授業単元:プログラミング
# [2] 問題文(含コード&リンク):
# kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9599.txt

316 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 10:02:40 ]
>>315
% Prolog
nojiriko.asia/prolog/t315.html

317 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 10:50:45 ]
pc12.2ch.net/test/read.cgi/tech/1245853701/234
# [1] 授業単元:確率論
# [2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9602.txt


318 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 14:50:16 ]
pc12.2ch.net/test/read.cgi/tech/1245853701/243
# [1] 授業単元: プログラミング演習
# [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9605.txt

319 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 17:28:19 ]
pc12.2ch.net/test/read.cgi/tech/1245853701/244
# 〔1〕授業単元:C言語
# 〔2〕問題文:kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9601.txt


320 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 04:08:33 ]
pc12.2ch.net/test/read.cgi/tech/1245853701/273
# 1] 授業単元: 数理計画法
# [2] 問題文(含コード&リンク): シンプレックス法のプログラムを作成せよ。
# [3] 環境
#  [3.1] OS: Windows
#  [3.3] 言語: C
# [4] 期限: 2009年7月1日
# [5] その他の制限: プログラムの授業で習うことはすべてやりました。
# kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9612.txt
# のようなプログラムをつくたんですがこの先が悩んでいます。どなたかお願いします。



321 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 04:10:11 ]
pc12.2ch.net/test/read.cgi/tech/1245853701/275
# [1] 授業単元:C言語の基礎
# [2] 問題文:年(西暦)、月、日を入力し、入力した、日時の曜日及び、経過した日数を表示したプログラムを作成せよ。

322 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 16:45:23 ]
>>321
% Prolog
nojiriko.asia/prolog/t321.html

323 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 22:46:07 ]
>>318
% Prolog
nojiriko.asia/prolog/t318.html

324 名前:323 mailto:sage [2009/07/02(木) 05:34:22 ]
>>318
すみません。間違いが多かったので大幅に書き換えてupしました。
nojiriko.asia/prolog/t318.html

325 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 05:47:42 ]
>>319 @
% Prolog
swap(A,B,L,LX) :-
append(L1,[A|L2],[B|L3],L),
append(L1,[B|L2],[A|L3],LX),!.
swap(A,B,L,LX) :-
append(L1,[B|L2],[A|L3],L),
append(L1,[A|L2],[B|L3],LX),!.

326 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 08:49:55 ]
>>319 A
% Prolog

t319_2(X) :-
  findall(U,(for(1,N,52),t319_2_1(N,U)),X).

t319_2_1(N,U) :-
  M is N mod 13,
  t319_2_2(M,U).

t319_2_2(1,'A') :- !.
t319_2_2(10,'T') :- !.
t319_2_2(11,'J') :- !.
t319_2_2(12,'Q') :- !.
t319_2_2(0,'K') :- !.
t319_2_2(N,N).

327 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 09:03:32 ]
>>319 B
% Prolog

t319_3(X) :-
  findall(U,(for(1,N,52),t319_3_1(N,U)),X).

t319_3_1(N,U) :-
  M is N mod 13,
  M2 is (N - 1) // 13,
  t319_2_2(M,U1),
  t319_2_3(M2,U2),
  atom_concat(U1,U2,U).

t319_2_3(0,s).
t319_2_3(1,h).
t319_2_3(2,d).
t319_2_3(3,c).

% どこでswapを使うのかわからない!
% これからカードを「切る」課題でも出てくるのだろうか。

328 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 09:21:08 ]
>>319
% せっかくだからN回切るのをやってみよう。
% Prolog

t319_cut(N,L) :-
  t319_3(L1),
  t319_cut(N,L1,L).

t319_cut(0,L,L) :- !.
t319_cut(N,L,X) :-
  M1 is (random mod 52) + 1,
  M2 is (random mod 52) + 1,
  swap_nth(M1,M2,L,L1),
  N2 is N - 1,
  t319_cut(N2,L1,X).

swap_nth(M,N,L1,L2) :-
  list_nth(M,L1,A),
  list_nth(N,L1,B),
  swap(A,B,L1,L2).

329 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 09:55:49 ]
>>319
失礼しました。問題文を読み落としていました。
すべて最初に「切る」ことが指定されていました。
最初に切ってしまうなら、swap_nthではなく、swapでも処理できます。

t319_xx(X) :-
  findall(N,for(1,N,52),L),
  t319_cut(100,L,L1),
   ... ,
のような進行になります。

330 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 10:54:28 ]
>>319
% Prolog
nojiriko.asia/prolog/t319.html



331 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 07:12:07 ]
pc12.2ch.net/test/read.cgi/tech/1245853701/472
# [1] 授業単元:C言語実習
# [2] 問題文(含コード&リンク):kansai2channeler.hp.infoseek.co.jp/cgi-bin
/joyful/img/9658.txt
# {5,21,4,14,12},
# {25,20,15,3,7},
# {24,11,6,1,13},
# {16,2,17,19,8},
# {23,18,22,9,10}
#
# の横の各行を小さい順に並び替えた後、縦の各列を小さい順に並び替え(上が小さくな
るように)
# 結果を出力
#
# 結果は
#
# 5 21 4 14 12
# 25 20 15 3 7
# 24 11 6 1 13
# 16 2 17 19 8
# 23 18 22 9 10
#
# のような形で出力

332 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 07:32:08 ]
>>331
% Prolog

t331(_行列1,_行列2) :-
  各行を整列する(_行列1,_行列3),
  各列を整列する(_行列3,_行列2),
  member(L,_行列2),
  concat_atom(L,' ',S),
  write_formatted('%t\n',[S]),
  fail;
  true.

各行を整列する([],[]) :- !.
各行を整列する([_行|R1],[_整列された行|R2]) :-
  sort(_行,_整列された行),
  各行を整列する(R1,R2).

各列を整列する(_行列1,_行列2) :-
  行列の転置(_行列2,_行列3),
  各行を整列する(_行列3,_行列4),
  行列の転置(_行列4,_行列2).







[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<314KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef