1 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 09:57:19 ] 第二編も512Kbyte越えで終了しました。 前スレで未解決な課題は順次このスレにコピーします。
355 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 10:20:42 ] >>354 プログラムを使うためのもの見るか、理解するためのものと見るかという違いかな。 このスレの魅力は議論を排除してプログラムコードが並んでいるところだから、 ここではあまりやって欲しくはないが、興味深いテーマではあるね。
356 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 12:39:24 ] >>353 >私は、オペレータを知らないとそのプログラムの意味がわからない(APL的)ことは、 >関数型言語の欠点ではないかと思っています。 知らないとわからないのは、あたりまえです。 手続き型言語をひとつ覚えると他の手続き型言語のコードがなんとなくわかる 気がするのは前提とする知識がほとんど同じだからじゃないでしょうか。
357 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 13:32:59 ] pc12.2ch.net/test/read.cgi/tech/1260922392/22 # 次のゲームを考える # ・二人のプレイヤーA、Bにそれぞれ持ち点m点を与える # ・コイントスをして表が出たらAからBへ、裏が出たらBからAへ、1点渡す # ・コイントスをくりかえして先に持ち点がなくなったほうが負け # # 一個の自然数mをキーボード入力から読み取ってこのゲームをたとえば1000ゲーム繰り返して、 # 平均何回のコイントスで勝負がつくか、シュミレーションして求めるプログラムを作成してください。 # ただしコイントスを10000回繰り返しても勝負がつかない場合があるかもしれないので、それは回数オーバーとして別にカウントしてください。 #
358 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 13:35:56 ] pc12.2ch.net/test/read.cgi/tech/1200175247/797 # 質問です! # 文字列を受け取ってスペースと記号を削除した文字列を返すメソッドを作りたいんですが # どうすればいいでしょうか? # ちなみに条件はgsubメソッドをつかうこと # 記号は全角も半角も含む(","とか"。"とか"?"とか"?"とか) # どなたかお願いします #
359 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 16:49:25 ] >>358 % Prolog 文字列を受け取ってスペースと記号を削除した文字列を返す(_文字列,_スペースと記号を削除された文字列) :- atom_codes(_文字列,Codes), 文字コードならびからスペースと記号を削除する(Codes,Codes2), atom_codes(_スペースと記号を削除された文字列,Codes2). 文字コードならびからスペースと記号を削除する([],[]) :- !. 文字コードならびからスペースと記号を削除する([A|R1],X) :- 全角記号範囲(_コード下限,_コード上限), A >= _コード下限,A =< _コード上限, 文字コードならびからスペースと記号を削除する(R1,X),!. 文字コードならびからスペースと記号を削除する([A|R1],X) :- 半角記号範囲(_コード下限,_コード上限), A >= _コード下限,A =< _コード上限, 文字コードならびからスペースと記号を削除する(R1,X),!. 文字コードならびからスペースと記号を削除する([A|R1],[A|R2]) :- 文字コードならびからスペースと記号を削除する(R1,R2),!. 全角記号範囲(41376,41726). 半角記号範囲(32,47). 半角記号範囲(58,64). 半角記号範囲(91,96).
360 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 17:45:16 ] >>358 使用言語:J f=:-.&(ucp&',.?、。?') a=:ucp'a,い、b?ろ?c.は。' f a aいbろcは
361 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 18:02:12 ] >>358 使用言語:J NB.f=:-.&(ucp&',.?、。?')間違えたので、訂正します。ucpの後ろの&はいりませんでした。 f=:-.&(ucp',.?、。?') a=:ucp'a,い、b?ろ?c.は。' f a aいbろcは
362 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 18:19:02 ] pc12.2ch.net/test/read.cgi/tech/1263824755/31 # [1] プログラミング実習 # [2] ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10397.txt # # 以下に示すプログラムは、リストを操作するプログラムの一部である。この # プログラムに、リストの指定した位置(末尾以外)にノードを挿入する関数insert_nodeと、 # リストの指定した位置のノードを削除する関数delete_nodeを追加し、プログラムを完成させよ。 # insert_nodeは引数として挿入位置の情報(リストの何番目かという情報)とデータ(文字列)を受け取るものとする。 # また、挿入位置にもともとあったノードは、新しく挿入するノードの次の要素となるものとする。 # リストの先頭ノードとして挿入される場合も正しく動作するようにすること。 # delete_nodeは、引数として削除位置の情報を受け取る。リストの先頭のノード、 # 最後のノード、途中のノードが削除されたときにそれぞれ正しく動くようにすること。 # また、ノードが一個しかない場合も正しく動くようにすること。
363 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 18:21:50 ] pc12.2ch.net/test/read.cgi/tech/1248012902/755 # 【 課題 】インターネット書店を作成せよ # <条件> # ・画面サイズ→VGAとする # ・書籍は5ジャンル150冊 # ・1回の注文で5種類まで書籍を注文可能 # ・書籍の値段は20円単位とし、書籍の値段は自由 # ・書籍価格の合計金額の2%のポイントが与えられる。(ただし、ポイントは第一ジャンルは2倍、第二ジャンルは3倍になる) # ・注文終了後、注文確認画面で注文と支払い代金、獲得ポイントが確認できる。(支払い代金とは、注文図書の合計金額と消費税の和) # ・貯まったポイントを併用して支払いが可能(ポイントの価値は、1ポイント1円) # ・書籍の発送は電子メールの添付ファイルで行う(発送は出来なくてよい) # ・ソフトキーボードのみ使用可能 # # 【 補足 】実用的な画面インタフェースでは取消機能が必要であるが、ここでは取消機能については # 考えなくてよい。 # また、ユーザーは正しい操作を行うものと仮定して良い。
364 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 18:40:51 ] >>362 は >>351 と同じ問題でした。
365 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 19:14:59 ] >>357 % Prolog (その一) 一個の自然数mをキーボード入力から読み取ってこのゲームをたとえば1000ゲーム 繰り返して、平均何回のコイントスで勝負がつくか、シュミレーションして求める(_平 均コイントス数) :- 催促付き整数入力('A,Bが持つコイン数を入力してください :',M), このゲームをたとえば1000ゲーム繰り返して、平均何回のコイントスで勝負が つくか(1,M,_無効ゲーム数,_平均コイントス数),!. このゲームをたとえば1000ゲーム繰り返して、平均何回のコイントスで勝負がつく か(M,_無効ゲーム数,_平均コイントス数) :- このゲーム(1,M,_有効コイントス総数,_無効ゲーム数), \+(_無効ゲーム数 = 1000), _平均コイントス数 is _有効コイントス総数 / (1000 - _無効ゲーム数). このゲーム(N,_,0,0) :- N > 1000,!. このゲーム(N,M,_コイントス総数,_無効ゲーム数) :- コイントスシミュレーション(1,M,M,_トス数), N2 is N + 1, このゲーム(N,_,_コイントス総数の二,_無効ゲーム数), _コイントス総数 is _コイントス総数の二 + _トス数,!. このゲーム(N,M,_コイントス総数,_無効ゲーム数) :- N2 is N + 1, このゲーム(N,M,_コイントス総数,_無効ゲーム数の一), _無効ゲーム数 is _無効ゲーム数の一 + 1,!.
366 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 19:18:39 ] >>357 改行位置を間違えたので書き直し。 % Prolog (その一) 一個の自然数mをキーボード入力から読み取ってこのゲームをたとえば1000ゲームを繰り返して、平均何回のコイントスで勝負がつくか、シュミレーションして求める(_平均コイントス数) :- 催促付き整数入力('A,Bが持つコイン数を入力してください :',M), このゲームをたとえば1000ゲーム繰り返して、平均何回のコイントスで勝負がつくか(1,M,_無効ゲーム数,_平均コイントス数),!. このゲームをたとえば1000ゲーム繰り返して、平均何回のコイントスで勝負がつくか(M,_無効ゲーム数,_平均コイントス数) :- このゲーム(1,M,_有効コイントス総数,_無効ゲーム数), \+(_無効ゲーム数 = 1000), _平均コイントス数 is _有効コイントス総数 / (1000 - _無効ゲーム数). このゲーム(N,_,0,0) :- N > 1000,!. このゲーム(N,M,_コイントス総数,_無効ゲーム数) :- コイントスシミュレーション(1,M,M,_トス数), N2 is N + 1, このゲーム(N,_,_コイントス総数の二,_無効ゲーム数), _コイントス総数 is _コイントス総数の二 + _トス数,!. このゲーム(N,M,_コイントス総数,_無効ゲーム数) :- N2 is N + 1, このゲーム(N,M,_コイントス総数,_無効ゲーム数の一), _無効ゲーム数 is _無効ゲーム数の一 + 1,!.
367 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 19:20:20 ] >>357 % Prolog (その二) コイントスシミュレーション(N,_,_,_) :- N > 10000,!,fail. コイントスシミュレーション(N,A,B,N) :- コイントスをくりかえして先に持ち点がなくなったほうが負け(A,B,_),!. コイントスシミュレーション(N,A1,B1,X) :- コイントス(_表か裏か), 表が出たらAからBへ、裏が出たらBからAへ、1点渡す(表,A1,B1,A2,B2), N2 is N + 1, コイントスシミュレーション(N,A2,B2,X),!. 表が出たらAからBへ、裏が出たらBからAへ、1点渡す(表,A1,B1,A2,B2) :- A2 is A1 -1,B2 is B1 + 1,!. 表が出たらAからBへ、裏が出たらBからAへ、1点渡す(裏,A1,B1,A2,B2) :- B2 is B1 -1,A2 is A1 + 1,!. コイントスをくりかえして先に持ち点がなくなったほうが負け(0,_,'Aの負け'). コイントスをくりかえして先に持ち点がなくなったほうが負け(_,0,'Bの負け'). コイントス(_表か裏か) :- N is (random mod 2) + 1,list_nth(N,[表,裏],_表か裏か).
368 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 19:59:07 ] >>351 % Prolog 'リストの指定した位置(末尾以外)にノードを挿入する'(_指定した位置,Node,_リスト,_挿入されたリスト) :- insert_node(_指定した位置,Node,_リスト,_挿入されたリスト). insert_node(_,_,[],_) :- !,fail. insert_node(0,Node,_リスト,[Node|_リスト]) :- !. insert_node(_指定した位置,Node,[A|R1],[A|R2]) :- _指定した位置の一 is _指定した位置 - 1, insert_node(_指定した位置の一,Node,R1,R2). リストの指定した位置のノードを削除する(_指定した位置,_リスト,_指定した位置のノードが削除されたリスト) :- delete_node(_指定した位置,_リスト,_指定した位置のノードが削除されたリスト). delete_node(1,[_|R],R) :- !. delete_node(_指定した位置,[A|R1],[A|R2]) :- _指定した位置の一 is _指定した位置 - 1, delete_node(_指定した位置の一,R1,R2).
369 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 20:43:07 ] >>332 % Prolog 与えられた文字列の各文字を要素とする文字リストを作成し返す(_文字列,_各文字を要素とする文字リスト) :- make_clist(_文字列,_各文字を要素とする文字リスト). make_clist(_文字列,_各文字を要素とする文字リスト) :- sub_atom(_文字列,_,_文字列の長さ,_,_文字列), make_clist(0,_文字列の長さ,_文字列,_各文字を要素とする文字リスト). make_clist(N,N,_文字列,[]) :- !. make_clist(N,_文字列の長さ,_文字列,[_文字|R]) :- sub_atom(_文字列,N,1,_,_文字), N2 is N + 1, make_clist(N2,_文字列の長さ,_文字列,R). 与えられた文字列の各文字を要素とする文字リストの内容を印字する(_文字リスト) :- print_clist(_文字リスト). print_clist([]). print_clist([_文字|R]) :- put_char(_文字), print_clist(R).
370 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 22:14:25 ] >>333 % Prolog '与えられた二つのリストに含まれる文字の並びを辞書式順序(※)で比較し、第一のリストの方が小さければ負の値、大きければ正の値、等しければ0を返す'(_文字リスト_1,_文字リスト_2,_返り値) :- compare(_文字リスト_1,_文字リスト_2,_返り値). compare([],[],0). compare([],[_|_],-1). compare([_|_],[],1). compare([A|_],[B|_],-1) :- char_code(A,CodeA),CodeA >= 65,CodeA =< 90, char_code(B,CodeB),CodeB >= 97,CodeB =< 122, CodeC is CodeB - 32, CodeC >= CodeA,!. compare([A|_],[B|_],1) :- char_code(A,CodeA),CodeA >= 97,CodeA =< 122, char_code(B,CodeB),CodeB >= 65,CodeB =< 90, CodeC is CodeA - 32, CodeC =< CodeA,!. compare([A|_],[B|_],-1) :- A @< B,!. compare([A|_],[B|_],1) :- A @> B,!. compare([A|R1],[A|R2],X) :- compare(R1,R2,X).
371 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 22:36:28 ] >>334 % Prolog '与えられた文字リストの先頭から見ていき、要素が"<"なら自身と(あれば)直前の要素を、">"なら自身と(あれば)直後の要素を取り除く'(_文字リスト,_編集された文字リスト) :- edit(_文字リスト,_編集された文字リスト). edit([],[]). edit([_,'<'|R1],R2) :- edit(R1,R2),!. edit(['>',_|R1],R2) :- edit(R1,R2),!. edit([A|R1],[A|R2]) :- edit(R1,R2).
372 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 22:45:36 ] >>335 % Prolog の場合与えられたリストの変形(破壊代入)は使えない。 引数として三種のリストが与えられると、第一のリスト内に含まれる第二のリストに一致する部分を第三のリストに置き換える(_リスト_1,_リスト2,_リスト_3,L) :- replace(_リスト_1,_リスト_2,_リスト_3,L). replace(L1,L2,L3,L) :- append(L0,L2,L4,L1), append(L0,L3,L4,L).
373 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 22:58:22 ] >>336 % Prolog リストの変形では得られない点は同じ。 与えられた文字リスト中で複数回現れる文字を残して得られるリストを作成する(_文字リスト,_複数回現れる文字を残して得られるリスト) :- multiple(_文字リスト,_複数回現れる文字を残して得られるリスト). multiple(_文字リスト,_複数回現れる文字を残して得られるリスト) :- findall(_文字,(append(L1,[_文字|L2],_文字リスト),\+(member(_文字,L1)),member(_文字,L2)),_複数回現れる文字を残して得られるリスト).
374 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 23:01:33 ] pc12.2ch.net/test/read.cgi/tech/1263824755/33 # [1] プログラミング基礎実習 # [2] 文字列strを逆順に格納する関数("SEC"を受け取ったら"CES"とする) # void rev_string(char str[]){ /*…*/ } # を作成せよ。
375 名前:デフォルトの名無しさん mailto:sage [2010/01/21(木) 06:11:46 ] >>374 % Prolog 全然、説明的でない例 '文字列strを逆順に格納する'(_Str,Rstr) :- rev_string(Str,Rstr). rev_string(Str,Rstr) :- sub_atom(Str,_,Len,_,Str), findall(Char,(for(0,N,Len-1),sub_atom(Str,_,1,N,Char)),L), concat_atom(L,Rstr).
376 名前:デフォルトの名無しさん mailto:sage [2010/01/21(木) 06:17:12 ] >>374 % Prolog ふつうは '文字列strを逆順に格納する'(_Str,Rstr) :- rev_string(Str,Rstr). rev_string(Str,Rstr) :- atom_chars(Str,Chars), rev_string(Chars,[],RChars), atom_chars(Rstr,RChars). rev_string([],X,X). rev_string([A|R],Y,X) :- rev_string(R,[A|Y],X).
377 名前:デフォルトの名無しさん mailto:sage [2010/01/21(木) 06:25:13 ] pc12.2ch.net/test/read.cgi/tech/1263824755/38 # 長くなったのでうpロダお借りしました。 # # 問題1 # ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10399.txt # コピーさせていただきました nojiriko.asia/data/10399.txt
378 名前:デフォルトの名無しさん mailto:sage [2010/01/21(木) 06:28:56 ] pc12.2ch.net/test/read.cgi/tech/1263824755/38 # [1] 授業単元:応用プログラミング # [2] 問題文(含コード&リンク): # 直方体のデータが格納されたファイルを取り扱うプログラムを実装したい。 # プログラムリスト中に必要な関数を実装し、プログラムを完成させよ。尚、プログラムは以下の前提条件(1)−(4)を満たすよう作成せよ。 # (1)新たに大域変数やクラス、クラス内のメンバ変数を宣言してはならない。 #(2)main関数を含む既存の関数、クラス内のメンバ変数は一切変更してはならない。 #(3)直方体のデータが一行毎に、直方体の名前、幅、奥行き、高さ、の順に、スペース区切りで格納されているファイルを読み込める。 #(4)最大20個分のデータを読み込める。 #(5)初めに読み込むファイル名を入力した後、読み込んだデータ数を表示する。 #(6)(5)の表示後、以下に示す操作が繰り返し実行可能であること。 # 操作方法と出力の詳細については、実行例を参考にすること。 # (ア)データを読み込んだ順に表示する。 # (イ)体積、もしくは表面積の大きい順に表示する。 # (ウ)立方体、もしくは正四角柱のみを表示する。 # (エ)直方体を1個指定し、3辺の長さ(幅、奥行き、高さ)を指定した倍率だけ伸縮する。
379 名前:デフォルトの名無しさん mailto:sage [2010/01/21(木) 07:01:07 ] 昨日から悩んでいること。出題が # 与えられた文字列の各文字を要素とする文字リストを作成し返す関数make_clistと、与えられた文字リスト # の内容を印字する関数print_clistを作成せよ。 の場合、導入述語名は '与えられた文字列の各文字を要素とする文字リストを作成し返す関数make_clistと、与えられた文字リストの内容を印字する関数print_clistを作成せよ'(_文字リスト_1,_文字リスト_2,_返り値) :- make_list(_文字リスト_1,_文字リスト_2,_返り値). であるべきか、あるいは、>>370 のように、 '与えられた二つのリストに含まれる文字の並びを辞書式順序(※)で比較し、第一のリストの方が小さければ負の値、大きければ正の値、等しければ0を返す'(_文字リスト_1,_文字リスト_2,_返り値) :- compare(_文字リスト_1,_文字リスト_2,_返り値). とした方がよいか・・。 前の方の定義だと引数を持っていることが不自然かなと思い採用しなかった。
380 名前:デフォルトの名無しさん mailto:sage [2010/01/21(木) 13:02:50 ] >>379 二番目の定義が次の問題になってしまった。結果として意味不明。 make_clistがmake_listになってるところもあるし。>>379 はなかったことにしてください。
381 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 18:38:58 ] >>341 % Prolog '異なる自然数p,qと、もう一つの自然数dを入力する。d以下の自然数kのうちで、k=mp+nqと表すことの出来るもの(m,nは自然数)を小さい順に表示し、最後にその個数を表示する' :- '異なる自然数p,qと、もう一つの自然数dを入力する'(_p,_q,_d), findall(K,'d以下の自然数kのうちで、k=mp+nqと表すことの出来るもの(m,nは自然数)を小さい順に集め'(_p,_q,_d,L), concat_atom(L,' ',S), write_formatted('%t\n',[S]), length(L,_その個数), write_formatted('合計で%t個あります\n',[_その個数]),!. '異なる自然数p,qと、もう一つの自然数dを入力する'(_p,_q,_d) :- get_line(Line), split(Line,[' '],[_p,_q,_d]),!. 'd以下の自然数kのうちで、k=mp+nqと表すことの出来るもの(m,nは自然数)を小さい順に集め'(_p,_q,_d,_kならび) :- findall(N,for(0,N,10),L1), findall(_k,(for(0,_k,_d),順列(L1,2,[_m,_n]),'d以下の自然数kのうちで、k=mp+nqと表すことの出来るもの'(_p,_q,_d,_m,_n,_k)),_kならび),!. 'd以下の自然数kのうちで、k=mp+nqと表すことの出来るもの'(_p,_q,_d,_m,_n,_k) :- _k is _p * _m + _q * _n, _k =< _d,!.
382 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 20:06:16 ] >>381 訂正 % Prolog '異なる自然数p,qと、もう一つの自然数dを入力する。d以下の自然数kのうちで、k=mp+nqと表すことの出来るもの(m,nは自然数)を小さい順に表示し、最後にその個数を表示する' :- '異なる自然数p,qと、もう一つの自然数dを入力する'(_p,_q,_d), 'd以下の自然数kのうちで、k=mp+nqと表すことの出来るもの(m,nは自然数)を小さい順に集め'(_p,_q,_d,L), '表示し'(L), 最後にその個数を表示する(L),!. 表示し(L) :- concat_atom(L,' ',S), write_formatted('%t\n',[S]),!. 最後にその個数を表示する(L) :- length(L,_その個数), write_formatted('合計で%t個あります\n',[_その個数]),!. '異なる自然数p,qと、もう一つの自然数dを入力する'(_p,_q,_d) :- get_line(Line), split(Line,[' '],[_p,_q,_d]),!. 'd以下の自然数kのうちで、k=mp+nqと表すことの出来るもの(m,nは自然数)を小さい順に集め'(_p,_q,_d,_kならび) :- findall(N,for(0,N,10),L1), findall(_k,(for(0,_k,_d),順列(L1,2,[_m,_n]),'d以下の自然数kのうちで、k=mp+nqと表すことの出来るもの'(_p,_q,_d,_m,_n,_k)),_kならび),!. 'd以下の自然数kのうちで、k=mp+nqと表すことの出来るもの'(_p,_q,_d,_m,_n,_k) :- _k is _p * _m + _q * _n, _k =< _d,!.
383 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 20:10:32 ] pc12.2ch.net/test/read.cgi/tech/1248012902/771 # 【 課題 】 # サーバとクライアントでの間で文字列を送り合うプログラムをつくれ。 # ただし、以下の条件を満たすようにすること。 # アドレス、ポート、名前、文字列はキーボード入力し、お互いに自由に指定できるようにする。 # クライアントで quit が入力された場合、クライアントは接続を切りプログラムを終了し、 # サーバは接続が切られたら、次のクライアントの接続を待つ # サーバで quit が入力された場合、サーバは接続を切り、次のクライアントの接続を待ち、 # クライアントは接続が切られたらプログラムを終了する # エンターキーのみが入力された場合は、文字列を送らずもう一度文字列を入力させて、 # その文字列を送るようにする。
384 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 20:13:21 ] pc12.2ch.net/test/read.cgi/tech/1263824755/74 # [1] 授業単元:プロトタイプ宣言 # [2] 問題文(含コード&リンク):『私は○○です』と表示する関数を作成して # main関数でそれを三回呼び出して、画面に三回出力プログラムを作成せよ。 # 表示のための関数の名前は『display_name』とせよ #
385 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 20:19:16 ] >>384 % Prolog programがmainにあたる。 display_name :- write('私は○○です\n'). program :- for(1,N,3),display_name,N=3,halt.
386 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 21:09:18 ] >>384 このプログラムのドコが「説明を論理式で書き表すことができるならば、 その論理式がすなわちプログラムである」のだろうか。
387 名前:386 mailto:sage [2010/01/22(金) 23:43:35 ] アンカミス X:>>384 --> O:>>385
388 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 03:44:26 ] pc12.2ch.net/test/read.cgi/tech/1263824755/77 # [1] 授業単元:プログラミング実習 # [2] 問題文:クラスタリングk-means法 # 1、初期値として、クラスタ数および初期のデータ分割を与える。 # 2、データ分割に基づき各分割の重心を求める。 # さらに、重心と各事例データとの距離を求める # 3、各事例を最も近いクラスタに割り当てる。 # 4、上記の割り当てが前回と同じであれば終了。 # 更新があれば2に戻る
389 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 03:51:44 ] pc12.2ch.net/test/read.cgi/tech/1263824755/79 # [1] 授業単元:応用プログラミング # [2] 問題文(含コード&リンク): # ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10409.txt # # 直方体のデータが格納されたファイルを取り扱うプログラムを実装したい。 # プログラムリスト中に必要な関数を実装し、プログラムを完成させよ。尚、プログラムは以下の前提条件(1)−(4)を満たすよう作成せよ。 # (1)新たに大域変数やクラス、クラス内のメンバ変数を宣言してはならない。 # (2)main関数を含む既存の関数、クラス内のメンバ変数は一切変更してはならない。 # (3)直方体のデータが一行毎に、直方体の名前、幅、奥行き、高さ、の順に、スペース区切りで格納されているファイルを読み込める。 # (4)最大20個分のデータを読み込める。 # (5)初めに読み込むファイル名を入力した後、読み込んだデータ数を表示する。 # (6)(5)の表示後、以下に示す操作が繰り返し実行可能であること。 # 操作方法と出力の詳細については、実行例を参考にすること。 # (ア)データを読み込んだ順に表示する。 # (イ)体積、もしくは表面積の大きい順に表示する。 # (ウ)立方体、もしくは正四角柱のみを表示する。 # (エ)直方体を1個指定し、3辺の長さ(幅、奥行き、高さ)を指定した倍率だけ伸縮する。
390 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 03:59:06 ] >>386 >>387 >>382 の方ではなくて? これは結構苦闘してる。 >>385 は「説明を論理式で書き表すことができるならば、その論理式がすなわちプログラムである」の 意識の全くないプログラムだけど。題意もつかめなかった。
391 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 04:11:07 ] >>386 >>385 は # prolog -e 私は○○です.pro 私の名前は○○です # と表示されるためには、mainではなく、述語名がprogramである必要が あることを示すために書いたコードです。
392 名前:391 mailto:sage [2010/01/23(土) 04:33:07 ] すみません。私の名前は○○ですを3回繰り返すのを忘れました。
393 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 04:53:45 ] >>384 % Prolog この問題は編集を余儀なくされました。もっと素直な表現がありそう。 program :- 『私は○○です』と画面に表示する関数display_nameを三回呼び出して出力する, 終了. 『私は○○です』と画面に表示する関数display_nameを三回呼び出して出力する :- display_name, display_name, display_name. display_name :- write('私は私は○○です\n'). 終了 :- halt.
394 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 05:00:40 ] --lua function display_name() print "私は私は○○です" end function main() display_name() display_name() display_name() end main()
395 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 05:01:31 ] >>379 でそれに関することを書きたかったのですが、 ># [2] 問題文(含コード&リンク):『私は○○です』と表示する関数を作成して ># main関数でそれを三回呼び出して、画面に三回出力プログラムを作成せよ。 ># 表示のための関数の名前は『display_name』とせよ 「関数を作成して」あたりを切り落としたくないのですが、述語名に取り込む 方法が今のところ見つからない。
396 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 05:11:05 ] function display_name(name) print("私は私は"..name.."です") end function main() name=io.read() display_name(name) name=io.read() display_name(name) name=io.read() display_name(name) end main()
397 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 07:44:33 ] >>395 これではだめかいwww program :- 『私は○○です』と表示する関数を作成してmain関数でそれを三回呼び出して、画 面に三回出力プログラムを作成せよ . 『私は○○です』と表示する関数を作成してmain関数でそれを三回呼び出して、画面に 三回出力プログラムを作成せよ :- 『私は○○です』と表示する関数を作成して , main. 『私は○○です』と表示する関数を作成して :- assertz((display_name :- write('私は○○です\n'))). main :- display_name,display_name,display_name.
398 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 09:03:32 ] >>389 の kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10409.txt には大量の実行例とデータが載っています。2レスに分けて掲載します。 # [実行例] # ファイル名を入力して下さい => data.txt # 5個のデータを読み込みました. # 1: 入力順に表示 2: 整列 3: 探索 4: 拡大・縮小 0: 終了 # 何をしますか? => 1 # No. Name Width Depth Height Volume Area # [ 1] A 1 2 3 6 22 # [ 2] B 3 3 3 27 54 # [ 3] C 3 2 1 6 22 # [ 4] D 2 2 2 8 24 # [ 5] E 5 1 5 25 70 # 1: 入力順に表示 2: 整列 3: 探索 4: 拡大・縮小 0: 終了 # 何をしますか? => 1 # 何順に整列しますか?(0:体積 1:表面積) => 0 # No. Name Width Depth Height Volume Area # [ 2] B 3 3 3 27 54 # [ 5] E 5 1 5 25 70 # [ 4] D 2 2 2 8 24 # [ 1] A 1 2 3 6 22 # [ 3] C 3 2 1 6 22
399 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 09:04:22 ] # 1: 入力順に表示 2: 整列 3: 探索 4: 拡大・縮小 0: 終了 # 何をしますか? => 3 # 何を探索しますか?(0:体積 1:表面積) => 1 # No. Name Width Depth Height Volume Area # [ 2] B 3 3 3 27 54 # [ 4] D 2 2 2 8 24 # [ 5] E 5 1 5 25 70 # 1: 入力順に表示 2: 整列 3: 探索 4: 拡大・縮小 0: 終了 # 何をしますか? => 4 # どの直方体ですか?(1〜5) => 1 # 何倍しますか? => 1.5 # 1: 入力順に表示 2: 整列 3: 探索 4: 拡大・縮小 0: 終了 # 何をしますか? => 1 # No. Name Width Depth Height Volume Area # [ 1] A 1.5 3 4.5 20.25 49.5 # [ 2] B 3 3 3 27 54 # [ 3] C 3 2 1 6 22 # [ 4] D 2 2 2 8 24 # [ 5] E 5 1 5 25 70 # 1: 入力順に表示 2: 整列 3: 探索 4: 拡大・縮小 0: 終了 # 何をしますか? => 0 # 終了します.
400 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 09:06:12 ] # データファイル # A 1 2 3 # B 3 3 3 # C 3 2 1 # D 2 2 2 # E 5 1 5
401 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 09:08:27 ] >>384 使用言語:J display_name=:[: smoutput '私は○○です。'"_ main=:display_name^:(3) main '' 私は○○です。 私は○○です。 私は○○です。
402 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 16:25:45 ] pc12.2ch.net/test/read.cgi/tech/1263824755/83 # [1]プログラミング演習(大学専門過程演習授業) # [2] コマンドライン引数で与えられたテキストファイルを読み込み # 空行でなければ、その行に含まれているスペース、タブを # 除去したものを標準出力するプログラム。但し英数字と"_"で # 構成される文字列同士の間には一つのスペースは残す。 # ",'で囲まれた部分に関してはスペース、タブはそのまま残す # "で囲まれた部分について最後の文字が¥であってはならない。 # 'で囲まれた部分について最後の文字が¥であってはならない。 # (テキストファイルの空行と余計な空白/タブを除去する # プログラムでクオテーションに配慮したもの)
403 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 23:22:54 ] pc12.2ch.net/test/read.cgi/tech/1263824755/91 # [1] 授業単元:情報処理 # [2] 問題文: # # 問1 キーボードから3個の実数(整数でない)値を1行に1組として計5組入力し、 # ファイル(ファイル名data1.txt)に保存する。 # # 問2 # 問1で作ったファイルから実数値を読み込み、総合計と各組の実数の平均を求める # ただし、ファイルに書かれている組の数は不明とする。
404 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 06:23:46 ] pc12.2ch.net/test/read.cgi/tech/1263824755/93 # [1] 授業単元:プロトタイプ宣言 # [2] 問題文(含コード&リンク): # 次の式を以下の条件(値)に基づいて計算.表示するプログラムを作成せよ。ただし式は簡単化せずそのままプログラムすることとして、更に表示するときは計算の答えと合� 錣擦鴇魴�値)も表示して分かりやすくせよ。 # # 計算する式 # {(a+b)c-a(b-c)}/{(c/b)a+abc-ca} # # 条件1 # a=3 b=4 c=2 # a=3 b=4.3 c=2.5 # a=32.6 b=57.82 c=2.543 # # この問題を、 # 式の分だけを関数化した場合 # 式と出力部分を関数化した場合 # の2つの場合でプログラムを作成せよ
405 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 06:24:41 ] pc12.2ch.net/test/read.cgi/tech/1263824755/94 # [1] C # [2] # 反復列 x_n+1=a*x_n(1-x_n),0<=a<=4,0<=x<=1 # に対して、x_nが1周期(不動点)、2周期、4周期、8周期、16周期 # をもつaの範囲について、プログラムを作成して確かめよ。 # ※ # ○周期というのはaがある値のとき、○個の解で振動するという意味です※
406 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 06:28:27 ] pc12.2ch.net/test/read.cgi/tech/1263824755/95 # [1] 授業単元: プログラミング演習 # [2] 問題文(含コード&リンク):ime.nu/www.acm-japan.org/past-icpc/domestic2008/problems/all_ja.html # # 等しい合計点 # # 太郎と花子はそれぞれカードを何枚か持っている.各カードには点数が書かれている. # 太郎のカードと花子のカードを 1 枚ずつ交換して,それぞれの持つカードの合計点数が等しくなるようにしたい. # どのカードとどのカードを交換したらよいか. # # ただし,カードを交換しなくても合計点数が等しい場合でも,必ずカードの交換を行うものとする.
407 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 07:02:19 ] pc12.2ch.net/test/read.cgi/tech/1248012902/778 # 【 課題 】1.任意のWEBページからime.nu/ で始まるハイパーリンクを抽出するプログラムの作成 # ime.nu/rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/901.java # 2.任意のWEBページ10ページに含まれる単語のうち,上位10位の単語リストとその出現頻度 # ime.nu/rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/903.java # 【 形態 】1. Javaアプリケーション(main()で開始) # 【 GUI 】制限なし # 【 期限 】1/25 # 【 Ver 】1.6.0_14 # 【 補足 】1.に関してはプログラムはあっていると思うのですがなぜか実行 # できないので、実行できたら結果をコピペで教えてもらえたら嬉しいです # 2.に関しては実行結果があるのですが、上から多い順に並んでいます # プログラムのどの部分でその並べ替えを行っているのか、またどんな # アルゴリズムを用いて並べ替えているのかを教えてもらえたら嬉しいです
408 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 12:47:28 ] pc12.2ch.net/test/read.cgi/tech/1263824755/102 # [1] 授業単元:プログラミング演習 # [2] 問題文(含コード&リンク):ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10419.zip # # ●問2.リストの一部を取り除く関数 # # 与えられた文字リストの先頭から見ていき、要素が'<'なら自身と(あれば)直前の要素を、'>'なら自身 # と(あれば)直後の要素を取り除く関数editを作成せよ。 # editは与えられたリスト自体を変形し、変形後のリストを返す。 # # ●問3.いずれか一方のリストに含まれる要素からなるリストを返す関数 # # 引数として二種の文字リストが与えられると、いずれか一方のリストにのみ含まれる 要素を持つリストを新たに作成し返す関数exclusiveを作成せよ。 #
409 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 16:43:52 ] >>408 問2 使用言語:J edit=:monad define r=.y#~-.(+._1&|.)(<'>')=y r#~-.(+.1&|.)(<'<')=r ) ]C=:;/'a<bcd>ef>ghi' +-+-+-+-+-+-+-+-+-+-+-+-+ |a|<|b|c|d|>|e|f|>|g|h|i| +-+-+-+-+-+-+-+-+-+-+-+-+ edit C +-+-+-+-+-+-+ |b|c|d|f|h|i| +-+-+-+-+-+-+
410 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 16:50:03 ] >>408 問3 使用言語:J exclusive=:dyad def '(x -. y) , y -. x' ]A=:;/'abcdef' +-+-+-+-+-+-+ |a|b|c|d|e|f| +-+-+-+-+-+-+ ]B=:;/'defghi' +-+-+-+-+-+-+ |d|e|f|g|h|i| +-+-+-+-+-+-+ A exclusive B +-+-+-+-+-+-+ |a|b|c|g|h|i| +-+-+-+-+-+-+
411 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 20:46:43 ] pc12.2ch.net/test/read.cgi/tech/1263824755/103 # [1] 授業単元:Cプログラミング演習2 # [2] 問題文(含コード&リンク):ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10420.txt # (1) 指定した10 個の整数のうち,指定した数で割り切れる整数の個数を求めるプログラムを作成せよ. # 以下の関数を利用すること. # int div_enable(int *in, int num, int divisor) # in 複数の整数値が格納された配列の(先頭)ポインタ # num 入力値の数 # divisor 割り切れるかどうかの判定に使う除数 # 戻り値 入力値のうち, divisor で割り切れる整数の数 # 入力に関して # キーボードから整数(被除数用)をスペース1つずつ空けて10 個入力して改行する.次に除数用 # の自然数を1 つ入力し,改行する.この一連の入力時,例題や解答例のような入力を促す文字 # 等は決して表示しないこと. # 出力に関して # 割り切れる整数の個数を数値のみ (+改行)を出力する.指定した数値・改行以外の文字等の出 # 力は一切行わないこと.
412 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 21:21:01 ] >>411 使用言語:J div_enable=: dyad def '+/0=x|y' ]in=:>:i.10 1 2 3 4 5 6 7 8 9 10 3 div_enable in 3
413 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 05:35:28 ] pc12.2ch.net/test/read.cgi/tech/1263824755/103 # [1] 授業単元:Cプログラミング演習2 # [2] 問題文(含コード&リンク):ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10420.txt # (2) 2 つの4×4 行列を2 次元配列に格納し,それらの積を求めるプログラムを作成せよ.以下の関数を # 利用すること. # void mult_array(int a0[4][4], int a1[4][4], int result[4][4]) # a0,a1 入力された行列の値が格納された2 次元配列のポインタ # result 演算結果の行列の値が格納された2 次元配列のポインタ # 戻り値 なし # 入力に関して # キーボードからまず,1 つめの行列の1 行目の4 つの整数をスペース1 つ開けて1 行で入力し, # 改行する.以下同様に1 つめの行列の2 行目,3 行目,4 行目,2 つめの行列の1・・・4 行目 # を入力する.この一連の入力時,入力を促す文字等は決して表示しないこと. # 出力に関して # 1行目に結果の行列の1 行目をスペース1 つあけて特に整形せず数値のみ出力(+改行),以下同 # 様に2 行目,3 行目,4 行目を特に整形せず数値のみ出力する.指定した数値・改行以外の文 # 字等の出力は一切行わないこと.
414 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 05:37:43 ] pc12.2ch.net/test/read.cgi/tech/1263824755/103 # [1] 授業単元:Cプログラミング演習2 # [2] 問題文(含コード&リンク):ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10420.txt # # (3) 平均値と中央値を求める関数を作成し,その関数を使用して平均値と中央値を出力するプログラム # を作成せよ.関数は下記の通りとする. # int median(int *in, int num) # in 複数の整数値が格納された配列の(先頭)ポインタ # num 入力値の数 # 戻り値 中央値 # int avg (int *in, int num) # in 複数の整数値が格納された配列の(先頭)ポインタ # num 入力値の数 # 戻り値 平均値(四捨五入した整数値, 負の場合丸め方は任意) # 入力に関して # キーボードから入力する整数の個数を入力し(最大で128 に対応すること)改行する.次に指 # 定した数の整数をスペース1つずつ開けて1行で入力し,改行する.この一連の入力時,例題 # や解答例のような入力を促す文字等は決して表示しないこと. # 出力に関して # 中央値 平均値(+改行)のみ出力.中央値と平均値の間はスペースを1 つ入れること.指定した # 数値・改行以外の文字等の出力は一切行わないこと.
415 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 06:03:31 ] pc12.2ch.net/test/read.cgi/tech/1263824755/104 # # 課題1 20 桁までの自然数の足し算と掛け算を浮動小数点演算を用いないで実施するプログラムlongcomp.c を # 作成し、C のソースコードを提出しなさい。足し算は必須課題、掛け算はオプション課題です。 # 実行形式をlongcomp とした動作仕様は以下である1 # >./longcomp 12345678901234567890 + 12345678901234567890 # >12345678901234567890 + 12345678901234567890 = 24691357802469135780 # >./longcomp 1234567890 * 1234567890 # >1234567890 * 1234567890 = 1524157875019052100
416 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 06:05:44 ] pc12.2ch.net/test/read.cgi/tech/1263824755/105 # # 課題2 b01, b001 のように二進数をb で始まるように表記する。二進数の集合を、できるだけ少ないノード数 # の二分木に分類するためには、二分木のノードに蓄積する二進数の桁数を可変にすることが有効である。 # こうすることで二進数表記した値(たとえばキーワードとか、位置とか、日付とか)に紐づけられたデータを少ない検索で見つけることができる。 # 扱う二進数の集合を、たとえば # b00, b001, b0011, b00111, b1000, b11100, b0 # として、これらを図1に示すようにニ分木に分類して、帰りがけ(ポストオーダ)で次のように出力するプログラム(tree) を作成し、C のソースコードを提出しなさい。 # >./tree # >1 1 1 0 0 000 1100 1 b #
417 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 06:14:47 ] pc12.2ch.net/test/read.cgi/tech/1263824755/124 # [1] 授業単元: Cプログラミング入門 # [2] 問題文(含コード&リンク): 入力された2つの文字列(日本語その他バイト文字は不可) # を比較するプログラムを作成せよ。ただし、大文字小文字の違いは無視。単語間に連続して # スペース・タブが複数入っていても単独のスペースとしない。 # # [5] その他の制限: 文字列とポインタまでやってます。 # 入力に関して、キーボードから1つ目の文字列を1行で入力し、改行する。 # この時、入力を促す文字は一切表示しない。入力文字数は128文字まで。 # 出力に関して、一致すれば何も表示しない。不一致の場合は最初に不一致となる # 入力1の文字と入力2の文字(1文字+スペース+1文字+改行)を表示する。 # どちらかが末端の場合は代わりにスペースで埋める。
418 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 06:22:12 ] pc12.2ch.net/test/read.cgi/tech/1263824755/135 # [1] 授業単元:C言語 # [2] 問題文(含コード&リンク):ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10408.txt # # (1)複数の整数を平均値に近い順にソートするプログラムを作成せよ。 # 平均値は切り捨てして整数値で求めるものとし、平均値との距離が等しい # 場合は値の小さな整数が優先されるものとする。 # # 入力に関して # キーボードからまず、入力する整数の個数を入力(最大で100とする)し、改行。 # 次に指定した数の整数をスペース1つ開けて1行で入力し、改行する。 # この時、入力を促す文字は一切表示しないこと。 # 出力に関して # ソートした整数をスペース1つのみあけて1行で出力する(+改行)。指定した数改行 # 以外の出力は一切行わないこと。
419 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 07:12:24 ] pc12.2ch.net/test/read.cgi/tech/1263824755/137 # [1] 授業単元: プログラミング概論 # [2] 問題文:"in_file"という名前のファイルの中に18個の整数データが空白や改行コードで区切られて並んでいると仮定した上で、 # この入力ファイルの中のデータを1行に5個ずつきれいに並べて"out_file"という名前のファイルに # 出力するCプログラムを作成せよ。 # 入力ファイルの内容が # -1111111111 2222222 333333 4444 55 6 7 8 9 0 1 2 3 4 # 5 6 7890123 # -5666 # の時には、例えば次のような内容を"out_file"に書き出す # _-1111111111_____2222222______333333________4444__________55 # _________________6_______________7______________8_____________9___________0 # ________________ 1_______________2______________3_____________4___________5 # _________________6_____7890123________-5666 #
420 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 07:23:27 ] >>418 ;; Common Lisp (defun sort-ave (lst) (let ((abs-ave (floor (abs (/ (reduce #'+ lst) (length lst)))))) (sort lst #'(lambda (a b) (let ((ax (abs (- (abs a) abs-ave))) (bx (abs (- (abs b) abs-ave)))) (if (= ax bx) (< a b) (< ax bx))))))) (defun main () (let ((num (read)) lst) (cond ((<= num 100) (dotimes (i num) (push (read) lst)) (format t "~{~A ~}~%" (sort-ave lst))))))
421 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 12:56:07 ] >>418 使用言語:J f=:monad def '}.|:/:~|:y,:~|y-<.(+/%#)y' f 0 7 8 9 2 2 5 5 5 3 3 5 5 5 2 2 7 0 8 9
422 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 15:28:46 ] pc12.2ch.net/test/read.cgi/tech/1263824755/143 # [1] データ構造とプログラミング # [2] # 演習問題4.5 逆ポーランド記法による入力文字列(空白で区切られている)に対して 、 # 16進数と10進数で答えを返すプログラムrpnを作りなさい。 # (入力例)rpn 5 2 + 7 * # (出力例)0x31, 49(decimal) #
423 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 17:57:56 ] pc12.2ch.net/test/read.cgi/tech/1263824755/147 # [1] 授業単元: C++ # [2] 問題文(含コード&リンク): # 2. # ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10439.txt # ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10436.txt # ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10437.txt # ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10438.txt # kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10436.txt ↑pm1.txt # kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10437.txt # ↑pm2.txt # kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10438.txt # ↑pm3.txt # というファイルがある。 # plus で始まる行の数値を足し,minus で始まる行の数値を引く。 # ファイルの最後まで計算した結果を表示するプログラムを作成せよ。 # データの数は実行前にはわからないものとする。
424 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 18:07:11 ] pc12.2ch.net/test/read.cgi/tech/1263824755/154 # [1] 授業単元: プログラミング演習 # [2] 問題文(含コード&リンク):ime.nu/www.acm-japan.org/past-icpc/domestic2008/problems/all_ja.html # 等しい合計点 # # 太郎と花子はそれぞれカードを何枚か持っている. # 各カードには点数が書かれている.太郎のカードと花子のカードを 1 枚ずつ交換して, # それぞれの持つカードの合計点数が等しくなるようにしたい. # どのカードとどのカードを交換したらよいか. # # ただし,カードを交換しなくても合計点数が等しい場合でも,必ずカードの交換を行うものとする. # Input # 入力は,いくつかのデータセットからなる.各データセットは次の形式で与えられ # n m # s1 # s2 # ... # 各データセットの最初の行は空白ひとつで区切られたふたつの数 n と m を含み, # n は太郎のカードの枚数,m は花子のカードの枚数を表す.続く n+m 行には, # 各カードの点数が 1 行にひとつずつ並ぶ. # 最初の n 個の点数 (s1 から sn まで) は太郎のカードの点数, # 残りの m 個の点数 (sn+1 から sn+m まで) は花子のカードの点数を表す. # n および m は 100 以下の正の整数とし,カードの点数は 0 以上 100 以下の整数値とする. # 入力の終わりは,空白ひとつで区切られたふたつの 0 を含む 1 行で示される.
425 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 19:04:37 ] >>423 使用言語:J plus =:+ minus=:- f=:monad def '+/".;._2(1!:1)y' f <'pm3.txt' _316
426 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 20:18:00 ] pc12.2ch.net/test/read.cgi/tech/1263824755/161 # [1] 授業単元: プログラミング演習(木構造と数式処理) # [2] 問題文(含コード&リンク): # # 累乗の計算の逆を行うプログラムを作ってください。 # # 例 # x*x*xと入力されればx^3と画面に出力する。 # # x*x*x*aなどの場合はx^3*aと出力されればよい。 #
427 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 20:42:02 ] >>413 使用言語:J mult_array=: +/ .* ]A=:i.4 4 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 A mult_array A 56 62 68 74 152 174 196 218 248 286 324 362 344 398 452 506
428 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 00:00:16 ] >>419 使用言語:J read=: 1!:1 wrire=: 1!:2 format=: 8!:2 a=: read <'in_file' b=: '13.0'format ".each _5,\cutopen,,;._2 a (,b,.LF)write<'out_file'
429 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 01:18:57 ] pc12.2ch.net/test/read.cgi/tech/1263824755/167 # 上の105ですが、もう一度質問させて頂きます。 # なぜなら、課題2対しての回答がないからです。 # 皆様よろしくお願いします。 # # [1] データ構造とプログラミング # [2]b01, b001 のように二進数をb で始まるように表記する。二進数の集合を、できるだけ少ないノード数 # の二分木に分類するためには、二分木のノードに蓄積する二進数の桁数を可変にすることが有効である。こう # することで二進数表記した値(たとえばキーワードとか、位置とか、日付とか)に紐づけられたデータを少な # い検索で見つけることができる。 # 扱う二進数の集合を、たとえば # b00, b001, b0011, b00111, b1000, b11100, b0 # として、これらを図1に示すようにニ分木に分類して、帰りがけ(ポストオーダ)で次のように出力するプロ # グラム(tree) を作成し、C のソースコードを提出しなさい。 # >./tree # >1 1 1 0 0 000 1100 0 1 b #
430 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 01:21:28 ] >>429 ごめんなさい。>>416 に既出でした。
431 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 01:39:43 ] pc12.2ch.net/test/read.cgi/tech/1263824755/174 # [1] データ構造とプログラミング # [2] # リングバッファを使って、9個のキューを作り、データを追加したり、 # データを取り出すプログラムを完成させなさい。 # 以下の添付にあるプログラムを完成させろという課題です。 # ime.nu/www.geocities.jp/pegasus_violet/en5-2.pdf # 演習問題5.2 リングバッファを使って、9 個のキュー(配列は10 元)を作り、 # データを追加したり(EnQue), データを取り出す(DeQue) プログラムを # 完成させなさい29。プログラムの動作仕様は以下のようである。 # 1. 数字を入力するとキューが伸びる # 2. d(deque) を入力するとfront を標準出力に出力 # 3. s(show) を入力するとキューを表示 # 4. キューがいっぱいだったらエラーメッセージを出す # 5. q で終了
432 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 06:00:35 ] >>419 % Prolog ここまでするか、とお思いでしょうが・・ '入力ファイルの中のデータを1行に5個ずつきれいに並べて"out_file"という名前のファイルに出力する'(_整数ならび) :- 入力ファイルの中のデータ(_整数ならび), 最大桁数(_整数ならび,_最大桁数), _整数表示桁 is _最大桁数 + 2, concat_atom(['%',_整数表示桁,d],_表示フォーマット), '1行に5個ずつきれいに並べて'(_整数ならび,_5個組整数ならび), tell('out_file), 出力する(_5個組整数ならび,_表示フォーマット), told. 入力ファイルの中のデータ(_整数ならび) :- '"in_file"という名前のファイルの中に18個の整数データが空白や改行コードで区切られて並んでいる'(_整数ならび),!. '"in_file"という名前のファイルの中に18個の整数データが空白や改行コードで区切られて並んでいる'(_整数ならび) :- get_lines('infile',Lines), concat_atom(Lines,' ',S), split(S,[' '],_整数ならび), length(_整数ならび,18),!. '1行に5個ずつきれいに並べて'(_整数ならび,_5個組整数ならび) :- 'N個組'(5,_整数ならび,_5個組整数ならび),!. 出力する([],_) :- !. 出力する([L|R],_表示フォーマット) :- '1行出力する'(L,_表示フォーマット),出力する(R,_整数表示桁). 出力する([L|R],_表示フォーマット) :- '1行出力する'(L,_表示フォーマット), 出力する(R,_整数表示桁). '1行出力する'([],_) :- write('\n'),!. '1行出力する'([N|R],_表示フォーマット) :- write_formatted(_表示フォーマット,[N]),'1行出力する'(R,_表示フォーマット).
433 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 06:04:00 ] >>433 (>>432 ) 訂正 % Prolog 訂正するのを忘れていた。 出力する([],_) :- !. 出力する([L|R],_表示フォーマット) :- '1行出力する'(L,_表示フォーマット),出力する(R,_表示フォーマット).
434 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 07:16:12 ] >>374 使用言語:J rev_string=: ,~/ rev_string 'SEC' CES |. 'SEC' CES
435 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 07:28:11 ] >>418 % Prolog (その一) >>421 の短さに唖然! 複数の整数を平均値に近い順にソートする(_整数ならび,_平均値に近い順に整列された 整数ならび) :- 'キーボードからまず、入力する整数の個数を入力(最大で100とする)し、改行'(_ 入力する整数の個数), 指定した数の整数をスペース1つ開けて1行で入力する(_入力する整数の個数,_整数 ならび), 相加平均(_整数ならび,_平均値の一), _平均値 is truncate(_平均値の一), 平均値からの隔たりによる整列(_平均値からの隔たりのならび,_平均値からの隔た りを鍵として付加して整列された整数ならび), 整列した整数をスペース1つのみあけて1行で出力する(_平均値からの隔たりを鍵と して付加して整列された整数ならび). 'キーボードからまず、入力する整数の個数を入力(最大で100とする)し、改行'(_入力 する整数の個数) :- repeat, get_integer(_入力する整数の個数), _入力する整数の個数 =< 100,!. 指定した数の整数をスペース1つ開けて1行で入力する(_入力する整数の個数,_整数なら び) :- length(_整数ならび,_入力する整数の個数), get_split_line([' '],_整数ならび).
436 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 07:31:28 ] >>418 % Prolog (その二) >>435 は改行位置を間違えた行が数行あります。 平均値からの隔たりによる整列([X|Xs],_平均値,Ys) :- U is X - _平均値, 平均値からの隔たりにより分割する(Xs,U,_平均値,Littles,Bigs), 平均値からの隔たりによる整列(Littles,_平均値,Ls), 平均値からの隔たりによる整列(Bigs,_平均値,Bs), append(Ls,[X|Bs],Ys) . 平均値からの隔たりによる整列([],_,[]). 平均値からの隔たりにより分割する([X|Xs],Y,_平均値,[[U,X]|Ls],Bs) :- U is X - _平均値, U =< Y, 平均値からの隔たりにより分割する(Xs,Y,_平均値,Ls,Bs),!. 平均値からの隔たりにより分割する([X|Xs],Y,_平均値,Ls,[[U,X]|Bs]) :- U is X - _平均値, U > Y, 平均値からの隔たりにより分割する(Xs,Y,_平均値,Ls,Bs) . 平均値からの隔たりにより分割する([],Y,_,[],[]). 整列した整数をスペース1つのみあけて1行で出力する([]) :- !. 整列した整数をスペース1つのみあけて1行で出力する([[A,B]]) :- write_formatted('%t\n',[A]) :- !. 整列した整数をスペース1つのみあけて1行で出力する([[B,A]|R]) :- write_formatted('%t ',[A]), 整列した整数をスペース1つのみあけて1行で出力する(R)
437 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 08:14:42 ] >>436 # 平均値との距離が等しい場合は値の小さな整数が優先されるものとする。 この判断が漏れている。
438 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 10:34:26 ] >>418 間違いが多いようなので書き直し(申し訳ない) % Prolog (その一) 複数の整数を平均値に近い順にソートする(_整数ならび,_平均値に近い順に整列された 整数ならび) :- 'キーボードからまず、入力する整数の個数を入力(最大で100とする)し、改行'(_ 入力する整数の個数), 指定した数の整数をスペース1つ開けて1行で入力する(_入力する整数の個数,_整数 ならび), 相加平均(_整数ならび,_平均値の一), _平均値 is truncate(_平均値の一), 平均値からの隔たりによる整列(_平均値からの隔たりのならび,_平均値,_平均値か らの隔たりを鍵として付加して整列された整数ならび), 整列した整数をスペース1つのみあけて1行で出力する(_平均値からの隔たりを鍵と して付加して整列された整数ならび). 'キーボードからまず、入力する整数の個数を入力(最大で100とする)し、改行'(_入力 する整数の個数) :- repeat, get_integer(_入力する整数の個数), _入力する整数の個数 =< 100,!. 指定した数の整数をスペース1つ開けて1行で入力する(_入力する整数の個数,_整数なら び) :- length(_整数ならび,_入力する整数の個数), get_split_line([' '],_整数ならび).
439 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 10:39:03 ] >>418 % Prolog (その二) >>438 はやはり改行がうまくいかなかった。 平均値からの隔たりによる整列([X|Xs],_平均値,Ys) :- U is X - _平均値, 平均値からの隔たりにより分割する(Xs,U,Y,_平均値,Littles,Bigs), 平均値からの隔たりによる整列(Littles,_平均値,Ls), 平均値からの隔たりによる整列(Bigs,_平均値,Bs), append(Ls,[X|Bs],Ys) . 平均値からの隔たりによる整列([],_,[]). 平均値からの隔たりにより分割する([X|Xs],U,Y,_平均値,[[U,X]|Ls],Bs) :- V is X - _平均値, V < U, 平均値からの隔たりにより分割する(Xs,U,Y,_平均値,Ls,Bs),!. 平均値からの隔たりにより分割する([X|Xs],U,Y,_平均値,[[U,X]|Ls],Bs) :- U is X - _平均値, X < Y, 平均値からの隔たりにより分割する(Xs,U,Y,_平均値,Ls,Bs),!. 平均値からの隔たりにより分割する([X|Xs],U,Y,_平均値,Ls,[[U,X]|Bs]) :- 平均値からの隔たりにより分割する(Xs,U,Y,_平均値,Ls,Bs) . 平均値からの隔たりにより分割する([],Y,_,[],[]). 整列した整数をスペース1つのみあけて1行で出力する([]) :- !. 整列した整数をスペース1つのみあけて1行で出力する([[A,B]]) :- write_formatted('% t\n',[A]),!. 整列した整数をスペース1つのみあけて1行で出力する([[B,A]|R]) :- write_formatted('%t ',[A]), 整列した整数をスペース1つのみあけて1行で出力する(R).
440 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 10:43:20 ] すみません。行末あたりに一文字何かが入ってしまったようで改行の制御が 正しくできませんでした。 nojiriko.asia/prolog/c134_135.html に仕上げて書いておきます。
441 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 11:06:53 ] pc12.2ch.net/test/read.cgi/tech/1263824755/189 # [1] データ構造とプログラミング # [2] # ツリーにノードを追加するプログラムを完成させなさい。またプログラム中 に使われている要素 mitsugi, emura, satou, yonemura, murai, nakamura, kwkt がツリー上でどのように配置され ているか書きなさい。 # 以下の添付にあるプログラムを完成させろという課題です。 # ime.nu/www.geocities.jp/pegasus_violet/en9-5.pdf
442 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 16:43:14 ] pc12.2ch.net/test/read.cgi/tech/1263824755/193 # [1] 授業単元:プロトタイプ宣言とか引数 # [2] 問題文(含コード&リンク):[3〜6]∫x^2 dx(これだと正解は63)を計算するプログラムを作成せよ。 # 尚、積分本体(始点と終点)と関数本体f(x)に分けること。dx=1/N N=(10,1000…10000)誤差評価を行う事。積分範囲を変更すること。x^2の関数を変更すること。 #
443 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 16:44:31 ] pc12.2ch.net/test/read.cgi/tech/1263824755/197 # [1] 計算機概論 # [2] 8bit整数が8つ与えられている。これをunsigned char配列と # みなしa[]と名付ける。 # unsigned char 整数のor,not演算だけを用いて1<=n<=8からa[n]を # 計算するC計算式を出力するプログラム # 例:a[]={1,2,3,4,5,6,7,8}; 出力 return n; # a[]={1,0,1,0,1,0,1,0}; 出力 return !(!n or 11111110b);
444 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 17:33:48 ] pc12.2ch.net/test/read.cgi/tech/1263824755/200 # [1] 授業単元: プログラミング # [2] 問題文(含コード&リンク): # A組、B組、C組にそれぞれn人の生徒がいて、 # A組の生徒が一列に並んでいる。 # このとき、B組の生徒をA組の生徒の隣に並ばせたいが # なるべく隣同士で身長に差がないようにしたい。 # どうやって計算すればいいでしょう? # 加えて、C組の生徒もB組の隣に並ばせたい場合はどうすれば? # (身長の配列) double height_a[n], height_b[n], height_c[n];
445 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 18:07:57 ] >>444 % Prolog なるべく隣同士で身長に差のない並び方(La,Lb,N,LbX) :- findmin([S,L],ならび候補(La,Lb,N,L,S),Min), Min = [_,LbX],!. ならび候補(La,Lb,N,L,S) :- 順列(Lb,N,L), findsum(U,(for(1,M,N),list_nth(M,La,A),list_nth(M,L,B),U is (B-A) ^ 2),S).
446 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 19:24:07 ] pc12.2ch.net/test/read.cgi/tech/1262163854/406 # 下のような2つのファイルから # 平均を出したいんですがどのようにすればいいのでしょうか? # ---file A--- # 1 87 # 2 89 # 3 40 # 4 90 # 5 33 # # ---file B--- # 1 45 # 2 22 # 3 78 # 4 60 # 5 19 # # ほしい結果は # ---file C--- # 1 (87+45)/2 # 2 (89+22)/2 # 3 (49+78)/2 # 4 (90+60)/2 # 5 (33+19)/2 # です。
447 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 19:50:16 ] >>444 使用言語:J よくわかりませんが、こんなふうではだめでしょうか? A組のならびから身長の順位表をつくる。 B組をこの「A組順」でソートする。 ]a=:145+?10#40 178 155 176 179 169 146 161 179 177 153 ]b=:140+?10#50 178 167 186 142 165 166 172 173 181 181 a,:(/:~b)/:/:a 178 155 176 179 169 146 161 179 177 153 181 166 173 181 172 142 167 186 178 165
448 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 20:23:36 ] >>446 % Prolog '2つのファイルから平均を出す'('fileA','fileB','fileC') :- '2つのファイルから2つのならびを取り出す'('fileA','fileB',L1,L2), fileAのデータを基礎に平均を計算してfileCに出力する('fileC',L1,L2),!. '2つのファイルから2つのならびを取り出す'('fileA','fileB',L1,L2) :- get_split_lines('fileA',[' '],L1), get_split_lines('fileB',[' '],L2),!. fileAのデータを基礎に平均を計算してfileCに出力する('fileC',L1,L2) :- tell('fileC'), fileAのデータを基礎に平均を計算して出力する(L1,L2), told. fileAのデータを基礎に平均を計算して出力する([],_) :- !. fileAのデータを基礎に平均を計算して出力する([[N,A]|R1],L2) :- member([N,B],L2), C is (A + B) / 2, write_formatted('%t (%t+%t)/2=%t',[M,A,B,C]), fileAのデータを基礎に平均を計算して出力する(R1,L2).
449 名前:デフォルトの名無しさん mailto:sage [2010/01/27(水) 02:28:09 ] pc12.2ch.net/test/read.cgi/tech/1263824755/233 # [1] 授業単元:プロトタイプ宣言とか引数 # [2] 問題文(含コード&リンク): 入力された数字が偶数なら、trueを返す関数。それ以外ならfalse
450 名前:デフォルトの名無しさん mailto:sage [2010/01/27(水) 02:30:31 ] pc12.2ch.net/test/read.cgi/tech/1263824755/232 # [1] 授業単元:プロトタイプ宣言とか引数 # [2] 問題文(含コード&リンク): 得点を入力して以下のルールに従った成績を返す関数を実装せよ。 # 90点以上 S # 80点以上 A # 60点以上 B # それ未満 C
451 名前:デフォルトの名無しさん mailto:sage [2010/01/27(水) 02:41:54 ] >>449 % Prolog 入力された数字が偶数なら、trueを返す :- get_integer(N), 入力された数字が偶数なら、trueを返す(N). 入力された数字が偶数なら、trueを返す(N) :- 0 is N mod 2.
452 名前:デフォルトの名無しさん mailto:sage [2010/01/27(水) 02:46:26 ] >>449 % Prolog '入力された数字が偶数なら、trueを返す。それ以外ならfalse'(_診断) :- get_integer(N), '入力された数字が偶数なら、trueを返す。それ以外ならfalse'(N,_診断). '入力された数字が偶数なら、trueを返す。それ以外ならfalse'(N,true) :- 0 is N mod 2. '入力された数字が偶数なら、trueを返す。それ以外ならfalse'(N,false).
453 名前:デフォルトの名無しさん mailto:sage [2010/01/27(水) 02:48:11 ] >>452 (>>449 ) 訂正 % Prolog '入力された数字が偶数なら、trueを返す。それ以外ならfalse'(_診断) :- get_integer(N), '入力された数字が偶数なら、trueを返す。それ以外ならfalse'(N,_診断). '入力された数字が偶数なら、trueを返す。それ以外ならfalse'(N,true) :- 0 is N mod 2,!. '入力された数字が偶数なら、trueを返す。それ以外ならfalse'(N,false).
454 名前:デフォルトの名無しさん mailto:sage [2010/01/27(水) 02:58:21 ] >>450 % Prolog 得点を入力して以下のルールに従った成績を返す(_成績) :- get_integer(_得点), 得点を入力して以下のルールに従った成績を返す(_得点,_成績). 得点を入力して以下のルールに従った成績を返す(_得点,_成績) :- 以下のルール(_得点,_,_成績). 以下のルール(_得点,'90点以上','S') :- _得点 >= 90,!. 以下のルール(_得点,'80点以上','A') :- _得点 >= 80,!. 以下のルール(_得点,'60点以上','B') :- _得点 >= 60,!. 以下のルール(_得点,'それ未満','C') :- _得点 < 60,!.
455 名前:デフォルトの名無しさん mailto:sage [2010/01/27(水) 03:10:28 ] >>450 % Prolog 少し模索 得点を入力して以下のルールに従った成績を返す(_成績) :- get_integer(_得点), 得点を入力して以下のルールに従った成績を返す(_得点,_成績). 得点を入力して以下のルールに従った成績を返す(_得点,_成績) :- '得点が90点以上'(_得点,_成績). 得点を入力して以下のルールに従った成績を返す(_得点,_成績) :- '得点が80点以上'(_得点,_成績). 得点を入力して以下のルールに従った成績を返す(_得点,_成績) :- '得点が60点以上'(_得点,_成績). 得点を入力して以下のルールに従った成績を返す(_得点,_成績) :- '得点が60点未満'(_得点,_成績). '得点が90点以上'(_得点,'S') :- _得点 >= 90,!. '得点が80点以上'(_得点,'A') :- _得点 >= 80,_得点<90,!. '得点が60点以上'(_得点,'B') :- _得点 >= 60,_得点<80,!. '得点がそれ未満'(_得点,'C') :- _得点 < 60,!.