1 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 09:57:19 ] 第二編も512Kbyte越えで終了しました。 前スレで未解決な課題は順次このスレにコピーします。
413 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 05:35:28 ] pc12.2ch.net/test/read.cgi/tech/1263824755/103 # [1] 授業単元:Cプログラミング演習2 # [2] 問題文(含コード&リンク):ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10420.txt # (2) 2 つの4×4 行列を2 次元配列に格納し,それらの積を求めるプログラムを作成せよ.以下の関数を # 利用すること. # void mult_array(int a0[4][4], int a1[4][4], int result[4][4]) # a0,a1 入力された行列の値が格納された2 次元配列のポインタ # result 演算結果の行列の値が格納された2 次元配列のポインタ # 戻り値 なし # 入力に関して # キーボードからまず,1 つめの行列の1 行目の4 つの整数をスペース1 つ開けて1 行で入力し, # 改行する.以下同様に1 つめの行列の2 行目,3 行目,4 行目,2 つめの行列の1・・・4 行目 # を入力する.この一連の入力時,入力を促す文字等は決して表示しないこと. # 出力に関して # 1行目に結果の行列の1 行目をスペース1 つあけて特に整形せず数値のみ出力(+改行),以下同 # 様に2 行目,3 行目,4 行目を特に整形せず数値のみ出力する.指定した数値・改行以外の文 # 字等の出力は一切行わないこと.
414 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 05:37:43 ] pc12.2ch.net/test/read.cgi/tech/1263824755/103 # [1] 授業単元:Cプログラミング演習2 # [2] 問題文(含コード&リンク):ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10420.txt # # (3) 平均値と中央値を求める関数を作成し,その関数を使用して平均値と中央値を出力するプログラム # を作成せよ.関数は下記の通りとする. # int median(int *in, int num) # in 複数の整数値が格納された配列の(先頭)ポインタ # num 入力値の数 # 戻り値 中央値 # int avg (int *in, int num) # in 複数の整数値が格納された配列の(先頭)ポインタ # num 入力値の数 # 戻り値 平均値(四捨五入した整数値, 負の場合丸め方は任意) # 入力に関して # キーボードから入力する整数の個数を入力し(最大で128 に対応すること)改行する.次に指 # 定した数の整数をスペース1つずつ開けて1行で入力し,改行する.この一連の入力時,例題 # や解答例のような入力を促す文字等は決して表示しないこと. # 出力に関して # 中央値 平均値(+改行)のみ出力.中央値と平均値の間はスペースを1 つ入れること.指定した # 数値・改行以外の文字等の出力は一切行わないこと.
415 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 06:03:31 ] pc12.2ch.net/test/read.cgi/tech/1263824755/104 # # 課題1 20 桁までの自然数の足し算と掛け算を浮動小数点演算を用いないで実施するプログラムlongcomp.c を # 作成し、C のソースコードを提出しなさい。足し算は必須課題、掛け算はオプション課題です。 # 実行形式をlongcomp とした動作仕様は以下である1 # >./longcomp 12345678901234567890 + 12345678901234567890 # >12345678901234567890 + 12345678901234567890 = 24691357802469135780 # >./longcomp 1234567890 * 1234567890 # >1234567890 * 1234567890 = 1524157875019052100
416 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 06:05:44 ] pc12.2ch.net/test/read.cgi/tech/1263824755/105 # # 課題2 b01, b001 のように二進数をb で始まるように表記する。二進数の集合を、できるだけ少ないノード数 # の二分木に分類するためには、二分木のノードに蓄積する二進数の桁数を可変にすることが有効である。 # こうすることで二進数表記した値(たとえばキーワードとか、位置とか、日付とか)に紐づけられたデータを少ない検索で見つけることができる。 # 扱う二進数の集合を、たとえば # b00, b001, b0011, b00111, b1000, b11100, b0 # として、これらを図1に示すようにニ分木に分類して、帰りがけ(ポストオーダ)で次のように出力するプログラム(tree) を作成し、C のソースコードを提出しなさい。 # >./tree # >1 1 1 0 0 000 1100 1 b #
417 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 06:14:47 ] pc12.2ch.net/test/read.cgi/tech/1263824755/124 # [1] 授業単元: Cプログラミング入門 # [2] 問題文(含コード&リンク): 入力された2つの文字列(日本語その他バイト文字は不可) # を比較するプログラムを作成せよ。ただし、大文字小文字の違いは無視。単語間に連続して # スペース・タブが複数入っていても単独のスペースとしない。 # # [5] その他の制限: 文字列とポインタまでやってます。 # 入力に関して、キーボードから1つ目の文字列を1行で入力し、改行する。 # この時、入力を促す文字は一切表示しない。入力文字数は128文字まで。 # 出力に関して、一致すれば何も表示しない。不一致の場合は最初に不一致となる # 入力1の文字と入力2の文字(1文字+スペース+1文字+改行)を表示する。 # どちらかが末端の場合は代わりにスペースで埋める。
418 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 06:22:12 ] pc12.2ch.net/test/read.cgi/tech/1263824755/135 # [1] 授業単元:C言語 # [2] 問題文(含コード&リンク):ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10408.txt # # (1)複数の整数を平均値に近い順にソートするプログラムを作成せよ。 # 平均値は切り捨てして整数値で求めるものとし、平均値との距離が等しい # 場合は値の小さな整数が優先されるものとする。 # # 入力に関して # キーボードからまず、入力する整数の個数を入力(最大で100とする)し、改行。 # 次に指定した数の整数をスペース1つ開けて1行で入力し、改行する。 # この時、入力を促す文字は一切表示しないこと。 # 出力に関して # ソートした整数をスペース1つのみあけて1行で出力する(+改行)。指定した数改行 # 以外の出力は一切行わないこと。
419 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 07:12:24 ] pc12.2ch.net/test/read.cgi/tech/1263824755/137 # [1] 授業単元: プログラミング概論 # [2] 問題文:"in_file"という名前のファイルの中に18個の整数データが空白や改行コードで区切られて並んでいると仮定した上で、 # この入力ファイルの中のデータを1行に5個ずつきれいに並べて"out_file"という名前のファイルに # 出力するCプログラムを作成せよ。 # 入力ファイルの内容が # -1111111111 2222222 333333 4444 55 6 7 8 9 0 1 2 3 4 # 5 6 7890123 # -5666 # の時には、例えば次のような内容を"out_file"に書き出す # _-1111111111_____2222222______333333________4444__________55 # _________________6_______________7______________8_____________9___________0 # ________________ 1_______________2______________3_____________4___________5 # _________________6_____7890123________-5666 #
420 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 07:23:27 ] >>418 ;; Common Lisp (defun sort-ave (lst) (let ((abs-ave (floor (abs (/ (reduce #'+ lst) (length lst)))))) (sort lst #'(lambda (a b) (let ((ax (abs (- (abs a) abs-ave))) (bx (abs (- (abs b) abs-ave)))) (if (= ax bx) (< a b) (< ax bx))))))) (defun main () (let ((num (read)) lst) (cond ((<= num 100) (dotimes (i num) (push (read) lst)) (format t "~{~A ~}~%" (sort-ave lst))))))
421 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 12:56:07 ] >>418 使用言語:J f=:monad def '}.|:/:~|:y,:~|y-<.(+/%#)y' f 0 7 8 9 2 2 5 5 5 3 3 5 5 5 2 2 7 0 8 9
422 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 15:28:46 ] pc12.2ch.net/test/read.cgi/tech/1263824755/143 # [1] データ構造とプログラミング # [2] # 演習問題4.5 逆ポーランド記法による入力文字列(空白で区切られている)に対して 、 # 16進数と10進数で答えを返すプログラムrpnを作りなさい。 # (入力例)rpn 5 2 + 7 * # (出力例)0x31, 49(decimal) #
423 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 17:57:56 ] pc12.2ch.net/test/read.cgi/tech/1263824755/147 # [1] 授業単元: C++ # [2] 問題文(含コード&リンク): # 2. # ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10439.txt # ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10436.txt # ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10437.txt # ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10438.txt # kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10436.txt ↑pm1.txt # kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10437.txt # ↑pm2.txt # kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10438.txt # ↑pm3.txt # というファイルがある。 # plus で始まる行の数値を足し,minus で始まる行の数値を引く。 # ファイルの最後まで計算した結果を表示するプログラムを作成せよ。 # データの数は実行前にはわからないものとする。
424 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 18:07:11 ] pc12.2ch.net/test/read.cgi/tech/1263824755/154 # [1] 授業単元: プログラミング演習 # [2] 問題文(含コード&リンク):ime.nu/www.acm-japan.org/past-icpc/domestic2008/problems/all_ja.html # 等しい合計点 # # 太郎と花子はそれぞれカードを何枚か持っている. # 各カードには点数が書かれている.太郎のカードと花子のカードを 1 枚ずつ交換して, # それぞれの持つカードの合計点数が等しくなるようにしたい. # どのカードとどのカードを交換したらよいか. # # ただし,カードを交換しなくても合計点数が等しい場合でも,必ずカードの交換を行うものとする. # Input # 入力は,いくつかのデータセットからなる.各データセットは次の形式で与えられ # n m # s1 # s2 # ... # 各データセットの最初の行は空白ひとつで区切られたふたつの数 n と m を含み, # n は太郎のカードの枚数,m は花子のカードの枚数を表す.続く n+m 行には, # 各カードの点数が 1 行にひとつずつ並ぶ. # 最初の n 個の点数 (s1 から sn まで) は太郎のカードの点数, # 残りの m 個の点数 (sn+1 から sn+m まで) は花子のカードの点数を表す. # n および m は 100 以下の正の整数とし,カードの点数は 0 以上 100 以下の整数値とする. # 入力の終わりは,空白ひとつで区切られたふたつの 0 を含む 1 行で示される.
425 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 19:04:37 ] >>423 使用言語:J plus =:+ minus=:- f=:monad def '+/".;._2(1!:1)y' f <'pm3.txt' _316
426 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 20:18:00 ] pc12.2ch.net/test/read.cgi/tech/1263824755/161 # [1] 授業単元: プログラミング演習(木構造と数式処理) # [2] 問題文(含コード&リンク): # # 累乗の計算の逆を行うプログラムを作ってください。 # # 例 # x*x*xと入力されればx^3と画面に出力する。 # # x*x*x*aなどの場合はx^3*aと出力されればよい。 #
427 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 20:42:02 ] >>413 使用言語:J mult_array=: +/ .* ]A=:i.4 4 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 A mult_array A 56 62 68 74 152 174 196 218 248 286 324 362 344 398 452 506
428 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 00:00:16 ] >>419 使用言語:J read=: 1!:1 wrire=: 1!:2 format=: 8!:2 a=: read <'in_file' b=: '13.0'format ".each _5,\cutopen,,;._2 a (,b,.LF)write<'out_file'
429 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 01:18:57 ] pc12.2ch.net/test/read.cgi/tech/1263824755/167 # 上の105ですが、もう一度質問させて頂きます。 # なぜなら、課題2対しての回答がないからです。 # 皆様よろしくお願いします。 # # [1] データ構造とプログラミング # [2]b01, b001 のように二進数をb で始まるように表記する。二進数の集合を、できるだけ少ないノード数 # の二分木に分類するためには、二分木のノードに蓄積する二進数の桁数を可変にすることが有効である。こう # することで二進数表記した値(たとえばキーワードとか、位置とか、日付とか)に紐づけられたデータを少な # い検索で見つけることができる。 # 扱う二進数の集合を、たとえば # b00, b001, b0011, b00111, b1000, b11100, b0 # として、これらを図1に示すようにニ分木に分類して、帰りがけ(ポストオーダ)で次のように出力するプロ # グラム(tree) を作成し、C のソースコードを提出しなさい。 # >./tree # >1 1 1 0 0 000 1100 0 1 b #
430 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 01:21:28 ] >>429 ごめんなさい。>>416 に既出でした。
431 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 01:39:43 ] pc12.2ch.net/test/read.cgi/tech/1263824755/174 # [1] データ構造とプログラミング # [2] # リングバッファを使って、9個のキューを作り、データを追加したり、 # データを取り出すプログラムを完成させなさい。 # 以下の添付にあるプログラムを完成させろという課題です。 # ime.nu/www.geocities.jp/pegasus_violet/en5-2.pdf # 演習問題5.2 リングバッファを使って、9 個のキュー(配列は10 元)を作り、 # データを追加したり(EnQue), データを取り出す(DeQue) プログラムを # 完成させなさい29。プログラムの動作仕様は以下のようである。 # 1. 数字を入力するとキューが伸びる # 2. d(deque) を入力するとfront を標準出力に出力 # 3. s(show) を入力するとキューを表示 # 4. キューがいっぱいだったらエラーメッセージを出す # 5. q で終了
432 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 06:00:35 ] >>419 % Prolog ここまでするか、とお思いでしょうが・・ '入力ファイルの中のデータを1行に5個ずつきれいに並べて"out_file"という名前のファイルに出力する'(_整数ならび) :- 入力ファイルの中のデータ(_整数ならび), 最大桁数(_整数ならび,_最大桁数), _整数表示桁 is _最大桁数 + 2, concat_atom(['%',_整数表示桁,d],_表示フォーマット), '1行に5個ずつきれいに並べて'(_整数ならび,_5個組整数ならび), tell('out_file), 出力する(_5個組整数ならび,_表示フォーマット), told. 入力ファイルの中のデータ(_整数ならび) :- '"in_file"という名前のファイルの中に18個の整数データが空白や改行コードで区切られて並んでいる'(_整数ならび),!. '"in_file"という名前のファイルの中に18個の整数データが空白や改行コードで区切られて並んでいる'(_整数ならび) :- get_lines('infile',Lines), concat_atom(Lines,' ',S), split(S,[' '],_整数ならび), length(_整数ならび,18),!. '1行に5個ずつきれいに並べて'(_整数ならび,_5個組整数ならび) :- 'N個組'(5,_整数ならび,_5個組整数ならび),!. 出力する([],_) :- !. 出力する([L|R],_表示フォーマット) :- '1行出力する'(L,_表示フォーマット),出力する(R,_整数表示桁). 出力する([L|R],_表示フォーマット) :- '1行出力する'(L,_表示フォーマット), 出力する(R,_整数表示桁). '1行出力する'([],_) :- write('\n'),!. '1行出力する'([N|R],_表示フォーマット) :- write_formatted(_表示フォーマット,[N]),'1行出力する'(R,_表示フォーマット).
433 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 06:04:00 ] >>433 (>>432 ) 訂正 % Prolog 訂正するのを忘れていた。 出力する([],_) :- !. 出力する([L|R],_表示フォーマット) :- '1行出力する'(L,_表示フォーマット),出力する(R,_表示フォーマット).
434 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 07:16:12 ] >>374 使用言語:J rev_string=: ,~/ rev_string 'SEC' CES |. 'SEC' CES
435 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 07:28:11 ] >>418 % Prolog (その一) >>421 の短さに唖然! 複数の整数を平均値に近い順にソートする(_整数ならび,_平均値に近い順に整列された 整数ならび) :- 'キーボードからまず、入力する整数の個数を入力(最大で100とする)し、改行'(_ 入力する整数の個数), 指定した数の整数をスペース1つ開けて1行で入力する(_入力する整数の個数,_整数 ならび), 相加平均(_整数ならび,_平均値の一), _平均値 is truncate(_平均値の一), 平均値からの隔たりによる整列(_平均値からの隔たりのならび,_平均値からの隔た りを鍵として付加して整列された整数ならび), 整列した整数をスペース1つのみあけて1行で出力する(_平均値からの隔たりを鍵と して付加して整列された整数ならび). 'キーボードからまず、入力する整数の個数を入力(最大で100とする)し、改行'(_入力 する整数の個数) :- repeat, get_integer(_入力する整数の個数), _入力する整数の個数 =< 100,!. 指定した数の整数をスペース1つ開けて1行で入力する(_入力する整数の個数,_整数なら び) :- length(_整数ならび,_入力する整数の個数), get_split_line([' '],_整数ならび).
436 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 07:31:28 ] >>418 % Prolog (その二) >>435 は改行位置を間違えた行が数行あります。 平均値からの隔たりによる整列([X|Xs],_平均値,Ys) :- U is X - _平均値, 平均値からの隔たりにより分割する(Xs,U,_平均値,Littles,Bigs), 平均値からの隔たりによる整列(Littles,_平均値,Ls), 平均値からの隔たりによる整列(Bigs,_平均値,Bs), append(Ls,[X|Bs],Ys) . 平均値からの隔たりによる整列([],_,[]). 平均値からの隔たりにより分割する([X|Xs],Y,_平均値,[[U,X]|Ls],Bs) :- U is X - _平均値, U =< Y, 平均値からの隔たりにより分割する(Xs,Y,_平均値,Ls,Bs),!. 平均値からの隔たりにより分割する([X|Xs],Y,_平均値,Ls,[[U,X]|Bs]) :- U is X - _平均値, U > Y, 平均値からの隔たりにより分割する(Xs,Y,_平均値,Ls,Bs) . 平均値からの隔たりにより分割する([],Y,_,[],[]). 整列した整数をスペース1つのみあけて1行で出力する([]) :- !. 整列した整数をスペース1つのみあけて1行で出力する([[A,B]]) :- write_formatted('%t\n',[A]) :- !. 整列した整数をスペース1つのみあけて1行で出力する([[B,A]|R]) :- write_formatted('%t ',[A]), 整列した整数をスペース1つのみあけて1行で出力する(R)
437 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 08:14:42 ] >>436 # 平均値との距離が等しい場合は値の小さな整数が優先されるものとする。 この判断が漏れている。
438 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 10:34:26 ] >>418 間違いが多いようなので書き直し(申し訳ない) % Prolog (その一) 複数の整数を平均値に近い順にソートする(_整数ならび,_平均値に近い順に整列された 整数ならび) :- 'キーボードからまず、入力する整数の個数を入力(最大で100とする)し、改行'(_ 入力する整数の個数), 指定した数の整数をスペース1つ開けて1行で入力する(_入力する整数の個数,_整数 ならび), 相加平均(_整数ならび,_平均値の一), _平均値 is truncate(_平均値の一), 平均値からの隔たりによる整列(_平均値からの隔たりのならび,_平均値,_平均値か らの隔たりを鍵として付加して整列された整数ならび), 整列した整数をスペース1つのみあけて1行で出力する(_平均値からの隔たりを鍵と して付加して整列された整数ならび). 'キーボードからまず、入力する整数の個数を入力(最大で100とする)し、改行'(_入力 する整数の個数) :- repeat, get_integer(_入力する整数の個数), _入力する整数の個数 =< 100,!. 指定した数の整数をスペース1つ開けて1行で入力する(_入力する整数の個数,_整数なら び) :- length(_整数ならび,_入力する整数の個数), get_split_line([' '],_整数ならび).
439 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 10:39:03 ] >>418 % Prolog (その二) >>438 はやはり改行がうまくいかなかった。 平均値からの隔たりによる整列([X|Xs],_平均値,Ys) :- U is X - _平均値, 平均値からの隔たりにより分割する(Xs,U,Y,_平均値,Littles,Bigs), 平均値からの隔たりによる整列(Littles,_平均値,Ls), 平均値からの隔たりによる整列(Bigs,_平均値,Bs), append(Ls,[X|Bs],Ys) . 平均値からの隔たりによる整列([],_,[]). 平均値からの隔たりにより分割する([X|Xs],U,Y,_平均値,[[U,X]|Ls],Bs) :- V is X - _平均値, V < U, 平均値からの隔たりにより分割する(Xs,U,Y,_平均値,Ls,Bs),!. 平均値からの隔たりにより分割する([X|Xs],U,Y,_平均値,[[U,X]|Ls],Bs) :- U is X - _平均値, X < Y, 平均値からの隔たりにより分割する(Xs,U,Y,_平均値,Ls,Bs),!. 平均値からの隔たりにより分割する([X|Xs],U,Y,_平均値,Ls,[[U,X]|Bs]) :- 平均値からの隔たりにより分割する(Xs,U,Y,_平均値,Ls,Bs) . 平均値からの隔たりにより分割する([],Y,_,[],[]). 整列した整数をスペース1つのみあけて1行で出力する([]) :- !. 整列した整数をスペース1つのみあけて1行で出力する([[A,B]]) :- write_formatted('% t\n',[A]),!. 整列した整数をスペース1つのみあけて1行で出力する([[B,A]|R]) :- write_formatted('%t ',[A]), 整列した整数をスペース1つのみあけて1行で出力する(R).
440 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 10:43:20 ] すみません。行末あたりに一文字何かが入ってしまったようで改行の制御が 正しくできませんでした。 nojiriko.asia/prolog/c134_135.html に仕上げて書いておきます。
441 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 11:06:53 ] pc12.2ch.net/test/read.cgi/tech/1263824755/189 # [1] データ構造とプログラミング # [2] # ツリーにノードを追加するプログラムを完成させなさい。またプログラム中 に使われている要素 mitsugi, emura, satou, yonemura, murai, nakamura, kwkt がツリー上でどのように配置され ているか書きなさい。 # 以下の添付にあるプログラムを完成させろという課題です。 # ime.nu/www.geocities.jp/pegasus_violet/en9-5.pdf
442 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 16:43:14 ] pc12.2ch.net/test/read.cgi/tech/1263824755/193 # [1] 授業単元:プロトタイプ宣言とか引数 # [2] 問題文(含コード&リンク):[3〜6]∫x^2 dx(これだと正解は63)を計算するプログラムを作成せよ。 # 尚、積分本体(始点と終点)と関数本体f(x)に分けること。dx=1/N N=(10,1000…10000)誤差評価を行う事。積分範囲を変更すること。x^2の関数を変更すること。 #
443 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 16:44:31 ] pc12.2ch.net/test/read.cgi/tech/1263824755/197 # [1] 計算機概論 # [2] 8bit整数が8つ与えられている。これをunsigned char配列と # みなしa[]と名付ける。 # unsigned char 整数のor,not演算だけを用いて1<=n<=8からa[n]を # 計算するC計算式を出力するプログラム # 例:a[]={1,2,3,4,5,6,7,8}; 出力 return n; # a[]={1,0,1,0,1,0,1,0}; 出力 return !(!n or 11111110b);
444 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 17:33:48 ] pc12.2ch.net/test/read.cgi/tech/1263824755/200 # [1] 授業単元: プログラミング # [2] 問題文(含コード&リンク): # A組、B組、C組にそれぞれn人の生徒がいて、 # A組の生徒が一列に並んでいる。 # このとき、B組の生徒をA組の生徒の隣に並ばせたいが # なるべく隣同士で身長に差がないようにしたい。 # どうやって計算すればいいでしょう? # 加えて、C組の生徒もB組の隣に並ばせたい場合はどうすれば? # (身長の配列) double height_a[n], height_b[n], height_c[n];
445 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 18:07:57 ] >>444 % Prolog なるべく隣同士で身長に差のない並び方(La,Lb,N,LbX) :- findmin([S,L],ならび候補(La,Lb,N,L,S),Min), Min = [_,LbX],!. ならび候補(La,Lb,N,L,S) :- 順列(Lb,N,L), findsum(U,(for(1,M,N),list_nth(M,La,A),list_nth(M,L,B),U is (B-A) ^ 2),S).
446 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 19:24:07 ] pc12.2ch.net/test/read.cgi/tech/1262163854/406 # 下のような2つのファイルから # 平均を出したいんですがどのようにすればいいのでしょうか? # ---file A--- # 1 87 # 2 89 # 3 40 # 4 90 # 5 33 # # ---file B--- # 1 45 # 2 22 # 3 78 # 4 60 # 5 19 # # ほしい結果は # ---file C--- # 1 (87+45)/2 # 2 (89+22)/2 # 3 (49+78)/2 # 4 (90+60)/2 # 5 (33+19)/2 # です。
447 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 19:50:16 ] >>444 使用言語:J よくわかりませんが、こんなふうではだめでしょうか? A組のならびから身長の順位表をつくる。 B組をこの「A組順」でソートする。 ]a=:145+?10#40 178 155 176 179 169 146 161 179 177 153 ]b=:140+?10#50 178 167 186 142 165 166 172 173 181 181 a,:(/:~b)/:/:a 178 155 176 179 169 146 161 179 177 153 181 166 173 181 172 142 167 186 178 165
448 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 20:23:36 ] >>446 % Prolog '2つのファイルから平均を出す'('fileA','fileB','fileC') :- '2つのファイルから2つのならびを取り出す'('fileA','fileB',L1,L2), fileAのデータを基礎に平均を計算してfileCに出力する('fileC',L1,L2),!. '2つのファイルから2つのならびを取り出す'('fileA','fileB',L1,L2) :- get_split_lines('fileA',[' '],L1), get_split_lines('fileB',[' '],L2),!. fileAのデータを基礎に平均を計算してfileCに出力する('fileC',L1,L2) :- tell('fileC'), fileAのデータを基礎に平均を計算して出力する(L1,L2), told. fileAのデータを基礎に平均を計算して出力する([],_) :- !. fileAのデータを基礎に平均を計算して出力する([[N,A]|R1],L2) :- member([N,B],L2), C is (A + B) / 2, write_formatted('%t (%t+%t)/2=%t',[M,A,B,C]), fileAのデータを基礎に平均を計算して出力する(R1,L2).
449 名前:デフォルトの名無しさん mailto:sage [2010/01/27(水) 02:28:09 ] pc12.2ch.net/test/read.cgi/tech/1263824755/233 # [1] 授業単元:プロトタイプ宣言とか引数 # [2] 問題文(含コード&リンク): 入力された数字が偶数なら、trueを返す関数。それ以外ならfalse
450 名前:デフォルトの名無しさん mailto:sage [2010/01/27(水) 02:30:31 ] pc12.2ch.net/test/read.cgi/tech/1263824755/232 # [1] 授業単元:プロトタイプ宣言とか引数 # [2] 問題文(含コード&リンク): 得点を入力して以下のルールに従った成績を返す関数を実装せよ。 # 90点以上 S # 80点以上 A # 60点以上 B # それ未満 C
451 名前:デフォルトの名無しさん mailto:sage [2010/01/27(水) 02:41:54 ] >>449 % Prolog 入力された数字が偶数なら、trueを返す :- get_integer(N), 入力された数字が偶数なら、trueを返す(N). 入力された数字が偶数なら、trueを返す(N) :- 0 is N mod 2.
452 名前:デフォルトの名無しさん mailto:sage [2010/01/27(水) 02:46:26 ] >>449 % Prolog '入力された数字が偶数なら、trueを返す。それ以外ならfalse'(_診断) :- get_integer(N), '入力された数字が偶数なら、trueを返す。それ以外ならfalse'(N,_診断). '入力された数字が偶数なら、trueを返す。それ以外ならfalse'(N,true) :- 0 is N mod 2. '入力された数字が偶数なら、trueを返す。それ以外ならfalse'(N,false).
453 名前:デフォルトの名無しさん mailto:sage [2010/01/27(水) 02:48:11 ] >>452 (>>449 ) 訂正 % Prolog '入力された数字が偶数なら、trueを返す。それ以外ならfalse'(_診断) :- get_integer(N), '入力された数字が偶数なら、trueを返す。それ以外ならfalse'(N,_診断). '入力された数字が偶数なら、trueを返す。それ以外ならfalse'(N,true) :- 0 is N mod 2,!. '入力された数字が偶数なら、trueを返す。それ以外ならfalse'(N,false).
454 名前:デフォルトの名無しさん mailto:sage [2010/01/27(水) 02:58:21 ] >>450 % Prolog 得点を入力して以下のルールに従った成績を返す(_成績) :- get_integer(_得点), 得点を入力して以下のルールに従った成績を返す(_得点,_成績). 得点を入力して以下のルールに従った成績を返す(_得点,_成績) :- 以下のルール(_得点,_,_成績). 以下のルール(_得点,'90点以上','S') :- _得点 >= 90,!. 以下のルール(_得点,'80点以上','A') :- _得点 >= 80,!. 以下のルール(_得点,'60点以上','B') :- _得点 >= 60,!. 以下のルール(_得点,'それ未満','C') :- _得点 < 60,!.
455 名前:デフォルトの名無しさん mailto:sage [2010/01/27(水) 03:10:28 ] >>450 % Prolog 少し模索 得点を入力して以下のルールに従った成績を返す(_成績) :- get_integer(_得点), 得点を入力して以下のルールに従った成績を返す(_得点,_成績). 得点を入力して以下のルールに従った成績を返す(_得点,_成績) :- '得点が90点以上'(_得点,_成績). 得点を入力して以下のルールに従った成績を返す(_得点,_成績) :- '得点が80点以上'(_得点,_成績). 得点を入力して以下のルールに従った成績を返す(_得点,_成績) :- '得点が60点以上'(_得点,_成績). 得点を入力して以下のルールに従った成績を返す(_得点,_成績) :- '得点が60点未満'(_得点,_成績). '得点が90点以上'(_得点,'S') :- _得点 >= 90,!. '得点が80点以上'(_得点,'A') :- _得点 >= 80,_得点<90,!. '得点が60点以上'(_得点,'B') :- _得点 >= 60,_得点<80,!. '得点がそれ未満'(_得点,'C') :- _得点 < 60,!.
456 名前:デフォルトの名無しさん mailto:sage [2010/01/27(水) 06:26:04 ] >>450 % Prolog 得点を入力して以下のルールに従った成績を返す(_成績) :- get_integer(_得点), 得点を入力して以下のルールに従った成績を返す(_得点,_成績). 得点を入力して以下のルールに従った成績を返す(_得点,_成績) :- '得点が90点以上の成績はS'(_得点,_成績). 得点を入力して以下のルールに従った成績を返す(_得点,_成績) :- '得点が80点以上の成績はA'(_得点,_成績). 得点を入力して以下のルールに従った成績を返す(_得点,_成績) :- '得点が60点以上の成績はB'(_得点,_成績). 得点を入力して以下のルールに従った成績を返す(_得点,_成績) :- '得点がそれ未満のはC'(_得点,_成績). '得点が90点以上の成績はS'(_得点,'S') :- _得点 >= 90,!. '得点が80点以上の成績はA'(_得点,'A') :- _得点 >= 80,_得点<90,!. '得点が60点以上の成績はB'(_得点,'B') :- _得点 >= 60,_得点<80,!. '得点がそれ未満の成績はC'(_得点,'C') :- _得点 < 60,!.
457 名前:デフォルトの名無しさん mailto:sage [2010/01/27(水) 06:29:40 ] >>456 訂正 成績がひとつ落ちた '得点がそれ未満のはC' -> '得点がそれ未満の成績はC'
458 名前:デフォルトの名無しさん mailto:sage [2010/01/27(水) 13:39:12 ] >>449 使用言語:Io Number even:=method(self % 2 == 0) Io> 23 even ==> false Io> 24 even ==> true
459 名前:デフォルトの名無しさん mailto:sage [2010/01/27(水) 17:24:57 ] >>450 使用言語:J f=: monad def 'y{''CBAS''#~2-~/\0 60 80 90 101' f 0 C f 59 C f 60 B f 79 B f 80 A f 89 A f 90 S f 100 S
460 名前:デフォルトの名無しさん mailto:sage [2010/01/27(水) 17:34:13 ] >>449 使用言語:J even=: 0=2&| even 23 0 even 24 1
461 名前:デフォルトの名無しさん mailto:sage [2010/01/27(水) 17:37:51 ] >>449 使用言語:Scilab -->deff('r = even(n)', 'r = modulo(n, 2) == 0') -->even(23) ans = F -->even(24) ans = T
462 名前:デフォルトの名無しさん mailto:sage [2010/01/27(水) 17:56:26 ] pc12.2ch.net/test/read.cgi/tech/1263824755/245 # [1] 授業単元: プログラミング # [2] 問題文(含コード&リンク): # キーボードから正の整数nを入力し、n!を計算して画面表示するプログラムを # 作成せよ。ただし、階乗を計算する関数のプロトタイプを「void kaiyo(int , int *)」 # とし、第1引数にnを、第2引数に計算結果を格納する変数のポインタを指定すること。 #
463 名前:デフォルトの名無しさん mailto:sage [2010/01/27(水) 19:42:34 ] >>449 使用言語:Arc arc> (even 5) nil arc> (even 4) t arc> (def even? (n) (is (mod n 2) 0)) #<procedure: even?> arc> (even? 23) nil arc> (even? 24) t
464 名前:デフォルトの名無しさん mailto:sage [2010/01/27(水) 20:12:02 ] >>449 使用言語: (%i26) even(n):=is(mod(n,2)=0); (%i27) even(23); (%o27) false (%i28) even(24); (%o28) true (%i29) f(n):=mod(n,2)=0; (%i30) f(23); (%o30) 1 = 0 (%i31) f(24); (%o31) 0 = 0 (%i32) if f(4) then "even" else "odd"; (%o32) even isがないとtrue,falseの表示にならないようだ。
465 名前:デフォルトの名無しさん mailto:sage [2010/01/27(水) 20:16:34 ] >>464 書き忘れましたが、使用言語は maxima です。
466 名前:デフォルトの名無しさん mailto:sage [2010/01/27(水) 21:03:29 ] >>449 使用言語:scheme(Gauche) gosh> (even? 23) #f gosh> (even? 24) #t gosh> (define (even n) (= (modulo n 2) 0)) even gosh> (even 23) #f gosh> (even 24) #t
467 名前:デフォルトの名無しさん mailto:sage [2010/01/27(水) 21:12:54 ] >>449 使用言語:Common Lisp(xyzzy) (evenp 23) nil (evenp 24) t (defun even (n) (= (mod n 2) 0)) even (even 23) nil (even 24) t
468 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 00:53:54 ] >>449 使用言語:十進BASIC 論理式は制御構文でしか使えないので真偽値を受け渡しすることはできないようだ。 なので、真偽値を返す関数は、真のときの値、偽のときの値を適当にきめてやりとりするしかないみたい。 ここでは、真のとき1を偽のとき0を返すようにした。 FUNCTION even(n) IF MOD(n,2)=0 THEN LET even=1 ELSE LET even=0 END IF END FUNCTION PRINT even(23) PRINT even(24) END 実行結果 0 1
469 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 05:13:18 ] >>431 % Prolog Prologでリングバッファは表現できるが無意味。究竟Prologのキューはスタック操作。 'New'(X-X). 'Enque'(_要素,X-[_要素|Y],X-Y). 'Deque'(_要素,[_要素|X]-Y,X-Y). 'Empty'(X-Y) :- X == Y. キュー操作 :- 'New'(Q1),キュー操作機能選択(Q1). キュー操作. キュー操作機能選択(Q1) :- get_line(_機能選択), キュー操作機能選択(_機能選択,Q1,Q2), キュー操作機能選択(Q2),!. キュー操作機能選択(q,_,_) :- !,fail. キュー操作機能選択(d,Q1,Q2) :- 'Deque'(_要素,Q1,Q2), write_formatted('%t\n',[_要素]),!. キュー操作機能選択(s,Q1,Q1) :- キュー表示(Q1),!. キュー操作機能選択(A,Q1,Q2) :- atom_to_term(A,N,_),'Enque'(N,Q1,Q2),!. キュー表示(X-X) :- !. キュー表示(X-Y) :- \+(var(X),var(Y),キュー表示(X-[Y]),!. キュー表示(X-Y) :- \+(var(Y)), append(U,Y,X), concat_atom(U,' ',S), write_formatted('%t\n',[S]),!.
470 名前:469 mailto:sage [2010/01/28(木) 05:16:26 ] ついでに言うとこれは説明不能ww ということは、 重リストを使ったキュー操作はあまり推奨できるプログラムではないのかも。
471 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 05:40:10 ] >>462 % Prolog 関数名kaiyoはたぶんミスパンチと思うので kaijo(0,1) :- !. kaijo(N,X) :- N1 is N - 1,kaijo(N1,Y),X is N * Y.
472 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 06:00:53 ] >>462 % Prolog 'キーボードから正の整数nを入力し、n!を計算して画面表示する' :- repeat, 催促付き整数入力('正の整数を入れてください :',N), N >= 0, kaijo(N,X), write_formatted('%tの階乗は%tです。\n',[N,X]),!. kaijo(0,1) :- !. kaijo(N,X) :- N1 is N - 1,kaijo(N1,Y),X is N * Y.
473 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 06:27:18 ] >>426 % Prolog もっと複雑な問題らしい。一応基礎部分ということで。 累乗の計算の逆を行うプログラムの基礎部分(A,A ^ 1) :- atomic(A),!. 累乗の計算の逆を行うプログラムの基礎部分((A * A),A ^ 2) :- atomic(A),!. 累乗の計算の逆を行うプログラムの基礎部分((B * A) * A,A ^ N) :- 累乗の計算の逆を行うプログラムの基礎部分((B * A),A ^ N1), N is N1 + 1,!.
474 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 07:38:10 ] >>426 % Prolog >>473 は利用しないことになってしまった。 累乗の計算の逆を行うプログラム(_乗算項,X) :- 乗算項をならびに変換(_乗算項,L1), quicksort(L1,L2), 累乗の計算の逆を行うプログラム項構成(L2,X). 乗算項をならびに変換(A,[A]) :- atomic(A),!. 乗算項をならびに変換((B*A),[A|R]) :- atomic(A), 乗算項をならびに変換(B,R). 累乗の計算の逆を行うプログラム項構成([A],A) :- !. 累乗の計算の逆を行うプログラム項構成([A,A|R1],A ^ N) :- 累乗の計算の逆を行うプログラム項部分構成([A,A|R1],[],A ^ N),!. 累乗の計算の逆を行うプログラム項構成([A,A|R1],A ^ N * Y) :- 累乗の計算の逆を行うプログラム項部分構成([A,A|R1],R,A ^ N),!. 累乗の計算の逆を行うプログラム項構成(R,Y),!. 累乗の計算の逆を行うプログラム項構成([A,B|R1],A * Y) :- 累乗の計算の逆を行うプログラム項構成([B|R1],Y),!. 累乗の計算の逆を行うプログラム項部分構成([A],[],A ^ 1) :- !. 累乗の計算の逆を行うプログラム項部分構成([A,A|R1],R,A ^ N) :- 累乗の計算の逆を行うプログラム項部分構成([A|R1],R,A ^ N1), N is N1 + 1,!. 累乗の計算の逆を行うプログラム項部分構成([A,B|R],[B|R],A ^ 1) :- !.
475 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 15:26:00 ] >>449 使用言語:tcl % proc even {n} {expr $n%2==0} % even 23 0 % even 24 1
476 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 15:28:48 ] >>449 使用言語:Xtal ix:004>even:fun(n) n%2==0; ix:005>even(23).p; false ix:006>even(24).p; true
477 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 15:59:40 ] >>449 使用言語:Scala scala> def even(n:Int):Boolean={n%2==0} even: (Int)Boolean scala> even(23) res3: Boolean = false scala> even(24) res4: Boolean = true
478 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 16:17:01 ] >>449 使用言語:Clojure user=> (even? 23) false user=> (even? 24) true user=> (defn even [n] (= (mod n 2) 0)) #'user/even user=> (even 23) false user=> (even 24) true
479 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 18:09:44 ] >>449 使用言語:R > even <- function(n){n%%2==0} > even(23) [1] FALSE > even(24) [1] TRUE
480 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 18:29:39 ] >>453 問題がfalseとなっているから仕方ないのかも知れないが、 failにしておいた方が無難。call(fail)で真偽値に戻せるから。falseだと、 K-Prolog Compiler version 6.0.4 (C) KLS Research, Inc. 15: ?- fail. no 16: ?- false. existence_error: "procedure" found at "false" Culprit: "false/0" 17: ?- のようなことになる。
481 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 22:51:35 ] pc12.2ch.net/test/read.cgi/tech/1263824755/296 # [1] 授業単元:プログラミング演習 # [2] 問題文(含コード&リンク): # 10個の要素を持つ動的な整数配列を作るプログラムを作成しなさい。 # 動的な配列へのポインタを整数ポインタに代入しなさい。 # 次に、ポインタ算術または配列の添字を使って、1から10までの値を配列を構成する整数に代入しなさい。 # 最後に、代入した値を表示し、メモリを解放しなさい。 #
482 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 22:53:22 ] pc12.2ch.net/test/read.cgi/tech/1263824755/299 # [1] 授業単元:コンピュータリテラシー # [2] 問題文(含コード&リンク): # あるファイルの名簿を呼びだし、名前もしくは名字で検索しその結果を新しいファイルに保存する。あるファイルの名簿は特に決められていない。 # ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10456.txt
483 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 22:57:40 ] pc12.2ch.net/test/read.cgi/tech/1263824755/307 # [1] Cプログラミング入門: # [2] ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10460.txt # 次のプログラムを作成し二つのファイルを提出せよ。 # 1:0〜99 の 100 個の数字から異なる 30 個を選び,配列 COM[30] に # 格納せよ.(乱数使用:学籍番号で初期化)学籍番号:200 # 2:次に異なる 6 個の数字を入力し,順番に配列 MAN[6] に格納せよ. # 3:ソート方法 A を用いて配列 COM,MAN の要素をそれぞれ小さい # 順に並べよ. # 4:配列 COM に含まれる配列 MAN の数字の個数 count を求めよ. # 5:最後に,配列 COM,MAN の全要素,変数 count を # result.out に書き込め. # 6:出力形式は自由とするが,main 関数内は 10 行以内にすること. # ソート方法A # 1 :作業用の配列として、要素が 100 個の int 型の配列 Work を用意 # する. # 2 :配列 Work の各要素は、0 に初期化する. # 3 :ソートしたい配列 x の要素を順番に読んで、Work[ その値 ] を +1 # する. # 4 :作業3を全ての x の要素について行った後、Work の要素を小さい # ほうから順番に読んで、Work の値が 0 でなければ、x に書き戻し # ます。
484 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 22:59:38 ] pc12.2ch.net/test/read.cgi/tech/1263824755/309 # [1] C言語プログラミング演習(大学任意科目) # [2] コマンドラインで指定された各テキストファイルに対して個別に以下の処理を行うCプログラムを作成 # ☆テキストファイルを通読し、各行のインデント深度の最大値を求める(それをNとおく) # ☆テキストファイルの先頭から再度読み出し、それぞれの行についてインデント深度がnなら # ば、インデント深度をN-nに変更したものを標準出力する。 # ☆新しいテキストファイルのNが判明した時点で、その改行とファイル名、改行を標準出力する。 # ここでインデント深度とは、行頭からタブ、空白以外の文字が現れるまでがn回(n>=0)現れた場合 # 深度=nとする。
485 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 23:04:35 ] pc12.2ch.net/test/read.cgi/tech/1263824755/315 # [1] 授業単元:プログラミング応用 # [2] 問題文(含コード&リンク):ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10461.txt # # ■問題1 # pnm(pbm, pgm, ppm)フォーマット画像ファイルを読み込み、 # 左右を反転させた画像をpnmフォーマット画像ファイルとして # 保存するプログラムを作成せよ. # # ■問題2 # 256(横)×256(縦)の画素数をもつpgmフォーマット画像の階調度を # 7段階(128階調,64階調,32階調,16階調,8階調,4階調,2階調)で変換し, # 各階調に変換したときの画像(7枚)をpgmフォーマット画像として # 保存するプログラムを作成せよ. # # ※問題1,2共に、アスキー形式とバイナリー形式のpnmフォーマット画像を # 処理できるプログラムとすること
486 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 23:38:02 ] >>481 % Prolog 例によって配列はリスト(ならび)とします。 '10個の要素を持つ動的な整数配列(ならび)を作り、1から10までの整数を代入し、値を表示し、メモリを解放する' :- length(L,10), ならびに値を設定する(L), write_formatted('%t\n',[L]), fail. '10個の要素を持つ動的な整数配列(ならび)を作り、1から10までの整数を代入し、値を表示し、メモリを解放する'. ならびに値を設定する(L) :- ならびに値を設定する(1,L). ならびに値を設定する(10,[10]) :- !. ならびに値を設定する(N,[N|R]) :- N2 is N + 1,ならびに値を設定する(N2,R).
487 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 04:46:44 ] >>482 % Prolog 名簿を呼びだし、名前で検索しその結果を新しいファイルに保存する(_名簿ファイル,_出力ファイル,_検索する名前) :- 名簿を呼び出し(_名簿ファイル,L), 名前で検索しその結果を新しいファイルに保存する(_出力ファイル,L,_名前),!. 名簿を呼び出し(_名簿ファイル,L) :- get_split_lines(_名簿ファイル,[' ',','],L),!. 名前で検索しその結果を新しいファイルに保存する(_出力ファイル,L,_名前) :- tell(_出力ファイル), 名前で検索しその結果を新しいファイルに保存する(L,_名前), told. 名前で検索しその結果を新しいファイルに保存する([],_) :- !. 名前で検索しその結果を新しいファイルに保存する([[_名字,_名前,_住所,_電話番号]|R],_名前) :- write_formatted('%t,%t,%t,%t\n',[_名字,_名前,_住所,_電話番号]), 名前で検索しその結果を新しいファイルに保存する(R,_名前),!. 名前で検索しその結果を新しいファイルに保存する([_|R],_名前) :- 名前で検索しその結果を新しいファイルに保存する(R,_名前),!.
488 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 05:29:08 ] >>483 % Prolog 1: '1:0〜99 の 100 個の数字から異なる 30 個を選び,配列 COM[30] に格納する'(COM) :- 'COMを確保する'(COM), '0〜99 の 100 個の数字から異なる 30 個を選び,配列 COM[30] に格納する'([],COM). '0〜99 の 100 個の数字から異なる 30 個を選び,配列 COM[30] に格納する'(COM,COM) :- !. '0〜99 の 100 個の数字から異なる 30 個を選び,配列 COM[30] に格納する'(L1,COM) :- '0〜99の数字'(N), \+(member(N,L1)), '0〜99 の 100 個の数字から異なる 30 個を選び,配列 COM[30] に格納する'([N|L1],COM),!. '0〜99 の 100 個の数字から異なる 30 個を選び,配列 COM[30] に格納する'(L1,COM) :- '0〜99 の 100 個の数字から異なる 30 個を選び,配列 COM[30] に格納する'(L1,COM),!. 'COMを確保する'(COM) :- length(COM,30). '0〜99の数字'(N) :- N is random mod 100.
489 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 06:03:17 ] >>483 % Prolog 2: '2:次に異なる 6 個の数字を入力し,順番に配列 MAN[6] に格納せよ'(MAN) :- '異なる 6 個の数字を入力し,順番に配列 MAN[6] に格納する'(MAN). '異なる 6 個の数字を入力し,順番に配列 MAN[6] に格納する'(MAN) :- 'MANを確保'(MAN,6), '異なる 6 個の数字を入力し,順番に配列 MAN[6] に格納する'([],MAN). '異なる 6 個の数字を入力し,順番に配列 MAN[6] に格納する'(MAN,MAN) :- !. '異なる 6 個の数字を入力し,順番に配列 MAN[6] に格納する'(L1,MAN) :- get_integer(N), \+(member(N,L1)), '異なる 6 個の数字を入力し,順番に配列 MAN[6] に格納する'([N|L1],MAN) :- !. '異なる 6 個の数字を入力し,順番に配列 MAN[6] に格納する'(L1,MAN). '異なる 6 個の数字を入力し,順番に配列 MAN[6] に格納する'(L1,MAN).
490 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 06:08:59 ] >>483 訂正 % Prolog 2: 順番にという以上入力と逆順になってはマズイ。 '2:次に異なる 6 個の数字を入力し,順番に配列 MAN[6] に格納せよ'(MAN) :- '異なる 6 個の数字を入力し,順番に配列 MAN[6] に格納する'(MAN). '異なる 6 個の数字を入力し,順番に配列 MAN[6] に格納する'(MAN) :- 'MANを確保'(MAN,6), '異なる 6 個の数字を入力し,順番に配列 MAN[6] に格納する'([],MAN). '異なる 6 個の数字を入力し,順番に配列 MAN[6] に格納する'(MAN,MAN) :- !. '異なる 6 個の数字を入力し,順番に配列 MAN[6] に格納する'(L1,MAN) :- get_integer(N), \+(member(N,L1)), append(L1,[N],L2), '異なる 6 個の数字を入力し,順番に配列 MAN[6] に格納する'(L2,MAN) :- !. '異なる 6 個の数字を入力し,順番に配列 MAN[6] に格納する'(L1,MAN). '異なる 6 個の数字を入力し,順番に配列 MAN[6] に格納する'(L1,MAN).
491 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 07:58:33 ] >>483 % Prolog 3: ソート方法AはPrologのリスト(ならび)仕様に書き換えました。効率は大変悪い。 'ソート方法 A を用いて配列 COM,MAN の要素をそれぞれ小さい順に並べる'(L1,L2) :- ソート方法A(L1,L2). ソート方法A(L1,L2) :- '作業用のならびとして、要素が100 個の変数であるならびWorkを用意する'(Work), 'ソートしたいならびLの要素を順番に読んで、Work[ その値 ] を1に単一化する'(L1,Work), '全てのLの要素について行った後、変数でないWorkの要素を先頭からならびL2にコピー'(L1,L2). '作業用のならびとして、要素が100 個の変数であるならびWorkを用意する'(Work) :- length(Work,100). 'ソートしたいならびLの要素を順番に読んで、Work[ その値 ] を1に単一化する'([],Work) :- !. 'ソートしたいならびLの要素を順番に読んで、Work[ その値 ] を1に単一化する'([N|R1],Work) :- list_nth(N,Work,1), 'ソートしたいならびLの要素を順番に読んで、Work[ その値 ] を1に単一化する'(R1,Work),!. '全てのLの要素について行った後、変数でないWorkの要素を先頭からならびL2にコピー'([],[]) :- !. '全てのLの要素について行った後、変数でないWorkの要素を先頭からならびL2にコピー'([A|R1],[A|R2]) :- \+(var(A)), '全てのLの要素について行った後、変数でないWorkの要素を先頭からならびL2にコピー'(R1,R2),!. '全てのLの要素について行った後、変数でないWorkの要素を先頭からならびL2にコピー'([V|R1],L2) :- var(V), '全てのLの要素について行った後、変数でないWorkの要素を先頭からならびL2にコピー'(R1,L2).
492 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 09:40:48 ] >>488->>491 全部に間違いがありました。 今夕までに nojiriko.asia/prolog/c134_370_1.html から nojiriko.asia/prolog/c134_370_4.html までに 訂正分を書き込んで置きます。
493 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 10:43:20 ] >>483 % Prolog 4: '配列 COM に含まれる配列 MAN の数字の個数 count を求めよ'(COM,[],[]) :- !. '配列 COM に含まれる配列 MAN の数字の個数 count を求めよ'(COM,[N|R1],[[N,Count]|R2]) :- count(member(N,COM),Count), '配列 COM に含まれる配列 MAN の数字の個数 count を求めよ'(COM,R1,R2). count([],0) :- !. count([_|R],Count) :- count(R,Count1),Count is Count1 + 1,!. count(P,Count) :- findsum(1,P,Count).
494 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 10:49:26 ] >>483 % Prolog 4: どうやら、Countとは含まれる総数のことらしい。それで・・ '4:配列 COM に含まれる配列 MAN の数字の個数 count を求めよ'(COM,MAN,Count) :- '配列 COM に含まれる配列 MAN の数字の個数 count を求めよ'(COM,MAN,L), findsum(M,member([_,M],L),Count),!.
495 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 12:14:39 ] pc12.2ch.net/test/read.cgi/tech/1197620454/580 # 下記のプログラムを関数を用いて実行したいのですが、どのようにすれば良いでしょうか? # 回答(できたら簡単な解説)の明記をお願いします。 # # 問題1:入力したプログラムから以下のように出力するプログラムを作成する。 # (実行結果例) # 文字列を入力: 今日は、晴れです。 # # 今日は、晴れです。 # 日 す # は で # 、 れ # 晴 晴 # れ 、 # で は # す 日 # 。すでれ晴、は日今 #
496 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 12:16:06 ] pc12.2ch.net/test/read.cgi/tech/1197620454/580 # 問題2:ファイル入力した漢字データ(全角)を読み込み、行数を数えながら逆から表示するプログラム。 # (実行結果例) # (例として次のような C:\test2.txtを入力する) # 今日は、晴れです。昨日は、雨で # した。明日は、曇でしょう。明後 # 日は、快晴でしょうか。 ←の文章を以下のようなプログラムにする。 # # ファイル名を入力してください:C:\test2.txt # # 1:で雨、は日昨。すでれ晴、は日今 # 2:後明。うょしで曇、は日明。した # 3:。かうょしで晴快、は日 #
497 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 12:17:44 ] pc12.2ch.net/test/read.cgi/tech/1197620454/581 # 問題3:ファイルのデータ(英文)を読み込み、一行毎の文字数(スペースも含む) とワード数を数えるプログラム。 # (実行結果例) # (例として次のような C:\test3.txtを入力する) # And friends just can't be found # Like a bridge over troubled water # I will lay me down ←の文章を以下のようなプログラムにする。 # # ファイル名を入力してください:C:\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ワード #
498 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 12:19:00 ] pc12.2ch.net/test/read.cgi/tech/1197620454/581 # 問題4:1月1日が金曜日の平年(たとえば2010年)について、月日の入力データから、曜日を求めるプログラム。 # (実行結果例) # 月を入力してください:9 # 日を入力してください:15 # 9月15日は、水曜日です。 # # 以上4問です。どうか回答よろしくお願い致します
499 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 12:32:53 ] pc11.2ch.net/test/read.cgi/db/1252492296/471 # 【質問テンプレ】 # ・DBMS名とバージョン: SQLite 3 # ・テーブルデータ:長いため下記に記載 # ・欲しい結果:RSSリーダ(brief)のデータ(*.sqlite)から特定の記事データを削除したいです。 # ・説明:長いため下記に記載 # # ●テーブルデータ # ======================================================================================================================= # ■entries # | id | feedID | primaryHash | secondaryHash | providerID | entryURL | date | read | updated | starred | deleted | bookmarkID | # ----------------------------------------------------------------------------------------------------------------------- # ■entries_text # | title | content | authors | tags | # ----------------------------------------------------------------------------------------------------------------------- # ■entries_text_content # | docid | c0title | c1content | c2authors | c3tags | # ----------------------------------------------------------------------------------------------------------------------- # ■sqlite_sequence # | name | seq | # =======================================================================================================================
500 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 12:34:45 ] pc11.2ch.net/test/read.cgi/db/1252492296/472 # 1.【entries】テーブルの[deleted]フィールドが「 2 」の場合に、そのレコードを削除。 # # 2.同時に、【entries_text_content】テーブルの[docid]フィールドが、1.で削除した # [id]フィールドと同じ値のレコードも削除。 # # 3.更に同時に、【entries_textテーブル】から、1.で削除した[idフィールド]の値(数字)と # 同じレコード番号のレコードを削除。 ※idフィールドがない為 # # 4.その後、下記のフィールドの値を、1・2・3〜とリナンバリングしたい。 # 【entries】テーブルの[id]フィールド # 【entries_text_content】テーブルの[docid]フィールド # # 5.そして、1.2.3.の三つのテーブルのレコード数がどれも同じ数だけあるか確認。 # # 6.最後に、【sqlite_sequence】テーブルの[seq]フィールドに5.で確認したレコード数を # 設定したい。
501 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 13:11:44 ] >>483 % Prolog 5: '配列 COM,MAN の全要素,変数 count をresult.out に書き込め'(COM,MAN,Count) :- tell('result.out'), write_formatted('%q.\n',['COM'=COM]), write_formatted('%q.\n',['MAN'=MAN]), write_formatted('%q.\n',['Count'=Count]), told.
502 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 15:40:12 ] >>12 % Prolog nojiriko.asia/prolog/ml6_12.html ゲームとして成立していない。「実例で学ぶゲームAIプログラミング」を これから買って研究してみます。
503 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 15:56:43 ] >>502 ゲームはロジックの間に挿入される副作用に値打ちがあるのだから、 述語構成は r(Z) :- 停止条件(Z),!. r(X). r(X) :- filter(X,Y),r(Y). のステッパ型パターンが望ましいのかな。実際には、 u(X) :- r(X),_副作用,fail. といった副作用述語が並ぶことになる。
504 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 18:04:23 ] >>495 % Prolog 問題1 :- 文字ならびの取得(Chars), 取得したならびの反転(Chars,Chars2), 第一文字と最終文字を除外(Chars,L2), 第一文字と最終文字を除外したならびの反転(L2,L3), 第一行目の印字(Chars), 第二行目以降の印字(L2,L3), 最終行の印字(Chars2),!. 文字ならびの取得(Chars) :- get_chars(Chars). 取得したならびの反転(Chars,Chars2) :- reverse(Chars,Chars2),!. 第一文字と最終文字を除外(Chars,L2) :- append([_],L2,[_],Chars),!. 第一文字と最終文字を除外したならびの反転(L2,L3) :- reverse(L2,L3),!. 第一行目の表示(L) :- ならびの文字表示(L),nl,!. 第二行目以降の表示(L2,L3) :- 転置([L1,L3],L4),ならびの行表示(L4),!. 最終行の印字(L3) :- ならびの文字表示(L),nl,!. ならびの行表示([]) :- write('\n'),!. ならびの行表示([A|R]) :- write_formatted('%t\n',[A]),ならびの行表示(R).
505 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 18:06:47 ] >>504 (>>495 ) 書き直し % Prolog インデントしてないところがあって読みにくいから書き直し。 問題1 :- 文字ならびの取得(Chars), 取得したならびの反転(Chars,Chars2), 第一文字と最終文字を除外(Chars,L2), 第一文字と最終文字を除外したならびの反転(L2,L3), 第一行目の印字(Chars), 第二行目以降の印字(L2,L3), 最終行の印字(Chars2),!. 文字ならびの取得(Chars) :- get_chars(Chars). 取得したならびの反転(Chars,Chars2) :- reverse(Chars,Chars2),!. 第一文字と最終文字を除外(Chars,L2) :- append([_],L2,[_],Chars),!. 第一文字と最終文字を除外したならびの反転(L2,L3) :- reverse(L2,L3),!. 第一行目の表示(L) :- ならびの文字表示(L),nl,!. 第二行目以降の表示(L2,L3) :- 転置([L1,L3],L4),ならびの行表示(L4),!. 最終行の印字(L3) :- ならびの文字表示(L),nl,!. ならびの行表示([]) :- write('\n'),!. ならびの行表示([A|R]) :- write_formatted('%t\n',[A]),ならびの行表示(R).
506 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 18:14:50 ] >>505 (>>495 ) もう一度すみません。 % Prolog 問題1 :- 文字ならびの取得(Chars), 取得したならびの反転(Chars,Chars2), 第一文字と最終文字を除外(Chars,L2), 第一文字と最終文字を除外したならびの反転(L2,L3), 第一行目の表示(Chars), 第二行目以降の表示(L2,L3), 最終行の表示(Chars2),!. 文字ならびの取得(Chars) :- get_chars(Chars). 取得したならびの反転(Chars,Chars2) :- reverse(Chars,Chars2),!. 第一文字と最終文字を除外(Chars,L2) :- append([_],L2,[_],Chars),!. 第一文字と最終文字を除外したならびの反転(L2,L3) :- reverse(L2,L3),!. 第一行目の表示(L) :- ならびの文字表示(L),nl,!. 第二行目以降の表示(L2,L3) :- 転置([L1,L3],L4),ならびの行表示(L4),!. 最終行の表示(L3) :- ならびの文字表示(L),nl,!. ならびの行表示([]) :- write('\n'),!. ならびの行表示([A|R]) :- write_formatted('%t\n',[A]),ならびの行表示(R).
507 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 18:42:01 ] >>496 % Prolog ファイル入力した漢字データ(全角)を読み込み、行数を数えながら逆から表示する(_ファイル名) :- ファイル入力した漢字データ(全角)を読み込み(_ファイル名,Lines), 行数を数えながら逆から表示する(Lines),!. ファイル入力した漢字データ(全角)を読み込み(_ファイル名,Lines) :- get_lines(_ファイル名,Lines). 行数を数えながら逆から表示する(Lines) :- 行数を数えながら逆から表示する(1,Lines). 行数を数えながら逆から表示する(_,[]) :- !. 行数を数えながら逆から表示する(N,[_行|R]) :- 文字列の反転(_行,_反転した行), write_formatted('%t:%t\n',[N,_反転した行]), N2 is N + 1, 行数を数えながら逆から表示する(N2,R). 文字列の反転(_文字列,_反転した文字列) :- atom_chars(_文字列,_文字ならび), reverse(_文字ならび,_反転した文字ならび), atom_chars(_反転した文字列,_反転した文字ならび).
508 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 18:56:47 ] >>497 % Prolog 'ファイルのデータ(英文)を読み込み、一行毎の文字数(スペースも含む)とワード数を数える'(_ファイル名) :- 'ファイルのデータ(英文)を読み込み'(_ファイル名,Lines), '一行毎の文字数(スペースも含む)とワード数を数えて表示する'(Lines). 'ファイルのデータ(英文)を読み込み'(_ファイル名,Lines) :- get_lines(_ファイル名,lines). '一行毎の文字数(スペースも含む)とワード数を数えて表示する'(Lines) :- '一行毎の文字数(スペースも含む)とワード数を数えて表示する'(1,Lines). '一行毎の文字数(スペースも含む)とワード数を数えて表示する'(_,[]) :- !. '一行毎の文字数(スペースも含む)とワード数を数えて表示する'(N,[Line|R]) :- 文字数を数える(Line,_文字数), ワード数を数える(Line,_ワード数), write_formatted('=>%t:%t文字、%tワード\n',[N,_文字数,_ワード数]), N2 is N + 1, '一行毎の文字数(スペースも含む)とワード数を数えて表示する'(N2,R). 文字数を数える(Line,_文字数) :- sub_atom(Line,0,_文字数,0,Line),!. ワード数を数える(Line,_ワード数) :- split(Line,[' ','.'],語彙ならび), length(語彙ならび,_ワード数),!.
509 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 19:14:34 ] >>498 % Prolog '1月1日が金曜日の平年(たとえば2010年)について、月日の入力データから、曜日を求める' :- 催促付き整数入力('月を入力してください:',_月), 催促付き整数入力('日を入力してください:',_日), 曜日を求める(_月,_日,_曜日), write_formatted('%t月%t日は%t日です\n',[_月,_日,_曜日]),!. 曜日を求める(_月,_日,_曜日) :- 曜日を求める(1,1,_月,_日,金曜,_曜日). 曜日を求める(_月,_日,_月,_日,_曜日,_曜日) :- !. 曜日を求める(_月1,_日1,_月,_日,_曜日1,_曜日) :- 翌日(_月1,_日1,_翌日の月,_翌日の日), 曜日連鎖(_曜日1,_曜日2), 曜日を求める(_翌日の月,_翌日の日,_月,_日,_曜日2,_曜日). 翌日(2,28,3,1) :- !. 翌日(_月,30,_翌日の月,1) :- member(_月,[4,6,9,11]),_翌日の月 is _月 + 1,!. 翌日(_月,31,_翌日の月,1) :- member(_月,[1,3,5,7,8,10,12]),_翌月の月 is _月 + 1,!. 翌日(_月,_日,_月,_翌日の日) :- _翌日の日 is _日 + 1. 曜日連鎖(月曜,火曜). 曜日連鎖(火曜,水曜). 曜日連鎖(水曜,木曜). 曜日連鎖(木曜,金曜). 曜日連鎖(金曜,土曜). 曜日連鎖(土曜,日曜). 曜日連鎖(日曜,月曜).
510 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 20:13:17 ] code.nanigac.com/forum/view/453 # Prologでリスト操作をする関数をいくつか書いているんですが、 # どうもうまく動いてくれません。 # うまく動いてくれないのがいくつかあるのですが、全部あげたら # 切りがないですし、図々しすぎるので、とりあえず # test1関数とtest2関数の2つ(2つでも図々しいきがするけれど)の相談に乗ってください。 # # test1関数 # 2つのリストを受け取って2つを(交互に)合わせたリストを作る # 例1、test([a,b,c],[1,2,3],X). --> X = [a,1,b,2,c,3] # 例2、test([a,b,c],X,[a,1,b,2,c,3]). --> X = [1,2,3] # 例3、test([a,b,c],[1,2,3],[a,1,b,2,c,3]). --> true # 例4、test([a,b,c],[1,2,3],[a,b,c,1,2,3]). --> false
511 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 20:14:34 ] >>510 % Prolog test1([],[],[]). test1([A|R1],[B|R2],[A,B|R3]) :- test1(R1,R2,R3).
512 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 20:28:58 ] ime.nu/code.nanigac.com/forum/view/453 # test2関数 # 2つのリストを受け取り、まず一つ目のリストからダブリを取り除く。 # そして、それが二つ目のリストと(順番も含めて)同じかチェックする。 # 例1、test2([a,b,c,c,b,a],[a,b,c]). --> true # 例2、test2([a,b,c,b,c,],[c,b,a]). --> false (順番が違うので) # 例3、test2([a,a,b,b,c,c],X). --> X = [a,b,c]
513 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 20:34:53 ] >>512 % Prolog test2([],[]). test2([A|R1],[A|R2]) :- ならびの削除(A,R1,R3), test2(R3,R2). ならびから削除(_,[],[]). ならびから削除(A,[A|R1],R2) :- ならびから削除(A,R1,R2). ならびから削除(A,[B|R1],[B|R2]) :- \+(A=B),ならびから削除(A,R1,R2).