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/
369 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 14:49:42 ] pc12.2ch.net/test/read.cgi/tech/1245853701/673 # [1] 授業単元: 構造体 # [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bi n/joyful/img/9688.txt
370 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 16:26:42 ] pc12.2ch.net/test/read.cgi/tech/1245853701/660 # [1] 授業単元:情報 # [2] 問題文(含コード&リンク): # パソコン甲子園 2008 予選問題 問7 ふしぎな虫 # www.pref.fukushima.jp/pc-concours/2009/03/pdf/2008yosen.pdf
371 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 16:28:07 ] >>370 % Prolog nojiriko.asia/prolog/t370.html
372 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 16:51:59 ] >>369 # 次の各プログラムを作成 # # 1.線分の長さを求める # -両端点の座標値(浮動小数点)を入力 # -線分の長さを計算、表示 # # 2.三角形の面積を求める # -3頂点の座標軸(浮動小数点)を入力 # -面積を計算、表示 # # 2では1つの点を原点に移動させてあとはS=1/2|ad-bc|でお願いします # # 補足でこれがありました # ◆ 平方根を求める関数 # # double型の関数 sqrt() を使います.仮引数もdouble型です. # # 例えばdouble型の変数 len の平方根を求める場合には,次のように呼び出 # します. # # sqrt(len)# 関数sqrt()を使用するソースプログラムをコンパイルするときには, # # gcc -lm ***.c # # のように,コンパイルオプション「-lm」が必要です. # # # # ・main関数の座標値読み込み部分を省略したものは以下の通りです
373 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 16:54:54 ] >>369 (1) % Prolog 線分の長さ(X1,Y1,X2,Y2,_線分の長さ) :- _線分の長さ is sqrt((X2-X1)^2 + (Y2-Y1)^2).
374 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 18:13:01 ] >>369 (2) % Prolog 三角形の面積(X1,Y1,X2,Y2,X3,Y3,_三角形の面積) :- 一角を原点へ移動(X1,Y1,X2,Y2,X3,Y3,0,0,X22,Y22,X33,Y33), _三角形の面積 is abs(X22 * Y33 - Y22 * X33) / 2. 一角を原点へ移動((X1,Y1,X2,Y2,X3,Y3,0,0,X22,Y22,X33,Y33) :- X22 is X2 - X1, Y22 is Y2 - Y1, X33 is X3 - X1, Y33 is Y3 - X1.
375 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 18:21:05 ] >>374 訂正 一角を原点へ移動((X1,Y1,X2,Y2,X3,Y3,0,0,X22,Y22,X33,Y33) :- X22 is X2 - X1, Y22 is Y2 - Y1, X33 is X3 - X1, Y33 is Y3 - Y1.
376 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 00:47:46 ] >>366-367 さん 回答ありがとうございます。しかし arc(a,b). arc(b,c). arc(b,d). arc(c,e). arc(e,d). arc(d,f). arc(d,e). member(X,[X|_]). member(X,[_|T]) :- member(X,T). seach(A,B,Log) :- search(A,B,[A],_逆順Log), reverse(_逆順Log,Log). seach(A,B,L1,[B|L1]) :- arc(A,B), \+ member(B,L1). search(A,B,L1,L) :- arc(A,C), \+ member(C,L1), search(C,B,[C|L1],L). と作って| ?- search(a, f, Path). と聞くとnoと出てしまいます・・・。 あと_逆順Logは普通にSとかに置き換えてもいいのですか?
377 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 03:30:34 ] >>376 seach と search とありますが,seach/4の定義はsearch/4だと思いますが、 単なる誤植でしょうか。 ?- listing(search). で正しく定義ができているか確認してください。 もしできていないなら、 \+member(B,L1) と \+member(C,L1) を not(member(B,L1)) not(member(C,L1)) に置き換えてみてください。 それから_逆順Log は S でも問題ありません。なぜ最後にreverseするのか わからない人が多いと思ったのでこの変数名を使いました。
378 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 06:57:09 ] >>350 (1) % Prolog :- op(300,fx,i). 複素数の割り算(A + iB,C + iD,X + iY) :- X is (A * C + B * D) / ( C ^ 2 + D ^ 2), Y is (B * C - A * D) / ( C ^ 2 + D ^ 2).
379 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 07:59:46 ] >>350 (1) 書き直し % Prolog :- op(300,fx,i). 複素数の割り算(A+iB,C+iD,X+iY) :- X is (A * C + B * D) / ( C ^ 2 + D ^ 2), Y is (B * C - A * D) / ( C ^ 2 + D ^ 2).
380 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 14:08:47 ] pc12.2ch.net/test/read.cgi/tech/1245853701/725 # [1] 授業単元: プログラミング # [2] 問題文(含コード&リンク): 整数 nissu をキー入力して、 # 1 月1 日から数えて nissu 日目が何月何日かを表示 # したい。
381 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 14:14:42 ] >>380 % Prolog t380 :- get_line(Line),atom_to_term(Line,Nissu,_), 'N日後は'(0,Nissu,2009/1/1,_年/_月/_日), write_formatted('%t月%t日\n',[_月,_日]). 'N日後は'(N,N,_年/_月/_日,_年/_月/_日). 'N日後は'(M,N,_年_1/_月_1/_日_1,_年/_月/_日) :- 前日・今日(_年_1/_月_1/_日_1,_年_2/_月_2/_日_2), M2 is M + 1, 'N日後は'(M2,N,_年_2/_月_2/_日_2,_年/_月/_日). 前日・今日(_前日の年 / 12 / 31,_年 / 1 / 1) :- 一つ違い(_前日の年,_年),!. 前日・今日(_年 / 2 / 29,_年 / 3 / 1) :- うるう年(_年),!. 前日・今日(_年 / 2 / 28,_年 / 3 / 1) :- \+(うるう年(_年)),!. 前日・今日(_年 / _前月 / 30,_年 / _月 / 1) :- 一つ違い(_前月,_月),member(_前月,[4,6,9,11]),!. 前日・今日(_年 / _前月 / 31,_年 / _月 / 1) :- 一つ違い(_前月,_月),member(_前月,[1,3,5,7,8,10,12]),!. 前日・今日(_年 / _月 / _前日,_年 / _月 / _日) :- 一つ違い(_前日,_日),!. うるう年(_年) :- 0 is _年 mod 400,! . うるう年(_年) :- 0 is _年 mod 100,!,fail. うるう年(_年) :- 0 is _年 mod 4,!. うるう年(_年) :- \+(0 is _年 mod 4),fail. 一つ違い(M,N) :- integer(M),!,N is M + 1 . 一つ違い(M,N) :- integer(N),!,M is N - 1 .
382 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 14:18:05 ] >>381 ちょっと読みづらかったか。 'N日後は'(N,N,_年/_月/_日,_年/_月/_日). 'N日後は'(M,N,_年_1/_月_1/_日_1,_年/_月/_日) :- 前日・今日(_年_1/_月_1/_日_1,_年_2/_月_2/_日_2), M2 is M + 1, 'N日後は'(M2,N,_年_2/_月_2/_日_2,_年/_月/_日).
383 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 14:21:40 ] >>381 もう一度訂正。バックトラックしてくると具合の悪いことになる。 'N日後は'(N,N,_年/_月/_日,_年/_月/_日) :- !. 'N日後は'(M,N,_年_1/_月_1/_日_1,_年/_月/_日) :- 前日・今日(_年_1/_月_1/_日_1,_年_2/_月_2/_日_2), M2 is M + 1, 'N日後は'(M2,N,_年_2/_月_2/_日_2,_年/_月/_日).
384 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 15:03:39 ] # pc12.2ch.net/test/read.cgi/tech/1232627790/904 # ・課題の内容 # TCP/IPプロトコルを用い、通信するプログラムを作成せよ。 # ・条件 # キーボードから文字列を1行入力し、それを送信するプログラム(tcp_snd1)と、 # それを受信するプログラム(tpc_rec1)の2つを作成せよ。 # tcp_snd1では、送信先の計算機の名前をプログラムの引数で指定できるようにせよ。 # tcp_rec1では、コネクションの要求あったら、コネクションを張り、 # 要求した計算機のIPアドレスを表示せよ。 # メッセージを受信するたびに、通信回数を[]で括って表示し、 # その後にメッセージを表示せよ。 # 空行が入力されたら、tcp_snd1もtcp_rec1の双方が終了するようにせよ。 # ポートとして、9000を利用せよ。
385 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 16:08:17 ] >>384 % Prolog nojiriko.asia/prolog/t384.html
386 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 17:29:44 ] pc12.2ch.net/test/read.cgi/tech/1245853701/732 # [1] 授業単元: プログラミングC # [2] 問題文(含コード&リンク): # キーボードから半角英数で文字列を入力し、英字については大文字を小文字に、小文字 を大文字にするプログラムを作成せよ。 # # 実行例 文字列入力 :AbCdEfG123 # 変換文字列 :aBcDeFg123
387 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 17:49:22 ] >>386 % Prolog t386 :- get_line(Line), atom_chars(Line,Chars), 大文字小文字変換(Chars,Chars2), atom_chars(Line2,Chars2), write_formatted('%t\n',[Line2]). 大文字小文字変換([],[]) :- !. 大文字小文字変換([A|R1],[B|R2]) :- A @>= 'A', A @=< 'Z',!, to_lower(A,B), 大文字小文字変換(R1,R2). 大文字小文字変換([A|R1],[B|R2]) :- A @>= a, A @=< z,!, to_upper(A,B), 大文字小文字変換(R1,R2). 大文字小文字変換([A|R1],[A|R2]) :- 大文字小文字変換(R1,R2).
388 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 18:08:35 ] pc12.2ch.net/test/read.cgi/tech/1245853701/733 # [1] 授業単元: プログラミングC # [2] 問題文(含コード&リンク): # キーボードから半角英数で文字列を入力し、これを数字(0→9)、 # 大文字(A→Z)、 # 小文字(a→z)の順に並べ替えるプログラムを作成せよ。 # ヒント:並べ替えアルゴリズムは、バブルソート(隣接交換法)を # 使うと簡単だろう。 # 文字列長はstrlen命令を使うとよい。みたいです。
389 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 18:11:42 ] >>388 % Prolog t388 :- get_line(Line), atom_chars(Line,Chars), バブルソート(Chars,_整列した文字ならび), atom_chars(Line2,_整列した文字ならび), write_formatted('%t\n',[Line2]). バブルソート(L,X) :- 整順が崩れるまで(L,L2), バブルソート(L2,X),!. バブルソート(L,L). 整順が崩れるまで([A],[A]) :- !,fail. 整順が崩れるまで([A,B|R1],[A|R2]) :- A @=< B, 整順が崩れるまで([B|R1],R2). 整順が崩れるまで([A,B|R1],[B,A|R1]) :- A @> B.
390 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 18:28:46 ] >>377 さん 誤植でした;; 無事出来ました ちなみに述語がmemberだけで出来ると 聞いたのですが出来るのでしょうか? 出来るとしたらどんな感じに なるのでしょうか?
391 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 20:35:12 ] >>390 member/2だけではうまくいかなかった。 member(A,B,L,[A,B]) :- member((A,B),L). member(A,B,L,[A|R1]) :- member((A,C),L),member(C,B,L,R1). ?- member(a,f,[(a,b),(b,c),(b,d),(c,e),(e,d),(d,f),(d,e)],S). ならうまくいくかな。
392 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 23:30:00 ] >>391 さん ヒントとしては ?- \+(member(a, [b,c])). yes となり rev2(L, R) :- rev2(L, [], R). rev2([], R, R). rev2([H|T], L, R) :- rev2(T, [H|L], R). みたいに rev1([], []). rev1([H|T], R) :- rev1(T, R1), append(R1, [H], R). appendを使わないようにしようって事です どうなんでしょうか?
393 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 04:01:54 ] pc12.2ch.net/test/read.cgi/tech/1245853701/762 # [1] 授業単元: 情報処理\u2160 # [2] 問題文: 乗算合同法で整数乱数を生成.。 # 区間(0.1)の一様にして、1以上、ある特定の整数の乱数を生成する。
394 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 04:06:06 ] >>393 % Prolog 乗算合同法による乱数発生(_初期値,Y,X) :- 乗算合同法(16087,_初期値,65535,Y,X). 乗算合同法(A,N,_法,N,X) :- X is N / _法. 乗算合同法(A,N,_法,Y,X) :- 乗算合同法演算(A,N,_法,M), 乗算合同法(A,M,_法,Y,X). 乗算合同法演算(A,N,_法,M) :- M is (A * N) mod _法.
395 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 04:11:39 ] >>392 >>367 がそれに当たるつもりなのですが。 ただLogが逆順に生成されますね。
396 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 06:38:43 ] >>395 さん 成る程、丁寧にありがとうございました
397 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 07:57:55 ] pc12.2ch.net/test/read.cgi/tech/1245853701/764 # [1] 授業単元:プログラミング入門 # [2] 問題文(含コード&リンク): # 問3:1週間の売り上げ一覧を表示するプログラムを作成せよ。 # 実行例 野菜の1週間の売り上げた合計数量と合計金額 # 合計 合計 # 種類 単価 月 火 水 木 金 土 日 数量 金額 # レタス 150 50 55 60 65 70 75 80 455 68250 # トマト 50 20 25 30 35 40 45 50 245 12250 # もやし 20 10 15 20 25 30 35 40 175 3500 # ナスビ 40 5 10 15 20 25 30 35 140 5600
398 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 11:24:22 ] >>397 % Prolog nojiriko.asia/prolog/t397.html
399 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 12:51:07 ] pc12.2ch.net/test/read.cgi/tech/1245853701/757 # 【質問テンプレ】 # [1] 授業単元:C言語 # [2] 問題文(含コード&リンク): 二次元配列を使って以下のファイルを読み込み、 # 同じように表示しなさい。 # 【test.dat】 # ** ** ** # ** ** ** # ** ** **
400 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 13:00:02 ] >>399 % Prolog t399 :- 二次元構造の読み込み('test.dat',_二次元構造), member(A,_二次元構造), concat_atom(L,' ',S), write_formatted('%t\n',[S]), fail; true. 二次元構造の読み込み(File,_二次元構造) :- open(File,Input), findall(L,(repeat,get_line(Input,X),(X=end_of_file,!,fail; split(X,[' '],L))),_二次元構造), close(Input),!.
401 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 13:04:19 ] >>399 訂正。 % Prolog t399 :- 二次元構造の読み込み('test.dat',_二次元構造), member(L,_二次元構造), concat_atom(L,' ',S), write_formatted('%t\n',[S]), fail; true. 二次元構造の読み込み(File,_二次元構造) :- open(File,Input), findall(L,(repeat,get_line(Input,X),(X=end_of_file,!,fail; split(X,[' '],L))),_二次元構造), close(Input),!.
402 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 13:46:35 ] >>399 もうひとつ違っていた。 open(File,read,Input), ですね。
403 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 19:00:09 ] pc12.2ch.net/test/read.cgi/tech/1245853701/786 # [1] 授業単元: C言語 # [2] 問題文(含コード&リンク): # kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9706.txt # [3] 環境 # 問題1 # テキストファイルからバイナリファイルの作成 # テキストファイルの内容は {14,17,18,21,23,25,31}と # {10, 12, 15, 16, 19, 27, 28}の二つ。 # これが書かれているテキストファイルをバイナリファイルにする。 # # 問題2 # 1で作ったバイナリファイルをあわせて # {10, 12, 14, 15, 16 17, 18, 19 21, 23, 25 27, 28, 31} の # バイナリファイルの作成
404 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 19:16:21 ] >>403 問題1 % Prolog t403_1(TextFile1,TextFile2,BinaryFile1,BinaryFile2) :- t403_1_1(TextFile1,BinaryFile1), t403_1_1(TextFile2,BinaryFile2). t403_1_1(TextFile1,BinaryFile1) :- open(TextFile1,read,Input), open(BinaryFile1,write,Output,[type(binary)]), get_line(Input,Line), split(Line,['{',',','}'],L), t403_1_2(Output,L), close(Input), close(Output). t403_1_2(Output,L) :- member(N,L), put_byte(Output,N), fail. t403_1_2(_,_).
405 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 19:18:55 ] >>403 問題1 書き直し % Prolog t403_1(TextFile1,TextFile2,BinaryFile1,BinaryFile2) :- t403_1_1(TextFile1,BinaryFile1), t403_1_1(TextFile2,BinaryFile2). t403_1_1(TextFile1,BinaryFile1) :- open(TextFile1,read,Input), open(BinaryFile1,write,Output,[type(binary)]), get_line(Input,Line), split(Line,['{',',','}'],L), t403_1_2(Output,L), close(Input), close(Output). t403_1_2(Output,L) :- member(N,L), put_byte(Output,N), fail. t403_1_2(_,_).
406 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 20:42:25 ] >>403 IO ばかりで正直あまり Haskell では書く気がしないな… import System.IO import Control.Exception (bracket) import qualified Data.ByteString as B t403_1 :: String -> IO () t403_1 fname = do b <- bracket (openFile fname ReadMode) hClose parse bracket (openFile fname WriteMode) hClose (flip B.hPut b) where parse :: Handle -> IO B.ByteString parse h = hGetLine h >>= \s -> return $ B.pack $ read ("["++s++"]") t403_2 :: String -> String -> String -> IO () t403_2 fname1 fname2 fname3 = do b1 <- bracket (openFile fname1 ReadMode) hClose B.hGetContents b2 <- bracket (openFile fname2 ReadMode) hClose B.hGetContents bracket (openFile fname3 WriteMode) hClose (flip B.hPut (B.sort (B.concat [b1,b2]))) main = t403_1 "input1" >> t403_1 "input2" >> t403_2 "input1" "input2" "output"
407 名前:デフォルトの名無しさん [2009/07/09(木) 04:03:35 ] pc12.2ch.net/test/read.cgi/tech/1232627790/921 # 正の数を入力し、入力した整数の1と # その数を除く約数の和を求めて表示するプログラムを作成しなさい。 # 15の約数は、1,3,5,15なので、1と15を除く約数の和は8となる。 # # お願いします。
408 名前:デフォルトの名無しさん [2009/07/09(木) 04:07:49 ] >>407 % Prolog t407(N,X) :- N1 is N-1,t407(N1,N,X). t407(1,_,0) :- !. t407(N1,N,X) :- 0 is N mod N1,!,N2 is N1-1,t407(N2,N,Y),X is N+Y. t407(N1,N,X) :- N2 is N1-1,t407(N2,N,X).
409 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 07:15:43 ] pc12.2ch.net/test/read.cgi/tech/1245853701/797 # [1] C言語を使って計算を簡略化する: # [2] XY平面上の3点P1(x1,y1)P2(x2,y2)P3(x3,y3)の座標を順に入力した時、 # 3点が同一直線上にあるかどうかを調べて # 結果を表示するプログラムを作成せよ。
410 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 07:28:11 ] >>409 % Prolog '3点が同一直線上にある'((X1,Y1),(X2,Y2),(X3,Y3)) :- U is (X3-X1) * (Y2-Y1), U is (X2-X1) * (Y3-Y1).
411 名前:デフォルトの名無しさん [2009/07/09(木) 09:11:18 ] >>407 (defun s (n) (do ((x 2 (1+ x)) (sum 0)) ((>= x n) sum) (if (= 0 (mod n x)) (setf sum (+ sum x)))))
412 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 18:52:46 ] pc12.2ch.net/test/read.cgi/tech/1245853701/822 # 何人かの学生の3教科(数学、国語、英語)の得点を2次元配列を用いて # 処理するプログラムを作る。 # # (1)科目別の最高点、最低点を表示する。 # (2)各学生の3教科の平均点を表示する。 # (3)各教科の平均点を表示する。 # # ただし Ctrl+zが押されるまで次々と整数値を読み込んでいくものとする。
413 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 19:32:25 ] >>412 -- Haskell import Data.List (transpose) main = do conn <- getContents let grades = map (map read . words) $ lines conn :: [[Int]] -- (1) print $ map maximum $ transpose grades print $ map minimum $ transpose grades -- (2) let sums = map sum $ grades print sums -- (3) print $ map ((/ 3) . fromIntegral) sums
414 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 19:36:57 ] >>412 % Prolog % テーマ findallを使った集約処理 t412(_各科目の最高点,_各科目の最低点,_各学生の3教科の平均点,_各科目の平均点) :- findall([A,B,C],(repeat,read(A),(A=end_of_file,!,fail;read(B),read(C))),Y), findall(AVG,(member(L,Y),findavg(A,member(A,L),AVG)),_各学生の3教科の平均点), 行列の転置(Y,Y2), findall((Max,Min),(member(L1,Y2),max(L1,Max),min(L1,Min)),_各科目の最高点と最低点), findall(AVG3,(member(L3,Y2),findavg(A,member(A,L3),AVG3)),_各科目の平均点).
415 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 19:42:53 ] >>414 訂正 % Prolog % テーマ findallを使った集約処理 t412(_各科目の最高点と最低点,_各学生の3教科の平均点,_各科目の平均点) :- findall([A,B,C],(repeat,read(A),(A=end_of_file,!,fail;read(B),read(C))),Y), findall(AVG,(member(L,Y),findavg(A,member(A,L),AVG)),_各学生の3教科の平均点), 行列の転置(Y,Y2), findall((Max,Min),(member(L1,Y2),max(L1,Max),min(L1,Min)),_各科目の最高点と最低点), findall(AVG3,(member(L3,Y2),findavg(A,member(A,L3),AVG3)),_各科目の平均点).
416 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 21:48:12 ] pc12.2ch.net/test/read.cgi/tech/1245853701/826 # [1] 授業単元: 宿題 # [2] 問題文(含コード&リンク): 整数を入力し、奇数か偶数かを判断するプログラム
417 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 21:58:45 ] >>416 % Prolog t416 :- read(N), 奇数・偶数判定(N,X), write_formatted('入力されたのは%tです\n',[X]). 奇数・偶数判定(N,奇数) :- 1 is N mod 2. 奇数・偶数判定(N,偶数) :- 0 is N mod 2.
418 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 22:03:10 ] >>417 % 仕様の中に「整数」を入力し、とありますからinteger/1で検査する必要は % ありそうですね。 t416 :- read(N), integer(N), 奇数・偶数判定(N,X), write_formatted('入力されたのは%tです\n',[X]),!. t416 :- write('正しい整数が得られませんでした\n'). 奇数・偶数判定(N,奇数) :- 1 is N mod 2. 奇数・偶数判定(N,偶数) :- 0 is N mod 2.
419 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 03:09:03 ] pc12.2ch.net/test/read.cgi/tech/1245853701/825 # 〔1〕授業単元:C言語 # 〔2〕問題文:kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9718.txt # 課題 I # コマンド引数に自分の姓と名を与え,そのまま表示するプログラムを作成せよ. # コマンド引数の数が少なかったり多かった場合は,標準エラー出力にエラー分を表示させること. # 課題 II # コマンド引数に任意の個数の整数を与え,その和を表示するプログラムを作成せよ. # コマンド引数の数が少なかった場合は,標準エラー出力にエラー分を表示させること. # また,コマンド引数に整数以外が与えられた場合にも,標準エラー出力にエラー分を表示させること.
420 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 03:33:50 ] >>419 % Prolog t419_1 :- user_parameters(L),split(L,[','],L1),length(L1,2),write_formatted('%t %t\n',L1),!. t419_1 :- tell(user_error),write(引数エラー),told. t419_2 :- user_parameters(L), split(L,[','],L1), length(L1,Len), 引数長さ検査(Len), 引数のすべてが整数(L1), sum(L1,Sum), write_formatted('引数に与えられた整数の合計は%tです\n',[Sum]). 引数の長さ検査(Len) :- Len > 0,!. 引数の長さ検査(Len) :- Len < 1,tell(user_error),write('引数がありません\n'),told,!,fail. 引数のすべてが整数([]) :- !. 引数のすべてが整数([N|R]) :- integer(N),引数のすべてが整数(R). 引数のすべてが整数([A|R]) :- tell(user_error),write('引数に整数でない%tがあります\n',[A]),told,!,fail. sum([],0). sum([N|R],X) :- sum(R,Y),X is N + Y.
421 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 03:42:18 ] pc12.2ch.net/test/read.cgi/tech/1245853701/878 # [1] 授業単元:プログラミング言語 # [2] 問題文(含コード&リンク): # char型配列xに格納された文字列を一文字ごとに空白を開けて逆順に出力する関数 # reverse_array(char[])を以下のように出力されるよう作成せよ。 # # 処理前:Tokyo # 関数reverse_array()を呼び出しました # 処理後:"o y k o T"
422 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 03:49:35 ] >>421 % Prolog t421(_文字ならび,_一文字ごとに空白を開けた逆順ならび) :- t421(_文字ならび,[],_一文字ごとに空白を開けた逆順ならび). t421([A],X,[A|X]) :- !. t421([A|R1],L,X) :- t421(R1,[A,' '|R1],X).
423 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 07:47:05 ] pc12.2ch.net/test/read.cgi/tech/1232627790/932 # 【 課題 】ボウリングのスコアを付けるプログラムを作成せよ。 # 各投球ごとの倒れたピン数を入力し、スコア一覧を出力。 # 【 形態 】1. Javaアプリケーション(main()で開始) # 【 GUI 】4. 制限なし # 【 期限 】本日、7/10 15:00 # 【 Ver 】Eclipse Version: 3.4.2 # 【 補足 】1つのメソッド10行以内、引数・戻り値を持つメソッド最低3つ作成のこと。
424 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 07:51:05 ] >>423 (バッチ処理版) % Prolog nojiriko.asia/prolog/t423.html
425 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 11:40:09 ] pc12.2ch.net/test/read.cgi/tech/1245853701/825 # 〔1〕授業単元:C言語 # 〔2〕問題文:kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9718.txt # 課題V # n から m までの整数の和を求めるプログラムを作成せよ.(n ≦ m) # 再帰呼び出しを行う関数 sum を作成して問題を解くこと. # 関数 sum は,引数を n, m とし,n から m までの和を返すもとのとする.
426 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 11:44:01 ] >>425 % Prolog 'n から m までの整数の和を求める'(N,N,N) :- !. 'n から m までの整数の和を求める'(N,M,_和) :- N < M, N2 is N + 1, 'n から m までの整数の和を求める'(N2,M,_和_2), _和 is N + _和_2.
427 名前:デフォルトの名無しさん [2009/07/10(金) 12:13:08 ] (defun sum (n m) (if (= n m) n (+ n (sum (1+ n) m))))
428 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 12:36:25 ] >>425 sum(N,M,Sum) :- integer_to_varlist(N,L1), integer_to_varlist(M,L2), integer_to_varlist(Sum,L3), sum_1(L1,L2,L3), integer_to_varlist(N,L1), integer_to_varlist(M,L2), integer_to_varlist(Sum,L3). sum_l(L,L,L) :- not(var(L)). sum_l(L1,L2,X) :- append(L1,Z,X),sum_l([_|L1],L2,Z). integer_to_varlist(N,L) :- integer(N),list(L),length(L,N). integer_to_varlist(N,L) :- integer(N),var(L),length(L,N). integer_to_varlist(N,L) :- var(N),list(L),length(L,N). integer_to_varlist(N,L) :- var(N),var(L).
429 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 12:43:22 ] >>426 さすがに冗長かな。 sum(N,M,Sum) :- integer_to_varlist(N,L1), integer_to_varlist(M,L2), integer_to_varlist(Sum,L3), sum_1(L1,L2,L3), integer_to_varlist(N,L1), integer_to_varlist(M,L2), integer_to_varlist(Sum,L3). sum_l(L,L,L) :- not(var(L)). sum_l(L1,L2,X) :- append(L1,Z,X),sum_l([_|L1],L2,Z). integer_to_varlist(N,L) :- var(N),var(L). integer_to_varlist(N,L) :- not((var(N),var(L))),length(L,N).
430 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 13:00:37 ] >>429 integer_to_varlist(N,L) :- var(N),var(L). integer_to_varlist(A,A) :- not(var(A)),A=[]. integer_to_varlist(L1,L2) :- not(var(L1)), not(var(L2)), L1=[N|R1], L2=[L|R2], integer_to_varlist(N,L), integer_to_varlist(R1,R2). integer_to_varlist(N,L) :- not((var(N),var(L))),length(L,N). integer_to_varlist/2は複雑になったがこれはユーティリティだから 構わない。これで sum(N,M,Sum) :- integer_to_varlist([N,M,Sum],[L1,L2,L3]), sum_l(L1,L2,L3), integer_to_varlist([N,M,Sum],[L1,L2,L3]). とすっきりする。
431 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 15:45:54 ] >>430 ?- sum(N,M,55). N = 55, M = 55; N = 1, M = 10; N = 9, M = 13; N = 27, M = 28; no. ?-
432 名前:デフォルトの名無しさん mailto:sage [2009/07/11(土) 03:58:23 ] pc12.2ch.net/test/read.cgi/tech/1245853701/901 # [1] 授業単元: C言語プログラミング演習 # [2] 問題文(含コード&リンク): プログラムを実行すると # 行列1: # 1,2,3 # 4,5,6 # 7,8,9 # 行列2: # 3,4,5 # 6,7,8 # 9,10,11 # と表示する。最後に行列1と行列2の積を計算し、以下のように表示 # するプログラム。 # [行列1と行列2の積は # ?,?,? # ?,?,? # ?,?,?]
433 名前:デフォルトの名無しさん mailto:sage [2009/07/11(土) 04:24:30 ] >>432 % Prolog t432 :- _行列1 = [[1,2,3],[4,5,6],[7,8,9]], _行列2 = [[3,4,5],[6,7,8],[9,10,11]], write('行列1:\n'),行列表示(_行列1), write('行列2:\n'),行列表示(_行列2), 行列の積(_行列1,_行列2,_行列3), write('行列1と行列2の積は\n'),行列表示(_行列3). 行列表示([]). 行列表示([_行|R]) :- concat_atom(_行,',',[_表示文字列]),write_formatted('%t\n',[_表示文字列]),行列表示(R). 行列の積(L1,L2,X) :- 行列の転置(L2,L3),行列の積の一(L1,L3,X). 行列の積の一([],_,[]) :- !. 行列の積の一([A|R1],L,[S1|R3]) :- 行列の積の二(A,L,S1),行列の積の一(R1,L,R3). 行列の積の二(_,[],[]) :- !. 行列の積の二(A,[B|R2],[C|R3]) :- 行列の積の三(A,B,C),行列の積の二(A,R2,R3). 行列の積の三([],[],0) :- !. 行列の積の三([A|R1],[B|R2],S) :- S1 is A * B,行列の積の三(R1,R2,S2),S is S1 + S2 . 行列の転置([],[],[]) :- !. 行列の転置([[A|R]|R1],[A|R2],[R|R3]) :- 行列の転置(R1,R2,R3) . 行列の転置([[]|_],[]) :- !. 行列の転置(L,[B|R1]) :- 行列の転置(L,B,R2),行列の転置(R2,R1),!.
434 名前:デフォルトの名無しさん mailto:sage [2009/07/11(土) 17:14:27 ] pc12.2ch.net/test/read.cgi/tech/1245853701/916 # 【質問テンプレ】 # [1] 授業単元:情報基礎B # [2] 問題文(含コード&リンク):(1) 平均、標準偏差 # (2) 得点の高い順の点数のリスト
435 名前:デフォルトの名無しさん mailto:sage [2009/07/11(土) 17:19:44 ] >>434 % Prolog t434 :- '10人分の試験の点数を読み取る'(L), 平均(L,_平均),標準偏差(L,_標準偏差), write_formatted('平均 : %t\n標準偏差 : %t\n',[_平均,_標準偏差]). 平均(L,M) :- length(L,N),平均(L,N,0.0,M). 平均([],N,S,M) :- M is S / N,!. 平均([A|R],N,S,M) :- S1 is S + A,平均(R,N,S1,M). 標準偏差(L,V) :- length(L,N),平均(L,M),標準偏差(L,N,M,0.0,V). 標準偏差([],N,M,S,V) :- V is sqrt(S / (N - 1)),!. 標準偏差([A|R],N,M,S,V) :- S1 is (A - M) ^ 2,S2 is S + S1,標準偏差(R,N,M,S2,V). '10人分の試験の点数を読み取る'(L) :- '10人分の試験の点数を読み取る'(1,L). !. '10人分の試験の点数を読み取る'(11,[]) :- !. '10人分の試験の点数を読み取る'(M,[I|R]) :- write_formatted(' %t: ',[M]), get_line(Atom), atom_to_term(Atom,I,_), M2 is M + 1, '10人分の試験の点数を読み取る'(M2,R).
436 名前:デフォルトの名無しさん mailto:sage [2009/07/11(土) 19:20:14 ] pc12.2ch.net/test/read.cgi/tech/1245853701/922 # [1] 授業単元:プログラミング入門 # [2] 問題文(含コード&リンク): # if文を使って、月数に応じてコメントを表示するプログラム(1月ならばwinter、 # 3月ならspringといった具合に)を作る。 # 月は1月\uff5e12月までなので、13月以上の数値を打ち込んだ場合はerrorと表示させること。
437 名前:デフォルトの名無しさん [2009/07/11(土) 20:47:08 ] # [1] 授業単元:プログラミング入門 # [2] 問題文(含コード&リンク): たとえば 3481 という数字(4桁/0含む)が与えられたとき 0 = 3 + 4 - 8 + 1 1 = 3 + 4 - 8 * -1 2 = -(3 + 4 - 8 - 1) 3 = 3 * 4 - 8 - 1 4 = (3 / (4 + 8))^-1 ... のように加減乗除のみで整数を順に造っていってください
438 名前:デフォルトの名無しさん mailto:sage [2009/07/11(土) 20:54:33 ] x^y は加減乗算ではないよ。
439 名前:デフォルトの名無しさん [2009/07/11(土) 21:09:05 ] 4 = (4 + 8) / (3 * 1)
440 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 04:14:13 ] pc12.2ch.net/test/read.cgi/tech/1245853701/929 # [1] 授業単元: C言語 # [2] 問題文(含コード&リンク): # 主語、目的語、述部が入ったデータファイルを読み込み、それらをランダムに # 組み合わせて生成した短文を20個ファイルに出力するプログラムの作成。 # 短文の構文は必ず、「(主語)は、(目的語)(述部)。」となるようにする。 # # 出力例:俺は、カレーが大好きだ。 # # データファイルは以下を使用すること。 # 主語: 俺 私 あなた 彼 彼女 先生 犬のポチ 猫のタマ ライオン # その人 政治家 ネズミ の12個 # 目的語: カレー ご飯 肉 授業 男 女 すごいもの アレ アンパン # お金 の10個 # 述部: が大好きだ が大嫌いだ を作った をなくした が欲しい # に全力を尽くす を新しいものに交換した ?なにそれ美味いの? # について深く考えた を捨てた に塩をふりかけた の11個
441 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 06:02:07 ] >>440 % Prolog (1/2) t440 :- get_lines('t440_1.txt',Lines), 構造定義(Lines), findall(_文,文(_文,[]),_文集), '20文を選択して表示'(_文集). '20文を選択して表示'(_文集) :- length(_文集,Len), Div is Len // 20, tell('t440_2.txt'), for(1,N,20), Nth is N * Div, list_nth(Nth,_文集,_選択文), write_formatted('%t%t%t%t%t\n',[_選択文]), N = 20, told.
442 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 06:03:56 ] >>440 % Prolog (2/2) 文(_文,R) :- 主語(_文,R1),後置部(R2,R3),目的語(R2,R3),述部(R3,R4),句点(R4,R). 後置部(L,R) :- 後置詞(L,R1),読点(R1,R). 後置詞(['は'|R],R). 読点(['、'|R],R). 句点(['。'|R],R). 構造定義(Lines) :- member(_行,Lines), split(_行,[':',':',' ',' '],[F|L2]), append(L3,[_],L2), 要素定義(F,L3), fail; true. 要素定義(F,L) :- member(A,L), P =.. [F,[A|R],R], assertz(P), fail; true.
443 名前:440 mailto:sage [2009/07/12(日) 06:11:44 ] >>440 訂正 write_formattedの表現に誤りがありました。 '20文を選択して表示'(_文集) :- length(_文集,Len), Div is Len // 20, tell('t440_2.txt'), for(1,N,20), Nth is N * Div, list_nth(Nth,_文集,_選択文), concat_atom(_選択文,_選択文文字列), write_formatted('%t\n',[_選択文文字列]), N = 20, told.
444 名前:443 mailto:sage [2009/07/12(日) 06:12:58 ] >>440 ではなくて >>442 の訂正でした。
445 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 06:20:53 ] >>440 % Prolog ここに書き直しました。 nojiriko.asia/prolog/t440.html
446 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 10:36:30 ] >>436 % Prolog nojiriko.asia/prolog/t436.html
447 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 13:52:15 ] pc12.2ch.net/test/read.cgi/tech/1245853701/923 # [1] 授業単元:プログラミング # [2] 問題文(含コード&リンク):下に示すように,最初に整数を読み込み, # その後,その個数だけ整数を読み込んでいき,そ # の合計と平均を表示するプログラムを作成せよ。 # 整数は何個ですか: 6 # No.1 : 65 # No.2 : 23 # No.3 : 47 # No.4 : 9 # No.5 : 153 # No.6 : 777 # 合計値: 1074 # 平均値: 179.00
448 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 14:06:09 ] >>447 % Prolog t447 :- write('整数は何個ですか: '), get_line(Line), atom_to_term(Line,N,_), 整数をn個読み込む(1,N,L), sum(L,Sum), avg(L,Avg), write('合計値: %t\n平均値: %t\n',[Sum,Avg]). 整数をn個読み込む(M,N,[]) :- M > N,!. 整数をn個読み込む(M,N,[_整数|R]) :- write_formatted('No.%t: ',[M]), get_line(Line), atom_to_term(Line,_整数,_), M2 is M + 1, 整数をn個読み込む(M2,N,R). sum([],0). sum([A|R],X) :- sum(R,Y),X is A + Y. avg(L,X) :- length(L,Len),Len > 0,sum(L,Sum),X is Sum / Len.
449 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 15:56:25 ] pc12.2ch.net/test/read.cgi/tech/1245853701/946 # 【質問テンプレ】 # [1] 授業単元 C言語 # [2] 問題文(含コード&リンク): # 二つのバイナリファイルの中身を比較して等しいか、等しくないかを # 比較して結果を返す関数を作る
450 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 15:58:28 ] >>449 % Prolog 二つのバイナリファイルの中身を比較(_ファイル1,_ファイル2,_診断) :- open(ファイル1,read,_ストリーム1,[type(binary)]), open(ファイル2,read,_ストリーム2,[type(binary)]), get_byte(_ストリーム1,A), get_byte(_ストリーム2,B), 二つのバイナリファイルの中身を比較(_ストリーム1,_ストリーム2,A,B,_診断), close(_ストリーム1), close(_ストリーム2). 二つのバイナリファイルの中身を比較(_,_,-1,-1,等しい) :- !. 二つのバイナリファイルの中身を比較(_,_,A,B,等しくない) :- not(A=B),!. 二つのバイナリファイルの中身を比較(_ストリーム1,_ストリーム2,A,A,_診断) :- get_byte(_ストリーム1,C), get_byte(_ストリーム2,D), 二つのバイナリファイルの中身を比較(_ストリーム1,_ストリーム2,C,D,_診断).
451 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 18:03:48 ] pc12.2ch.net/test/read.cgi/tech/1245853701/424 # kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9644.txt にある # 50コのデータを利用して # 最大値と最小値を取り出すプログラムを以下の1,2の関数を用いて2つ作れ # 1 return文を用いたケース # 2 グローバル変数を用いたケース # kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9644.txt の # ポインタは使用不可です #ファイル名はseiseki.txtでお願いします # 70 56 66 45 88 # 66 85 68 55 73 # 55 65 53 67 55 # 85 72 76 58 65 # 92 70 45 73 55 # 56 57 52 62 82 # 72 62 33 85 95 # 46 95 48 72 34 # 83 42 88 92 56 # 68 65 91 82 66
452 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 18:34:55 ] >>451 % Prolog 整数要素ファイルの最小値・最大値(_ファイル,_最小値,_最大値) :- get_chars(_ファイル,Chars), concat_atom(Chars,Atom), split(Atom,['\n',' '],L), ならびの中の最小値・最大値(L,A,A,_最小値,_最大値). ならびの中の最小値・最大値([],X,Y,X,Y) :- !. ならびの中の最小値・最大値([A|R],Min,Max,_最小値,_最大値) :- A < Min, ならびの中の最小値・最大値(R,A,Max,_最小値,_最大値). ならびの中の最小値・最大値([A|R],Min,Max,_最小値,_最大値) :- A > Max, ならびの中の最小値・最大値(R,Min,A,_最小値,_最大値). ならびの中の最小値・最大値([_|R],Min,Max,_最小値,_最大値) :- ならびの中の最小値・最大値(R,Min,Max,_最小値,_最大値).
453 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 18:36:57 ] >>452 また間違い。 整数要素ファイルの最小値・最大値(_ファイル,_最小値,_最大値) :- get_chars(_ファイル,Chars), concat_atom(Chars,Atom), split(Atom,['\n',' '],[A|L]), ならびの中の最小値・最大値(L,A,A,_最小値,_最大値).
454 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 18:48:58 ] >>447 StateT の練習 -- Haskell import Control.Monad.State import Data.Function (on) import System.IO (hFlush, stdout) t447 :: Int -> IO (Int,Double) t447 m = evalStateT (t447' m 1) [] where t447' :: Int -> Int -> StateT [Int] IO (Int,Double) t447' m i = do ls <- get liftIO $ (putStr $ "No." ++ show i ++ ": ") >> hFlush stdout s <- liftIO $ getLine modify (++[read s]) if i == m then get >>= return . sumAndAverage else t447' m (i+1) sumAndAverage :: [Int] -> (Int,Double) sumAndAverage = f . foldl (\(s,l) x -> (s+x,l+1)) (0,0) where f :: (Int,Int) -> (Int,Double) f (s,l) = (s, on (/) fromIntegral s l) main = t447 6 >>= putStrLn . toString where toString :: (Int,Double) -> String toString (s,a) = "sum: "++show s++"\naverage: "++show a
455 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 21:08:36 ] pc12.2ch.net/test/read.cgi/tech/1245853701/950 # 【質問テンプレ】 # [1] 授業単元: C言語 # [2] 問題文(含コード&リンク): # 下に示すように,要素数が7 でint 型の配列に読み込んだ全要素を逆順に # 並べ替えるプログラムを作成せよ. # # vx[ 0] : 58 # vx[ 1] : 32 # vx[ 2] : 17 # vx[ 3] : 46 # vx[ 4] : 22 # vx[ 5] : 73 # vx[ 6] : 69 # vx[ 0] = 69 # vx[ 1] = 73 # vx[ 2] = 22 # vx[ 3] = 46 # vx[ 4] = 17 # vx[ 5] = 32 # vx[ 6] = 58
456 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 21:14:39 ] >>455 % Prolog % ここでは定義された単位節の一引数だけソートして差し替えると問題としてみよう。 nojiriko.asia/prolog/t455.html
457 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 23:05:14 ] pc12.2ch.net/test/read.cgi/tech/1245853701/957 # [1] 授業単元: C言語 # [2] 問題文(含コード&リンク): # 100個の乱数を発生させ最大値、最小値、平均を求める # また最大値、最小値それぞれ何番目にあるか答えよ
458 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 23:31:59 ] >>457 % Prolog nojiriko.asia/prolog/t457.html
459 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 23:52:08 ] >>457 -- Haskell import System.Random (getStdRandom, random) import Control.Monad (replicateM) import Data.List (maximumBy, minimumBy) import Data.Function (on) main = do rands <- replicateM 100 (getStdRandom random :: IO Int) let i = zip [1..] rands putStrLn $ "(index, maximum) = " ++ show (maximumBy (compare `on` snd) i) putStrLn $ "(index, minimum) = " ++ show (minimumBy (compare `on` snd) i) putStrLn $ "average = " ++ show (on (/) fromIntegral (sum rands) 100)
460 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 05:00:41 ] pc12.2ch.net/test/read.cgi/tech/1245853701/960 # [1] 授業単元: プログラミング演習 # [2] 問題文(含コード&リンク): # 下に示すように,要素数が5 でint 型の配列に、5 人の学生の身長を読み込んで、その 平均 # 身長を求めるプログラムを作成せよ。 # 身長を入力してください # 1 番: 178 # 2 番: 175 # 3 番: 165 # 4 番: 179 # 5 番: 172 # 平均身長: 173.8
461 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 05:16:24 ] >>460 % Prolog % nojiriko.asia/prolog/t460.html '5 人の学生の身長を読み込んで、その平均身長を求める' :- '5 人の学生の身長を読み込んで、'(_身長ならび), sum(_身長ならび,_合計), _平均身長 is _合計 / 5, write_formatted('平均身長: %t\n',[_平均身長]), '5 人の学生の身長を読み込んで、'(_身長ならび) :- findall(_身長,(for(1,N番目,5),身長を得る(N番目,_身長)),_身長ならび). 身長を得る(N番目,_身長) :- write_formatted('%t 番: ',[N番目]), 数値を得る(_身長), _身長 > 0.0, _身長 < 220.0,!. 身長を得る(N番目,_身長) :- write('身長が適切な数値ではありませんでした。再入力が必要です\n'), 身長を得る(N番目,_身長). 数値を得る(_数値) :- get_line(_改行までの文字列), atom_to_term(_改行までの文字列,_数値,_), number(_数値).
462 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 05:38:06 ] >>461 入力検査の部分を修正。 '5 人の学生の身長を読み込んで、その平均身長を求める' :- '5 人の学生の身長を読み込んで、'(_身長ならび), sum(_身長ならび,_合計), _平均身長 is _合計 / 5, write_formatted('平均身長: %t\n',[_平均身長]), '5 人の学生の身長を読み込んで、'(_身長ならび) :- findall(_身長,(for(1,N番目,5),身長を得る(N番目,_身長)),_身長ならび). 身長を得る(N番目,_身長) :- write_formatted('%t 番: ',[N番目]), 数値を得る(_身長), 身長として適切な数値であるか検査する(_身長),!. 身長を得る(N番目,_身長) :- 身長を得る(N番目,_身長). 身長として適切な数値であるか検査する(_身長) :- _身長 > 0.0,_身長 < 230.0,!. 身長として適切な数値であるか検査する(_身長) :- write_formatted('%tは身長として適切な数値ではありませんでした。再入力が必要 です\n',[_身長]),fail. 数値を得る(_数値) :- get_line(_改行までの文字列), atom_to_term(_改行までの文字列,_数値,_), number(_数値).
463 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 05:40:58 ] >>462 もう一度書き直し。すみません。 '5 人の学生の身長を読み込んで、その平均身長を求める' :- '5 人の学生の身長を読み込んで、'(_身長ならび), sum(_身長ならび,_合計), _平均身長 is _合計 / 5, write_formatted('平均身長: %t\n',[_平均身長]), '5 人の学生の身長を読み込んで、'(_身長ならび) :- findall(_身長,(for(1,N番目,5),身長を得る(N番目,_身長)),_身長ならび). 身長を得る(N番目,_身長) :- write_formatted('%t 番: ',[N番目]), 数値を得る(_身長), 身長として適切な数値であるか検査する(_身長),!. 身長を得る(N番目,_身長) :- 身長を得る(N番目,_身長). 身長として適切な数値であるか検査する(_身長) :- _身長 > 0.0,_身長 < 230.0,!. 身長として適切な数値であるか検査する(_身長) :- write_formatted('%tは身長として適切な数値ではありませんでした。再入力が必要 です\n',[_身長]),fail. 数値を得る(_数値) :- get_line(_改行までの文字列), atom_to_term(_改行までの文字列,_数値,_), number(_数値).
464 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 05:43:49 ] >>463 コピペの際に誤って改行してしまいましたが、Prologでは write_formatted('%tは身長として適切な数値ではありませんでした。再入力が必要 です\n',[_身長]),fail. のように文字列のなかで改行すると構文エラーとなります。
465 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 09:32:01 ] pc12.2ch.net/test/read.cgi/tech/1245853701/949 # 【質問テンプレ】 # [1] 授業単元: C言語 # [2] 問題文(含コード&リンク): # kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9733.txt # 課題: # ・キーボードから正整数を入力し、その逆数を正確に計算し、ディスプレイに # 表示させる。(循環小数である場合には、循環部分が分かるように表示を工夫する。) # 内容: # n(nは任意の正整数)の逆数を正確に計算し、計算過程で出た商、余りを逐次 # 配列に入れていく。計算途中で同じ商、余りが出たら循環小数と判定でき、 # 0が出たら割り切れると判定できる。
466 名前:デフォルトの名無しさん [2009/07/13(月) 09:59:38 ] >>465 (do ((x (read) (read)) (a nil)) ((or (not (integerp x)) (<= x 0))) (setf a (cons x a)) (if (= x 1) (format t "~A ~S~%" x a) (format t "1/~A ~S~%" x a))) どうぞ
467 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 13:25:57 ] >>465 % Prolog nojiriko.asia/prolog/t465.html
468 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 13:42:10 ] >>465 % Prolog 逆数を正確に計算(_最大桁,_正整数,_逆数表示) :- 逆数表示(_最大桁,_正整数,[[0,1]],_逆数表示),!. 逆数表示(N,_,Y,X) :- N < 0,逆数表示(Y,[],X),!. 逆数表示(N,_整数,[[D,0]|Y],X) :- 逆数表示([[D,0]|Y],[],X),!. 逆数表示(N,_整数,[[_商,_剰余]|Y],X) :- _商2 is _剰余 // _整数, _剰余2 is (_剰余 mod _整数) * 10, append(L1,[[_商2,_剰余2]|L2],[[_商,_剰余]|Y]), append([[']...',_]|L1],[[_商2,_剰余2],['[',_]|L2],Z), 逆数表示(Z,[],X),!. 逆数表示(N,_整数,[[_商,_剰余]|Y],X) :- _整数 > _剰余, _剰余2 is _剰余 * 10, N2 is N - 1, 逆数表示(N2,_整数,[[0,_剰余2],[_商,_剰余]|Y],X),!. 逆数表示(N,_整数,[[_商,_剰余]|Y],X) :- _整数 < _剰余, _商2 is _剰余 // _整数, _剰余2 is (_剰余 mod _整数) * 10, N2 is N - 1, 逆数表示(N2,_整数,[[_商2,_剰余2],[_商,_剰余]|Y],X),!. 逆数表示([],[_|X],S) :- concat_atom(['0','.'|X],S),!. 逆数表示([[A|_]|R1],Y,S) :- 逆数表示(R1,[A|Y],S).
469 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 17:49:03 ] pc12.2ch.net/test/read.cgi/tech/1200175247/550 # [1] 授業単元: Ruby演習 [2] 問題文、kansai2channeler.hp.infoseek.co.jp/ c i-bin/joyful/img/9426.txt # Rubyの問題がわかりません 助けてください # # (1)曜日を表す英語と日本語との対応を表すハッシュwdayを定義しなさい # # p wday["sunday"] #=> "日曜日" # p wday["monday"] #=> "月曜日" # p wday["saturday"] #=> "土曜日" # # (2)ハッシュのメソッドを使って(1)のハッシュwdayのペアの数を数えなさい # # (3)eachメソッドと(1)のハッシュwdayを使って以下の文字列を出力させてくださ い。 # 「sunday」は日曜日のことです。 # 「monday」は月曜日のことです。 # # (4)ハッシュには配列の%wのようなものがありません。そこで、空白とタブと改行(正 規表現で定義するなら「/\uff3cs+/」)で区切られた文字列をハッシュに変換するメソ ッドstr2hashを定義してください。 # # p str2hash("bule 青 white 白\uff3cnred赤"); # #=> {"bule"=>"青", "white"=>"白", "red"=>"赤"}