[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 2chのread.cgiへ]
Update time : 02/02 05:23 / Filesize : 462 KB / Number-of Response : 749
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

いろんな言語で宿題スレ 第三編



1 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 09:57:19 ]
第二編も512Kbyte越えで終了しました。
前スレで未解決な課題は順次このスレにコピーします。

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,!.

382 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 20:06:16 ]
>>381 訂正
% Prolog

'異なる自然数p,qと、もう一つの自然数dを入力する。d以下の自然数kのうちで、k=mp+nqと表すことの出来るもの(m,nは自然数)を小さい順に表示し、最後にその個数を表示する' :-
  '異なる自然数p,qと、もう一つの自然数dを入力する'(_p,_q,_d),
  'd以下の自然数kのうちで、k=mp+nqと表すことの出来るもの(m,nは自然数)を小さい順に集め'(_p,_q,_d,L),
  '表示し'(L),
  最後にその個数を表示する(L),!.

表示し(L) :-
  concat_atom(L,' ',S),
  write_formatted('%t\n',[S]),!.

最後にその個数を表示する(L) :-
  length(L,_その個数),
  write_formatted('合計で%t個あります\n',[_その個数]),!.

'異なる自然数p,qと、もう一つの自然数dを入力する'(_p,_q,_d) :-
  get_line(Line),
  split(Line,[' '],[_p,_q,_d]),!.

'd以下の自然数kのうちで、k=mp+nqと表すことの出来るもの(m,nは自然数)を小さい順に集め'(_p,_q,_d,_kならび) :-
  findall(N,for(0,N,10),L1),
  findall(_k,(for(0,_k,_d),順列(L1,2,[_m,_n]),'d以下の自然数kのうちで、k=mp+nqと表すことの出来るもの'(_p,_q,_d,_m,_n,_k)),_kならび),!.

'd以下の自然数kのうちで、k=mp+nqと表すことの出来るもの'(_p,_q,_d,_m,_n,_k) :-
  _k is _p * _m + _q * _n,
  _k =< _d,!.


383 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 20:10:32 ]
pc12.2ch.net/test/read.cgi/tech/1248012902/771
# 【 課題 】
# サーバとクライアントでの間で文字列を送り合うプログラムをつくれ。
# ただし、以下の条件を満たすようにすること。
# アドレス、ポート、名前、文字列はキーボード入力し、お互いに自由に指定できるようにする。
# クライアントで quit が入力された場合、クライアントは接続を切りプログラムを終了し、
# サーバは接続が切られたら、次のクライアントの接続を待つ
# サーバで quit が入力された場合、サーバは接続を切り、次のクライアントの接続を待ち、
# クライアントは接続が切られたらプログラムを終了する
# エンターキーのみが入力された場合は、文字列を送らずもう一度文字列を入力させて、
# その文字列を送るようにする。


384 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 20:13:21 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/74
# [1] 授業単元:プロトタイプ宣言
# [2] 問題文(含コード&リンク):『私は○○です』と表示する関数を作成して
# main関数でそれを三回呼び出して、画面に三回出力プログラムを作成せよ。
# 表示のための関数の名前は『display_name』とせよ
#


385 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 20:19:16 ]
>>384
% Prolog programがmainにあたる。

display_name :-
  write('私は○○です\n').

program :-
  for(1,N,3),display_name,N=3,halt.

386 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 21:09:18 ]
>>384

このプログラムのドコが「説明を論理式で書き表すことができるならば、
その論理式がすなわちプログラムである」のだろうか。


387 名前:386 mailto:sage [2010/01/22(金) 23:43:35 ]
アンカミス
X:>>384 --> O:>>385

388 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 03:44:26 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/77
# [1] 授業単元:プログラミング実習
# [2] 問題文:クラスタリングk-means法
# 1、初期値として、クラスタ数および初期のデータ分割を与える。
#  2、データ分割に基づき各分割の重心を求める。
#    さらに、重心と各事例データとの距離を求める
#  3、各事例を最も近いクラスタに割り当てる。
#  4、上記の割り当てが前回と同じであれば終了。
#    更新があれば2に戻る


