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/
596 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 23:42:55 ] >>594 % Prolog (2/2) % システム運用の最初に/var/nyutaishitsu/listing.100000.proを生成して置きます 入退室管理ディレクトリ('/var/nyutsishitsu/'). 入退室保存ファイル(F) :- 入退室管理ディレクトリ(Dir), concat_atom(['ls -N ',Dir,'listing.*.pro'],S), shs(S,L), max(L,File), sub_atom(File,_,6,4,A), atom_to_term(A,N,_), N2 is N + 1, concat_atom(['/var/nyutaishitsu/listing.',N2,'.pro'],F),!.
597 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 23:58:20 ] >>594 >>595 >>596 不適切なところが少々ありました。訂正はこれらで。 nojiriko.asia/prolog/t594.html
598 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 09:56:28 ] pc12.2ch.net/test/read.cgi/tech/1247438792/743 # [1] 授業単元:プログラミング基礎 # [2] 問題文(含コード&リンク): # 2つの整数をキーボードから入力し、それらの最大公約数を表示する # プログラムを作成せよ。 # 最大公約数と、2つの数字を割り切る最大の整数のことである。 # 例えば12と18の最大公約数は6,24と48の最大公約数は24である。
599 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 10:01:52 ] >>598 % Prolog t598 :- write('最大公約数を求めます。一行にひとつ整数を入力してください : '), get_line(Line1),atom_to_terms(Line1,N1,_), get_line(Line2),atom_to_terms(Line2,N2,_), appendを使って最大公約数を求める(N1,N2,X), write_formatted('%tと%tの最大公約数は%tです\n',[N1,N2,X]). appendを使って最大公約数を求める(N1,N2,X) :- length(L1,N1), length(L2,N2), 最大公約数(L1,L2,[_],[_],LX), length(LX,X). appendを使って最大公約数を求める(L1,L2,L,X,X) :- not((append(L,_,L1),append(L,_,L2))),!. appendを使って最大公約数を求める(L1,L2,L,_,X) :- 割り切れる(L1,L), 割り切れる(L2,L), appendを使って最大公約数を求める(L1,L2,[_|L],L,X). appendを使って最大公約数を求める(L1,L2,L,Y,X) :- appendを使って最大公約数を求める(L1,L2,[_|L],Y,X). 割り切れる([],_) :- !. 割り切れる(L,DL) :- append(DL,L3,L), 割り切れる(L3,DL).
600 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 12:05:02 ] >>598 -- Haskell では Prelude に gcd が含まれている import Control.Monad (replicateM) main = replicateM 2 readLn >>= print . foldl1 gcd
601 名前:599 mailto:sage [2009/08/02(日) 15:07:41 ] >>598 >>599 間違っていました。 途中、'最大公約数'/5 という述語が副目標として登場しますが、 これは、'appendを使って最大公約数を求める'/5 の間違えです。 nojiriko.asia/prolog/t598.html の方を見て下さい。
602 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 18:47:48 ] pc12.2ch.net/test/read.cgi/tech/1153585095/918 # 所謂覆面算で # 英字一文字が一桁の数字(0-9)で表されるとき # one # + nine # + twenty # + fifty # = eighty # となる組み合わせを検索してください # 各行の先頭の文字は0以外です
603 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 18:50:25 ] >>602 % Prolog nojiriko.asia/prolog/t602.html
604 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 20:28:36 ] pc12.2ch.net/test/read.cgi/tech/1247438792/759 # [1] 授業単元:工学実験 # [2] 問題文(含コード&リンク): # kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9870.txt # # 課題内容: 組クラスを作成しなさい。組クラスは教員と学生からなる。 # 教員は1人で学生は最大40人とする。学籍番号で検索する機能をつけること。 # 学生には名前、住所、学籍番号(文字列型)という属性があり、教員には # 名前、住所、教員番号(文字列型)という属性があるとする。 # 教員と学生の共通部分をまとめたクラスを定義し、それを継承する形で # 教員クラスと学生クラスを定義せよ。 # それぞれの属性にはgetter、setter、表示関数を定義せよ。 # 継承した教員クラスで、名前を表示する関数では、「○○教授」、「○○助教授」 # などのように役職名を添えて表示する関数として、上書き定義せよ。 # これらの機能が正しく動作することを確認するmain関数(適当なサンプル)も # あわせて作ること。
605 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 06:36:08 ] pc12.2ch.net/test/read.cgi/tech/1247438792/777 # [1] 授業単元:プログラミング演習 # [2] 問題文(含コード&リンク): # ttp://dl1.getuploader.com/g/4a7538af-eda0-4179-9e58-2a304038400b/komekome1221/4/%E5%95%8F%E9%A1%8C%E5%88%86.txt
606 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 07:11:34 ] pc12.2ch.net/test/read.cgi/tech/1247438792/776 # [1] 授業単元:プログラミング演習 # [2] 問題文(含コード&リンク): # 以下の機能を持った関数を含むプログラムを作成せよ. # 1.正の整数n,rを読み込み,その組み合わせnCrを計算する関数を再帰呼び出しを用いて作成せよ. # 2.正の整数n,rを読み込み,その組み合わせnCrを計算する関数を再帰呼び出しを用いないで作成せよ.
607 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 07:20:42 ] >>606 [2] % Prolog 見かけ再帰を含みませんが、実はfor/3やconcat_atom/3は再帰なしには書けない・・・ t606_2(N,R,X) :- findall(N1,for(N,N1,R+1),L1), findall(N2,for(R,N2,1),L2), concat_atom(L1,'*',S1), concat_atom(L2,'*',S2), atom_to_term(S1,Term1,_), atom_to_term(S2,Term2,_), X is Term1 / Term2.
608 名前:607 mailto:sage [2009/08/03(月) 08:05:18 ] >>606 >>607 また違っていたようです。 t606_2(N,R,X) :- Y is N-R+1, findall(N1,for(N,N1,Y),L1), findall(N2,for(R,N2,1),L2), concat_atom(L1,'*',S1), concat_atom(L2,'*',S2), atom_to_term(S1,Term1,_), atom_to_term(S2,Term2,_), X is Term1 // Term2.
609 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 18:40:06 ] pc12.2ch.net/test/read.cgi/tech/1247438792/786 # [1] 授業単元: プログラミング実習 # [2] 問題文(含コード&リンク):台形公式により関数y=x^2とx軸によって # 挟まれる部分のx=0〜x=8までの範囲の面積を求めよ。 # 分割は4で計算せよ。
610 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 18:47:56 ] >>609 % Prolog nojiriko.asia/prolog/t609.html
611 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 20:56:19 ] >>602 -- Haskell で.総当たり import Data.List (permutations) t602 = [xs | xs@[e,f,g,h,i,n,o,t,w,y] <- permutations [0..9], o /= 0, n /= 0, t /= 0, f /= 0, e /= 0, a [o,n,e] + a [n,i,n,e] + a [t,w,e,n,t,y] + a [f,i,f,t,y] == a [e,i,g,h,t,y]] where a xs = foldl (\s i -> 10*s + i) 0 xs main = print $ head $ t602
612 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 21:18:14 ] >>606 -- Haskell で.foldl1 は末尾再帰だから許して comb n r | r == 0 = 1 | n == r = 1 | otherwise = comb (n-1) r + comb (n-1) (r-1) fact n = foldl1 (*) [1..n] comb' n r = fact n `div` (fact r * fact (n-r)) main = print $ comb' 4 2
613 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 08:59:20 ] pc12.2ch.net/test/read.cgi/tech/1247438792/794 # 【質問テンプレ】 # [1] 授業単元:アルゴリズムとデータ構造 # [2] 問題文(含コード&リンク):ハッシュ(チェイン法)を使ってkeyを検索し、 # 該当するものがあればそのdataを表示する。 # (実際には検索してkeyとdataを返すまでです) # 詳しくはこちらで ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9879.txt # kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9881.txt
614 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 09:02:27 ] >>613 % Prolog でハッシュといえば述語のこと。 t613(Key,Data) :- 'KeyAndData'(Key,Data).
615 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 12:35:12 ] pc12.2ch.net/test/read.cgi/tech/1247438792/812 # 続けて申し訳ありません # [1] 授業単元:プログラミング演習 # [2] 問題文(含コード&リンク): # # 引数に度(degree)をとるsin_degree関数を作成しなさい。 # math.hで宣言されているsin関数を使用せずに自作すること。
616 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 12:52:14 ] >>615 % Prolog sin_degree(_角度,X) :- R is (_角度 / 180) * 3.14159, sin_degree(1,20,R,1.0,0.0,X). sin_degree(M,N,_,_,X,X) :- M > N,!. sin_degree(M,N,R,K,Y,X) :- sin_degree(M,R,1,U), Y2 is Y + U * K, K2 is K * (-1), M2 is M + 2, sin_degree(M2,N,R,K2,Y2,X). sin_degree(0,R,X,X) :- !. sin_degree(N,R,Y,X) :- Y2 is (Y * R) / N, N2 is N - 1, sin_degree(N2,R,Y2,X).