1 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 09:57:19 ] 第二編も512Kbyte越えで終了しました。 前スレで未解決な課題は順次このスレにコピーします。
49 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 16:07:40 ] # [1] 授業単元:Prolog初歩 # [2] 課題:以下の情報を述語として定義しなさい。 # # 賞味期限 # 16…予約はじまる # 22…予約最盛期 # 23…我慢できない # 24…最盛期 # 25…ロスタイム # 26…半額 # 27…更に半額 # 28…返品 # 29…廃棄処分 # 30…廃棄処分逃れてもカビ #
50 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 16:13:16 ] >>49 % Prolog :- op(500,xfx,…). 賞味期限(16…予約はじまる). 賞味期限(22…予約最盛期). 賞味期限(23…我慢できない). 賞味期限(24…最盛期). 賞味期限(25…ロスタイム). 賞味期限(26…半額). 賞味期限(27…更に半額). 賞味期限(28…返品). 賞味期限(29…廃棄処分). 賞味期限(30…廃棄処分逃れてもカビ).
51 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 16:50:47 ] >>49 % Prolog 賞味期限(16,予約はじまる). 賞味期限(22,予約最盛期). 賞味期限(23,我慢できない). 賞味期限(24,最盛期). 賞味期限(25,ロスタイム). 賞味期限(26,半額). 賞味期限(27,更に半額). 賞味期限(28,返品). 賞味期限(29,廃棄処分). 賞味期限(30,廃棄処分逃れてもカビ).
52 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 17:11:44 ] >>22 % Prolog こんなところから。 重層的な対象(待つ,人). 重層的な対象(待つ,風). 重層的な対象(焼く,身). 重層的な対象(焼く,藻). 形態的近似(松,帆). 形態的近似(帆,松). 音通(待つ,松). 音通(松,待つ). 音通(裏,占). 音通(占,裏). 音通(裏,浦). 音通(浦,裏). 音通(占,浦). 音通(浦,占). 連想(X,Y) :- 音通(X,Y). 連想(X,Y) :- 形態的近似(X,Y). 連想(X,Y) :- 連想(X,Z),連想(Z,Y).
53 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 18:12:47 ] >>30 % Prolog '50人のクラス(男子35人)から5人の委員をランダムに選ぶ。このとき選ばれた委員の中に男3人、女2人が入る確率'(_確率) :- A is 50 * 49 * 48 * 47 * 46, B is 35 * 34 * 33 * 15 * 14, 階乗(5,C), 階乗(3,D), 階乗(2,E), F is C / ( D * E), _確率 is (B * F) / A.
54 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 18:29:49 ] pc12.2ch.net/test/read.cgi/tech/1248012902/652 # 【 課題 】キーボードから文字入力し、":"で文字列分割をし、結果を表示する。 # 文字列分割の際にはsplitメソッドを利用すること。
55 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 18:52:34 ] >>54 % Prolog 'キーボードから文字入力し、":"で文字列分割をし、結果を表示する' :- get_line(Line), split(Line,[':'],L), write_formatted('%t\n',[L]).
56 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 21:44:44 ] pc12.2ch.net/test/read.cgi/tech/1260532772/431 # [1] 授業単元:プログラミング # [2] 問題文(含コード&リンク): # 20000〜40000までの自然数のうち、数字の9を2個含む素数の個数を調べよ #
57 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 22:41:59 ] >>56 % Prolog '20000〜40000までの自然数のうち、数字の9を2個含む素数の個数'(_個) :- 素数生成(40000,_素数ならび), count((member(N1,_素数ならび),N1>=20000,数字の9を2個含む(N1)),_個). 数字の9を2個含む(N) :- number_chars(N,L), count(member('9',L),2),!. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 素数生成(N,X) :- findall(M,for(2,M,N),L), エラトステネスの篩(L,X). エラトステネスの篩([],[]) :- !. エラトステネスの篩([A|R1],[A|R2]) :- エラトステネスの篩(A,R1,L), エラトステネスの篩(L,R2). エラトステネスの篩(_,[],[]) :- !. エラトステネスの篩(N,[A|R1],R2) :- 0 is A mod N, エラトステネスの篩(N,R1,R2),!. エラトステネスの篩(N,[A|R1],[A|R2]) :- エラトステネスの篩(N,R1,R2).
58 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 03:29:44 ] pc12.2ch.net/test/read.cgi/tech/1260532772/439 # [1] 授業単元:プログラミング演習 # [2] 問題文(含コード&リンク): # # 三角形の「底辺」「高さ」「面積」を表現するために,整数型の2つの変数teihenとtakasaと浮動小数点型(double型)の1つの変数mensekiの,計3つの変数をメンバとしてもつ構造体型sankakuを宣言しよう. # # main関数の中で,構造体変数triangle1とtriangle2が次のように定義されているとする. # # struct sankaku triangle1 = {2, 8, 0.0}; # # struct sankaku triangle2 = {3, 6, 0.0}; # # このとき,以下の式で三角形の面積を計算し,それぞれのメンバ変数mensekiに求めた値を格納しよう.(整数同士の計算結果は必ず整数型の値になってしまうため,「2.0」という小数点付の数で割る計算をすること.そうすると,小数点以下の値まで求められる) # # (面積) = (底辺) × (高さ) / 2.0 # # さらに,格納されたそれぞれの面積の値(triangle1のmensekiとtriangle2のmenseki)を表示するプログラムを作成せよ.(表示の際にはdouble型の値を表示することになるので,printfの" "の中の書き方に注意すること)
59 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 06:58:36 ] >>12 使用言語: J f=:|.&.": f 56789 98765 1 + f 56789 98766
60 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 07:00:36 ] >>30 % Prolog 一般解を試みる。あまりすっきりしない。 'メンバーが男Mn人女Fn人で構成される時、男M人女N人をランダムに取り出す確率'(Mn,Fn,M,N,_確率) :- メンバー全員は(Mn,Fn,Sn), Sm is Sn - M - N + 1, Mm is Mn - M + 1, Nm is Nn - N + 1, '男M人女N人の取り出し順序は何通りか'(M,N,_何通り), '分母はSn*S(n-1)*..*S(m+1)*Smである'(Sn,Sm,_分母), '分子はMm*M(m-1)*..M(n+1)*M(n)*Fm*F(m-1)..*F(n+1)*Fnに取り出し順序の何通りかを掛けたものである'(Mn,Mm,Fn,Fm,_何通り,_分子), _確率 is _分子 / _分母. '分母はSn*S(n-1)*..*S(m+1)*Smである'(Sn,Sm,_分母) :- 階乗(Sn,Sm,_分母),!. '分子はMm*M(m-1)*..M(n+1)*M(n)*Fm*F(m-1)..*F(n+1)*Fnに取り出し順序の何通りかを掛けたものである'(Mn,Mm,Fn,Fm,_何通り,_分子) :- 階乗(Mn,Mm,A), 階乗(Fn,Fm,B), _分子 is A * B * _何通り,!. '男M人女N人の取り出し順序は何通りか'(M,N,_何通り) :- S is M + N, 階乗(M,M1), 階乗(N,N1), 階乗(S,S1), _何通り is S1 / ( M1 * N1 ).
61 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 07:05:28 ] >>30 つづき。 % Prolog メンバー全員は(Mn,Fn,Sn) :- Sn is Mn + Fn. 階乗(0,_,1) :- !. 階乗(1,_,1) :- !. 階乗(M1,M,1) :- M1 < M,!. 階乗(N,M,X) :- N1 is N - 1, 階乗(N1,M,Y), X is N * Y, asserta((階乗(N,M,X) :- (!))),!.
62 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 07:55:10 ] >>56 PHP codepad.org/nfttcf8D
63 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 07:58:46 ] >>56 使用言語: J +/2=+/"1'9'=":,.p:a+i.(_1&p:40000)-(a=._1&p:20000) 141
64 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 11:27:52 ] >>12 使用言語: maxima (%i36) f(n):=(r:0,while(n>0)do (r:r*10+mod(n,10),n:fix(n/10)),r); (%i37) f(987654321); (%o37) 123456789
65 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 11:57:00 ] pc12.2ch.net/test/read.cgi/tech/1260532772/442 # [1] 授業単元: プログラミング実習 # [2] 問題文(含コード&リンク): ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10305.txt # # ★演習問題3* # "izumi","Kanto","Kudo","Sato","Sugawara","Matuda","Wada"の7個の # 文字列の長さを求めて表示しなさい.ただし,ポインタのボインタを用いること. # # (実行結果) # 6 :izumi # 5 : kanto # 4 : Kudo # 4 : Sato # 8 : Sugawara # 6 : Matuda # 4 : Wada
66 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 12:04:17 ] >>65 % Prolog 指定された文字列('"izumi","Kanto","Kudo","Sato","Sugawara","Matuda","Wada"'). '"izumi","Kanto","Kudo","Sato","Sugawara","Matuda","Wada"の7個の文字列の長さを求めて表示する' :- 指定された文字列(_指定された文字列), atom_to_term(_指定された文字列,_文字コードならびのならび), member(Codes,_文字コードならびのならび), length(Codes,_長さ), atom_codes(_表示文字列,Codes), write_formatted('%t:%t\n',[_長さ,_表示文字列]), fail. '"izumi","Kanto","Kudo","Sato","Sugawara","Matuda","Wada"の7個の文字列の長さを求めて表示する'.
67 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 12:09:16 ] >>65 % Prolog 指定された文字列('"izumi","Kanto","Kudo","Sato","Sugawara","Matuda","Wada"'). '"izumi","Kanto","Kudo","Sato","Sugawara","Matuda","Wada"の7個の文字列の長さを求めて表示する' :- 指定された文字列(_指定された文字列), split(_指定された文字列,[',','"'],_文字ならびのならび), member(Chars,_文字ならびのならび), length(Chars,_長さ), atom_chars(_表示文字列,Chars), write_formatted('%t:%t\n',[_長さ,_表示文字列]), fail. '"izumi","Kanto","Kudo","Sato","Sugawara","Matuda","Wada"の7個の文字列の長さを求めて表示する'.
68 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 12:15:11 ] >>65 % Prolog 指定された文字列('"izumi","Kanto","Kudo","Sato","Sugawara","Matuda","Wada"'). '"izumi","Kanto","Kudo","Sato","Sugawara","Matuda","Wada"の7個の文字列の長さを求めて表示する' :- 指定された文字列(_指定された文字列), split(_指定された文字列,[',','"'],_文字ならびのならび), 文字列を長さと共に表示する(_文字ならびのならび). 文字列を長さと共に表示する([]) :- !. 文字列を長さと共に表示する([Chars|R]) :- length(Chars,_長さ), atom_chars(_表示文字列,Chars), write_formatted('%t:%t\n',[_長さ,_表示文字列]), 文字列を長さと共に表示する(R).
69 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 12:17:10 ] >>68 splitの下の行のインデントが狂いました。
70 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 12:20:47 ] そうそう。 インデントはPrologの実行にはまったく関係ありません。 これを習慣にしている人には見易いかなという程度の問題です。 冬休みに入って課題が出ない日がしばらくは続くでしょうね。
71 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 13:54:28 ] pc12.2ch.net/test/read.cgi/tech/1260532772/442 # [1] 授業単元: プログラミング実習 # [2] 問題文(含コード&リンク): ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10305.txt # # 演習問題1 # 入力されたデーク数に応じた配列を確保し,入力されたデータをその配列に保存し, それらの和を求めよ. # (実行結果例) # データの数は?10 # 1番目のデータを人力してください:1 # 2番目のデータを入力してください:2 # 3番目のデータを入力してください:3 # 4番目のデータを入力してください:4 # 5番目のデータを入力してください:5 # 6番目のデータを人力してください:6 # 7番目のデータを入力してください:7 # 8番目のデータを入力してください:8 # 9番目のデータを入力してください:9 # 10番目のデータを入力してください:10 # 和=55
72 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 14:00:34 ] >>71 % Prolog 入力されたデーク数に応じた配列を確保し,入力されたデータをその配列に保存し,それらの和を求める :- 催促付き整数入力('データの数は?',N), findsum(X,(for(1,M,N),催促付き整数入力('%t番目のデータを入力してください:',[M],X)),_和), write_formatted('和=%t\n',[_和]).
73 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 14:40:46 ] >>71 % Prolog >>72 はズルしてるのでもうひとつ。配列はリストと読み替えてください。 入力されたデーク数に応じた配列を確保し,入力されたデータをその配列に保存し,それらの和を求める :- 催促付き整数入力('データの数は?',N), 入力されたデーク数に応じた配列を確保し(N,L), 入力されたデータをその配列に保存し、([_],L), それらの和を求める(L,_和), write_formatted('%\n',[_和]). 入力されたデーク数に応じた配列を確保し(N,L) :- length(L,N). 入力されたデータをその配列に保存し、(_,[]) :- !. 入力されたデータをその配列に保存し、(L,[N|R]) :- length(L,M), 催促付き整数入力('%t番目のデータを入力してください:',[M],N), 入力されたデータをその配列に保存し、([_|L],R). それらの和を求める([],0). それらの和を求める([N|R],X) :- それらの和を求める(R,Y),X is N + Y.
74 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 15:26:57 ] >>65 使用言語: J (,.~#&.>)'izumi';'Kanto';'Kudo';'Sato';'Sugawara';'Matuda';'Wada' +-+--------+ |5|izumi | +-+--------+ |5|Kanto | +-+--------+ |4|Kudo | +-+--------+ |4|Sato | +-+--------+ |8|Sugawara| +-+--------+ |6|Matuda | +-+--------+ |4|Wada | +-+--------+
75 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 16:11:50 ] pc12.2ch.net/test/read.cgi/tech/1258158172/314 # [1] 授業単元: プログラミング # # [2] 問題文(含コード&リンク): # 遺伝的アルゴリズムを基にTSP(巡回セールスマン問題)の近似解法のプログラムを書け。 # ただし都市数の数は5〜6個程度で、都市間の距離は自由に決めてよいとする。 #
76 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 16:12:52 ] # [1] 授業単元: C言語 # [2] 問題文(含コード&リンク): # 巡回セールスマン問題をNearest Addition法で解くプログラムを作成せよ。 # Nearest Addition法とは # (1)1つの都市からなる長さ0の部分閉路Tをひとつ作成する # (2)現在の部分閉路Tが全ての都市を含むならば、それが解 # (3)そうでないならば、Tに含まれる都市jとTに含まれない都市kの組み合わせで、 # jとkの間の距離Cjk(jkはCの右下)を最小にするようなものを求める # (4)(i,j)をTに含まれるパスとするとき、これを2つのパス(i,k)と(k,j)で置き換える # (5)以上の(2)〜(4)を繰り返す
77 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 16:19:25 ] pc12.2ch.net/test/read.cgi/tech/1248012902/157 # 【 課題 】ttp://rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/787.txt # 行列や固有値を扱う数値計算の課題です。 # # 逆反復法(逆べき乗法)とLU分解を用いて、固有値問題を解く。 # 与える行列Aはn*n行列で、4*4や5*5でも、自由に数値を定めて良い。 # 1)一番小さい固有値に対応する固有ベクトルsVを求める。 # 2)二番目に小さい固有値に対応する固有ベクトルVを求める。 # double [] gauss(double[][] A , double[] b) # のような形を作り、 # LU分解のメソッドを逆べき乗法のメソッドでコールするようにする。 # (あらかじめAをLU分解しておき、連立一次方程式を解いて反復するため) # 解はdouble[]の形のベクトルで、for文の中でSystem.out.printを回して出力。 # ここまでが最低ライン。可能ならば # ベクトル集合V=(v1,v2,....vn)において、 # Vi < 0 のときは-1のラベルを、 # Vi >=0 のときは 1のラベルをつける。
78 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 16:29:29 ] chomework.sakura.ne.jp/log1/1135125328_02.html (レス番号194) # [1] 授業単元: 情報処理 # [2] 問題文(含コード&リンク):ファイルからデータ(迷路空間)を読み込む処理と構造体・リストを用いた、 # 迷路空間を作成せよ。 # 読み込むデータは右図のような形式であり、 ****** # 各記号は次の意味を持つものとする。 *8000* # * : 壁 ****0* # 0 : 通路 **000* # 8 : 通路 & スタート *90*0* # 9 : 通路 & ゴール ****** # 迷路空間は、必ず長方形であることを前提とする。 # そして、再帰を用いた迷路空間の探索プログラムも作成せよ。 # 最短経路と後戻りした記録付き経路のどちらを表示しても構わないが両方表示した方がポイント高し
79 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 16:51:53 ] pc12.2ch.net/test/read.cgi/tech/1258158172/384 # [1] 授業単元:ヒューマンインターフェイス # [2] 問題文(含コード&リンク):少なくとも以下の英文を日本語分に翻訳できるプログラムを作成せよ # 1.The boy beats a dog with a stick. # 2.Every boy loves a dog . # 3.The dog is loved by every boy. # 4.The boy saw a girl with a telescope. # 5.The boy saw a girl with a dog. # 6.The boy cut a stick with a saw.
80 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 17:16:22 ] pc12.2ch.net/test/read.cgi/tech/1258158172/389 # [1] 授業単元:C言語実習 # [2] 問題文(含コード&リンク): ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10187.txt # ■問題1 # 任意の画素数をもつ画像をアフィン変換(移動,拡大縮小,回転,せん断)するプログラムを作成せよ. # 変換後の画像は画像ファイルとして保存すること. # # ■問題2 # 問題1で作成したプログラムに,逆アフィン変換を行う機能を追加せよ。 # そして,アフィン変換,逆アフィン変換(最近傍法),逆アフィン変換(線形補間法)での結果に違いがあることを確認せよ. # # ※逆アフィン変換とは,出力画像の座標値(X, Y)に対して逆変換を行うことで,入力画像の座標値(x, y)を求めるものである. # # (注意) # 変換後の座標値が,配列のサイズ(縦と横)を越えるかどうかを確認し,超える場合は適切な例外処理を行うこと.
81 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 17:25:52 ] pc12.2ch.net/test/read.cgi/tech/1258158172/81 # [1] 授業単元: C++ # [2] 問題文(含コード&リンク):公開鍵と秘密鍵を作り、これらを使い暗号化と復号化を行うプログラムを書け。(RSA暗号) # [4] 期限: 2009/11/17朝まで # 暗号化と復号化の手順は # ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10129.txt #
82 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 17:55:57 ] 宿題スレ難問集の様相を呈してきました。 HaskellやOCamlそして、Scalaなどの使い手がバッサバッサとプログラミングして くれるといいんだがな。
83 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 19:22:44 ] >>38 問1 使用言語: 十進BASIC LET st= TIME LET r=0 FOR a=1 TO 1000 LET aa=a*a FOR b=a TO 1000 LET bb=b*b FOR c=1 TO 1000-a-b IF aa+bb=c*c THEN LET r=r+1 NEXT C NEXT B NEXT A PRINT r PRINT TIME-st;" sec (CeleronM 1.46GHz)" END 実行結果 325 10.5 sec (CeleronM 1.46GHz)
84 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 19:59:17 ] >>38 問2 使用言語: 十進BASIC LET st= TIME LET maxs=0 LET maxa=0 LET maxb=0 LET maxc=0 FOR a=1 TO 1000 LET aa=a*a FOR b=a TO 1000 LET ab=aa+b*b FOR c=1 TO 1000-a-b IF ab=c*c THEN LET ab2=a*b/2 IF ab2>maxs THEN LET maxs=ab2 LET maxa=a LET maxb=b LET maxc=c END IF END IF NEXT C NEXT B NEXT A PRINT maxa;maxb;maxc PRINT TIME-st;" sec (CeleronM 1.46GHz)" END 実行結果 264 315 411 8.89999999999418 sec (CeleronM 1.46GHz)
85 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 21:49:13 ] pc12.2ch.net/test/read.cgi/tech/1260532772/442 # [1] 授業単元: プログラミング実習 # [2] 問題文(含コード&リンク): ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10305.txt # # ★演習問題5 # 人力されたクラスの人数と科目の数に応じた配列を確保し,入力されたデータをその配列に保存し,科目ごとの和を求めよ。 # 例として,人数を3とし,科目数を3とした場合,それぞれの科日数に対する点数を読み込み,結果が正しく出力されるかを確認せよ。 # (時間があれば,人数や科日数を適当に変えて,動作を確認せよ) # (実行結果例) # クラスの人数は?4 # 科目の数は?3 # 1番目の学生 # 85 # 74 # 63 # < 中略> # 各科目の和は以下の通りです # 222 # 213 # 269
86 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 22:26:12 ] >>85 % Prolog ここでも配列はリストと読み替えてください '人力されたクラスの人数と科目の数に応じた配列を確保し,入力されたデータをその配列に保存し,科目ごとの和を求めよ' :- 人力されたクラスの人数と科目の数に(_クラスの人数,_科目の数), 応じた配列を確保し(_クラスの人数,_科目の数,L), データを入力する([_],L), 科目ごとの和を求める(_和ならび), 和ならびを表示する(_和ならび). 人力されたクラスの人数と科目の数に(_クラスの人数,_科目の数) :- 催促付き整数入力('クラスの人数は ?',_クラスの人数),催促付き整数入力('科目の数は ?',_科目の数),!. 応じた配列を確保し(_クラスの人数,_科目の数,L) :- length(L,_クラスの人数),findall(L1,(member(L1,L),length(L1,_科目の数)),L). データを入力する(_,[]) :- !. データを入力する(NL,[L|R]) :- length(NL,N),write_formatted('%t番目の学生は ?',[N]), findall(A,(member(A,L),get_integer(A)),L), データを入力する([_|NL],R). 科目ごとの合計を求める(L,_和ならび) :- 行列の転置(L,L1),findall(S,(member(L2,L1),sum(L2,S)),_和ならび). 和ならびを表示する([]) :- !. 和ならびを表示する([_和|R]) :- write_formatted('%t\n',[_和]),和ならびを表示する(R).
87 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 00:00:33 ] >>12 使用言語: 十進BASIC 計算だけで反転するのと文字列に変換して反転するのを比べてみた。 FUNCTION f1(n) LET r=0 DO WHILE n>0 LET r=r*10+MOD(n,10) LET n=INT(n/10) LOOP LET f1=r END FUNCTION FUNCTION f2(n) LET s1$=STR$(n) LET s2$=s1$ LET b=LEN(s1$) FOR i=1 TO b LET s2$(b-i+1:b-i+1)=s1$(i:i) NEXT I LET f2=VAL(s2$) END FUNCTION LET st=TIME FOR i=1 TO 1000000 LET a=f1(123456789) NEXT I PRINT "f1";TIME -st;"sec" LET st=TIME FOR j=1 TO 1000000 LET a=f2(123456789) NEXT J PRINT "f2";TIME -st;"sec" END f1 3.63000000000466 sec f2 24.5599999999977 sec
88 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 05:18:54 ] pc12.2ch.net/test/read.cgi/tech/1260532772/464 # 1:単元名 C言語 # 2:問題文 # 元金、単利と複利の利率に対して、次のものを求めるプログラムを作成しなさい。 # # 30年後の残高。 # 30年以内に複利の残高は単利の残高を上回るか。 # 上回るならば何年後か。
89 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 06:17:05 ] >>56 使用言語: 十進BASIC FUNCTION isprime(n) LET isprime=0 IF MOD(n,2)=0 THEN IF n=2 THEN LET isprime=1 ELSE FOR i=3 TO SQR(n) STEP 2 IF MOD(n,i)=0 THEN EXIT FOR NEXT i IF i>SQR(n) THEN LET isprime=1 END IF END FUNCTION FUNCTION is99(n) LET is99=0 LET r=0 DO WHILE n>0 IF MOD(n,10)=9 THEN LET r=r+1 IF r>2 THEN EXIT DO END IF LET n=INT(n/10) LOOP IF r=2 THEN LET is99=1 END FUNCTION LET s=0 FOR j=20000 TO 40000 IF isprime(j)=1 AND is99(j)=1 THEN LET s=s+1 NEXT J PRINT s END ! 実行結果 141
90 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 06:36:52 ] '30年後の残高'(_単利か福利か,_元金,_利息,_30年後の残高) :- findall(_残高1,残高(_単利か複利か,30,_元金,_利率,_,_,_残高1),_残高ならび), last(_残高ならび,_30年後の残高). 残高(_単利か複利か,_期間,_元金,_利率,_年目,_利息,_残高) :- length(L,_期間), 残高(_単利か複利か,L,[_],_元金,_元金,_利率,_年目,_利息,_残高). 残高(単利,[_|R1],L1,_元金,_残高1,_利率,_年目,_利息,_残高) :- _利息 は 切り捨て(_元金 * _利率), _残高 is _残高1 + _利息, length(L1,_年目), write_formatted('%t年目 利息=%t 残高=%t\n',[_年目,_利息,_残高]). 残高(複利,[_|R1],L1,_元金,_残高1,_利率,_年目,_利息,_残高) :- _利息 は 切り捨て(_残高1 * _利率), _残高 is _残高1 + _利息, length(L1,_年目), write_formatted('%t年目 利息=%t 残高=%t\n',[_年目,_利息,_残高]). 残高(単利,[_|R1],L1,_元金,_残高1,_利率,_年目,_利息,_残高) :- _利息1 は 切り捨て(_元金 * _利率), _残高2 is _残高1 + _利息1, 残高(単利,R1,[_|L1],_元金,_残高2,_利率,_年目,_利息,_残高). 残高(複利,[_|R1],L1,_元金,_残高1,_利率,_年目,_利息,_残高) :- _利息1 は 切り捨て(_残高1 * _利率), _残高2 is _残高1 + _利息1, 残高(複利,R1,[_|L1],_元金,_残高2,_利率,_年目,_利息,_残高).
91 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 06:38:57 ] >>90 訂正 % Prolog www 福利 -> 複利
92 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 06:45:46 ] >>90 残高という述語名は好ましくないだろう。
93 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 07:07:39 ] >>90 % Prolog '30年以内に複利の残高は単利の残高を上回るか。'(_元金,_複利の利率,_単利の利率) : findall(_残高1,残高(複利,30,_元金,_複利の利率,_,_残高1),L1), findall(_残高1,残高(単利,30,_元金,_単利の利率,_,_残高2),L2), 行列の転置([L1,L2],L3), member([A,B],L3), A > B.
94 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 07:13:12 ] >>93 一ヶ所書き直し。さてどこでしょう? >>90 % Prolog '30年以内に複利の残高は単利の残高を上回るか。'(_元金,_複利の利率,_単利の利率) :- findall(_残高1,残高(複利,30,_元金,_複利の利率,_,_残高1),L1), findall(_残高1,残高(単利,30,_元金,_単利の利率,_,_残高2),L2), 行列の転置([L1,L2],L3), member([A,B],L3), A > B.
95 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 07:21:38 ] >>93 >>94 リンクを>>90 としてあるけどこれは>>88 です。 さて、>>90 の残高の中で表示をしているので、>>94 の課題でも、 客年の何年目、利息、残高が煩く表示されてしまう。 ?- tell('/dev/null'),'30年以内に複利の残高は単利の残高を上回るか。'(1000,0.045,0.031),told. とでもやればよいか。 これでも、上回らないと中の副目標がfailになって、toldが実行されないままとなる。
96 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 07:28:12 ] それもそうだけど、 複利の利率の方が大きいのでは1年目で片がついてしまうw
97 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 07:41:11 ] >>88 % Prolog '30年以内に複利の残高は単利の残高を上回るか。上回るならば何年後か。'(_元金,_複 利の利率,_単利の利率,_何年後) :- findall(_残高1,残高(複利,30,_元金,_複利の利率,_,_残高1),L1), findall(_残高1,残高(単利,30,_元金,_単利の利率,_,_残高2),L2), 行列の転置([L1,L2],L3), append(L0,[[A,B]|_],L3), A > B, length([_|L0],_何年後).
98 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 07:42:40 ] >>97 (>>88 ) 再表示。 % Prolog '30年以内に複利の残高は単利の残高を上回るか。上回るならば何年後か。'(_元金,_複利の利率,_単利の利率,_何年後) :- findall(_残高1,残高(複利,30,_元金,_複利の利率,_,_残高1),L1), findall(_残高1,残高(単利,30,_元金,_単利の利率,_,_残高2),L2), 行列の転置([L1,L2],L3), append(L0,[[A,B]|_],L3), A > B, length([_|L0],_何年後).
99 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 07:55:00 ] >>98 すみません。間違い発見。またまた書き直し。 % Prolog '30年以内に複利の残高は単利の残高を上回るか。上回るならば何年後か。'(_元金,_複利の利率,_単利の利率,_何年後) :- findall(_残高1,残高(複利,30,_元金,_複利の利率,_,_残高1),L1), findall(_残高2,残高(単利,30,_元金,_単利の利率,_,_残高2),L2), 行列の転置([L1,L2],L3), append(L0,[[A,B]|_],L3), A > B, length([_|L0],_何年後).
100 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 07:57:58 ] どこが間違ってるのか、コメントしてよ。 間違いの部分を読むのは勉強になるから。
101 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 08:06:03 ] >>100 焦ってしまって、精神的にコメントを入れてる余裕がなくなるw 人に見られないうちに書き換えようって。 ところで、findall/3は奇妙な仕様になっていて、 findall(_残高,残高(複利,30,_元金,_複利の利率,_,_残高),L1), findall(_残高,残高(単利,30,_元金,_単利の利率,_,_残高),L2), でも通ってしまう。 この目標が終了する時にこの中で使われている変数の束縛を解いてしまう。 好ましい表現ではないと思うから、避けるようにしているけど。
102 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 08:24:51 ] # [1] 授業単元:Prolog基礎 # [2] 問題文(含コード&リンク):カラムとして、電話番号と氏名を持つ # 電話帳テーブルがある。この中で同姓同名が最も多い氏名を探せ。
103 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 09:17:55 ] >>102 % Prolog 'カラムとして、電話番号と氏名を持つ電話帳テーブルがある。この中で同姓同名が最も多い氏名'(_氏名ならび) :- findall(_氏名,clause(電話帳(_,_氏名),_),_氏名ならび), quicksort(_氏名ならび,_整列された氏名ならび), 同姓同名が最も多いもの(_整列された氏名ならび,0,[],_氏名ならび). 同姓同名が最も多いもの(_整列された氏名ならび,_これまでの最大数,_氏名ならび1,_氏名ならび). 整列された氏名ならび=[A|R1], 要素の連続数(1,A,R1,X,R2), 最大値は(A,X,_これまでの最大値,_更新された最大値,_氏名ならび1,_氏名ならび2), 同姓同名が最も多いもの(R2,_更新された最大値,_氏名ならび2,_氏名ならび),!. 同姓同名が最も多いもの(_,_,_氏名ならび,_氏名ならび). 最大値は(_氏名,X,_これまでの最大値,X,_氏名ならび,[_氏名]) :- X @> _これまでの最大値,!. 最大値は(_氏名,X,_これまでの最大値,X,_氏名ならび,[_氏名|_氏名ならび]) :- X = _これまでの最大値,!. 最大値は(_,_,_これまでの最大値,_これまでの最大値,_氏名ならび,_氏名ならび). 要素の連続数(X,A,[],X,[]) :- !. 要素の連続数(X,A,[B|R],X,[B|R]) :- \+(A==B),!. 要素の連続数(M,A,[A|R1],X,R) :- M2 is M + 1,要素の連続数(M2,A,R1,X,R).
104 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 09:20:30 ] >>102 書き直し。 % Prolog 'カラムとして、電話番号と氏名を持つ電話帳テーブルがある。この中で同姓同名が最も多い氏名'(_氏名ならび) :- findall(_氏名,clause(電話帳(_,_氏名),_),_氏名ならび), quicksort(_氏名ならび,_整列された氏名ならび), 同姓同名が最も多いもの(_整列された氏名ならび,0,[],_氏名ならび). 同姓同名が最も多いもの(_整列された氏名ならび,_これまでの最大数,_氏名ならび1,_氏名ならび). 整列された氏名ならび=[A|R1], 要素の連続数(1,A,R1,X,R2), 最大値は(A,X,_これまでの最大値,_更新された最大値,_氏名ならび1,_氏名ならび2), 同姓同名が最も多いもの(R2,_更新された最大値,_氏名ならび2,_氏名ならび),!. 同姓同名が最も多いもの(_,_,_氏名ならび,_氏名ならび). 最大値は(_氏名,X,_これまでの最大値,X,_氏名ならび,[_氏名]) :- X @> _これまでの最大値,!. 最大値は(_氏名,X,_これまでの最大値,X,_氏名ならび,[_氏名|_氏名ならび]) :- X = _これまでの最大値,!. 最大値は(_,_,_これまでの最大値,_これまでの最大値,_氏名ならび,_氏名ならび). 要素の連続数(X,A,[],X,[]) :- !. 要素の連続数(X,A,[B|R],X,[B|R]) :- \+(A==B),!. 要素の連続数(M,A,[A|R1],X,R) :- M2 is M + 1,要素の連続数(M2,A,R1,X,R).
105 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 09:32:12 ] >>104 ふたつ気になることがあります。 一つは、テーブルからの取得をclause/2で行っていること。本体(条件)を 殺しているのですが、電話番号による種別の判定など意味のあるケースも 想定できると思います。 二つめは、同一人が複数の回線を持つのは普通のことだから、カラムに 住所まで加えて、それも氏名+住所をキーにしなくてはいけないのではないか。 これは問題の不備ということになります。
106 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 09:43:09 ] >>105 問題がテーブルとありますから、やはり単位節のみと考えるべきなんでしょうね。 いきなり、条件部の記述によって自動発信してしまうケースなどを懼れました。 それから時刻を調べて週末だけはこの電話とか。
107 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 11:46:20 ] >>35 使用言語: 十進BASIC FOR o=1 TO 9 FOR s=0 TO 9 IF o<>s THEN FOR a=0 TO 9 IF o<>a AND s<>a THEN FOR k=0 TO 9 IF o<>k AND s<>k AND a<>k THEN FOR y=0 TO 9 IF o<>y AND s<>y AND a<>y AND k<>y THEN FOR t=0 TO 9 IF o<>t AND s<>t AND a<>t AND k<>t AND y<>t THEN IF (o+k)*10000+(s+y)*1000+(a+o)*100+(k+t)*10+a+o=t*10000+o*1000+k*100+y*10+o THEN PRINT USING "# # # # # + # # # # # = # # # # #":o,s,a,k,a,k,y,o,t,o,t,o,k,y,o END IF END IF NEXT T END IF NEXT Y END IF NEXT K END IF NEXT A END IF NEXT S NEXT O END 実行結果 3 2 0 4 0 + 4 1 3 7 3 = 7 3 4 1 3
108 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 12:06:26 ] >>37 (>>35 ) 訂正追加。 % Prolog 定義を一節増やします。 加算表の一(A,B,1,D) :- 加算表(1,A,1,E),加算表(E,B,_,D). 加算表の一(A,B,C,D) :- 加算表(1,A,0,E),加算表(E,B,C,D).
109 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 14:40:16 ] # [1] 授業単元:Prolog基礎 # A社の組織として営業部、総務部があります。営業部は営業一課、営業二課にわかれています。 # 総務部も人事課と経理課にわかれています。管理情報として所属テーブル、給与テーブルがあります。 # [所属テーブル] # 部, 課, ,社員名 # 営業部,営業一課,岡部 # 営業部,営業二課,小野 # 営業部,営業二課,鹿戸 # 営業部,営業二課,小泉 # 総務部,人事課,大崎 # 総務部,経理課,嶋田 # 総務部,経理課,宮田 # [給与テーブル] # 社員名,給与 # 岡部,300000 # 小野,250000 # 鹿戸,280000 # 小泉,350000 # 大崎,200000 # 嶋田,400000 # 宮田,200000 # [問題] 部・課、部をそれぞれキーとして給与額を集約して合計した # 部・課集約テーブル、部集約テーブルを作り出す述語を定義しなさい。
110 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 16:42:37 ] >>109 % Prolog (その一) 一般化できる部分のみ。集約データの収集/3,_述語/_アリティに対応する述語定義 % データベースの項目に関する情報述語と集約項目に関する述語が別に必要。 集約述語の生成(_述語/_アリティ,_集約述語ならび) :- findall(_集約キー,集約キーの生成(_述語/_アリティ,_集約キー),_集約キーならび), 集約述語の生成(_述語/_アリティ,_集約キーならび,_集約述語ならび). 集約述語の生成(_述語/_アリティ,[],[]) :- !. 集約述語の生成(_述語/_アリティ,[_集約キー|R1],[_集約述語名/_アリティ2|R2]) :- concat_atom(_集約キー,'・',_集約述語名), length([_|_集約キー],_アリティ2), 集約データの収集(_述語/_アリティ,_集約キー,_集約データならび), 集約データの定義(_集約述語名,_集約データならび), 集約述語の生成(_述語/_アリティ,R1,R2). 集約データの定義(_,[]) :- !. 集約データの定義(_集約述語名,[_集約データ|R]) :- P =.. [_集約述語名|_集約データ], assertz(P), 集約データの定義(_集約述語名,R). 集約キーの生成(_述語/_アリティ,_集約キー) :- 集約項目(_述語/_アリティ,L), append(L1,_,L), \+(L1=[]).
111 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 17:04:52 ] >>102 使用言語: J data=:noun define 0123456789 山田一郎 1234567890 鈴木二郎 2345678901 伊藤三郎 3456789012 山田一郎 4567890123 伊藤一郎 5678901234 山田一郎 ) ]a=:cutopen<;._2 data +----------+------------+ |0123456789|山田一郎| +----------+------------+ |1234567890|鈴木二郎| +----------+------------+ |2345678901|伊藤三郎| +----------+------------+ |3456789012|山田一郎| +----------+------------+ |4567890123|伊藤一郎| +----------+------------+ |5678901234|山田一郎| +----------+------------+ f=:0{(~.\:#/.~) f 1{"1 a +------------+ |山田一郎| +------------+ f >1{"1 a 山田一郎
112 名前:デフォルトの名無しさん mailto:sage [2009/12/26(土) 18:08:14 ] >>110 (>>109 ) % Prolog (その二) 具体的なテーブルを。あと、集約データの収集述語定義をすればよい。 所属(営業部,営業一課,岡部). 所属(営業部,営業二課,小野). 所属(営業部,営業二課,鹿戸). 所属(営業部,営業二課,小泉). 所属(総務部,人事課,大崎). 所属(総務部,経理課,嶋田). 所属(総務部,経理課,宮田). 給与(岡部,300000). 給与(小野,250000). 給与(鹿戸,280000). 給与(小泉,350000). 給与(大崎,200000). 給与(嶋田,400000). 給与(宮田,200000). 集約項目(所属/3,[部,課]). 述語構造(所属/3,1,部). 述語構造(所属/3,2,課). 述語構造(所属/3,3,社員名). 述語構造(給与/2,1,社員名). 述語構造(給与/2,2,給与).
113 名前:デフォルトの名無しさん mailto:sage [2009/12/27(日) 17:08:07 ] >>19 使用言語: J f=:monad def'((":y),'' = '',":@{.,'' * '',":@}.)"1~./:~"1|:(,:y&%)>:I.0=y|~>:i.y' f 120 120 = 1 * 120 120 = 2 * 60 120 = 3 * 40 120 = 4 * 30 120 = 5 * 24 120 = 6 * 20 120 = 8 * 15 120 = 10 * 12
114 名前:デフォルトの名無しさん mailto:sage [2009/12/27(日) 21:03:04 ] パズルでもやってみる? 2,0,1,0 の4個の数字をこの順番で1回だけ使い、0から99の数字を作れ。 演算子、関数の使用は自由。 例 201^0 -> 1
115 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 04:34:04 ] pc12.2ch.net/test/read.cgi/tech/1260532772/486 # [1] 授業単元:C言語プログラミング # [2] 問題文(含コード&リンク):ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10312.txt # ソケットを用いて,課題1のプログラムを以下のように改良する. # # サーバとクライアントに分割し,ユーザーはクライアントを用いて操作内容を入力し,その内容をサーバに送信する. # それを受信したサーバは,その内容を基にファイルを操作する.必要であれば,サーバは結果をクライアントに送信し,クライアントはそれを受信して表示する. # 機能ルーチンはサーバ側に実装し,課題1で作成した関数を改良し用いること #
116 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 04:45:07 ] pc12.2ch.net/test/read.cgi/tech/1260532772/487 # [1] 授業単元:計算機入門及び演習 # [2] 問題文(含コード&リンク):ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10311.txt # 以下の問題を解くプログラムをC言語を用いて作成しなさい. AさんとBさんは点数が書かれたカードを何枚か持っている. AさんのカードとBさんのカ ードを1枚ずつ交換して,Aさんの持つカードの合計点数とBさんの持つカード合計点数が 等しくなるようにしたい. このときどのカードとどのカードを交換したらよいか.ただし,カードを交換しなくても合計点数が等しい場合でも,必ずカードの交換を行うものとする. 入力は,いくつかのデータセットからなる.各データセットは次の形式で与えられる. n m s1 s2 ... sn sn+1 sn+2 ... sn+m 各データセットの最初の行は空白ひとつで区切られたふたつの数 n と m を含み, n はAさんのカードの枚数,m はBさんのカードの枚数を表す.続く n+m 行には,各カードの 点数が 1 行にひとつずつ並ぶ.最初の n 個の点数 (s1 から sn まで) はAさんのカードの点数,残りの m 個の点数 (sn+1 から sn+m まで) はBさんのカードの点数を表す. n および m は 100 以下の正の整数とし,カードの点数は 0 以上 100 以下の整数値とする.入力の終わりは,空白ひとつで区切られたふたつの 0 を含む 1 行で示される. 各データセットに対し,Aさん,Bさんの交換前のすべてのカードと交換すべき2つのカードを出力すること.形式は特に問わない(実行例を参考にすること). なお,合計を等しくするようなカードの交換の方法が複数ある場合は,交換するカードの点数の和が最小となるもののみを出力すること. また,カードの点数の合計を等しくするような交換が存在しない場合はその旨を出力すること.
117 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 11:41:33 ] >>114 使用言語: maxima 15までできたけど、結構、大変。 0 201*0; 1 2-0-1-0; 2 20/10; 3 2+0+1+0; 4 fix(sqrt(20.10)); 5 ceiling(sqrt(20.10)); 6 fix(sqrt(20.10)); 7 fix(exp(2.010)); 8 ceiling(exp(2.010)); 9 ceiling(exp(2.0)+1.0); 10 fix(exp(2.0)+exp(1.0)); 11 ceiling(exp(2.0)+exp(1.0)); 12 2+0+10; 13 ceiling(exp(sin(2.0))+10); 14 fix(sqrt(201.0)); 15 ceiling(sqrt(201.0));
118 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 15:12:17 ] pc12.2ch.net/test/read.cgi/tech/1260532772/489 # [1] 授業単元: # 画像解析 # [2] 問題文(含コード&リンク): # 画像を、好きな倍率で大きくしたり小さくしたりするプログラムを作成してください
119 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 18:18:38 ] >>30 使用言語: 十進BASIC FUNCTION 組合せの数(n,r) LET a=1 LET b=n FOR i=2 TO r LET a=a*i LET b=b*(n-i+1) NEXT I LET 組合せの数=b/a END FUNCTION PRINT 組合せの数(35,3)*組合せの数(15,2)/組合せの数(50,5) PRINT 組合せの数(35,4)*組合せの数(15,1)/組合せの数(50,5) PRINT 組合せの数(35,2)*組合せの数(15,3)/組合せの数(50,5) PRINT "組み込み関数combを使った場合" PRINT comb(35,3)*comb(15,2)/comb(50,5) PRINT comb(35,4)*comb(15,1)/comb(50,5) PRINT comb(35,2)*comb(15,3)/comb(50,5) END 実行結果 .324352451433858 .370688515924409 .127775208140611 組み込み関数combを使った場合 .324352451433858 .370688515924409 .127775208140611
120 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 21:28:47 ] >>114 使用言語: maxima (%i182) makelist(i,i,fix(sin(%pi)),fix(apply("^",reverse([2.0,10]))+cos(%pi))); (%o182) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
121 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 22:03:28 ] >>114 使用言語: 十進BASIC DEF f(n)=n*n-n/n FOR i=z TO f(20-10) PRINT i NEXT I END
122 名前:デフォルトの名無しさん mailto:sage [2009/12/29(火) 01:44:55 ] >>114 使用言語: Arc arc> (apply range (map [-(* _ _)(/ _ _)] (list(expt 2 0) 10))) (0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99)
123 名前:デフォルトの名無しさん mailto:sage [2009/12/29(火) 02:02:20 ] >>114 使用言語: J i. ,~ 20 - 10 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
124 名前:デフォルトの名無しさん mailto:sage [2009/12/29(火) 08:55:53 ] >>114 使用言語: Haskell Prelude> init $ (\[a,b]->[a..b]) $ map(^2)[0,10] [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28, 29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54, 55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80, 81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99]
125 名前:デフォルトの名無しさん mailto:sage [2009/12/29(火) 11:03:55 ] pc12.2ch.net/test/read.cgi/tech/1258320456/79 # Windows XP上で、 # まず 同じディレクトリにあるsetting.iniを読み込んで # その1行目, 2行目, 3行目を # 文字列p, regex, aftに格納する。 # pをパスとして調べ、 # 1.実在するディレクトリだったらそのディレクトリの名前とサブディレクトリの名前と、 # それらの中にあるファイルの名前、およびファイルの中身に以下の置換作業を実行する。 # > 前からみて順に正規表現regexにマッチする文字列を全てaftに置換する。 # 2.実在しないディレクトリでなかったらエラーメッセージを標準出力に出力する。
126 名前:デフォルトの名無しさん mailto:sage [2009/12/29(火) 11:25:43 ] >>114 使用言語: Scilab -->a=2;[0:(10^a-a/a)]
127 名前:デフォルトの名無しさん mailto:sage [2009/12/29(火) 16:48:55 ] >>125 % Prolog では正規表現は使わないので、その代わり以下のような述語を作っておく。 探索目標を真とする副文字列を置換文字列に置換(_文字列,_対象文字ならび,_探索目標,_置換文字列,X) :- findall(S,探索目標を真とする副文字列を置換文字列に置換の一(_文字列,_対象文字ならび,_探索目標,_置換文字列,S),X). 探索目標を真とする副文字列を置換文字列に置換の一(_文字列,_対象文字ならび,_探索目標,_置換文字列,S) :- atom_chars(_文字列,Chars), 探索目標を真とする文字ならびを得る(Chars,L1,_対象文字ならび,_探索目標,L3), atom_chars(A1,L1), atom_chars(A3,L3), concat_atom([A1,_置換文字列,A3],S). 探索目標を真とする文字ならびを得る([],L1,L2,_探索目標,L3) :- !,fail. 探索目標を真とする文字ならびを得る(L,L1,L2,_探索目標,L3) :- append(L1,L2,L3,L), _探索目標. 探索目標を真とする文字ならびを得る(L,L1,L2,_探索目標,X) :- 変数指定項複写(_探索目標,_探索目標2,[L2],[L4]), append(L11,L2,31,L), _探索目標, 探索目標を真とする文字ならびを得る(L31,L1,L4,_探索目標2,X).
128 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 00:29:25 ] >>114 使用言語: Io Io> list(2-0,10)reduce(a,b,b**a)repeat(v, v println)
129 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 01:18:56 ] >>114 使用言語: Io Io> (20-10)squared repeat(v, v println)
130 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 06:12:33 ] >>127 (>>125 ) かなりの大間違い。訂正。 % Prolog では正規表現は使わないので、その代わり以下のような述語を作っておく。L1,L3が加わり、益々意味不明になってきた。 探索目標を真とする副文字列を置換文字列に置換(_文字列,L1,_対象文字ならび,L3,_探索目標,_置換文字列,X) :- findall(S,探索目標を真とする副文字列を置換文字列に置換の一(_文字列,L1,_対象文字ならび,L3,_探索目標,_置換文字列,S),X). 探索目標を真とする副文字列を置換文字列に置換の一(_文字列,L1,_対象文字ならび,L3,_探索目標,_置換文字列,S) :- atom_chars(_文字列,Chars), 探索目標を真とする文字ならびを得る(Chars,L1,_対象文字ならび,_探索目標,L3), atom_chars(A1,L1), atom_chars(A3,L3), concat_atom([A1,_置換文字列,A3],S). 探索目標を真とする文字ならびを得る(L,L1,L2,_探索目標,L3) :- append(L1,L2,L3,L), _探索目標.
131 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 06:32:32 ] >>130 使い方の例。 % 行頭に「私は」を挿入。 ?- 探索目標を真とする副文字列を置換文字列に置換(嘘を申しません,[],[],L3,true,私は,X). L3 = _141192, X = ['私は嘘を申しません'] % "d.f" を"aaa"に置換 ?- 探索目標を真とする副文字列を置換文字列に置換(abcdefgdufz,_,[d,_,f],_,true,aaa,X). _ = _141192, _ = _141193, _ = _141200, X = [abcaaagdufz,abcdefgaaaz] % "b"と"f"の間にありその中に"d"を2つ含む文字列をaaaに置換 ?- 探索目標を真とする副文字列を置換文字列に置換(abcdefgdufz,_,L2,_,(append([b],LY,[f],L2),count(member(d,LY),2)),baaaf,X). _ = _141192, L2 = _141193, _ = _141194, LY = _141197, X = [abaaafz]
132 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 08:22:02 ] >>131 Prologでは実際にこんな述語を呼び出して検索や置換を行うものですか?
133 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 08:57:48 ] >>132 一般にどうかはわからない。私の場合はcall/1を使って汎用述語を作ることは 絶対と言っていいほどしない。したがってここでは課題として書いてみたが、 >>130 のような定義述語を利用することはない。少々煩わしくても、検索が必要に なった時に一つ述語を定義する。 このスレでは、一度に書き込める行数に制限があるので、何度も使用された 述語を「汎用」のものとみなして定義なしに、呼び出している場合も多い。 これはやむを得ずそうしているのであって、それが模倣すべきプログラムスタイルだ などと考えないでほしい。
134 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 10:15:59 ] pc12.2ch.net/test/read.cgi/tech/1260532772/496 # [1] 授業単元: C++実習 # [2] 問題文(含コード&リンク):ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10313.txt # 問題2 # 個々のオブジェクトにint型の識別番号を与える(全オブジェクトに異なる整数値を与える)ように以下のクラスを書き換えよ。 # また書き換えたクラスがテストできる適切なmain関数も作成せよ。 # class Account { # string name; //口座名義 # string no; //口座番号 # long balance; //預金額 # Date open; //口座開設日 # # public: # Account(string n, string num, long z, Date op); # # void Deposit(long k); //預ける # void Withdraw(long k); //おろす # string GetName() const { return name; } //口座名義を調べる # string GetNo() const { return no; } //口座番号を調べる # long CheckBalance() const { return balance; } //預金額を調べる # Date OpeningDate() const { return open; } //口座開設日を調べる # }
135 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 04:05:03 ] pc12.2ch.net/test/read.cgi/tech/1235561034/679 # [授業単元] : Prolog # 知恵を貸してください。 # 今宿題で嫉妬深い恋人たちの問題をやっていて # 初期状態とゴール状態をそれぞれ # initial_state(jealousy, jealousy(left,[1,2,3],[1,2,3],[ ],[ ])). # final_state(jealousy(right,[ ],[ ],[1,2,3],[1,2,3])). # と作って指し手の移動と状態変化についてはかけたのですが # 状態変化したときの合法性のチェックでつまっています。 # legal(jealousy(right,[[1],[1,2]], [[2,3],[3]]) × # legal(jealousy(left,[[2,3],[2,3]], [[1],[1]]) ○ # としたいのですがどうしたらいいのでしょうか?
136 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 04:26:43 ] pc12.2ch.net/test/read.cgi/tech/1260532772/536 # [1] 授業単元: C++ # [2] 問題文(含コード&リンク): # 課題1資料 ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10318.txt # 課題1 ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10319.txt # 課題1応用 ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10320.txt # 京都市の区ごとの人口(人)と面積(平方キロメートル)が記述されているデータ(kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10318.txt )がある。 # 区の名前,人口,面積のデータを格納しなさい。 # 人口についてソートした結果,面積についてソートした結果を出力する。 # # 区の名前,人口,面積のてデータを格納し,格納したデータを調べて以下の情報を出力するプログラムを作成しなさい。 # 人口が最大の区と最小の区の、名前と人口。 # 面積が最大の区と最小の区の、名前と面積。 # 人口密度が最大の区と最小の区の、名前と人口密度。 # Kita 124306 94.92 # Kamigyo 83082 7.11 # Sakyo 168133 246.88 # Nakagyo 100145 7.38 # Higashiyama 41659 7.46 # Yamashina 136769 28.78 # Shimogyo 74897 6.82 # Minami 97877 15.78 # Ukyo 201819 291.95 # Nishikyo 155973 59.20 # Fushimi 284812 61.62
137 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 06:56:21 ] >>136 % Prolog '京都市の区ごとの人口(人)と面積(平方キロメートル)が記述されているデータがある'('ime.nu/ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10318.txt '). 区の名前,人口,面積のデータを格納する :- '京都市の区ごとの人口(人)と面積(平方キロメートル)が記述されているデータがある'(_ウェブサイト), get_split_lines(_ウェブサイト,[' '],Lines), member([_区の名前,_人口,_面積],Lines), assertz('京都市の区ごとの人口と面積のデータ'(_区の名前,_人口,_面積)), fail. 区の名前,人口,面積のデータを格納する. 人口についてソートする(_整列されたデータならび) :- findall([_人口,_区の名前,_人口,_面積],'京都市の区ごとの人口と面積のデータ'(_区の名前,_人口,_面積),L), sort(L,L1), 降順に並べ直しながら鍵項目の削除する(L1,[],_整列されたデータならび). 面積についてソートする(_整列されたデータならび) :- findall([_面積,_区の名前,_人口,_面積],'京都市の区ごとの人口と面積のデータ'(_区の名前,_人口,_面積),L), sort(L,L1), 降順に並べ直しながら鍵項目の削除する(L1,[],_整列されたデータならび). 降順に並べ直しながら鍵項目を削除する([],X,X) :- !. 降順に並べ直しながら鍵項目を削除する([[_|L]|R],Y,X) :- 降順に並べ直しながら鍵項目を削除する(R,[L|Y],X).
138 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 06:58:38 ] >>137 (>>136 ) 改行してはいけないところで折り返してしまった。 % Prolog '京都市の区ごとの人口(人)と面積(平方キロメートル)が記述されているデータがある'('ime.nu/ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10318.txt ').
139 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 07:00:53 ] >>138 どうしても、ダメだね。勝手に改行が入ってしまう。"ある"の後の改行は ないことにして下さい。
140 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 07:14:48 ] >>137 訂正 % Prolog Lines -> _区の名前・人口・面積ならび 区の名前,人口,面積のデータを格納する :- '京都市の区ごとの人口(人)と面積(平方キロメートル)が記述されているデータがある'(_ウェブサイト), get_split_lines(_ウェブサイト,[' '],_区の名前・人口・面積ならび), member([_区の名前,_人口,_面積],_区の名前・人口・面積ならび), assertz('京都市の区ごとの人口と面積のデータ'(_区の名前,_人口,_面積)), fail. 区の名前,人口,面積のデータを格納する.
141 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 08:14:28 ] >>136 % Prolog 人口が最大の区と最小の区の、名前と人口(_人口が最大の区の名前,_人口が最大の区の人口,_人口が最小の区の名前,_人口が最小の区の人口) :- findmax([_人口,_区の名前],京都市の区ごとの人口と面積のデータ(_区の名前,_人口,_),[_人口が最大の区の人口,_人口が最大の区の名前), findmin([_人口,_区の名前],京都市の区ごとの人口と面積のデータ(_区の名前,_人口,_),[_人口が最小の区の人口,_人口が最小の区の名前). 面積が最大の区と最小の区の、名前と面積(_面積が最大の区の名前,_面積が最大の区の面積,_面積が最小の区の名前,_面積が最小の区の面積) :- findmax([_面積,_区の名前],京都市の区ごとの人口と面積のデータ(_区の名前,_,_面積),[_面積が最大の区の面積,_面積が最大の区の名前), findmin([_面積,_区の名前],京都市の区ごとの人口と面積のデータ(_区の名前,_,_面積),[_面積が最小の区の面積,_面積が最小の区の名前). 人口密度が最大の区と最小の区の、名前と人口密度(_人口密度が最大の区の名前,_人口密度が最大の区の人口密度,_人口密度が最小の区の名前,_人口密度が最小の区の人口密度) :- findmax([_人口密度,_区の名前],(京都市の区ごとの人口と面積のデータ'(_区の名前,_人口,_面積),_人口密度 is _人口 / _面積),[_人口密度が最大の区の人口密度,_人口密度が最大の区の名前), findmin([_人口密度,_区の名前],(京都市の区ごとの人口と面積のデータ'(_区の名前,_人口,_面積),_人口密度 is _人口 / _面積),[_人口密度が最小の区の人口密度,_人口密度が最小の区の名前).
142 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 08:38:12 ] >>141 ほとんどの場合これで済ませてしまいますが、本当は正しくない。 これだと、同一の人口、面積、人口密度が生じた時、名前の小さいまたは大きいもの が採られてしまいます。正しい処理は、 人口が最大の区と最小の区の、名前と人口(_人口が最大の区の名前,_人口が最大の区の人口,_人口が最小の区の名前,_人口が最小の区の人口) :- findmax(_人口,京都市の区ごとの人口と面積のデータ(_,_人口,_),_最大の人口), findall([_区の名前,_最大の人口],京都市の区ごとの人口と面積のデータ(_区の名前,_最大の人口,_),L1), findmin(_人口,京都市の区ごとの人口と面積のデータ(_,_人口,_),_最小の人口), findall([_区の名前,_最小の人口],京都市の区ごとの人口と面積のデータ(_区の名前,_最小の人口,_),L2), member([_人口が最大の区の名前,_人口が最大の区の人口],L1), member([_人口が最小の区の名前,_人口が最小の区の人口],L2). % なら、人口が同一の区があっても正しく解が得られます。
143 名前:デフォルトの名無しさん mailto:sage [2010/01/02(土) 13:54:46 ] pc12.2ch.net/test/read.cgi/tech/1197620454/553 # (問題) # 社員データを一元管理するためのサーバークライアントシステムを作れ # 要求仕様) # 管理するデータは社員番号、氏名、所属、入社年月日 # クライアントから追加、削除、修正が行えること # 管理データはCSV形式で保存すること
144 名前:デフォルトの名無しさん mailto:sage [2010/01/02(土) 22:13:02 ] pc12.2ch.net/test/read.cgi/tech/1260532772/557 # [1] 授業単元: 情報数学 # [2] 問題文(含コード&リンク): # オイラー級数を用いて、πの近似値を求めよ。
145 名前:デフォルトの名無しさん mailto:sage [2010/01/02(土) 22:21:57 ] pc12.2ch.net/test/read.cgi/tech/1260532772/545 # [1] 授業単元:基礎プログラミング実習 # [2] 問題文(含コード&リンク):ime.nu/kansai2channeler.hp.infoseek.co.j p/cgi-bin/joyful/img/10325.txt # Step 3. 不偏分散を求める次の関数を定義する. # float variance(float data[], int n) .この関数は,data[]配列に入っている # n個のデータの不偏分散を求め,関数値としてその不偏分散値を返す. # なお,不偏分散の計算に必要な平均値は,関数average()を呼び出して求めること.
146 名前:デフォルトの名無しさん mailto:sage [2010/01/02(土) 22:24:19 ] pc12.2ch.net/test/read.cgi/tech/1260532772/546 # [1] 授業単元: プログラミング応用 # [2] 問題文(含コード&リンク): # 任意の奇数n(nは15以下)を入力しn×nの魔方陣を出力する。 # そして、作成した魔方陣の縦、横、斜めの合計値も同時に出力せよ。 # ただし、1は必ず一番左の列の真ん中に置くこと。 # (例) # n=3の時 # 15 # 6 7 2 15 # 1 5 9 15 # 8 3 4 15 # 15 15 15 15
147 名前:デフォルトの名無しさん mailto:sage [2010/01/03(日) 06:34:05 ] pc12.2ch.net/test/read.cgi/tech/1260532772/547 # [1] 授業単元: 情報数学 # [2] 問題文(含コード&リンク): # # 問)同時整数関係を見つけるプログラムを考えなさい。 # 整数の解を求めるプログラムと、複素数の解を求めるプログラムを考え、 # それを組み合わせることで両方の解を同時に求め示すプログラムについて考えなさい。
148 名前:デフォルトの名無しさん mailto:sage [2010/01/03(日) 06:39:51 ] pc12.2ch.net/test/read.cgi/tech/1260532772/545 # [1] 授業単元:基礎プログラミング実習 # [2] 問題文(含コード&リンク):ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10325.txt # 一問目 # # Step 1. scanf()を用いてfloat型の値を入力し,それを順番にdata[]配列に格納する. # このdata[]配列は関数の呼び出し側で宣言するものとし,宣言した配列の要素数(入力可能なデータの最大個数)をmaxとして関数を呼び出すものとする. # また,この関数は,データ入力数が最大のmax個に達するか,負値が入力されるまでデータ入力を繰り返すものとする.
149 名前:デフォルトの名無しさん mailto:sage [2010/01/03(日) 06:43:39 ] pc12.2ch.net/test/read.cgi/tech/1260532772/545 # [1] 授業単元:基礎プログラミング実習 # [2] 問題文(含コード&リンク):ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10325.txt # Step 2. 平均値を求める次の関数を定義する. float average(float data[], int n) # この関数は, data[]配列に入っているn個のデータの平均値を求め,関数値としてその平均値を返す.