389 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 03:51:44 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/79
# [1] 授業単元:応用プログラミング
# [2] 問題文(含コード&リンク):
# ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10409.txt
#
# 直方体のデータが格納されたファイルを取り扱うプログラムを実装したい。
# プログラムリスト中に必要な関数を実装し、プログラムを完成させよ。尚、プログラムは以下の前提条件(1)−(4)を満たすよう作成せよ。
# (1)新たに大域変数やクラス、クラス内のメンバ変数を宣言してはならない。
# (2)main関数を含む既存の関数、クラス内のメンバ変数は一切変更してはならない。
# (3)直方体のデータが一行毎に、直方体の名前、幅、奥行き、高さ、の順に、スペース区切りで格納されているファイルを読み込める。
# (4)最大20個分のデータを読み込める。
# (5)初めに読み込むファイル名を入力した後、読み込んだデータ数を表示する。
# (6)(5)の表示後、以下に示す操作が繰り返し実行可能であること。
#   操作方法と出力の詳細については、実行例を参考にすること。
#    (ア)データを読み込んだ順に表示する。
#    (イ)体積、もしくは表面積の大きい順に表示する。
#    (ウ)立方体、もしくは正四角柱のみを表示する。
#    (エ)直方体を1個指定し、3辺の長さ(幅、奥行き、高さ)を指定した倍率だけ伸縮する。




390 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 03:59:06 ]
>>386 >>387

>>382 の方ではなくて? これは結構苦闘してる。
>>385 は「説明を論理式で書き表すことができるならば、その論理式がすなわちプログラムである」の
意識の全くないプログラムだけど。題意もつかめなかった。

391 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 04:11:07 ]
>>386

>>385
# prolog -e 私は○○です.pro
私の名前は○○です
#
と表示されるためには、mainではなく、述語名がprogramである必要が
あることを示すために書いたコードです。

392 名前:391 mailto:sage [2010/01/23(土) 04:33:07 ]
すみません。私の名前は○○ですを3回繰り返すのを忘れました。



393 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 04:53:45 ]
>>384
% Prolog この問題は編集を余儀なくされました。もっと素直な表現がありそう。

program :-
  『私は○○です』と画面に表示する関数display_nameを三回呼び出して出力する,
  終了.

『私は○○です』と画面に表示する関数display_nameを三回呼び出して出力する :-
  display_name,
  display_name,
  display_name.

display_name :- write('私は私は○○です\n').

終了 :- halt.

394 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 05:00:40 ]
--lua
function display_name()
print "私は私は○○です"
end
function main()
display_name()
display_name()
display_name()
end
main()

395 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 05:01:31 ]
>>379 でそれに関することを書きたかったのですが、
># [2] 問題文(含コード&リンク):『私は○○です』と表示する関数を作成して
># main関数でそれを三回呼び出して、画面に三回出力プログラムを作成せよ。
># 表示のための関数の名前は『display_name』とせよ

「関数を作成して」あたりを切り落としたくないのですが、述語名に取り込む
方法が今のところ見つからない。

396 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 05:11:05 ]
function display_name(name)
print("私は私は"..name.."です")
end
function main()
name=io.read()
display_name(name)
name=io.read()
display_name(name)
name=io.read()
display_name(name)
end
main()

397 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 07:44:33 ]
>>395 これではだめかいwww

program :-
  『私は○○です』と表示する関数を作成してmain関数でそれを三回呼び出して、画
面に三回出力プログラムを作成せよ .

『私は○○です』と表示する関数を作成してmain関数でそれを三回呼び出して、画面に
三回出力プログラムを作成せよ :-
  『私は○○です』と表示する関数を作成して ,
  main.

『私は○○です』と表示する関数を作成して :-
  assertz((display_name :- write('私は○○です\n'))).

main :- display_name,display_name,display_name.



398 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 09:03:32 ]
>>389 の kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10409.txt
には大量の実行例とデータが載っています。2レスに分けて掲載します。
# [実行例]
# ファイル名を入力して下さい => data.txt
# 5個のデータを読み込みました.
# 1: 入力順に表示 2: 整列 3: 探索 4: 拡大・縮小 0: 終了
# 何をしますか? => 1
# No. Name Width Depth Height Volume Area
# [ 1] A 1 2 3 6 22
# [ 2] B 3 3 3 27 54
# [ 3] C 3 2 1 6 22
# [ 4] D 2 2 2 8 24
# [ 5] E 5 1 5 25 70
# 1: 入力順に表示 2: 整列 3: 探索 4: 拡大・縮小 0: 終了
# 何をしますか? => 1
# 何順に整列しますか?(0:体積 1:表面積) => 0
# No. Name Width Depth Height Volume Area
# [ 2] B 3 3 3 27 54
# [ 5] E 5 1 5 25 70
# [ 4] D 2 2 2 8 24
# [ 1] A 1 2 3 6 22
# [ 3] C 3 2 1 6 22


