1 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 09:57:19 ] 第二編も512Kbyte越えで終了しました。 前スレで未解決な課題は順次このスレにコピーします。
558 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 21:33:56 ] >>557 の訂正として出されましたが、それぞれ独立の問題としましょう。 pc12.2ch.net/test/read.cgi/tech/1263824755/409 # [1] C言語演習 # [2] # int x[10]={-1,2,-3,4,-5,6,-7,8,-9,10} # int y[10]={-5,-4,-3,-2,-1,1,2,3,4,5} # が与えられている。 # 値x[0]*y[0]-2*x[1]*y[1]+3*x[2]*y[2]-4*x[3]*y[3]+5*x[4]*y[4]-6*x[5]*y[5]+7*x[6]*y[6]-8*x[7}*y[7]+9*x[8]}*y[8]-10*x[9]*x[9] # が最大/最小になるようにx,yの各要素を並べ替えたものを出力するプログラム
559 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 21:42:32 ] pc12.2ch.net/test/read.cgi/tech/1263824755/418 # [1] C言語プログラミング演習(大学専門課程選択教科期末課題) # [2]ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10483 .txt # 以下のSQL文で定義されるテーブルに対する # SQL操作をテーブルに対応する適当な構造体配列 # struct_SEISEKIHYOUを定義することにより # 1関数として実装せよ。 # 関数は # list(struct_SEISEKIHYOU* table,int N); # とする。処理効率を十分に考えること。 # # テーブル定義: # CREATE TABLE SEISEKIHYOU ( # TANNINN VARCHAR, //担任教師 # NAME VARCHAR,//生徒名 # KOKUGO INTEGER,//国語得点 # SUUGAKU INTEGER//数学得点 # RIKA INTEGER,//理科得点 # SYAKAI INTEGER,//社会得点 # EIGO INTEGER,//英語得点 # ) #
560 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 21:44:36 ] >>559 問題のつづきです。 # # SQL操作 SELECTでリストアップされる項目リスト # をコンソール出力させる。 # # SELECT X.TANNINN,X.NAME,X.SUUGAKU,X.KOKUGO # FROM SEISEKIHYOU AS X # WHERE # SUUGAKU>=KOKUGO # AND # SUUGAKU>=RIKA # AND # SUUGAKU>=SYAKAI # AND # SUUGAKU>=EIGO # AND # (KOKUGO+SUUGAKU+RIKA+SYAKAI+EIGO)/5.0 # >=(SELECT (AVG(KOKUGO)+AVG(SUUGAKU)+AVG(RIKA) # +AVG(SYAKAI)+AVG(EIGO))/5.0 FROM SEISEKIHYOU # GROUP BY TANNINN) HAVING COUNT(*)>= # (SELECT COUNT(*) FROM SEISEKHYOU GROUP BY # TANNINN HAVING TANNINN=X.TANNNIN) # # ORDER BY X.TANNIN,X.NAME,X.SUUGAKU;
561 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 03:12:54 ] pc12.2ch.net/test/read.cgi/tech/1263824755/420 # [1] 授業単元:プログラミング実践 # [2] 問題文 # アフィン変換のプログラムを作成し、下の図の真ん中を座標の中心にして90°回転した結果を出力せよ。 # (図)affin.txt # 00000 # 00000 # 11111 # 00000 # 00000 #
562 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 04:30:07 ] >>538 % Prolog (その一) program :- user_parameters([_ファイル名]), 'EOFがコントロールZであるファイルの読み込み'(Lines), tell(_ファイル名), write_formatted('%10s %4s\n',[名前,年齢]), '名前・年齢の行表示'(Lines), told. 'EOFがコントロールZであるファイルの読み込み'(Lines) :- get_code(Code), 'EOFがコントロールZであるファイルの読み込み'(Code,Lines),!. 'EOFがコントロールZであるファイルの読み込み'(-1,[]) :- !. 'EOFがコントロールZであるファイルの読み込み'(Code,[[_名前,_年齢]|R]) :- 'EOFがコントロールZであるファイルの行読み込み'(Code,RCode,Codes), atom_codes(Line,Codes), split(Line,[' ',','],[_名前,_年齢]), 'EOFがコントロールZであるファイルの読み込み'(RCode,R). 'EOFがコントロールZであるファイルの行読み込み'(-1,-1,[]) :- !. 'EOFがコントロールZであるファイルの行読み込み'(26,-1,[]) :- !. 'EOFがコントロールZであるファイルの行読み込み'(10,Code2,[]) :- ひとつ先読みが同時に終了ステータスにもなる(Code2),!. 'EOFがコントロールZであるファイルの行読み込み'(Code1,RCode,[Code1|R]) :- get_code(Code2), 'EOFがコントロールZであるファイルの行読み込み'(Code2,RCode,R).
563 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 04:31:08 ] >>538 % Prolog (その二) ひとつ先読みが同時に終了ステータスにもなる(Code2) :- get_code(Code2),!. 名前・年齢の行表示([]) :- !. 名前・年齢の行表示([[_名前,_年齢]|R]) :- write_formatted('%12s%t\n',[_名前,_年齢]), 名前・年齢の行表示(R).
564 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 04:32:07 ] > EOFがコントロールZであるファイルの読み込み w
565 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 04:36:16 ] >>564 やれやれww
566 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 04:53:35 ] pc12.2ch.net/test/read.cgi/tech/1262163854/556 # こんばんは.失礼します. # 現在,次のような課題に取り組んでいます. # もしよろしければこの難問をハックしていただけないでしょうか. # (できればCで・・・) # # N個の要素があり,その,すべての組み合わせ(2^N組)に対して, # それぞれに値が決まっているものとします. # そして,ある組み合わせの値は,その組み合わせの中の部分集合の # どんな和よりも大きいです. # # また0個の集合では値は0とします. # # こうした場合に,全ての組み合わせの値を以上のルールに則ったまま # 乱数を用いて決定したいと考えています. # # 具体的には # 要素が一つの組み合わせは乱数.たとえばAのみの集合の場合 v(A)=random # 要素が2つでは,v(A,B)=v(A)+v(B) + random # 3つでは,v(A,B,C) = max(v(A,B)+v(C), v(B,C)+v(A), v(C,A)+v(B)) + random # となります. # # この方式で,全ての組み合わせに値を当てはめることを考えているのですが # コードに落とし込むことが出来ません.
567 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 04:56:05 ] >>566 つづき # 今のところ,各組み合わせを以下のような二進数で表そうと考えています.(N=3の場 合) # 各行の一列目が1はAがその組み合わせにいることを意味し, # 二列目はB,三列目はCを表しています. # # ABC V # 000 0 # 001 rc # 010 rb # 011 ? # 100 ra # 101 ? # 110 ? # 111 ? #
568 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 08:08:22 ] >>495 使用言語:J f=: monad define l=.(#y)-2 t=.(l,l)$ ucp' ' g=.}.}:y y,(|:g),t,|.g),|.y ) f ucp'今日は、晴れです。' 今日は、晴れです。 日 す は で 、 れ 晴 晴 れ 、 で は す 日 。すでれ晴、は日今
569 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 09:37:53 ] >>559 % Prolog 'SQL操作に対応する述語定義'(X) :- findall([TANNINN,NAME,SUGAKU,KOKUGO], ( findall(TANNINN,'SEISEKIHYOU'(TANNINN,_,_,_,_,_,_),L1),sort(L1,L2), 'SEISEKIHYOU'(TANNINN,NAME,KOKUGO,SUUGAKU,RIKA,SYAKAI,EIGO), SUUGAKU>=KOKUGO,SUUGAKU >= RIKA,SUUGAKU>=SYAKAI,SUUGAKU>=EIGO, U1 is (KOKUGO+SUUGAKU+RIKA+SYAKAI+EIGO)/5.0, findall(AVGs,(member(TANNINN2,L2),findavg([KOKUGO2,SUUGAKU2,RIKA2,SYAKAI2,EIGO2],'SEISEKIHYOU'(TANNINN2,NAME2,KOKUGO2,SUUGAKU2,RIKA2,SYAKAI2,EIGO2),AVGs)),L3), sum(L3,SUM1), U2 is SUM1 / 5.0, U1 >= U2, findavg(KOKUGO3,('SEISEKIHYOU'(TANNINN,_,KOKUGO3,_,_,_,_),KOKUGOAVG), KOKUGO > AVGKOKUGO) ),L4), sort(L4,L5), member(X,L5).
570 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 11:14:43 ] >>496 使用言語:J f=: monad define t=.<;._2 y for_i. i.#t do. smoutput (":>:i),':',":|.;i{t end. ) read=: 1!:1 f ucp read <'test2.txt' 1:で雨、は日昨。すでれ晴、は日今 2:後明。うょしで曇、は日明。たし 3:。かうょしで晴快、は日
571 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 11:18:26 ] >>556 何をいっているのかわからないので元スレを覗いてきます。
572 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 11:24:32 ] >>571 すみません。>>556 ではなく>>566 でした。 元スレでも質問者が問題を理解していないだろうと指摘されていました。
573 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 12:01:03 ] >>542 % Prolog 例えばこんな具合に書き進める。これからが大変。 販売員の正しい行動(_お客様,_お客様の要求,_販売員の正しい行動) :- お客様の要求の要約(_お客様,_お客様の要求,_お客様の要求の要約), お客様の要求の要約から販売員の正しい行動を考える(_お客様の要求の要約,_販売員の正しい行動). お客様の要求の要約(_お客様,_お客様の要求,_お客様の要求の要約) :- お客様がどんな方か明確にする(_お客様,_お客様の情報), お客様が関心をお持ちの分野を明確にする(_お客様,_お客様の情報,_お客様が関心をお持ちの分野), お客様の情報を解析して要求を要約する(_お客様,_お客様の要求,_お客様の情報,_お客様が関心をお持ちの分野,_お客様の要求の要約). お客様がどんな方か明確にする(_お客様,_お客様の情報) :- 顧客情報(_お客様,_お客様の情報). お客様が関心をお持ちの分野を明確にする(_お客様,_お客様の情報,_お客様が関心をお持ちの分野) :- 購買情報(_お客様,_過去の購買情報ならび,_過去のクレームならび), 関心のある分野診断(_お客様,_過去の購買情報ならび,_過去のクレームならび,_お客様が関心をお持ちの分野). お客様の情報を解析して要求を要約する(_お客様,_お客様の要求,_お客様の情報,_お客様が関心をお持ちの分野,_お客様の要求の要約) :- 句構造解析(_お客様の要求,_解析された句構造), 句構造からキーワードを拾い出して意味を推定する(_解析された句構造,_キーワードならび,_お客様の要求の要約).
574 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 12:23:19 ] >>497 使用言語:J f=: monad define t=:<;._2 y for_i. i.#t do. s=.;i{t w=.":#cutopen s smoutput (":>:i),':',":s smoutput '=>',(":#s),'文字、',w,'ワード' end. ) read=: 1!:1 f read<'test3.txt' 1:And friends just can't be found =>31文字、6ワード 2:Like a bridge over troubled water =>33文字、6ワード 3:I will lay me down =>18文字、5ワード
575 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 14:05:25 ] >>498 使用言語:J f=: monad define 'M D'=.y t=.0 0 31 59 90 120 151 181 212 243 273 304 334 w=.ucp'木金土日月火水' a=.(7|(M{t)+D){w smoutput (":M),(ucp'月'),(":D),(ucp'日は、'),a,ucp'曜日です。' ) f 9 15 9月15日は、水曜日です。
576 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 17:22:34 ] >>510 使用言語:J f=: dyad def ';,|:(;/x),:;/y' 'asdfgh' f '123' a1s2d3fgh
577 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 17:27:22 ] >>512 使用言語:J test2=: dyad def 'y-:~.x' 'abccba' test2 'abc' 1 'abcbc' test2 'cba' 0
578 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 18:11:22 ] pc12.2ch.net/test/read.cgi/tech/1248012902/827 # 【 課題 】 ime.nu/rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/918.txt # 課題1 # ラーメンをオブジェクト指向で表現。 # 3種類程度のラーメンが表現できるようにする。 # フィールド、メソッド、オーバーロード、オーバーライド、カプセル化(他クラスからのアクセスはgetメソッドとsetメソッドのみ)が確実に表現されていること。 # # 実行は以下のクラスから呼び出される # class RamenExample{ # public static void main(String [] args){ # Ramen shouyuRamen = new Ramen("しょうゆ"); # Ramen misoRamen = new Ramen("みそ"); # Ramen shioRamen = new Ramen("しお"); # } # } # # また、以下のクラスは生成が条件 # class Ramen{ } # class Utsuwa{ } # class Soup{ } # class Pasta{ } # class Topping{ }
579 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 18:14:12 ] pc12.2ch.net/test/read.cgi/tech/1248012902/827 # 【 課題 】 ime.nu/rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/918.txt # 課題2 # 以下の、お金をうけとり、おつりを計算するプログラムをつくりなさい。 # # ここから、よくわからなくなりました。 # たとえば、6200円の買い物をして、7000円受とると、100円を8枚って計算したいです。 #
580 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 21:11:17 ] >>579 % Prolog (その一) 金種計算(0,_,[]) :- !. 金種計算(_おつり残高,[],[]) :- _おつり残高 > 0,write('レジ不足です\n'),!,fail. 金種計算(_おつり残高,[_金種|R1],[(_金種,B)|R2]) :- _おつり残高 >= _金種, 金種が足りる(_おつり残高,_金種,N,B), _残り金額 is _おつり残高 mod _金種, 金種計算(_残り金額,R1,R2). 金種計算(_おつり残高,[_金種|R1],[(_金種,N)|R2]) :- _おつり残高 >= _金種, 金種が足りない(_おつり残高,_金種,N,B), _残り金額 is _おつり残高 - _金種 * N, 金種計算(_残り金額,R1,R2). 金種計算(_おつり残高,[_金種|R1],R2) :- _おつり残高 >= _金種, \+(レジの中(_金種,N)), 金種計算(_おつり残高,R1,R2). 金種計算(_おつり残高,[_金種|R1],R2) :- _おつり残高 < _金種, 金種計算(_おつり残高,R1,R2). 金種が足りる(_おつり残高,_金種,N,B) :- レジの中(_金種,N), B is _おつり残高 // _金種, N >= B,!. 金種が足りない(_おつり残高,_金種,N,B) :- レジの中(_金種,N), B is _おつり残高 // _金種, N < B,!.
581 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 03:21:11 ] >>579 (その二) % Prolog こちらがトップレベル >>580 はレジの中身を更新するのを忘れている おつりの計算(_お買い上げ金額,_うけとったお金,_金種) :- _受け取ったお金 > _お買い上げ金額, _おつり is _うけとったお金 - _お買い上げ金額, 金種計算(_おつり,[10000,5000,2000,1000,500,100,50,10,5,1],_金種).
582 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 03:25:18 ] >>580 >>581 一般に、給料計算の一部に金種計算が現れる場合は、銀行がその金種を 用意するものと考えられるから、レジの中身についての考慮は必要ないが、 おつりの場合はレジの内容が計算を主導する。
583 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 05:26:20 ] >>225 % Prolog (その一) '0から10の中からランダムに整数の2組を決める。それを平面上の座標と、座標を10個つくる。'(_10個の座標点ならび) :- '座標を10個つくる。'(1,_10個の座標点ならび). 座標を10個つくる。'(N,[]) :- N > 10,!. 座標を10個つくる。'(N,[[X,Y]|R]) :- '0から10の中からランダムに整数の2組を決める。'(X,Y), N2 is N + 1, 座標を10個つくる。'(N2,R). '0から10の中からランダムに整数の2組を決める。'(X,Y) :- X is random mod 9,Yis random mod 9. ユーザに座標を入力させ、その点から最も遠い点と近い点を求める。(_10個の座標点ならび,X,Y,_最も遠い点,_最も近い点) :- ユーザに座標を入力させ、(X,Y), その点から最も遠い点と近い点を求める(_10個の座標点ならび,X,Y,_最も遠い点のX座標,_最も遠い点のY座標,_最も近い点のX座標,_最も近い点のY座標), ユーザ座標と10個の座標点の表示(_10個の座標点ならび,X,Y,_最も遠い点のX座標,_最も遠い点のY座標,_最も近い点のX座標,_最も近い点のY座標). ユーザに座標を入力させ、(X,Y) :- 催促付き整数入力('X座標を入力してください :',X), 催促付き整数入力('Y座標を入力してください :',Y),!. その点から最も遠い点と近い点を求める。(_10個の座標点ならび,X,Y,_最も遠い点のX座標,_最も遠い点のY座標,_最も近い点のX座標,_最も近い点のY座標) :- ユーザの入力点からの距離ならびを得る(_10個の座標点ならび,X,Y,_ユーザの入力点からの距離ならび), ユーザの入力座標から最も遠い点を得る(_ユーザの入力点からの距離ならび,X,Y,_最も遠い点X座標,_最も遠い点Y座標), ユーザの入力座標から最も近い点を得る(_ユーザの入力点からの距離ならび,X,Y,_最も近い点X座標,_最も近い点Y座標),!.
584 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 06:20:55 ] >>225 % prolog (その二) ユーザの入力点からの距離ならびを得る([],_,_,[]) :- !. ユーザの入力点からの距離ならびを得る([[X1,Y1]|R1],X,Y,[[_距離,X1,Y1]|R2]) :- _距離 is sqrt(((Y1-Y)^2 + (X1-X)^2)), ユーザの入力点からの距離ならびを得る(R1,X,Y,R2). ユーザの入力座標から最も遠い点を得る(_ユーザの入力点からの距離ならび,X,Y,_最も遠い点X座標,_最も遠い点Y座標) :- findmax(L,member(L,_ユーザの入力点からの距離ならび),[_最も遠い距離,_最も遠い点X座標,_最も遠い点Y座標]). ユーザの入力座標から最も近い点を得る(_ユーザの入力点からの距離ならび,X,Y,_最も近い点X座標,_最も近い点Y座標) :- findmin(L,member(L,_ユーザの入力点からの距離ならび),[_最も近い距離,_最も近い点X座標,_最も近い点Y座標]). ユーザ座標と10個の座標点の表示(_10個の座標点ならび,X,Y,_最も遠い点のX座標,_最も遠い点のY座標,_最も近い点のX座標,_最も近い点のY座標) :- ユーザ座標と10個の座標点の表示(0,0,_10個の座標点ならび,X,Y,_最も遠い点のX座標,_最も遠い点のY座標,_最も近い点のX座標,_最も近い点のY座標). ユーザ座標と10個の座標点の表示(M,N,_10個の座標点ならび,X,Y,_最も遠い点のX座標,_最も遠い点のY座標,_最も近い点のX座標,_最も近い点のY座標) :- N > 9,!. ユーザ座標と10個の座標点の表示(M,N,_10個の座標点ならび,X,Y,_最も遠い点のX座標,_最も遠い点のY座標,_最も近い点のX座標,_最も近い点のY座標) :- M > 9,N2 is N + 1,wr('\n'), ユーザ座標と10個の座標点の表示(0,N2,_10個の座標点ならび,X,Y,_最も遠い点のX座標,_最も遠い点のY座標,_最も近い点のX座標,_最も近い点のY座標),!. ユーザ座標と10個の座標点の表示(M,N,_10個の座標点ならび,X,Y,_最も遠い点のX座標,_最も遠い点のY座標,_最も近い点のX座標,_最も近い点のY座標) :- 座標点表示(M,N,_10個の座標点ならび,X,Y,_最も遠い点のX座標,_最も遠い点のY座標,_最も近い点のX座標,_最も近い点のY座標), M2 is M + 1, ユーザ座標と10個の座標点の表示(M,N2,_10個の座標点ならび,X,Y,_最も遠い点のX座標,_最も遠い点のY座標,_最も近い点のX座標,_最も近い点のY座標).
585 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 06:23:40 ] >>225 % Prolog (その三) 座標点表示(X,Y,_,X,Y,_,_,X,Y) :- write('◎'),!. 座標点表示(X,Y,_,X,Y,_,_,_,_) :- write('×'),!. 座標点表示(_最も遠い点のX座標,_最も遠い点のY座標,_,_,_,_最も遠い点のX座標,_最も遠い点のY座標,_,_) :- write('●'),!. 座標点表示(_最も近い点のX座標,_最も近い点のY座標,_,_,_,_,_,_最も近い点のX座標,_最も近い点のY座標) :- write('○'),!. 座標点表示(M,N,_10個の座標点ならび,_,_,_,_,_,_) :- member([M,N],10個の座標点ならび),write('△'),!. 座標点表示(_,_,_,_,_,_,_,_,_) :- write(' '),!.
586 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 06:38:51 ] >>227 % Prolog program :- user_parameters([A,B]), atom_to_term(A,_実数1,_), atom_to_term(B,_実数2,_), sasho(_実数1,_実数2,_差,_商,_診断), program_1(_差,_商,_診断),!. sasho(_実数1,_実数2,_差,_商,0) :- (_実数2 = 0.0;_実数=0), _差 is _実数1 - _実数2,!. sasho(_実数1,_実数2,_差,_商,1) :- \+(_実数2 = 0.0), \+(_実数=0), _差 is _実数1 - _実数2, _商 is _実数1 / _実数2,!. program_1(_差,_商,0) :- write_formatted('%t',[_差]),!. program_1(_差,_商,1) :- write_formatted('%t,%t',[_差,_商]),!.
587 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 06:42:17 ] >>227 訂正 % Prolog 除数検査の中で _実数2 とするべきところを _実数 としていたものがある。 program :- user_parameters([A,B]), atom_to_term(A,_実数1,_), atom_to_term(B,_実数2,_), sasho(_実数1,_実数2,_差,_商,_診断), program_1(_差,_商,_診断),!. sasho(_実数1,_実数2,_差,_商,0) :- (_実数2 = 0.0;_実数2=0), _差 is _実数1 - _実数2,!. sasho(_実数1,_実数2,_差,_商,1) :- \+(_実数2 = 0.0), \+(_実数2=0), _差 is _実数1 - _実数2, _商 is _実数1 / _実数2,!. program_1(_差,_商,0) :- write_formatted('%t',[_差]),!. program_1(_差,_商,1) :- write_formatted('%t,%t',[_差,_商]),!.
588 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 07:36:27 ] pc12.2ch.net/test/read.cgi/tech/1197620454/586 # 問題こちら↓ # 階乗 n! を計算する関数を作成し, # 順列 # n個の異なるものからr個取り出して並べる。 # このときの順列の総数をnPrとあらわす。 # nPr=n(n-1)(n-2)・・・(n-r+1) # を計算する関数を作成し, # # 組み合わせ # 異なるn個からr個取り出して組を作る。 # このときの組合せの総数をnCrとあらわす。 # nCr = nPr/r! # # を計算するプログラムを作成してください。できればFORTRANで。
589 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 08:27:50 ] >>588 % Prolog nPr(N,R,X) :- U is N - R + 1, 階乗(U,N,X). nCr(N,R,X) :- U is N - R + 1, 階乗(U,N,K1), 階乗(R,K2), X is K1 // K2 . 階乗(M,N,1) :- M > N,!. 階乗(M,N,X) :- M2 is M + 1, 階乗(M2,N,Y), X is M * Y. 階乗(0,1) :- !. 階乗(1,1) :- !. 階乗(N,X) :- N2 is N - 1, 階乗(N2,Y), X is N * Y, asserta((階乗(N,X) :- (!))) .
590 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 16:35:57 ] >>211 % Prolog nojiriko.asia/prolog/c133_678.html
591 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 16:51:15 ] >>216 % Prolog search(Text,Pat,Start) :- sub_atom(Text,Start,_,_,Pat),!. search(_,_,-1). search(Start) :- write('Text :'),get_line(Text), write('Pat :'),get_line(Pat), search(Text,Pat,Start),!.
592 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 17:45:56 ] >>214 % Prolog 述語数値を第二引数が昇順になるように定義し直す。その際追番を1から振り直す :- findall(_値,数値(_,_値),L1), quicksort(L1,L2), abolish(数値/2), 述語数値を第二引数が昇順になるように定義し直す。その際追番を1から振り直す(1,L2). 述語数値を第二引数が昇順になるように定義し直す。その際追番を1から振り直す(_,[]) :- !. 述語数値を第二引数が昇順になるように定義し直す。その際追番を1から振り直す(M,[N|R]) :- assertz(数値(M,N)), M2 is M + 1, 述語数値を第二引数が昇順になるように定義し直す。その際追番を1から振り直す(M2,R).
593 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 18:33:33 ] >>530 使用言語:J op=:a:,;/'+-' a=:,;&.>,{(<a:,<'-')0},(<op),.<&.>":L:0;/>:i.9 ;"1,.&(<'=100'),.a{~I.(<100)=".&.>a 123+45-67-8-9=100 123+4-5-67-89=100 123-45+67-89=100 123-4+5+6+7-8-9=100 12+3+4+5-6+7-89=100 12+3-4-5+67+8+9=100 12-3+4-5-6-7+89=100 1+23-4-56+7+8+9=100 1+23-4-5+6+78-9=100 1+2+34-5-67-8-9=100 1+2+3-4-5+6+78+9=100 -1-2-3-4+5+6+78+9=100
594 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 21:30:57 ] pc12.2ch.net/test/read.cgi/tech/1263824755/451 # [1] 授業単元:情報処理入門 # [2] 問題文(含コード&リンク): # rep1.ppmとrep2.ppmの2つの画像を加算するプログラムを作成せよ. # プログラム中で加算したデータは,コントラスト強調を行った上で # PPM画像ファイル(h12r.ppm)として保存するようにすること. # Cのソースファイルh12r.cおよび実行することにより作成 # される画像ファイルを提出すること.rep1.ppmとrep2.ppmの # サイズはいずれも横124×縦124画素である.h12r.ppmのサイズも同じとする. # # rep1.ppm # ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10487.zip # rep2.ppm # ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10488.zip
595 名前:デフォルトの名無しさん [2010/02/04(木) 00:50:42 ] 優勝賞金500万円 www.jaist.ac.jp/ICGA-events-2010/olympiad/ 1989年にロンドンで第1回目のコンピュータオリンピアードが開催されました。 毎年開催される本イベントでは,コンピュータゲームプレイヤー同士が競技し,世界最高位を決定します。 これまでの優勝者には,Neurogammon(バックギャモン, 1989年), Chinook (チェッカー, 1989年および1990年) そして Tacos(将棋, 2005年, 2006年, 2008年, 2009年)などがあります。 コンピュータオリンピアードは国際コンピュータゲーム協会(ICGA)が主催して実施されています。 競技部門には,アマゾン,バックギャモン,ブリッジ,コンピュータプール,六目並べ,象棋,ドッツアンドボックス,国際ドローツ,囲碁,9路盤囲碁,ヘックス,ハバナ,ラインズオブアクション, 将棋,スラカルタなどがあります。 この他のゲームもコンピュータによる競技会を開催する可能性があります。主催者までコンタクトしてください。 2010年に第15回目となるコンピュータオリンピアードは金沢市内で開催されます。 ICGAとJAISTとの共同イベントとして9月25日から10月2日にかけて金沢市内で開催されます。 各競技の日程は後日決定します。 参加申し込みなどの詳細も後日お知らせ致します。
596 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 06:08:29 ] >>595 % Prolog コンピュータオリンピアード(優勝賞金,500万円). コンピュータオリンピアード('URL','www.jaist.ac.jp/ICGA-events-2010/olympiad/ '). コンピュータオリンピアード(歴史,第1回目,ロンドン,1989). コンピュータオリンピアード(開催,毎年). コンピュータオリンピアード(主催,'国際コンピュータゲーム協会(ICGA)'). コンピュータオリンピアード(出場者,コンピュータゲームプレイヤー同士). コンピュータオリンピアード(競技部門,アマゾン). コンピュータオリンピアード(競技部門,バックギャモン). コンピュータオリンピアード(競技部門,ブリッジ). コンピュータオリンピアード(競技部門,コンピュータプール). コンピュータオリンピアード(競技部門,六目並べ). コンピュータオリンピアード(競技部門,象棋). コンピュータオリンピアード(競技部門,ドッツアンドボックス). コンピュータオリンピアード(競技部門,国際ドローツ). コンピュータオリンピアード(競技部門,囲碁). コンピュータオリンピアード(競技部門,'9路盤囲碁'). コンピュータオリンピアード(競技部門,ヘックス). コンピュータオリンピアード(競技部門,ハバナ). コンピュータオリンピアード(競技部門,ラインズオブアクション). コンピュータオリンピアード(競技部門,X) :- 新しい競技種目になる(X). コンピュータオリンピアード(開催予定,第15回,金沢市内,'2010年','自9月25日','至10月2日'). コンピュータオリンピアード(第15回大会開催形態,共同エベント). コンピュータオリンピアード(第15回大会共同エベント,主催,'ICGA'). コンピュータオリンピアード(第15回大会共同エベント,主催,'JAIST'). コンピュータオリンピアード(第15回大会,競技日程,後日決定). コンピュータオリンピアード(参加申し込みなどの詳細,後日お知らせ致します).
597 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 06:28:59 ] pc12.2ch.net/test/read.cgi/tech/1263824755/455 # [1] 授業単元: アルゴリズム # [2] 問題文(含コード&リンク):課題2−2と2−3です。 # 課題2-2 # コマンドライン引数で入力される任意個の実数を,malloc関数で動的に確保した配列に 格納するように,kadai2_1.c を修正したプログラム kadai2_2.c を作成せよ. # # 実行例は課題2-1と同じ. # -------------------------------------------------------------------------------- # 課題2-3 # コマンドライン引数で入力される任意個の実数に対し,整数部(integer part)と小数部(fractional part)に分割し,実行例のように出力するプログラム kadai2_3.c を作成せよ.ただし,以下の仕様を満足すること. # # 実数値,整数部,小数部をメンバにもつ構造体を定義し,構造体の配列として利用すること. # 構造体の配列は,malloc関数を利用して動的に確保すること. # 整数部,小数部の分割および構造体メンバへの格納は,dividePart関数を定義して利用すること. # 構造体配列の内容を実行例のように出力する printData関数を定義して利用すること. # 構造体配列の内容もとに整数部の合計,小数部の合計,実数値の合計を出力する printSum関数を定義して利用すること.
598 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 06:36:09 ] pc12.2ch.net/test/read.cgi/tech/1263824755/456 # [1] 授業単元: データ演習 # [2] 問題文(含コード&リンク): # できなかった問題は11−1です。 # 課題10−1を使う問題なので、できている10−1のソースコードを一緒に入れています。 # どなたか、よろしくお願いします。 # 課題10-1 # コマンドライン引数で指定される整数列を順番に二分探索木に登録し,キーボードから入力される値を探索するプログラム kadai10_1.c を作成せよ. # また,最初に inorderで木をなぞった結果を示せ. # # 課題10−1に番兵を導入したプログラム kadai11_1.c を作成せよ. # # ヒント:番兵用に1個のノードを定義し,ノードのNULLポインタが番兵を指すようにすればよい. # 挿入関数と探索関数,inorder, main関数を変更すればよい.挿入時の挿入ノードを決める操作も番兵を使えばよい. # その際,初期状態として,rootが番兵を指す状態から開始する必要がある.
599 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 06:38:48 ] pc12.2ch.net/test/read.cgi/tech/1263824755/459 # [1] 授業単元:プログラミング実践 # [2] 問題文 # アフィン変換のプログラムを作成し、下の図の真ん中を座標の中心にして60°左回転した結果を出力せよ。 # (図)affin.txt # 000000000 # 000010000 # 000010000 # 000010000 # 011111110 # 000010000 # 000010000 # 000010000 # 000000000 #
600 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 07:45:56 ] >>597 % Prolog program :- user_parameters(L), dividePart(L,L1), assertz('>>597 構造体'(L1)). dividePart([],[]) :- !. dividePart([A|R1],[(整数部(_整数部),小数部(_小数部),(実数値(_実数値))|R2]) :- atom_to_term(A,_実数値,_), _整数部 is float_integer_part(_実数値), _小数部 is float_fractional_part(_実数値), dividePart(R1,R2). printData :- '>>597 構造体'(L), printSum(L,0.0,0.0,0.0). printSum([],_整数部の合計,_小数部の合計,_実数値の合計) :- write_formatted('整数部の合計=%t,小数部の合計=%t,実数値の合計=%t\n',[_整数部の合計,_小数部の合計,_実数値の合計]),!. printSum((整数部(_整数部),小数部(_小数部),(実数値(_実数値))|R1],_整数部の合計1,_小数部の合計1,_実数値の合計1) :- _整数部の合計2 is _整数部 + _整数部の合計1, _整数部の合計2 is _小数部 + _小数部の合計1, _実数値の合計2 is _実数値 + _実数値の合計1, printSum(R1,_整数部の合計2,_小数部の合計2,_実数値の合計2).
601 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 07:52:16 ] >>596 の二節を訂正します % Prolog コンピュータオリンピアード(競技部門,X) :- 新しい競技種目になる(X). => コンピュータオリンピアード(競技部門,X) :- コンピュータオリンピアード(新しい競技種目になる,X). コンピュータオリンピアード(開催予定,第15回,金沢市内,'2010年','自9月25日','至10月2日'). => コンピュータオリンピアード(開催予定,第15回,金沢市内,'自2010年9月25日','至2010年10月2日'). 下は原文のニュアンスから少し遠くなりますが。 '9月25日'-'10月2日'のような構造を持ったデータを持ってきたくないんです。
602 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 08:02:08 ] >>601 それなら、 コンピュータオリンピアード(開催予定,第15回,金沢市内,'2010年'). コンピュータオリンピアード('第15回',開催日時,'9月25日から10月2日まで'). の方がいいのでは。 文の解析を残すのがいいかどうかというところだね。
603 名前:602 mailto:sage [2010/02/04(木) 08:07:27 ] コンピュータオリンピアードを述語に持って来ているということは、 これがクラスという意識が多少はあるのかな?
604 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 08:32:44 ] >>602 コンピュータオリンピアード('第15回',開催予定日,'9月25日から10月2日まで'). ですか。 「9月25日から10月2日まで」に比べて「9月25日から10月2日にかけて」は ふくらみがありますね。こういう部分の表現は自然言語に敵わない。 いや、自然言語は大袈裟で単に「掛かる」という言葉のふくらみかな。 >>603 検索の都合もあるw ゼネラルデータベースのように特権的なテーブルとか 述語を持たない系は魅力がありますが、現実には大変でしょう。しかしまあ、 アナーキズムも再評価されているようですから、わからないですよね。
605 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 09:15:50 ] pc12.2ch.net/test/read.cgi/tech/1263824755/465 # [2] CIP法での1次元の移流計算 # # 自分で以下のプログラムを作ったところ。 # kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10493.txt # tの値を増やすにつれてf[n][t]のnの初期のほうの値がなぜかでかい数字が出てしまいます。 # 自分の計算ではtの値を増やせば、f[n][t]のnの初期のほうの値は0になると思うんですが、一体どこが悪いのか、ご教授をお願いいたします。
606 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 13:20:04 ] pc12.2ch.net/test/read.cgi/tech/1153585095/340 # 【 課題 】 # 次の要求を満たすフィルタプログラムを作れ。 # 1.標準入力から行を読み込み、空白をカンマに変換し、標準出力に出力する # 2.連続した複数の空白はひとつの空白と同じと見なす # 3.タブ文字も空白と見なす # 4.オプション等は設けない # 5.フィルタとして動作するので余分なメッセージ類は一切出力しない # # 例として「1 Bill 1955 Oct 28」と入力したら「1,Bill,1955,Oct,28」と出力されるようにします。
607 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 17:11:30 ] >>606 % Prolog (その一) 例で ","の後に空白が一つ入っているのは誤りだと思う。 program :- repeat, 標準入力から行を読み込み(_行), 空白をカンマに変換し、標準出力に出力する(_行). 空白をカンマに変換し、標準出力に出力する(end_of_file) :- !. 空白をカンマに変換し、標準出力に出力する(_行) :- 空白をカンマに変換し、(_行,_変換された行), 標準出力に出力する(_変換された行), fail. 標準入力から行を読み込み(_行) :- get_line(_行). 空白をカンマに変換し、(_行,_変換された行) :- atom_chars(_行,Chars), 文字ならびの空白をカンマに変換(Chars,Chars2), atom_chars(_変換された行,Chars2). 文字ならびの空白をカンマに変換([],[]) :- !. 文字ならびの空白をカンマに変換(L,[',']) :- 空白またはタブならび(L),!. 文字ならびの空白をカンマに変換(L1,[',',A|R2]) :- append(L0,[A|R3],L1), \+(A=' '),\+(A='\t'), 空白またはタブならび(L0), 文字ならびの空白をカンマに変換(R3,R2),!. 文字ならびの空白をカンマに変換([A|R1],[A|R2]) :- 文字ならびの空白をカンマに変換(R1,R2),!.
608 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 17:13:11 ] >>606 % Prolog (その二) 空白またはタブならび([' ']) :- !. 空白またはタブならび(['\t']) :- !. 空白またはタブならび([' '|R]) :- 空白またはタブならび(R),!. 空白またはタブならび(['\t'|R]) :- 空白またはタブならび(R),!. 標準出力に出力する(_行) :- write_formatted('%t\n',[_行]).
609 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 17:18:29 ] pc12.2ch.net/test/read.cgi/tech/1260922392/27 # 微分方程式の境界値問題 # # y''(x) = f(y(x)), 0<x<1, y(0)=y(1)=0 # # の解を数値的に求める方法のひとつとして、射的法(shooting method) # があります。自然数nを与えて、区間[0,1]をn等分して、ykをy(k/n) # の近似式として、漸化式(ここから下のyの後ろのカッコの中身は添え字と思え) # y(0) = 0, y(1)= t, # y(k+1) = 2y(k) - y(k-1) + 1/n²f(y(k)), k=1,2,…,2n-1, # の解の数値的y(n)=0 を満たすものを、上の問題の近似解として求める方法です。 # yn=0となる数列を求めるために、ynを未知パラメータtの関数とみなして、tに関する二分法を使います。 # # 正の実数aを適当に定めて、 # f(y) = ay(1 - y) # の場合の近似解y(k)を、誤差10-6の範囲で求めるプログラムを作成してください。 # 自然数nは適当に決めてください。(2のベキ乗にするのが無難です) # 実数あの値は、とりあえず20にしてみてください。 # (注意:a≧10でないと…)
610 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 18:24:04 ] >>52 音通(恨み,浦見). 音通(恨み,裏見). この系統は根深い。
611 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 20:58:20 ] >>515 使用言語:J g=:(0=3&|)+.(3 e. 10.inv) f=:[:;{&('NO';'YES') f g 11 NO f g 12 YES f g 13 YES
612 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 06:06:05 ] >>206 % Prolog (その一) 自分で五つの問題文を入力して練習するタイピング練習ソフト :- 自分で五つの問題文を入力して(1,_五つの問題文), 問題文は入力した五つの中から10題がランダムに出題される(1,_五つの問題文,_問題文ならび), タイプ練習(_問題文ならび,_正解数), write_formatted('正解数は%tです\n',[_正解数]). 自分で五つの問題文を入力して(N,[]) :- N > 5,!. 自分で五つの問題文を入力して(N,[_問題文|R]) :- 問題文を入力して(_問題文1), 問題文の長さを調整する(_問題文1,_問題文), N2 is N + 1, 自分で五つの問題文を入力して(N2,R). 問題文を入力して(_問題文) :- write_formatted('%tつ目の問題文 :',[N]),get_line(問題文),!. 問題文の長さを調整する(_問題文,_問題文) :- sub_atom(_問題文,0,_長さ,_,_問題文), _長さ =< 20,!. 問題文の長さを調整する(_問題文1,_問題文) :- sub_atom(_問題文1,0,20,_,_問題文).
613 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 06:07:07 ] >>206 % Prolog (その二) 問題文は入力した五つの中から10題がランダムに出題される(N,_,[]) :- N > 10,!. 問題文は入力した五つの中から10題がランダムに出題される(N,_問題集,[_問題|R]) :- M is (random mod 5) + 1, list_nth(M,_問題集,_問題), N2 is N + 1, 問題文は入力した五つの中から10題がランダムに出題される(N2,_問題集,R). タイプ練習([],0) :- !. タイプ練習([_問題文|R],_正解数) :- write_formatted('%t\n',[_問題文]),get_line(Line), _問題文 = Line, タイプ練習(R,_正解数2), _正解数 is _正解数2 + 1,!. タイプ練習([_|R],_正解数) :- タイプ練習(R,_正解数).
614 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 06:28:08 ] >>212 % Prolog '2つの名前を入力しステータス(ランダム)を決定し 勝敗表示する' :- '2つの名前を入力し'(_名前1,_名前2), 'ステータス(ランダム)を決定し'(_名前1のステータス,_名前2のステータス), 勝負表示する(_名前1,_名前2,_名前1のステータス,_名前2のステータス),!. 'ステータス(ランダム)を決定し'(_名前1のステータス,_名前2のステータス) :- _名前1のステータス is random mod 100 + 1, _名前2のステータス is random mod 100 + 1. 勝負表示する(_名前1のステータス,_名前2のステータス) :- _名前1のステータス > _名前2のステータス, write_formatted('%tの勝ちです\n',[_名前1]),!. 勝負表示する(_名前1のステータス,_名前2のステータス) :- _名前1のステータス < _名前2のステータス, write_formatted('%tの勝ちです\n',[_名前2]),!. 勝負表示する(_名前1のステータス,_名前2のステータス) :- _名前1のステータス = _名前2のステータス, write('引き分けです\n'),!.
615 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 09:44:04 ] >>238 % Prolog ここでは構造体=述語定義と解釈してみる。 '構造体を利用して、氏名,年齢,性別が5人分書かれたテキストファイルを読み込んで、画面に表示する'(_テキストファイル) :- '構造体を利用して、氏名,年齢,性別が5人分書かれた次のようなテキストファイルを読み込んで、(_テキストファイル,Lines), abolish(氏名・年齢・性別/3), '氏名・年齢・性別構造体として定義'(Lines). 画面に表示する,!. '構造体を利用して、氏名,年齢,性別が5人分書かれたテキストファイルを読み込んで、(_テキストファイル,Lines) :- get_lines(_テキストファイル,Lines),!. '氏名・年齢・性別構造体として定義'([]) :- !. '氏名・年齢・性別構造体として定義'([Line|R]) :- split(Line,[' '],[_氏名,_年齢,_性別]), assertz(氏名・年齢・性別(氏名(_氏名),年齢(_年齢),性別(_性別))), '氏名・年齢・性別構造体として定義'(R). 画面に表示する :- write('%20s %6s %4s\n',[氏名,年齢,性別]), 氏名・年齢・性別(氏名(_氏名),年齢(_年齢),性別(_性別)), write_formatted('%20s %6d %4s\n',[_氏名,_年齢,_性別]), fail. 画面に表示する.
616 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 10:45:47 ] >>515 使用言語:J 同じ値がでないステータスの生成なので引き分けはない。 f=:dyad define 'xs ys'=. 2?10000 smoutput x,' status ',":xs smoutput y,' status ',":ys smoutput (;(xs<ys){x;y),' win' ) 'scala' f 'clojrure' scala status 8546 clojrure status 8515 scala win
617 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 10:49:07 ] >>616 >>515 ではなくて >>212 でした
618 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 16:47:01 ] >>229 % Prolog 'テキストファイルの内容を,別のテキストファイルにコピーする'(_コピー元ファイル,_コピー先ファイル) :- open(_コピー元ファイル,read,Input,[type(binary)]), open(_コピー先ファイル,write,Output,[type(binary)]), repeat, 一文字読む(Input,C), 一文字書き出す(Output,C), close(Input), close(Output),!. 一文字読む(Input,C) :- get_byte(C). 一文字書き出す(Output,-1) :- !. 一文字書き出す(Output,C) :- put_byte(Output,C),fail.!. テキストファイルの中身の内容を画面に出力(_コピー元ファイル,_コピー先ファイル) :- get_lines(_コピー元ファイル,Lines1), get_lines(_コピー先ファイル,Lines2), '2テキストを並べて行表示'(Lines1,Lines2),!. '2テキストを並べて行表示'([],[]) :- !. '2テキストを並べて行表示'([A|R1],[B|R2]) :- write_formatted('%t %t\n',[A,B]), '2テキストを並べて行表示'(R1,R2).
619 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 17:10:32 ] >>232 % Prolog モンテカルロ法で円周率を計算する(_円周率) :- モンテカルロ法で円周率を計算する(1,10000,0,_円周率),!. モンテカルロ法で円周率を計算する(M,N,Y,X) :- M > N,X is 4.0 * Y / N,!. モンテカルロ法で円周率を計算する(M,N,Y,X) :- U1 is ((random mod 10000) / 10000) ^ 2, U2 is ((random mod 10000) / 10000) ^ 2, U1 + U2 =< 1.0, Y2 is Y + 1, M2 is M + 1, モンテカルロ法で円周率を計算する(M2,N,Y2,X),!. モンテカルロ法で円周率を計算する(M,N,Y,X) :- M2 is M + 1, モンテカルロ法で円周率を計算する(M2,N,Y,X),!.
620 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 17:24:20 ] >>244 % Prolog オイラー級数を用いて、πの近似値を求める(_円周率) :- findsum(U,(for(1,N,100000),U is 1 / (N * N)),Sum), _円周率 is sqrt(6 * Sum).
621 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 17:25:31 ] Prolog氏かっけー。
622 名前:620 mailto:sage [2010/02/05(金) 19:16:08 ] ごめん出題は >>144 だった。
623 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 07:00:34 ] 大学が ->受験->春休み になるから、出題なくなりますね。未解決問題を しばらくは潰していきます。
624 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 05:47:54 ] pc12.2ch.net/test/read.cgi/tech/1263824755/483 # [1] C言語プログラミング初歩(専門学校) # [2] int型の配列変数A[64][32]をB[32][64]に代入する. # 次の対応があるようにすること # A[0][0] -> A[0][1] -> A[0][31] ->A[1][0] ->....->A[63][31] # B[0][0] -> B[0][1]-> B[0][31] -> B[0][32]->....->B[31][63] # (上の段と下の段が一致) # A[m][n]には値 (m+n) % 31が入っているものとする。
625 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 05:51:59 ] pc12.2ch.net/test/read.cgi/tech/1263824755/480 # [2] プログラム # 環境 # [3.1] OS:Linux # [3.2] コンパイラ名:gcc # [3.3] 言語:C++ # 以下の実行結果はどうなるか # # # #include<stdio.h> # #define N10 # int main(){ # int i,wa=0; # for(i=1;i<N;i++){ # if((i%2) == 0) continue; # wa+=i;} # printf("%d\n",wa); # return 0;} # # これを、C言語を他の言語に書き換える課題とします。
626 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 06:23:14 ] >>624 % Prolog ならびを2要素ごとに纏める([],[]) :- !. ならびを2要素ごとに纏める([L1,L2|R1],[L3|R2]) :- append(L1,L2,L3), ならびを2要素ごとに纏める(R1,R2).
627 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 06:34:42 ] >>624 % Prolog 'A[m][n]には値 (m+n) % 31が入っている'(A) :- 'A[m][n]には値 (m+n) % 31が入っている'(0,A),!. 'A[m][n]には値 (m+n) % 31が入っている'(M,[]) :- M > 31,!. 'A[m][n]には値 (m+n) % 31が入っている'(M,[L|R]) :- 'A[m][n]には値 (m+n) % 31が入っている'(M,0,L), M2 is M + 1, 'A[m][n]には値 (m+n) % 31が入っている'(M2,R). 'A[m][n]には値 (m+n) % 31が入っている'(M,N,[]) :- N > 63,!. 'A[m][n]には値 (m+n) % 31が入っている'(M,N,[X|R]) :- X is (M + N) mod 31, N2 is N + 1, 'A[m][n]には値 (m+n) % 31が入っている'(M,N2,R),!.
628 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 07:03:06 ] >>625 % Prolog 'Prologでの表現' :- 'Prologでの表現'(1,X), write_formatted('%t\n',[X]). 'Prologでの表現'(9,0) :- !. 'Prologでの表現'(N,X) :- 0 is N mod 2, N2 is N + 1, 'Prologでの表現'(N2,Y), X is Y + 1,!. 'Prologでの表現'(N,X) :- \+(0 is N mod 2), N2 is N + 1, 'Prologでの表現'(N2,X).
629 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 16:33:47 ] pc12.2ch.net/test/read.cgi/tech/1263824755/494 # 【質問テンプレ】 # [1] 授業単元:C言語入門 # [2] 問題文: # キーボードから英文を1文字ずつ入力し母音の出現数をカウントする。 # その数だけアスタリスクを表示する。 # ただし、入力を終了するときはCtrl+Zを押すものとする。(vowel.c)
630 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 16:44:40 ] >>629 % Prolog キーボードから英文を1文字ずつ入力し母音の出現数をカウントする。その数だけアスタリスクを表示する :- キーボードから英文を1文字ずつ入力し(Chars), 母音の出現数をカウントする(Chars,L), その数だけアスタリスクを表示する(L). キーボードから英文を1文字ずつ入力し(Chars) :- get_chars(Chars). 母音の出現数をカウントする(L) :- findall('*',(member(A,Chars),member(A,['A','E','I','O','U',a,e,i,o,u])),L). その数だけアスタリスクを表示する(L) :- concat_atom(L,S), write_formatted('%t\n',[S]).
631 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 16:50:26 ] >>630 (>>629 ) 訂正 % Prolog 述語 母音の出現数をカウントする の第一引数が落ちていました。 キーボードから英文を1文字ずつ入力し母音の出現数をカウントする。その数だけアスタリスクを表示する :- キーボードから英文を1文字ずつ入力し(Chars), 母音の出現数をカウントする(Chars,L), その数だけアスタリスクを表示する(L). キーボードから英文を1文字ずつ入力し(Chars) :- get_chars(Chars). 母音の出現数をカウントする(Chars,L) :- findall('*',(member(A,Chars),member(A,['A','E','I','O','U',a,e,i,o,u])),L). その数だけアスタリスクを表示する(L) :- concat_atom(L,S), write_formatted('%t\n',[S]).
632 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 16:55:48 ] >>629 % Prolog 母音出現数をカウントする 以下は、この定義の方が自然かもしれない。 % でも、私はアスタリスクの表示でカウントしているとする>>631 の方が好きだ。 キーボードから英文を1文字ずつ入力し母音の出現数をカウントする。その数だけアスタリスクを表示する :- キーボードから英文を1文字ずつ入力し(Chars), 母音の出現数をカウントする(Chars,_カウント), その数だけアスタリスクを表示する(_カウント). キーボードから英文を1文字ずつ入力し(Chars) :- get_chars(Chars). 母音の出現数をカウントする(Chars,_カウント) :- count((member(A,Chars),member(A,['A','E','I','O','U',a,e,i,o,u])),_カウント). その数だけアスタリスクを表示する(_カウント) :- length(L,_カウント), all(L,'*'), concat_atom(L,S), write_formatted('%t\n',[S]).
633 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 19:30:00 ] pc12.2ch.net/test/read.cgi/tech/1263824755/502 # [1] 授業単元:プログラミング演習 # [2] 問題文(含コード&リンク): # 入力された2つの文字列str1,str2を比較し、str1にstr2の文字列が含まれている場合に1を、 # 含まれていない場合に-1を返す関数、strcmpを作成せよ。 # int strcmp( char *str1, char *str2); # ex. str1=”abaabab” , str2=”aab” 1 # ex. str1=”abaabab” , str2=”abb” -1
634 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 19:36:17 ] >>633 % Prolog 入力された2つの文字列Str1,Str2を比較し、Str1にStr2の文字列が含まれている場合に1を、含まれていない場合に-1を返す(Str1,Str2,1) :- sub_atom(Str1,_,_,_,Str2),!. 入力された2つの文字列Str1,Str2を比較し、Str1にStr2の文字列が含まれている場合に1を、含まれていない場合に-1を返す(Str1,Str2,(-1)) :- \+(sub_atom(Str1,_,_,_,Str2)),!.
635 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 19:54:06 ] >>633 % Prolog 「1を返す」という部分が微妙な位置にある例。 入力された2つの文字列Str1,Str2を比較する(Str1,Str2,_診断) :- 'Str1にStr2の文字列が含まれている場合に1を返す'(Str1,Str2,_診断),!. 入力された2つの文字列Str1,Str2を比較する(Str1,Str2,_診断) :- 'Str1にStr2の文字列が含まれていない場合に-1を返す'(Str1,Str2,_診断),!. 'Str1にStr2の文字列が含まれている場合に1を返す'(Str1,Str2,1) :- sub_atom(Str1,_,_,_,Str2),!. 'Str1にStr2の文字列が含まれていない場合に-1を返す'(Str1,Str2,(-1)) :- \+(sub_atom(Str1,_,_,_,Str2)),!.
636 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 04:33:36 ] >>633 % Prolog 入力された2つの文字列Str1,Str2を比較し、Str1にStr2の文字列が含まれている場合に1を、含まれていない場合に-1を返す(Str1,Str2,1) :- 'Str1にStr2の文字列が含まれている'(Str1,Str2),!. 入力された2つの文字列Str1,Str2を比較し、Str1にStr2の文字列が含まれている場合に1を、含まれていない場合に-1を返す(Str1,Str2,(-1)) :- 'Str1にStr2の文字列が含まれていない'(Str1,Str2),!. 'Str1にStr2の文字列が含まれている'(Str1,Str2) :- sub_atom(Str1,_,_,_,Str2),!. 'Str1にStr2の文字列が含まれていない'(Str1,Str2) :- \+(sub_atom(Str1,_,_,_,Str2)),!.
637 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 04:51:03 ] >>634->>636 要するにどこで組込述語を含む原初的な述語を目標とする節に行き着くか。そこまで 自然な説明として目標を辿ることができるように定義できるか、ということ。 ここで原初的な述語とは、先祖定義に現れる親子/2のような述語。 先祖(X,Y) :- 親子(X,Y). 先祖(X,Y) :- 親子(X,Z),先祖(Z,Y). 親子(義朝,頼朝). 親子(為朝,義朝).
638 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 04:52:59 ] ふつう祖先だったかw
639 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 05:01:20 ] pc12.2ch.net/test/read.cgi/tech/1263824755/515 # 【質問テンプレ】 # [1] 授業単元:C言語 # [2] 問題文: # input.ppm というPPMフォーマットのファイルを読み込み, ヘッダをつけて縦横をそれぞれ 1/2(面積にして1/4) にして出力するプログラムを書きなさい. # input.ppm のサイズは 410x307 である.
640 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 21:12:40 ] pc12.2ch.net/test/read.cgi/tech/1248012902/839 # 【 課題 】5個以上の学生番号(2桁程度の数字で良い)、 # 名前、身長をプログラム中でセットし、 # 学生番号または名前をもとに身長を調べるプログラム。 # 学生番号と名前の入力データ、検索結果の身長データを両方表示する機 能があること。 # 【 形態 】1. Javaアプリケーション(main()で開始)/ # 【 期限 】2/10(水) # # たぶん二分探索使うかと思うのですが # よくわかりません!すみませんがよろしくおねがいします!!
641 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 21:38:31 ] >>640 % Prolog 学生(11,源亮,168). 学生(33,高階高子,156). 学生(7,九条良常,173). 学生(61,石川広也,162). 学生(16,藤原隆甫,177). 学生番号または名前をもとに身長を調べる(_学生番号または名前,_身長) :- integer(_学生番号または名前), 学生(_学生番号または名前,_名前,_身長), write_formatted('学生番号=%t,名前=%t,身長=%t\n',[_学生番号または名前,_名前,_身長]). 学生番号または名前をもとに身長を調べる(_学生番号または名前,_身長) :- atom(_学生番号または名前), 学生(_学生番号,_学生番号または名前,_身長), write_formatted('学生番号=%t,名前=%t,身長=%t\n',[_学生番号,_学生番号または名前,_身長]).
642 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 21:56:43 ] >>641 % Prolog write_formatted/2で結果を表示するのに、第二引数に"_身長"が付いているのは 奇妙ですね。これは同姓同名の有り得ることを思い起こさせるための配慮と 考えてください。
643 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 05:06:03 ] pc12.2ch.net/test/read.cgi/tech/1263824755/528 # [1] 授業単元:C言語 # [2] 問題文: ガウス分布における数値積分 I=∫f(x)dx,←xmin〜xmax f(x)=1/√(2*π*σ)*exp(a) a=-(x-μ)*(x-μ)/(2*σ*σ) # 積分区間は[xmin,xmax]=[myuu-2siguma,myuu+2siguma]として計算すること。なおμ=0,σ=1とした場合、I=0.95449と # なるので確認すること。
644 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 05:09:15 ] pc11.2ch.net/test/read.cgi/db/1252492296/500 # MYSQLなんですけど # # date data # 2010/01/01 hoge1 # 2010/01/05 hoge2 # # みたいなテーブルから # # 2010/01/01 hoge1 # 2010/01/02 NULL # 2010/01/03 NULL # 2010/01/04 NULL # 2010/01/05 hoge2 # # のような結果の出せるSQLを求めてます。 # # select * from table between date '2010/01/01' and '2010/01/05' # # とするとデータのある2レコードしか出ないのですが、 # データがない部分も日付を出しつつ、デフォルトのデータないよっていう文字列を出せると助かります。
645 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 07:04:31 ] >>644 % Prolog こんな述語定義が必要。日付連鎖は未定義かも知れない。後で。 '日付からデータを表示する。存在しない日はデータをNULLとして表示'(_日付下限,_日付上限) :- 日付からデータを表示する。存在しない日はデータをNULLとして表示(_日付下限), 日付連鎖(_日付下限,_日付), 日付からデータを表示する。存在しない日はデータをNULLとして表示(_日付), _日付=_日付上限. '日付からデータを表示する。存在しない日はデータをNULLとして表示'(_日付) :- _日付 = (_年/_月/_日), table(_日付,Data), write_formatted('%2d%2d%2d %t\n',[_年,_月,_日,Data]),!. '日付からデータを表示する。存在しない日はデータをNULLとして表示'(_日付) :- _日付 = ( _年/_月/_日), \+(table(_日付,Data)), write_formatted('%2d%2d%2d NULL\n',[_年,_月,_日]),!.
646 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 07:06:43 ] pc12.2ch.net/test/read.cgi/tech/1248012902/847 # 【 課題 】電話番号検索を行うjavaプログラムを、探索アルゴリズムを用いて作成せよ。 # 【 補足 】・最初に顧客番号(2桁の数字)、顧客名(Yamadaなど姓のみ)、 # 電話番号(09012345678の形式、ハイフンなし)という顧客データを10人以上プログラム中でセットし、 # 顧客番号または姓をもとに電話番号を調べるアルゴリズムを作成する。 # ・顧客番号と顧客名の入力データ、電話番号データを両方表示させる機能をつけなければならない。 # ・(もし可能なら)データリストへの顧客データの追加or削除機能を盛り込みたい
647 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 07:21:04 ] >>646 % Prolog 実際には、入力された項・要素の形式検査をしますが。 電話番号を10件登録する :- write('引数として、顧客番号(2桁の数字)、顧客名(Yamadaなど姓のみ)、電話番号(09012345678の形式、ハイフンなしの三つの項をもつ複合項、電話番号を10件入力します\n'), for(1,N,10),write_formatted('%t件目 : '),read(X),assertz(X),N=10. 顧客データの追加(_追加する項) :- assertz(_追加する項). 顧客データの削除(_追加する項) :- retract(_削除する項). 電話番号の検索(_顧客番号,_顧客名,_電話番号) :- 電話番号(_顧客番号,_顧客名,_電話番号).
648 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 07:23:27 ] >>647 訂正 write_formatted/2の引数が目標で1個になってしまっているところがあった。 % Prolog 実際には、入力された項・要素の形式検査をしますが。 電話番号を10件登録する :- write('引数として、顧客番号(2桁の数字)、顧客名(Yamadaなど姓のみ)、電話番号(09012345678の形式、ハイフンなしの三つの項をもつ複合項、電話番号を10件入力します\n'), for(1,N,10),write_formatted('%t件目 : ',[N]),read(X),assertz(X),N=10. 顧客データの追加(_追加する項) :- assertz(_追加する項). 顧客データの削除(_追加する項) :- retract(_削除する項). 電話番号の検索(_顧客番号,_顧客名,_電話番号) :- 電話番号(_顧客番号,_顧客名,_電話番号).
649 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 07:25:45 ] pc12.2ch.net/test/read.cgi/tech/1263824755/534 # [1] 授業単元:プログラミング # [2] 問題文(含コード&リンク): # 配列に # Institute of Technology # という文字列を代入し、ポインタを利用して # ・各文字が格納されているアドレス # ・そのアドレスに格納されている文字 # を表示するプログラムを作成せよ。
650 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 07:27:55 ] >>649 % Prolog % Prologではアドレス操作はできない。したがって、この問題は解けない。
651 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 07:48:06 ] >>648 (>>646 ) % Prolog さすがにちょっと乱暴だったか。 顧客データの追加(_顧客番号,_顧客名,_電話番号) :- assertz(電話番号(_顧客番号,_顧客名,_電話番号)). 顧客データの削除(_顧客番号,_顧客名,_電話番号) :- retract(電話番号(_顧客番号,_顧客名,_電話番号)).
652 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 07:59:23 ] >>648 % Prolog この「いろんな言語で宿題スレ」に書き込みだしてから初めて read/1 を使っています。 % この組込述語は入力を項として解釈する便利で基本的なものですが、 % 入力時にピリオドで終了する必要があります。これを一般ユーザに要請するのは % 現実的ではないと考えて、get_line/1等を用いてきました。 % 利用者がPrologの項とそのルールについて理解している場合はreadを使って % 構わないと思います。なお細かいことですが、read/1の場合、 % 標準では処理系がプロンプトを表示するが普通です。その表示するプロンプトの % 変更なども組込述語で行えるようになっています。
653 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 08:10:02 ] >>642 ?
654 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 08:26:31 ] pc12.2ch.net/test/read.cgi/tech/1263824755/535 # [1] 授業単元:プログラミング # [2] 問題文(含コード&リンク): # まず次の内容のテキストファイルを準備せよ。 # (メモ帳で作成し、test02.txtという名前で保存すること) # # abc # 123 # def # 456 # ghi # 789 # jkl # 000 # # 次に、作成したテキストファイルから内容を読み出し、 # 各行の先頭に 01 02 03 というように番号を付加して # 画面に出力するプログラムを作成せよ。
655 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 08:38:03 ] >>654 % Prolog 'テキストファイルから内容を読み出し、各行の先頭に 01 02 03 というように番号を付加して画面に出力する' :- get_lines('test02.txt',L), '各行の先頭に 01 02 03 というように番号を付加して画面に出力する'(1,L). '各行の先頭に 01 02 03 というように番号を付加して画面に出力する'(_,[]) :- !. '各行の先頭に 01 02 03 というように番号を付加して画面に出力する'(N,[Line|R]) :- write_formatted_atom('%2d',[N],A), 空白を0に置換する(A,A2), write_formatted('%t %t\n',[A2,Line]), N2 is N + 1, '各行の先頭に 01 02 03 というように番号を付加して画面に出力する'(N2,R). 空白を0に置換する(A,A2) :- atom_chars(A,L), ならびの置換(' ','0',L,L2), atom_chars(A2,L2).
656 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 09:04:16 ] >>653 % Prolog ある述語の引数を表示する場合の一般解は :- ある述語(_引数), write_formatted('%t\n'm,[_引数]), fail. ある述語の引数を表示する場合の一般解は. でしょう。>>641 では同姓同名をきっちりと表示することをサボっています。 それでそのことをこの述語を利用するプログラマに注意するために変数の引数を 強制しています。こうして置けば、この述語をテストした時に ?- 学生番号または名前をもとに身長を調べる(藤原隆甫,_身長). _身長 = 177 という解を示してインタプリタが停止します。これがPrologプログラマをして 同姓同名への配慮が必要かどうか判断させる契機となるということです。
657 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 09:07:39 ] >>656 変な"m"が混入してしまいました。 write_formatted('%t\n'm,[_引数]), -> write_formatted('%t\n',[_引数]), です。
658 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 11:53:10 ] >>654 % Prolog 出題の元スレの覗いていたら、%02d というformat表記が出ていた。 % もしかしてと試みたら私のPrologでも同じ。これまでの私の人生は何だったんだwww % ということで、 'テキストファイルから内容を読み出し、各行の先頭に 01 02 03 というように番号を付加して画面に出力する' :- get_lines('test02.txt',L), '各行の先頭に 01 02 03 というように番号を付加して画面に出力する'(1,L). '各行の先頭に 01 02 03 というように番号を付加して画面に出力する'(_,[]) :- !. '各行の先頭に 01 02 03 というように番号を付加して画面に出力する'(N,[Line|R]) :- write_formatted('%02d %t\n',[N,Line]), N2 is N + 1, '各行の先頭に 01 02 03 というように番号を付加して画面に出力する'(N2,R).