1 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 09:57:19 ] 第二編も512Kbyte越えで終了しました。 前スレで未解決な課題は順次このスレにコピーします。
281 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 22:50:14 ] >>280 % Prolog '文字列をn文字ずつ&1文字ずつに分割'(_文字列,N文字ずつ,L) :- atom_chars(_文字列,Chars), 'N個組'(N文字ずつ,Chars,L). 'N個組'(_,[],[]) :- !. 'N個組'(N,L,[U|R]) :- 先頭からN個(N,L,U,R1), 'N個組'(N,R1,R). 先頭からN個(_,[],[],[]) :- !. 先頭からN個(0,L,[],L) :- !. 先頭からN個(N,[A|R1],[A|R2],R) :- M is N - 1, 先頭からN個(M,R1,R2,R).
282 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 23:17:23 ] >>280 使用言語:J a=:'ABCDEFGHIJKLMNOPQRSTUVWXY' f=:dyad def ';/&.> (-x)<\y' 5 f a +-----------+-----------+-----------+-----------+-----------+ |+-+-+-+-+-+|+-+-+-+-+-+|+-+-+-+-+-+|+-+-+-+-+-+|+-+-+-+-+-+| ||A|B|C|D|E|||F|G|H|I|J|||K|L|M|N|O|||P|Q|R|S|T|||U|V|W|X|Y|| |+-+-+-+-+-+|+-+-+-+-+-+|+-+-+-+-+-+|+-+-+-+-+-+|+-+-+-+-+-+| +-----------+-----------+-----------+-----------+-----------+ 7 f a +---------------+---------------+---------------+---------+ |+-+-+-+-+-+-+-+|+-+-+-+-+-+-+-+|+-+-+-+-+-+-+-+|+-+-+-+-+| ||A|B|C|D|E|F|G|||H|I|J|K|L|M|N|||O|P|Q|R|S|T|U|||V|W|X|Y|| |+-+-+-+-+-+-+-+|+-+-+-+-+-+-+-+|+-+-+-+-+-+-+-+|+-+-+-+-+| +---------------+---------------+---------------+---------+
283 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 23:48:53 ] >>276 使用言語:J g=:monad def '+/"."0":y' h=:monad def '|.&.":y' f=:monad define smoutput ('各桁の和=',":g y),:'反転値 =',":h y ) f 123 各桁の和=6 反転値 =321
284 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 05:09:26 ] pc12.2ch.net/test/read.cgi/tech/1260532772/834 # [2010/01/15 19:27:07] リュック: 【質問テンプレ】 # [1] 授業単元: プログラミング演習 # [2] 問題文(含コード&リンク): ime.nu/www.dotup.org/uploda/www.dotup.org563734.zip.html # [2] のコピー: prolog.asia/html/prolog/c133_834.html
285 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 05:37:43 ] pc12.2ch.net/test/read.cgi/tech/1260532772/827 # 下記の機能を備えた極めて単純なデータベースシステムであるカード型データベースシステムの構築を考える。 # 課題7-1 # 下記のような方針でプログラムを作成せよ。 # 新しい科目を登録する機能 # すでに登録されている科目を修正(更新)する機能 # 登録科目のソート(並び替え)を行う機能 # 登録科目の一部分のみを検索して取り出し、表示する機能 # 登録科目から、卒業までに必要な単位を計算し、表示する機能 # データベースファイルの仕様 # データベースファイルについては、本格的なデータベースになると、アクセス性や # 安定性など様々な要求を満たす必要があるが、ここでは最も単純なテキストファイルとする。 # さらに、書き込みをfprintfで、読み込みをfscanfで行えるように、 1行中に、 # それぞれの項目(フィールド)がスペースで区切られているようなファイルとする。 # なお、この場合、それぞれの項目はスペースを含んでいけないこととなる。 # 履修科目データベースシステムの例においては、例えば、 # 単位の種類(必修、選択必修など)、単位数、年次、前期か後期か、再履修かどうか、成績の6項目を含むこととする。 # ここで、いくつかの選択肢から選択するものについては、数字で置き換えることとする。 # このような仕様に基づいたファイルの例は以下のようなものになる。ここでは、ファイル名は、"ユーザ名_kamokudb.txt"とする。
286 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 06:00:50 ] >>277 % Prolog '二次方程式ax^2+bx+c=0の解を求める'(0,0,0,_) :- !. '二次方程式ax^2+bx+c=0の解を求める'(0,0,C,不能) :- \+(C==0),!. '二次方程式ax^2+bx+c=0の解を求める'(0,B,C,一次方程式) :- \+(B==0),!. '二次方程式ax^2+bx+c=0の解を求める'(A,B,C,_解) :- _判別式の値 is (B ^ 2 - 4 * A * C), '二次方程式ax^2+bx+c=0の解判定'(_判別式の値,A,B,C,_解). '二次方程式ax^2+bx+c=0の解判定'(_判別式の値,_,_,_,虚解) :- _判別式の値 < 0,!. '二次方程式ax^2+bx+c=0の解判定'(_判別式の値,A,B,C,_解) :- _解 is ((-1) * B + sqrt(_判別式の値)) / ( 2 * A ). '二次方程式ax^2+bx+c=0の解判定'(_判別式の値,A,B,C,_解) :- _解 is ((-1) * B - sqrt(_判別式の値)) / ( 2 * A ).
287 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 06:44:06 ] >>269 % Prolog (その一) :- op(350,xf,円). お客様データベース('長石 輝',ホワイトプラン通話料,2130). お客様データベース('長石 輝',ホワイトプランメールウェブ利用料金,0). お客様データベース('長石 輝',パケット使用量,47310). iphoneのご利用料金(_お客様名,_ご利用料金 円) :- お客様データベース(_お客様名,ホワイトプラン通話料,_通話料), お客様データベース(_お客様名,ホワイトプランメールウェブ利用料金,_メール ウェブ利用料金), お客様データベース(_お客様名,パケット使用量,_パケット使用量), 'ホワイトプラン(i)'(_通話料,_メールウェブ利用料金,_ホワイトプラン料金 円), パケット料金(_パケット使用量,_パケット料金 円), _ご利用料金 is _ホワイトプラン料金 + _パケット料金. 'ホワイトプラン(i)'(_ホワイトプラン料金 円) :- ホワイトプラン基本使用料・通話料(_通話料 円,_基本使用料・通話料 円), ホワイトプランメールウェブ利用料金(_メールウェブ利用料金 円), _ホワイトプラン料金 is _基本使用料・通話料 + _メールウェブ利用料金,!. ホワイトプラン基本使用料・通話料(_通話料 円,_基本使用料・通話料 円) :- _基本使用料・通話料 is 980 + _通話料.
288 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 06:45:46 ] >>269 % Prolog ホワイトプラン基本使用料・通話料(_通話料 円,_基本使用料・通話料 円) :- _基本使用料・通話料 is 980 + _通話料. ホワイトプランメールウェブ利用料金(0 円). パケット料金(_パケット,_パケット料金 円) :- 'S!ベーシックパック(i)'(_パケット料金_1 円), パケット定額フル(_パケット,_パケット料金_2 円), _パケット料金 is _パケット料金_1 + _パケット料金_2,!. 'S!ベーシックパック(i)'(315 円). パケット定額フル(_パケット,1029 円) :- _パケット =< 12250,!. パケット定額フル(_パケット,_パケット料金 円) :- _パケット > 12250, _パケット =< 71250, _パケット料金 is (_パケット - 12250) * 0.084 + 1029,!. パケット定額フル(_パケット,5985 円) :- _パケット > 71250,!.
289 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 08:16:13 ] >>258 % Prolog 重み付け平均をRLにセット(AL,RL) :- _重みならび = [1,3,4,3,1], sum(_重みならび,_重み合計), list_nth(N-2,AL,A_2), list_nth(N-1,AL,A_1), list_nth(1,AL,A1), list_nth(2,AL,A2), append([A_2,A_1|AL],[A1,A2],AL2), N2 is N + 2, 重み付け平均をRLにセット(3,N2,_重みならび,_重み合計,AL2,RL). 重み付け平均をRLにセット(M,N,_重みならび,_重み合計,AL,[]) :- M > N,!. 重み付け平均をRLにセット(M,N,_重みならび,_重み合計,AL,[_重み付け平均|R]) :- findall(B,(for(M-2,U,M+2),list_nth(U,AL,B)),L1), 重み付け平均(L1,_重みならび,_重み合計,0,_重み付け平均), M2 is M + 1, 重み付け平均をRLにセット(M2,N,_重みならび,_重み合計,AL,R). 重み付け平均([A|R1],[B|R2],_重み合計,S1,_重み付け平均) :- _重み付け平均 is S1 / _重み合計,!. 重み付け平均([A|R1],[B|R2],_重み合計,S1,_重み付け平均) :- S2 is S1 + A * B, 重み付け平均(R1,R2,_重み合計,S2,_重み付け平均).
290 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 08:56:03 ] >>258 使用言語:J f=:dyad def '(+/x)%~+/"1 x*(i.#y)|."0 1 y' 1 3 4 3 1 f 1 2 3 4 5 1.25 3.75 5 3.75 1.25
291 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 09:25:52 ] pc12.2ch.net/test/read.cgi/tech/1260532772/841 # [1] 授業単元: コンピュータシミュレーション # [2] 問題文(含コード&リンク):円盤状に分布させた質点に回転の初期条件をあたえたいのですが、 # 中心からの距離、位置により速度の大きさと向きが変わるのでどのようにおけばいいのかお願いします。 #
292 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 09:41:18 ] >>231 % Prolog 九九表を作り,テキストファイルに書き出す(_テキストファイル) :- 九九表を作り(_九九表), tell(_テキストファイル), 書き出す(_九九表), told. 九九表を作り(M,N,[]) :- M > N,!. 九九表を作り(M,N,[L|R]) :- findall(K,(for(1,J,9),K is J * M),L), M2 is M + 1, 九九表を作り(M2,N,R). テキストファイルに書き出す(_テキストファイル,_ならび) :- tell(_テキストファイル), 書き出す(_ならび), told. 書き出す([]) :- !. 書き出す([L|R]) :- concat_atom(L,' ',S), write_formatted('%t\n',[S]), 書き出す(R).
293 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 10:07:07 ] >>256 % Prolog (その一) 標準入力から読み込んだテキストファイルを辞書順に整列して標準出力する :- 標準的整列ルール(32,127,_標準的整列ルール), 例外的整列ルール(_例外的整列ルール), get_lines(user_input,Lines), concat_atom(Lines,' ',S), split(S,[' '],_語彙ならび), 辞書順整列(_語彙ならび,_標準的整列ルール,_例外的整列ルール,[],_辞書順に整列された語彙ならび), 語彙ならびを標準出力する(_語彙ならび). 語彙ならびを標準出力する([]). 語彙ならびを標準出力する([_語彙|R]) :- write_formatted('%t\n',[_語彙]), 語彙ならびを標準出力する(R). 標準的整列ルール(M,N,[]) :- M > N,!. 標準的整列ルール(M,N,[A|R]) :- \+((M >=97,M =< 122)), char_code(A,M), M2 is M + 1, 標準的整列ルール(M2,N,R),!. 標準的整列ルール(M,N,[A,B|R]) :- M >= 65,M =< 90, M32 is M + 32, char_code(A,M),char_code(B,M32), M2 is M + 1, 標準的整列ルール(M2,N,R),!.
294 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 10:20:25 ] >>293 訂正 % Prolog この定義の一番最後は _辞書順に整列された語彙ならび でないといけない。 標準入力から読み込んだテキストファイルを辞書順に整列して標準出力する :- 標準的整列ルール(32,127,_標準的整列ルール), 例外的整列ルール(_例外的整列ルール), get_lines(user_input,Lines), concat_atom(Lines,' ',S), split(S,[' '],_語彙ならび), 辞書順整列(_語彙ならび,_標準的整列ルール,_例外的整列ルール,[],_辞書順に整列された語彙ならび), 語彙ならびを標準出力する(_辞書順に整列された語彙ならび).
295 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 10:42:01 ] >>192 % Prolog 現在の対ドル為替レート(92.69). 日本円をドルに変換する(_日本円,_ドル,_セント) :- 現在の対ドル為替レート(_現在の為替レート), _ドル is truncate(float_integer_part(_日本円 / _現在の為替レート)), _セント is truncate(float_fractional_part(_日本円 / _現在の為替レート) * 100). 日本円をドルとセントに変換して金種を計算する(_日本円,_ドルの金種,_セントの金種) :- 日本円をドルに変換する(_日本円,_ドル,_セント), ドルの金種計算(_ドル,[100,50,20,10,5,2,1],_ドルの金種), セントの金種計算(_セント,[50,25,10,5,1],_セントの金種). ドルの金種計算(_,[],[]) :- ドルの金種計算(D,[_金種|R1],[[_金種,_枚数]|R2]) :- _枚数 is truncate(D // _金種), D2 is truncate(D mod _金種), ドルの金種計算(D2,R1,R2). セントの金種計算(_,[],[]) :- セントの金種計算(C,[_金種|R1],[[_金種,_枚数]|R2]) :- _枚数 is truncate(C // _金種), C2 is truncate(C mod _金種), セントの金種計算(C2,R1,R2).
296 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 11:37:09 ] >>257 % Prolog 問題3 これもこれまで何度も定義された。 行列の転置([[]|_],[]) :- !. 行列の転置(_副行列,[_第一要素ならび|R]) :- 第一要素と残り要素の収集(_副行列,_第一要素ならび,_残り要素ならび), 行列の転置(_残り要素ならび,R),!. 第一要素と残り要素の収集([],[],[]) :- !. 第一要素と残り要素の収集([[A|R1]|R2],[A|R3],[R1|R4]) :- 第一要素と残り要素の収集(R2,R3,R4).
297 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 11:47:35 ] pc12.2ch.net/test/read.cgi/tech/1260532772/843 # [1] 授業単元:計算機基本 # [2] 問題文(含コード&リンク): # 1から10までの整数の2乗の和 1^2 + 2^2 + 3^2 + ... +8^2 + 9^2 + 10^2 を求めるプログラムを作ってみましょう。 # 途中経過も表示してください。 # 例:1^2 + 2^2 = # 1^2 + 2^2 + 3^2 = # ....
298 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 16:32:10 ] pc12.2ch.net/test/read.cgi/tech/1260532772/847 # [1] 授業単元: プログラミング演習 # [2] 問題文(含コード&リンク): ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10368.txt #
299 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 16:37:32 ] # 基本課題 2a(数式の読み込みと表示) # 課題 2a と 2b では,算術式を読み,表示し,値を求めるプログラムを作る. # 限られた時間内で数式処理の本質部分を効率よく学ぶために, # 入力できる算術式の構文を,次の BNF で定めるものに限る. # # 定数 ::= 0 | 1 | … | 9 # 変数 ::= a | b | … | z | A | B | … | Z # 算術式 ::= 定数 # | 変数 # | (算術式+算術式) # | (算術式*算術式) # # つまり,1桁の定数や1文字の変数の和や積からなる式が入力である. # # 入力された算術式を読み込み,2分木データとして格納し,そのデータをもとに # 入力と同じ算術式を表示する,という処理を繰り返すプログラムを作れ. # # 次の要求を満たすものを作り,仕様の不明確な部分は各自で詳細化すること. # # ・算術式は標準入力から読む # ・2つの算術式の区切りは1つの空白 (間隔文字や改行文字など) とする # ・結果は標準出力に書く # ・構文に合わない算術式を読んだらプログラムを終了する
300 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 16:40:18 ] # ●基本課題 2b(数式の値の計算) # # 課題 2a のプログラムに,算術式の値を計算して表示する機能を追加せよ. # ただし,変数の値は全て1であるとして,式の値を求めること. # # 例えば,入力が (2*3) と (x+(y+z)) の場合,次のような出力をすればよい. # show: に続いて入力された算術式を,eval: に続いて算術式の値を表示している. # # (2*3) ←入力 # show: (2*3) # eval: 6 # # (x+(y+z)) ←入力 # show: (x+(y+z)) # eval: 3 # # まず,算術式の値を求める関数 eval_exp()(exp.c にある)を完成させる. # 十分な数の検査データを使って動作の正しさを確かめよ.
301 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 16:42:16 ] # ●基本課題 2c(数式データの基本操作) # # 算術式の値を変えずに括弧をくくり直す簡単な式変形を考える.例えば,式 # # (1+(2+3)) # (a*(b*c)) # ((i*x)+((j*y)+(k*z))) # # の括弧を左にくくり直すと,それぞれ,次の式になる. # # ((1+2)+3) # ((a*b)*c) # (((i*x)+(j*y))+(k*z)) # # 括弧を左にくくり直せる (A+(B+C)) や (A*(B*C)) の形の算術式を # ((A+B)+C) や ((A*B)*C) の形にする式変形は,式に対応する木を # 「左に転回」する変形と捉えられる.
302 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 19:23:50 ] >>297 % Prolog '1から10までの整数の2乗の和 1^2 + 2^2 + 3^2 + ... +8^2 + 9^2 + 10^2 を求める'(_経過,_和) :- '1から10までの整数の2乗の和 1^2 + 2^2 + 3^2 + ... +8^2 + 9^2 + 10^2 を求める'(1,[],_経過,0,_和). '1から10までの整数の2乗の和 1^2 + 2^2 + 3^2 + ... +8^2 + 9^2 + 10^2 を求める'(M,_経過,_経過,_和,_和) :- M > 10,!. '1から10までの整数の2乗の和 1^2 + 2^2 + 3^2 + ... +8^2 + 9^2 + 10^2 を求める'(M,_経過1,_経過,S1,_和) :- M =< 10, concat_atom([M,'^2'],U), append(_経過1,[U],_経過11), concat_atom(_経過11,'+',_経過), _和 is truncate(M ^ 2 + S1). '1から10までの整数の2乗の和 1^2 + 2^2 + 3^2 + ... +8^2 + 9^2 + 10^2 を求める'(M,_経過1,_経過,S1,_和) :- M =< 10, concat_atom([M,'^2'],U), append(_経過1,[U],_経過2), S2 is truncate(M ^ 2 + S1), M2 is M + 1, '1から10までの整数の2乗の和 1^2 + 2^2 + 3^2 + ... +8^2 + 9^2 + 10^2 を求める'(M2,_経過2,_経過,S2,_和).
303 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 20:04:17 ] >>297 ruby sum=0;array=[] for i in 1..10 sum+=i**2 array.push (i.to_s(10)+"^2") puts array.join(" + ") + " = " + sum.to_s(10) end
304 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 23:28:57 ] >>297 使用言語:Io なんか前にやった問題だなあと、ながめていたらrubyによる解答が 書き込まれた。これを参考にもう一度やってみた。 Io> s:=0;a:="";for(i,1,10,writeln(a=a .. i .. "^2"," = ",s=s+i*i);a=a .. " + ")
305 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 01:00:17 ] >>297 ;; Common Lisp ひさしぶりに挑戦 (dotimes (n 10) (let (lst) (dotimes (i (+ n 1)) (push (+ i 1) lst)) (setf lst (reverse lst)) (format t "~A = ~A~%" (reduce #'(lambda (x y) (concatenate 'string x " + " y)) (map 'list #'(lambda (x) (concatenate 'string (princ-to-string x) "^2")) lst)) (reduce #'+ (map 'list #'(lambda (x) (* x x)) lst)))))
306 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 05:23:53 ] >>297 使用言語:maxima for i thru 10 do printf(true,"~{~a^2~^ + ~} = ~a~%",a:makelist(j,j,1,i),lsum(k*k,k,a));
307 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 05:37:41 ] pc12.2ch.net/test/read.cgi/tech/1260532772/864 # [1] 授業単元: プログラミング演習 (木構造と数式処理) # [2] 問題文(含コード&リンク): # # 算術式の値を変えずに括弧をくくり直す簡単な式変形を考える.例えば,式 # # (1+(2+3)) # (a*(b*c)) # ((i*x)+((j*y)+(k*z))) # # の括弧を左にくくり直すと,それぞれ,次の式になる. # # ((1+2)+3) # ((a*b)*c) # (((i*x)+(j*y))+(k*z)) # # 括弧を左にくくり直せる (A+(B+C)) や (A*(B*C)) の形の算術式を((A+B)+C) や ((A*B)*C) の形にする式変形は,式に対応する木を # 「左に転回」する変形と捉えられる # # この操作を実行する関数 rotate_left_exp()を完成させてください。 # 括弧をくくり直すと値の変わる (8+(8*8)) のような式や,括弧をくくり直せる部分が内側にある (a+(b*(c*d))) のような式は, # 変形しないこと.
308 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 06:11:43 ] >>297 訂正 % Prolog 一引数増やします。 '1から10までの整数の2乗の和 1^2 + 2^2 + 3^2 + ... +8^2 + 9^2 + 10^2 を求める'(M,_経過,_和) :- '1から10までの整数の2乗の和 1^2 + 2^2 + 3^2 + ... +8^2 + 9^2 + 10^2 を求める'(1,M,[],_経過,0,_和). '1から10までの整数の2乗の和 1^2 + 2^2 + 3^2 + ... +8^2 + 9^2 + 10^2 を求める'(M,M,_経過,_経過,_和,_和) :- M > 10,!. '1から10までの整数の2乗の和 1^2 + 2^2 + 3^2 + ... +8^2 + 9^2 + 10^2 を求める'(M,M,_経過1,_経過,S1,_和) :- M =< 10, concat_atom([M,'^2'],U), append(_経過1,[U],_経過11), concat_atom(_経過11,'+',_経過), _和 is truncate(M ^ 2 + S1). '1から10までの整数の2乗の和 1^2 + 2^2 + 3^2 + ... +8^2 + 9^2 + 10^2 を求める'(M,MX,_経過1,_経過,S1,_和) :- M =< 10, concat_atom([M,'^2'],U), append(_経過1,[U],_経過2), S2 is truncate(M ^ 2 + S1), M2 is M + 1, '1から10までの整数の2乗の和 1^2 + 2^2 + 3^2 + ... +8^2 + 9^2 + 10^2 を求める'(M2,MX,_経過2,_経過,S2,_和).
309 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 06:14:45 ] >>308 (>>297 ) % Prolog これで以下のように使います。 ?- '1から10までの整数の2乗の和 1^2 + 2^2 + 3^2 + ... +8^2 + 9^2 + 10^2 を求める'(N,S,_和),write_formatted('%t=%t\n',[S,_和]),N>=10. 1^2=1 1^2+2^2=5 1^2+2^2+3^2=14 1^2+2^2+3^2+4^2=30 1^2+2^2+3^2+4^2+5^2=55 1^2+2^2+3^2+4^2+5^2+6^2=91 1^2+2^2+3^2+4^2+5^2+6^2+7^2=140 1^2+2^2+3^2+4^2+5^2+6^2+7^2+8^2=204 1^2+2^2+3^2+4^2+5^2+6^2+7^2+8^2+9^2=285 1^2+2^2+3^2+4^2+5^2+6^2+7^2+8^2+9^2+10^2=385 N = 10, S = '1^2+2^2+3^2+4^2+5^2+6^2+7^2+8^2+9^2+10^2', _和 = 385.
310 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 06:17:52 ] >>308 (>>297 ) % Prolog または、次のように利用もします。 ?- '1から10までの整数の2乗の和 1^2 + 2^2 + 3^2 + ... +8^2 + 9^2 + 10^2 を求める'(N,S,_和). N = 1, S = '1^2', _和 = 1; N = 2, S = '1^2+2^2', _和 = 5; N = 3, S = '1^2+2^2+3^2', _和 = 14; <中略> N = 9, S = '1^2+2^2+3^2+4^2+5^2+6^2+7^2+8^2+9^2', _和 = 285; N = 10, S = '1^2+2^2+3^2+4^2+5^2+6^2+7^2+8^2+9^2+10^2', _和 = 385; no. ?-
311 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 06:38:27 ] pc11.2ch.net/test/read.cgi/db/1252492296/445 # MySQL 5.1での質問です。 # # A B C # 1 q name1 # 2 w name2 # 3 e name3 # 4 q name4 # 5 t name5 # # 上記テーブルのB列の重複を除いたA,B,C列がほしい場合 # # SELECT DISTINCT B FROM table_name; # # ではB列の重複を除くだけで他の列がとれません。他の列も併せて取得する場合はど のような解決策がありますか? # # 望んでる結果は以下のものです。 # # A B C # 1 q name1 # 2 w name2 # 3 e name3 # 5 t name5 #
312 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 07:37:43 ] ttp://pc12.2ch.net/test/read.cgi/tech/1260532772/866 # # 【質問テンプレ】 # [1] 授業単元:C言語演習 # [2] 問題文(含コード&リンク): コマンド引数を使用して # 以下のように指定した文字列中の指定番号の文字を表示するプログラムを作成せよ。 # # 例:./prg1 abcde 1 # char 1 is "a" # ./peg1 abcdef123456 10 # char 10 is "4" # # エラー処理もしっかり行うこと。
313 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 09:40:27 ] >>311 使用言語:J A=:,.1;2;3;4;5 B=:'q';'w';'e';'q';'t' C=:,.'name1';'name2';'name3';'name4';'name5' A,.B,.C +-+-+-----+ |1|q|name1| +-+-+-----+ |2|w|name2| +-+-+-----+ |3|e|name3| +-+-+-----+ |4|q|name4| +-+-+-----+ |5|t|name5| +-+-+-----+ (~:B)# A,.B,.C +-+-+-----+ |1|q|name1| +-+-+-----+ |2|w|name2| +-+-+-----+ |3|e|name3| +-+-+-----+ |5|t|name5| +-+-+-----+
314 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 16:53:42 ] pc12.2ch.net/test/read.cgi/tech/1260532772/881 # [1] 授業単元:プログラミング # [2] 問題文(含コード&リンク):ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10376.txt # # 連立1次方程式の一般的な数値解法にはガウスの単純消去法がある。 # 下記の連立1次方程式の解法をC言語で表せ。 # # x1 + 5x2 + x3 = 2 # 3x1 + 4x2 = 2 # 9x1 +10x2 + 4x3 = 8
315 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 17:00:18 ] pc12.2ch.net/test/read.cgi/tech/1260532772/881 # [1] 授業単元:プログラミング # [2] 問題文(含コード&リンク):ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10376.txt # # 問題文の構造が大きすぎてコピーできません。[2]のリンクを各自で見てください。
316 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 17:31:46 ] >>313 解説お願い。
317 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 17:39:41 ] >>315 は>>314 と同じものになってしまいました。構造が多くてコピーできなかったのは 以下の問題です。 pc12.2ch.net/test/read.cgi/tech/1260532772/885 # [1] 授業単元:プログラミング(大学講義) # [2] 問題文 # ハングマンを作成せよ。 # ime.nu/ipl.sfc.keio.ac.jp/text/comp-prog-2007-4/main_c9.html#doc1_id2542 # ime.nu/ipl.sfc.keio.ac.jp/text/comp-prog-2007-4/main_c10.html#doc1_id2748 #
318 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 19:16:26 ] >>316 「~.」が通常のuniqですが、AとCを道連れにするするために 「~:」を使いました。これは、いきなりuniqせずに残す要素を1で 削除する要素を0で表したリストを返します。 「#」はコピーなんですが、1と0のリストを左引数に、操作するデータ を右引数にすると1に対応するデータだけを返します。 B=:,.'q';'w';'e';'q';'t' ~. B +-+ |q| +-+ |w| +-+ |e| +-+ |t| +-+ ~: B 1 1 1 0 1 1 1 1 0 1 # B +-+ |q| +-+ |w| +-+ |e| +-+ |t| +-+
319 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 19:52:42 ] >>318 「~:」によって、どうして、 01111 ではなく 11101 の選択になるのですか?
320 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 19:55:31 ] pc12.2ch.net/test/read.cgi/tech/1260532772/894 # お願いします # [1] 授業単元: プログラミング演習� # [2] 問題文(含コード&リンク): # Printfを作る。 # %d, %c, %sのみサポートする。
321 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 21:14:04 ] >>319 J言語のuniqは重複した要素の内、最初にあらわれたものを 残すようです。
322 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 21:16:39 ] pc12.2ch.net/test/read.cgi/tech/1258320456/85 # 【課題】 # 同じ長さのリストA,Bがある。Aはソート対象のデータ、Bは比較用の値が入っている。 # A,Bの2つの引数をとり、Bの値が昇順になるようにAをソートする関数を定義しなさい。 # 引数のリストは破壊しても良く、ソート結果は戻り値・引数Aを上書きのどちらでも良い。 # 処理の早いものには追加点を与える。 #
323 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 21:18:13 ] >>321 ご丁寧な回答に感謝します。
324 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 06:01:26 ] pc12.2ch.net/test/read.cgi/tech/1260532772/911 # お願いします # [1] 授業単元:電子演算機演習 # [2] 問題文(含コード&リンク): # 2次元の文字配列が、main関数内において次の詞で初期化(空白行も含める)されている。 # 例によって、初期化に用いられた詞の文字数や行数などはわかっていないものとする。 # # (1)関数NumOfCharで総文字数(空白以外)を、(2)関数NumOfWordで単語数を、(3)関数 # NumOfLineで行数(空白行は数えない。また、空白行が2行以上続くことはない)を、(4)main # 関数内でキーボードから一文字入力し、関数NumOfCoinで入力した文字と一致する文字数を数えて、 # main関数内でそれらの数を表示する。文字列に小細工をしないこと(単語:空白又は改行から空白 # 又は改行まで)
325 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 06:05:16 ] pc12.2ch.net/test/read.cgi/tech/1248012902/728 # 【 課題 】国旗を表示するプログラム(日の丸、星条旗、ユニオンジャック等)を作れ。 指定された国旗を画面に表示する。少なくても8種類以上。 国旗の指定にはメニューとかボタンとかを表示して、選択させること。 # 国旗は図形として描くこと。写真を貼り付けたりしては駄目。
326 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 06:11:51 ] pc12.2ch.net/test/read.cgi/tech/1262163854/238 # Repl-Aceというテキスト置換ツールを使っているんですが、 # # 1月 # ・1日 # ・2日 # ・3日 # 2月 # ・1日 # ・2日 # ・3日 # # といったテキストを、 # # 1月1日 # 1月2日 # 1月3日 # 2月1日 # 2月2日 # 2月3日 # # といったように置換することができず困っています。 # 単純な文字の置換や簡単な正規表現は理解できるのですが、 # 1月から2月までの「・」を「1月」に置換、2月から3月までの「・」を「2月」に置換、3月から(ry # を一気に行えるような正規表現ってありますか?
327 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 06:15:06 ] pc12.2ch.net/test/read.cgi/tech/1258320456/85 # 【課題】 # 同じ長さのリストA,Bがある。Aはソート対象のデータ、Bは比較用の値が入っている。 # A,Bの2つの引数をとり、Bの値が昇順になるようにAをソートする関数を定義しなさい。 # 引数のリストは破壊しても良く、ソート結果は戻り値・引数Aを上書きのどちらでも良い。
328 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 06:18:30 ] pc12.2ch.net/test/read.cgi/tech/1260532772/922 # visual studioのwindowsフォームアプリケーション visual C++のプログラミングについて質問です!! # かなり急いでます。 # チェックボックスを5個とボタン1個を使いアンケートみたいなプログラムを作りたいのですができません。 # # 内容としてはチェックの数で表示される答えを違うようにしたいのです。 # 0〜1個つけたら良い # 2〜3個つけたら普通 # 4〜5個つけたら悪い # みたいな感じで最後にボタンを押したら評価がでてくるというものです。 # すべてのプログラムを教えてください!!
329 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 07:04:45 ] >>326 % Prolog '1月から2月までの「・」を「1月」に置換、2月から3月までの「・」を「2月」に置換、 3月から...'(File) :- get_lines(File,Lines), 月表示行まで読み飛ばし(Lines,R,_月), '.を月表示に置換'(Lines,_月,L), ならびを行表示(L). '.を月表示に置換'([],_,[]) :- !. '.を月表示に置換'([A|R1],_月,X) :- sub_atom(A,_,1,_,'月'), split(A,[月],[_月2|_]), '.を月表示に置換'(R1,_月2,X). '.を月表示に置換'([A|R1],_月,[B|R2]) :- sub_atom(A,0,1,_,'.'), concat_atom([_月,A],B), '.を月表示に置換'(R1,_月,R2). 月表示行まで読み飛ばし(Lines,Lines2,_月) :- append(_,[A|Lines2],Lines), sub_atom(A,_,1,_,'月'), split(A,[月],[_月|_]),!.
330 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 07:28:37 ] pc12.2ch.net/test/read.cgi/tech/1248012902/730 # 【 課題 】ime.nu/rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/881.zip # Kadai.javaを以下のステップに沿って改めなさい。 # ファイル名およびクラス名はステップに沿ってKadai1,Kadai2というようにKadai+数字としなさい。 # # Step1. # 「入力」が押されると、テキストフィールドに入力されている文字とチェックボック>ス の状態を読み取って「名前,出席する(or しない),10000円(or 0円)」と、氏名、同窓 会の出欠、参加費をカンマ区切りでコマンドプロンプトに出力する機能を追加しなさい 。 # # Step2. # 「キャンセル」が押されるとテキストフィールドをクリアし、(もしチェックボックスにチェックされていれば)チェックを外す機能を追加しなさい。 # # Step3. # Step1と同じ内容をファイル「出席.txt」に書き込む(追い書き)する機能を追加しなさい。 # # Step4. # 右上の「×」ボタンを押す事でプログラムを終了する機能を追加しなさい。keizo@keiizo98:~/Desktop$
331 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 13:19:56 ] pc12.2ch.net/test/read.cgi/tech/1260532772/934 # [1]授業単元:C言語実習(専門学校:選択授業) # [2]課題: # コマンドライン引数に与えられた英数字からなる文字列を、長さが長いものが先、同じ長さのものどう # しでは辞書に記載される場合に先頭のほうに書かれるものが先に出力されるように出力するCを作る。 # 引数が与えられてない場合は、何も出力しない。
332 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 13:36:52 ] pc12.2ch.net/test/read.cgi/tech/1260532772/942 # [1] 授業単元:プログラミング演習 # [2] 問題文(含コード&リンク):ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10378.txt # リスト操作関数を作成する問いが5題ある。なお、ここで扱うリストは、ASCII文字を要素とする、頭を持った連結リスト(「文字リスト」と呼ぶ)である。 # # ●問1.文字リストを作成する関数と印字する関数 # # 与えられた文字列の各文字を要素とする文字リストを作成し返す関数make_clistと、与えられた文字リスト # の内容を印字する関数print_clistを作成せよ。 # # 【問1.については過去ログ等を調べつつ解答を導き出すことができました。コードを最下方に載せます。】 #
333 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 13:38:21 ] pc12.2ch.net/test/read.cgi/tech/1260532772/942 # [1] 授業単元:プログラミング演習 # [2] 問題文(含コード&リンク):ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10378.txt # ●問2.リストの内容を比較する関数 # # 与えられた二つのリストに含まれる文字の並びを辞書式順序(※)で比較し、第一のリストの方が小さければ負の # 値、大きければ正の値、等しければ0を返す関数compareを作成せよ。 #
334 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 13:39:58 ] pc12.2ch.net/test/read.cgi/tech/1260532772/942 # [1] 授業単元:プログラミング演習 # [2] 問題文(含コード&リンク):ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10378.txt # ●問3.リストの一部を取り除く関数 # # 与えられた文字リストの先頭から見ていき、要素が'<'なら自身と(あれば)直前の要素を、'>'なら自身 # と(あれば)直後の要素を取り除く関数editを作成せよ。 #
335 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 13:41:20 ] pc12.2ch.net/test/read.cgi/tech/1260532772/942 # [1] 授業単元:プログラミング演習 # [2] 問題文(含コード&リンク):ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10378.txt # ●問4.リストの一部を別のリストの内容で置き換える関数 # # 引数として三種のリストが与えられると、第一のリスト内に含まれる第二のリストに一致する部分を第三の # リストに置き換える関数replaceを作成せよ。ただし新たにリストを作成するのではなく、与えられたリスト # の変形で実現すること。一度置き換えた部分を再び置き換えの対象としなくてよい。また関数の戻り値として # 置き換えを行った回数を返すこと。
336 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 13:42:37 ] pc12.2ch.net/test/read.cgi/tech/1260532772/942 # [1] 授業単元:プログラミング演習 # [2] 問題文(含コード&リンク):ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10378.txt # ●問5.複数回出現する要素からなるリストを返す関数 # # 与えられた文字リスト中で複数回現れる文字を残して得られるリストを作成する関数multipleを作成せよ。 # ただし新たにリストを作成するのではなく、与えられたリストの変形で実現すること。また複数回現れる同種 # の文字は、そのいずれか1つだけを残すこと。
337 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 14:35:07 ] >>327 A=:'chihayafuru';'yothubato';'tomehane' B=:7;9;6 mysort=: /: mysort B 単項演算子として使うと並べ替えるための指標(0オリジン)を返す。 2 0 1 A mysort B 二項演算子として使うと右引数のデータでつくった指標で左引数のデータを並べ替える。 +--------+-----------+---------+ |tomehane|chihayafuru|yothubato| +--------+-----------+---------+
338 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 17:08:52 ] >>312 % Prolog program :- user_parameters(L), L = [S,A|_], atom_to_term(A,N,_), integer(N), sub_atom(S,N,1,_,X), write_formatted('Char %t is "%t"\n',[N,X]), halt.
339 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 20:19:00 ] >>331 --luaで。 優先順位は、長さ>大文字区別無し辞書>バイナリ function f(a,b) if a:len()==b:len() then if a:lower()==b:lower() then return a<b end return a:lower()<b:lower() end return a:len()>b:len() and true or false end t={} for i=1,#arg do table.insert(t,arg[i]) end print("before") print(unpack(t)) table.sort(t,f) print("after") print(unpack(t))
340 名前:デフォルトの名無しさん [2010/01/18(月) 21:58:23 ] ふらっとC#からきました。 宿題ではないんですが、C#でマルコフ連鎖で人工無脳を作りたいのです。 文章を単語に分けたあと(ここまではできてます)、それを配列にいれるんですか? Rubyだとこう書くらしいんだけど、これをC#だとどう書けばいいんでしょう? 分かち書きにはChasenを使っています。 よろしくアドバイスお願いします。 # マルコフ連鎖で要約 t1 = data[0]['head'] t2 = data[0]['middle'] new_text = t1 + t2 while true _a = Array.new data.each do |hash| _a.push hash if hash['head'] == t1 && hash['middle'] == t2 end break if _a.size == 0 num = rand(_a.size) # 乱数で次の文節を決定する new_text = new_text + _a[num]['end'] break if _a[num]['end'] == "EOS" t1 = _a[num]['middle'] t2 = _a[num]['end'] end d.hatena.ne.jp/zariganitosh/20090628/1246186477
341 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 05:20:14 ] pc12.2ch.net/test/read.cgi/tech/1260532772/977 # [1] 授業単元:C言語 # [2] 問題文(含コード&リンク):異なる自然数p,qと、もう一つの自然数dを入力する。 # d以下の自然数kのうちで、k=mp+nqと表すことの出来るもの(m,nは自然数)を小さい順に表示し、 # 最後にその個数を表示するプログラムを作成せよ。入力する数字はp、q、dの順とする # # 実行例 # 3 5 10 # 3 5 6 8 9 10 # 合計で6個あります
342 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 05:28:57 ] pc12.2ch.net/test/read.cgi/tech/1260532772/963 # [1] 授業単元:プログラミング演習 # [2] 問題文(含コード&リンク): kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10384.txt # 括弧をすべて左にくくり直す式変形に加えて,分配法則を使って + を * の 外側へとくくり出す式変形をするプログラムを作ってください. # ファイル exp.c に,+ を * の外側にくくり出す式変形をする 関数 dist_prod_exp() を作ること. # 例えば,算術式 ((x+1)*(y+a)) の+を外にくくり出し,括弧を左にくくり直すことで, 次の式が順に得られればよい. # ((x+1)*(y+a)) # (((x*y)+(1*y))+((x*a)+(1*a))) # ((((x*y)+(1*y))+(x*a))+(1*a)) # # 分配法則を使う順序によっては,結果の式の形が変わる.((A+B)*(C+D)) の形の式は,* の左の式 (A+B) を先に分配すると (((A+B)*C)+((A+B)*D)) # になり,右の式 (C+D) を先に分配すると ((A*(C+D))+(B*(C+D))) になる. 同じ位置で2通りに分配できる場合,この課題では,左の式の分配を優先する. # 2分木の節を格納するためのデータ構造(Tree 型)を,次のように定義する. # # typedef struct _tree { # char node; /* 節のデータ (1文字) */ # struct _tree *left; /* 左の子へのポインタ */ # struct _tree *right; /* 右の子へのポインタ */ # } Tree;
343 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 07:42:54 ] pc12.2ch.net/test/read.cgi/tech/1260532772/961 # [1] 授業単元: プログラミング演習 # [2] 問題文(含コード&リンク): 4行4列のint型の行列を、転置するプログラムを作成し、 # 動作の確認のため、転置前と転置後 の行列の内容を表示するようにせよ。
344 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 07:46:58 ] >>343 % Prolog '4行4列のint型の行列を、転置する'([[A1,A2,A3,A4],[B1,B2,B3,B4],[C1,C2,C3,C4],[D1,D2,D3,D4]],[[A1,B1,C1,D1], A2,B2,C2,D2],[A3,B3,C3,D3],[A4,B4,C4,D4]]).
345 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 07:51:53 ] >>343 % Prolog "["がひとつ抜けた。これが答えといえるかどうか。 '4行4列のint型の行列を、転置する'([[A1,A2,A3,A4],[B1,B2,B3,B4],[C1,C2,C3,C4],[D1,D2,D3,D4]],[[A1,B1,C1,D1],[A2,B2,C2,D2],[A3,B3,C3,D3],[A4,B4,C4,D4]]).
346 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 07:54:00 ] 少なくともint型の検査はできていない。
347 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 10:11:17 ] >>343 使用言語:J a=:i.4 4 a 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ,./a 各行を「,.」で連結すると転置になる 0 4 8 12 1 5 9 13 2 6 10 14 3 7 11 15 |:a 「|:」は組み込みの転置演算子 0 4 8 12 1 5 9 13 2 6 10 14 3 7 11 15
348 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 12:17:19 ] >>341 使用言語:J f=:monad define 'p q d'=.y a=./:~~.,(p*i.d)+/q*i.d b=.}.(d>:a)#a smoutput b smoutput '合計で',(":#b),'個あります' ) f 3 5 10 3 5 6 8 9 10 合計で6個あります
349 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 19:56:12 ] pc12.2ch.net/test/read.cgi/tech/1263824755/14 # [1] 授業単元: プログラミング演習� # [2] 問題文(含コード&リンク): # 終了時、xとB、まらはAとHの内積のどちらかが0のプログラム。 # (xを入力→Hを設定) # AとBはそれぞれHやxの最小多項式の係数となるはず。 # X1=(x1,...,xn)の転置行列; # H=(X1,...,Xt);
350 名前:345 mailto:sage [2010/01/19(火) 23:04:02 ] >>347 プログラムというのは何をするのかを示すことなのではないか?
351 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 23:29:14 ] pc12.2ch.net/test/read.cgi/tech/1263824755/22 # [1] 授業単元: プログラミング # [2] 問題文(含コード&リンク):ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10392.txt # # 練習問題1* # 以下に示すプログラムは、リストを操作するプログラムの一部である。このプログラムに、ジストの指定した位置(末尾以外)にノードを挿入する関数insert_nodeと、 # リストの指定した位置のノードを削除する関数delete_nodeを追加し、プログラムを完成させよ。 # insert_nodeは引致として挿入位置の情報リストの何番目のノードかという情報)とデータ(文字列)を受け取るも # のとする。また、挿入位置に元々あったノードは、新しく挿入するノードの次の要素となるものとする。 # リストの先頭ノードとして挿入される場合にも正しく動くようにすること。 # delete_nodeは、引数として削除位置の情報を受け取る。リストの先頭のノード、最後のノード、途中のノードが削除されたときにそれぞれ正しく動くようにすること。 # また、ノードが1個しかない場合にも正しく動<ようにすること。
352 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 07:55:26 ] >>350 この問いかけはどう受け取ればいいのでしょうか。 「あなたの書き込みは組み込み機能の紹介で プログラムじゃないよ」ということですか?
353 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 08:52:50 ] >>352 半分は自問。 pc12.2ch.net/test/read.cgi/tech/1263289291/ の第一夜を書いたのは 私です。このスレの最後に書き込まれた >>第二夜?は第一夜とは正反対の主張の方と考えてよいのでしょうか? を読んで書いてみたのが>>345 です。>>347 は説明的で冗長な>>345 の対極にあるかなと思い、 さらに>>350 で問いかけました。 私は、オペレータを知らないとそのプログラムの意味がわからない(APL的)ことは、 関数型言語の欠点ではないかと思っています。
354 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 09:42:40 ] 補足。説明を論理式で書き表すことができるならば、その論理式が すなわちプログラムである。というのがPrologの"売り"なんですね。 上の論理式の部分を数式に置き換えて、はたして本当にその数式が "説明"になっているかということを問題にしているのです。常に 完全に理解している事が前提になっているのではないか、と。
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,!.