399 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 09:04:22 ]
# 1: 入力順に表示 2: 整列 3: 探索 4: 拡大・縮小 0: 終了
# 何をしますか? => 3
# 何を探索しますか?(0:体積 1:表面積) => 1
# No. Name Width Depth Height Volume Area
# [ 2] B 3 3 3 27 54
# [ 4] D 2 2 2 8 24
# [ 5] E 5 1 5 25 70
# 1: 入力順に表示 2: 整列 3: 探索 4: 拡大・縮小 0: 終了
# 何をしますか? => 4
# どの直方体ですか?(1〜5) => 1
# 何倍しますか? => 1.5
# 1: 入力順に表示 2: 整列 3: 探索 4: 拡大・縮小 0: 終了
# 何をしますか? => 1
# No. Name Width Depth Height Volume Area
# [ 1] A 1.5 3 4.5 20.25 49.5
# [ 2] B 3 3 3 27 54
# [ 3] C 3 2 1 6 22
# [ 4] D 2 2 2 8 24
# [ 5] E 5 1 5 25 70
# 1: 入力順に表示 2: 整列 3: 探索 4: 拡大・縮小 0: 終了
# 何をしますか? => 0
# 終了します.



400 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 09:06:12 ]
# データファイル
# A 1 2 3
# B 3 3 3
# C 3 2 1
# D 2 2 2
# E 5 1 5

401 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 09:08:27 ]
>>384
使用言語:J

display_name=:[: smoutput '私は○○です。'"_
main=:display_name^:(3)

main ''
私は○○です。
私は○○です。
私は○○です。

402 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 16:25:45 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/83
# [1]プログラミング演習(大学専門過程演習授業)
# [2] コマンドライン引数で与えられたテキストファイルを読み込み
# 空行でなければ、その行に含まれているスペース、タブを
# 除去したものを標準出力するプログラム。但し英数字と"_"で
# 構成される文字列同士の間には一つのスペースは残す。
# ",'で囲まれた部分に関してはスペース、タブはそのまま残す
# "で囲まれた部分について最後の文字が¥であってはならない。
# 'で囲まれた部分について最後の文字が¥であってはならない。
# (テキストファイルの空行と余計な空白/タブを除去する
# プログラムでクオテーションに配慮したもの)


403 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 23:22:54 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/91
# [1] 授業単元:情報処理
# [2] 問題文:
#
# 問1 キーボードから3個の実数(整数でない)値を1行に1組として計5組入力し、
# ファイル(ファイル名data1.txt)に保存する。
#
# 問2
#  問1で作ったファイルから実数値を読み込み、総合計と各組の実数の平均を求める

# ただし、ファイルに書かれている組の数は不明とする。


404 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 06:23:46 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/93
# [1] 授業単元:プロトタイプ宣言
# [2] 問題文(含コード&リンク):
# 次の式を以下の条件(値)に基づいて計算.表示するプログラムを作成せよ。ただし式は簡単化せずそのままプログラムすることとして、更に表示するときは計算の答えと合� 錣擦鴇魴�値)も表示して分かりやすくせよ。
#
# 計算する式
# {(a+b)c-a(b-c)}/{(c/b)a+abc-ca}
#
# 条件1
# a=3 b=4 c=2
# a=3 b=4.3 c=2.5
# a=32.6 b=57.82 c=2.543
#
# この問題を、
# 式の分だけを関数化した場合
# 式と出力部分を関数化した場合
# の2つの場合でプログラムを作成せよ


405 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 06:24:41 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/94
# [1] C
# [2]
# 反復列 x_n+1=a*x_n(1-x_n),0<=a<=4,0<=x<=1
# に対して、x_nが1周期(不動点)、2周期、4周期、8周期、16周期
# をもつaの範囲について、プログラムを作成して確かめよ。
# ※
# ○周期というのはaがある値のとき、○個の解で振動するという意味です※


406 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 06:28:27 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/95
# [1] 授業単元: プログラミング演習
# [2] 問題文(含コード&リンク):ime.nu/www.acm-japan.org/past-icpc/domestic2008/problems/all_ja.html
#
# 等しい合計点
#
# 太郎と花子はそれぞれカードを何枚か持っている.各カードには点数が書かれている.
# 太郎のカードと花子のカードを 1 枚ずつ交換して,それぞれの持つカードの合計点数が等しくなるようにしたい.
# どのカードとどのカードを交換したらよいか.
#
# ただし,カードを交換しなくても合計点数が等しい場合でも,必ずカードの交換を行うものとする.


407 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 07:02:19 ]
pc12.2ch.net/test/read.cgi/tech/1248012902/778
# 【 課題 】1.任意のWEBページからime.nu/で始まるハイパーリンクを抽出するプログラムの作成
# ime.nu/rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/901.java
# 2.任意のWEBページ10ページに含まれる単語のうち,上位10位の単語リストとその出現頻度
# ime.nu/rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/903.java
# 【 形態 】1. Javaアプリケーション(main()で開始)
# 【 GUI  】制限なし
# 【 期限 】1/25
# 【 Ver  】1.6.0_14
# 【 補足 】1.に関してはプログラムはあっていると思うのですがなぜか実行
#       できないので、実行できたら結果をコピペで教えてもらえたら嬉しいです
#       2.に関しては実行結果があるのですが、上から多い順に並んでいます
#       プログラムのどの部分でその並べ替えを行っているのか、またどんな
#       アルゴリズムを用いて並べ替えているのかを教えてもらえたら嬉しいです


408 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 12:47:28 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/102
# [1] 授業単元:プログラミング演習
# [2] 問題文(含コード&リンク):ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10419.zip
#
# ●問2.リストの一部を取り除く関数
#
#  与えられた文字リストの先頭から見ていき、要素が'<'なら自身と(あれば)直前の要素を、'>'なら自身
# と(あれば)直後の要素を取り除く関数editを作成せよ。
#  editは与えられたリスト自体を変形し、変形後のリストを返す。
#
# ●問3.いずれか一方のリストに含まれる要素からなるリストを返す関数
#
#  引数として二種の文字リストが与えられると、いずれか一方のリストにのみ含まれる 要素を持つリストを新たに作成し返す関数exclusiveを作成せよ。
#


409 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 16:43:52 ]
>>408 問2
使用言語:J

edit=:monad define
r=.y#~-.(+._1&|.)(<'>')=y
r#~-.(+.1&|.)(<'<')=r
)

]C=:;/'a<bcd>ef>ghi'
+-+-+-+-+-+-+-+-+-+-+-+-+
|a|<|b|c|d|>|e|f|>|g|h|i|
+-+-+-+-+-+-+-+-+-+-+-+-+
edit C
+-+-+-+-+-+-+
|b|c|d|f|h|i|
+-+-+-+-+-+-+



410 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 16:50:03 ]
>>408 問3
使用言語:J

exclusive=:dyad def '(x -. y) , y -. x'

]A=:;/'abcdef'
+-+-+-+-+-+-+
|a|b|c|d|e|f|
+-+-+-+-+-+-+

]B=:;/'defghi'
+-+-+-+-+-+-+
|d|e|f|g|h|i|
+-+-+-+-+-+-+

A exclusive B
+-+-+-+-+-+-+
|a|b|c|g|h|i|
+-+-+-+-+-+-+

411 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 20:46:43 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/103
# [1] 授業単元:Cプログラミング演習2
# [2] 問題文(含コード&リンク):ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10420.txt
# (1) 指定した10 個の整数のうち,指定した数で割り切れる整数の個数を求めるプログラムを作成せよ.
# 以下の関数を利用すること.
# int div_enable(int *in, int num, int divisor)
# in 複数の整数値が格納された配列の(先頭)ポインタ
# num 入力値の数
# divisor 割り切れるかどうかの判定に使う除数
# 戻り値 入力値のうち, divisor で割り切れる整数の数
# 入力に関して
# キーボードから整数(被除数用)をスペース1つずつ空けて10 個入力して改行する.次に除数用
# の自然数を1 つ入力し,改行する.この一連の入力時,例題や解答例のような入力を促す文字
# 等は決して表示しないこと.
# 出力に関して
# 割り切れる整数の個数を数値のみ (+改行)を出力する.指定した数値・改行以外の文字等の出
# 力は一切行わないこと.

412 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 21:21:01 ]
>>411
使用言語:J

div_enable=: dyad def '+/0=x|y'

]in=:>:i.10
1 2 3 4 5 6 7 8 9 10

3 div_enable in
3

413 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 05:35:28 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/103
# [1] 授業単元:Cプログラミング演習2
# [2] 問題文(含コード&リンク):ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10420.txt
# (2) 2 つの4×4 行列を2 次元配列に格納し,それらの積を求めるプログラムを作成せよ.以下の関数を
# 利用すること.
# void mult_array(int a0[4][4], int a1[4][4], int result[4][4])
# a0,a1 入力された行列の値が格納された2 次元配列のポインタ
# result 演算結果の行列の値が格納された2 次元配列のポインタ
# 戻り値 なし
# 入力に関して
# キーボードからまず,1 つめの行列の1 行目の4 つの整数をスペース1 つ開けて1 行で入力し,
# 改行する.以下同様に1 つめの行列の2 行目,3 行目,4 行目,2 つめの行列の1・・・4 行目
# を入力する.この一連の入力時,入力を促す文字等は決して表示しないこと.
# 出力に関して
# 1行目に結果の行列の1 行目をスペース1 つあけて特に整形せず数値のみ出力(+改行),以下同
# 様に2 行目,3 行目,4 行目を特に整形せず数値のみ出力する.指定した数値・改行以外の文
# 字等の出力は一切行わないこと.

414 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 05:37:43 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/103
# [1] 授業単元:Cプログラミング演習2
# [2] 問題文(含コード&リンク):ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10420.txt
#
# (3) 平均値と中央値を求める関数を作成し,その関数を使用して平均値と中央値を出力するプログラム
# を作成せよ.関数は下記の通りとする.
# int median(int *in, int num)
# in 複数の整数値が格納された配列の(先頭)ポインタ
# num 入力値の数
# 戻り値 中央値
# int avg (int *in, int num)
# in 複数の整数値が格納された配列の(先頭)ポインタ
# num 入力値の数
# 戻り値 平均値(四捨五入した整数値, 負の場合丸め方は任意)
# 入力に関して
# キーボードから入力する整数の個数を入力し(最大で128 に対応すること)改行する.次に指
# 定した数の整数をスペース1つずつ開けて1行で入力し,改行する.この一連の入力時,例題
# や解答例のような入力を促す文字等は決して表示しないこと.
# 出力に関して
# 中央値 平均値(+改行)のみ出力.中央値と平均値の間はスペースを1 つ入れること.指定した
# 数値・改行以外の文字等の出力は一切行わないこと.

415 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 06:03:31 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/104
#
# 課題1 20 桁までの自然数の足し算と掛け算を浮動小数点演算を用いないで実施するプログラムlongcomp.c を
# 作成し、C のソースコードを提出しなさい。足し算は必須課題、掛け算はオプション課題です。
# 実行形式をlongcomp とした動作仕様は以下である1
# >./longcomp 12345678901234567890 + 12345678901234567890
# >12345678901234567890 + 12345678901234567890 = 24691357802469135780
# >./longcomp 1234567890 * 1234567890
# >1234567890 * 1234567890 = 1524157875019052100


416 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 06:05:44 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/105
#
# 課題2 b01, b001 のように二進数をb で始まるように表記する。二進数の集合を、できるだけ少ないノード数
# の二分木に分類するためには、二分木のノードに蓄積する二進数の桁数を可変にすることが有効である。
# こうすることで二進数表記した値(たとえばキーワードとか、位置とか、日付とか)に紐づけられたデータを少ない検索で見つけることができる。
# 扱う二進数の集合を、たとえば
# b00, b001, b0011, b00111, b1000, b11100, b0
# として、これらを図1に示すようにニ分木に分類して、帰りがけ(ポストオーダ)で次のように出力するプログラム(tree) を作成し、C のソースコードを提出しなさい。
# >./tree
# >1 1 1 0 0 000 1100 1 b
#

417 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 06:14:47 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/124
# [1] 授業単元: Cプログラミング入門
# [2] 問題文(含コード&リンク): 入力された2つの文字列(日本語その他バイト文字は不可)
# を比較するプログラムを作成せよ。ただし、大文字小文字の違いは無視。単語間に連続して
# スペース・タブが複数入っていても単独のスペースとしない。
#
# [5] その他の制限: 文字列とポインタまでやってます。
# 入力に関して、キーボードから1つ目の文字列を1行で入力し、改行する。
# この時、入力を促す文字は一切表示しない。入力文字数は128文字まで。
# 出力に関して、一致すれば何も表示しない。不一致の場合は最初に不一致となる
# 入力1の文字と入力2の文字(1文字+スペース+1文字+改行)を表示する。
# どちらかが末端の場合は代わりにスペースで埋める。

418 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 06:22:12 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/135
# [1] 授業単元:C言語
# [2] 問題文(含コード&リンク):ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10408.txt
#
# (1)複数の整数を平均値に近い順にソートするプログラムを作成せよ。
# 平均値は切り捨てして整数値で求めるものとし、平均値との距離が等しい
# 場合は値の小さな整数が優先されるものとする。
#
# 入力に関して

# キーボードからまず、入力する整数の個数を入力(最大で100とする)し、改行。
# 次に指定した数の整数をスペース1つ開けて1行で入力し、改行する。
# この時、入力を促す文字は一切表示しないこと。
# 出力に関して
# ソートした整数をスペース1つのみあけて1行で出力する(+改行)。指定した数改行
# 以外の出力は一切行わないこと。


419 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 07:12:24 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/137
# [1] 授業単元: プログラミング概論
# [2] 問題文:"in_file"という名前のファイルの中に18個の整数データが空白や改行コードで区切られて並んでいると仮定した上で、
# この入力ファイルの中のデータを1行に5個ずつきれいに並べて"out_file"という名前のファイルに
# 出力するCプログラムを作成せよ。
# 入力ファイルの内容が
# -1111111111 2222222 333333 4444 55 6 7 8 9 0 1 2 3 4
# 5         6           7890123
# -5666
# の時には、例えば次のような内容を"out_file"に書き出す
# _-1111111111_____2222222______333333________4444__________55
# _________________6_______________7______________8_____________9___________0
# ________________ 1_______________2______________3_____________4___________5
# _________________6_____7890123________-5666
#




420 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 07:23:27 ]
>>418
;; Common Lisp
(defun sort-ave (lst)
(let ((abs-ave (floor (abs (/ (reduce #'+ lst) (length lst))))))
(sort lst
#'(lambda (a b)
(let ((ax (abs (- (abs a) abs-ave))) (bx (abs (- (abs b) abs-ave))))
(if (= ax bx)
(< a b)
(< ax bx)))))))

(defun main ()
(let ((num (read)) lst)
(cond ((<= num 100)
(dotimes (i num)
(push (read) lst))
(format t "~{~A ~}~%" (sort-ave lst))))))


421 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 12:56:07 ]
>>418
使用言語:J

f=:monad def '}.|:/:~|:y,:~|y-<.(+/%#)y'

f 0 7 8 9 2 2 5 5 5 3
3 5 5 5 2 2 7 0 8 9

422 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 15:28:46 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/143
# [1] データ構造とプログラミング
# [2]
# 演習問題4.5 逆ポーランド記法による入力文字列(空白で区切られている)に対して

# 16進数と10進数で答えを返すプログラムrpnを作りなさい。
# (入力例)rpn 5 2 + 7 *
# (出力例)0x31, 49(decimal)
#


423 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 17:57:56 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/147
# [1] 授業単元: C++
# [2] 問題文(含コード&リンク):
# 2.
# ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10439.txt
# ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10436.txt
# ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10437.txt
# ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10438.txt
# kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10436.txt
↑pm1.txt
# kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10437.txt
# ↑pm2.txt
# kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10438.txt
# ↑pm3.txt
# というファイルがある。
# plus で始まる行の数値を足し,minus で始まる行の数値を引く。
# ファイルの最後まで計算した結果を表示するプログラムを作成せよ。
# データの数は実行前にはわからないものとする。


424 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 18:07:11 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/154
# [1] 授業単元: プログラミング演習
# [2] 問題文(含コード&リンク):ime.nu/www.acm-japan.org/past-icpc/domestic2008/problems/all_ja.html
# 等しい合計点
#
# 太郎と花子はそれぞれカードを何枚か持っている.
# 各カードには点数が書かれている.太郎のカードと花子のカードを 1 枚ずつ交換して,
# それぞれの持つカードの合計点数が等しくなるようにしたい.
# どのカードとどのカードを交換したらよいか.
#
# ただし,カードを交換しなくても合計点数が等しい場合でも,必ずカードの交換を行うものとする.
# Input
# 入力は,いくつかのデータセットからなる.各データセットは次の形式で与えられ
# n m
# s1
# s2
# ...
# 各データセットの最初の行は空白ひとつで区切られたふたつの数 n と m を含み,
# n は太郎のカードの枚数,m は花子のカードの枚数を表す.続く n+m 行には,
# 各カードの点数が 1 行にひとつずつ並ぶ.
# 最初の n 個の点数 (s1 から sn まで) は太郎のカードの点数,
# 残りの m 個の点数 (sn+1 から sn+m まで) は花子のカードの点数を表す.
# n および m は 100 以下の正の整数とし,カードの点数は 0 以上 100 以下の整数値とする.
# 入力の終わりは,空白ひとつで区切られたふたつの 0 を含む 1 行で示される.


425 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 19:04:37 ]
>>423
使用言語:J

plus =:+
minus=:-
f=:monad def '+/".;._2(1!:1)y'

f <'pm3.txt'
_316

426 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 20:18:00 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/161
# [1] 授業単元: プログラミング演習(木構造と数式処理)
# [2] 問題文(含コード&リンク):
#
# 累乗の計算の逆を行うプログラムを作ってください。
#
# 例
# x*x*xと入力されればx^3と画面に出力する。
#
# x*x*x*aなどの場合はx^3*aと出力されればよい。
#


427 名前:デフォルトの名無しさん mailto:sage [2010/01/25(月) 20:42:02 ]
>>413
使用言語:J

mult_array=: +/ .*

]A=:i.4 4
0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15

A mult_array A
56 62 68 74
152 174 196 218
248 286 324 362
344 398 452 506

428 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 00:00:16 ]
>>419
使用言語:J

read=: 1!:1
wrire=: 1!:2
format=: 8!:2
a=: read <'in_file'
b=: '13.0'format ".each _5,\cutopen,,;._2 a
(,b,.LF)write<'out_file'

429 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 01:18:57 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/167
# 上の105ですが、もう一度質問させて頂きます。
# なぜなら、課題2対しての回答がないからです。
# 皆様よろしくお願いします。
#
# [1] データ構造とプログラミング
# [2]b01, b001 のように二進数をb で始まるように表記する。二進数の集合を、できるだけ少ないノード数
# の二分木に分類するためには、二分木のノードに蓄積する二進数の桁数を可変にすることが有効である。こう
# することで二進数表記した値(たとえばキーワードとか、位置とか、日付とか)に紐づけられたデータを少な
# い検索で見つけることができる。
# 扱う二進数の集合を、たとえば
# b00, b001, b0011, b00111, b1000, b11100, b0
# として、これらを図1に示すようにニ分木に分類して、帰りがけ(ポストオーダ)で次のように出力するプロ
# グラム(tree) を作成し、C のソースコードを提出しなさい。
# >./tree
# >1 1 1 0 0 000 1100 0 1 b
#




430 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 01:21:28 ]
>>429
ごめんなさい。>>416に既出でした。

431 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 01:39:43 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/174
# [1] データ構造とプログラミング
# [2]
# リングバッファを使って、9個のキューを作り、データを追加したり、
# データを取り出すプログラムを完成させなさい。
# 以下の添付にあるプログラムを完成させろという課題です。
# ime.nu/www.geocities.jp/pegasus_violet/en5-2.pdf
# 演習問題5.2 リングバッファを使って、9 個のキュー(配列は10 元)を作り、
# データを追加したり(EnQue), データを取り出す(DeQue) プログラムを
# 完成させなさい29。プログラムの動作仕様は以下のようである。
# 1. 数字を入力するとキューが伸びる
# 2. d(deque) を入力するとfront を標準出力に出力
# 3. s(show) を入力するとキューを表示
# 4. キューがいっぱいだったらエラーメッセージを出す
# 5. q で終了








[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<462KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef