いろんな言語で宿題スレ 第三編at TECH
いろんな言語で宿題スレ 第三編 - 暇つぶし2ch331:デフォルトの名無しさん
10/01/18 13:19:56
スレリンク(tech板:934番)
# [1]授業単元:C言語実習(専門学校:選択授業)
# [2]課題:
# コマンドライン引数に与えられた英数字からなる文字列を、長さが長いものが先、同じ長さのものどう
# しでは辞書に記載される場合に先頭のほうに書かれるものが先に出力されるように出力するCを作る。
# 引数が与えられてない場合は、何も出力しない。

332:デフォルトの名無しさん
10/01/18 13:36:52
スレリンク(tech板:942番)
# [1] 授業単元:プログラミング演習
# [2] 問題文(含コード&リンク):URLリンク(ime.nu)
# リスト操作関数を作成する問いが5題ある。なお、ここで扱うリストは、ASCII文字を要素とする、頭を持った連結リスト(「文字リスト」と呼ぶ)である。
#
# ●問1.文字リストを作成する関数と印字する関数
#
# 与えられた文字列の各文字を要素とする文字リストを作成し返す関数make_clistと、与えられた文字リスト
# の内容を印字する関数print_clistを作成せよ。
#
#  【問1.については過去ログ等を調べつつ解答を導き出すことができました。コードを最下方に載せます。】
#



333:デフォルトの名無しさん
10/01/18 13:38:21
スレリンク(tech板:942番)
# [1] 授業単元:プログラミング演習
# [2] 問題文(含コード&リンク):URLリンク(ime.nu)
# ●問2.リストの内容を比較する関数
#
#  与えられた二つのリストに含まれる文字の並びを辞書式順序(※)で比較し、第一のリストの方が小さければ負の
# 値、大きければ正の値、等しければ0を返す関数compareを作成せよ。
#



334:デフォルトの名無しさん
10/01/18 13:39:58
スレリンク(tech板:942番)
# [1] 授業単元:プログラミング演習
# [2] 問題文(含コード&リンク):URLリンク(ime.nu)
# ●問3.リストの一部を取り除く関数
#
#  与えられた文字リストの先頭から見ていき、要素が'<'なら自身と(あれば)直前の要素を、'>'なら自身
# と(あれば)直後の要素を取り除く関数editを作成せよ。
#



335:デフォルトの名無しさん
10/01/18 13:41:20
スレリンク(tech板:942番)
# [1] 授業単元:プログラミング演習
# [2] 問題文(含コード&リンク):URLリンク(ime.nu)
# ●問4.リストの一部を別のリストの内容で置き換える関数
#
#  引数として三種のリストが与えられると、第一のリスト内に含まれる第二のリストに一致する部分を第三の
# リストに置き換える関数replaceを作成せよ。ただし新たにリストを作成するのではなく、与えられたリスト
# の変形で実現すること。一度置き換えた部分を再び置き換えの対象としなくてよい。また関数の戻り値として
# 置き換えを行った回数を返すこと。


336:デフォルトの名無しさん
10/01/18 13:42:37
スレリンク(tech板:942番)
# [1] 授業単元:プログラミング演習
# [2] 問題文(含コード&リンク):URLリンク(ime.nu)
# ●問5.複数回出現する要素からなるリストを返す関数
#
#  与えられた文字リスト中で複数回現れる文字を残して得られるリストを作成する関数multipleを作成せよ。
# ただし新たにリストを作成するのではなく、与えられたリストの変形で実現すること。また複数回現れる同種
# の文字は、そのいずれか1つだけを残すこと。

337:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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

URLリンク(d.hatena.ne.jp)


341:デフォルトの名無しさん
10/01/19 05:20:14
スレリンク(tech板: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:デフォルトの名無しさん
10/01/19 05:28:57
スレリンク(tech板:963番)
# [1] 授業単元:プログラミング演習
# [2] 問題文(含コード&リンク): URLリンク(kansai2channeler.hp.infoseek.co.jp)
# 括弧をすべて左にくくり直す式変形に加えて,分配法則を使って + を * の 外側へとくくり出す式変形をするプログラムを作ってください.
# ファイル 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:デフォルトの名無しさん
10/01/19 07:42:54
スレリンク(tech板:961番)
# [1] 授業単元: プログラミング演習
# [2] 問題文(含コード&リンク): 4行4列のint型の行列を、転置するプログラムを作成し、
# 動作の確認のため、転置前と転置後 の行列の内容を表示するようにせよ。

344:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/01/19 07:54:00
少なくともint型の検査はできていない。

347:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/01/19 19:56:12
スレリンク(tech板:14番)
# [1] 授業単元: プログラミング演習�
# [2] 問題文(含コード&リンク):
# 終了時、xとB、まらはAとHの内積のどちらかが0のプログラム。
# (xを入力→Hを設定)
# AとBはそれぞれHやxの最小多項式の係数となるはず。
# X1=(x1,...,xn)の転置行列;
# H=(X1,...,Xt);


350:345
10/01/19 23:04:02
>>347
プログラムというのは何をするのかを示すことなのではないか?

351:デフォルトの名無しさん
10/01/19 23:29:14
スレリンク(tech板:22番)
# [1] 授業単元: プログラミング
# [2] 問題文(含コード&リンク):URLリンク(ime.nu)
#
# 練習問題1*
#  以下に示すプログラムは、リストを操作するプログラムの一部である。このプログラムに、ジストの指定した位置(末尾以外)にノードを挿入する関数insert_nodeと、
# リストの指定した位置のノードを削除する関数delete_nodeを追加し、プログラムを完成させよ。
#  insert_nodeは引致として挿入位置の情報リストの何番目のノードかという情報)とデータ(文字列)を受け取るも
# のとする。また、挿入位置に元々あったノードは、新しく挿入するノードの次の要素となるものとする。
#  リストの先頭ノードとして挿入される場合にも正しく動くようにすること。
#  delete_nodeは、引数として削除位置の情報を受け取る。リストの先頭のノード、最後のノード、途中のノードが削除されたときにそれぞれ正しく動くようにすること。
# また、ノードが1個しかない場合にも正しく動<ようにすること。

352:デフォルトの名無しさん
10/01/20 07:55:26
>>350
この問いかけはどう受け取ればいいのでしょうか。
「あなたの書き込みは組み込み機能の紹介で
プログラムじゃないよ」ということですか?

353:デフォルトの名無しさん
10/01/20 08:52:50
>>352
半分は自問。
スレリンク(tech板) の第一夜を書いたのは
私です。このスレの最後に書き込まれた
>>第二夜?は第一夜とは正反対の主張の方と考えてよいのでしょうか?
を読んで書いてみたのが>>345です。>>347は説明的で冗長な>>345の対極にあるかなと思い、
さらに>>350で問いかけました。
私は、オペレータを知らないとそのプログラムの意味がわからない(APL的)ことは、
関数型言語の欠点ではないかと思っています。

354:デフォルトの名無しさん
10/01/20 09:42:40
補足。説明を論理式で書き表すことができるならば、その論理式が
すなわちプログラムである。というのがPrologの"売り"なんですね。
上の論理式の部分を数式に置き換えて、はたして本当にその数式が
"説明"になっているかということを問題にしているのです。常に
完全に理解している事が前提になっているのではないか、と。

355:デフォルトの名無しさん
10/01/20 10:20:42
>>354
プログラムを使うためのもの見るか、理解するためのものと見るかという違いかな。
このスレの魅力は議論を排除してプログラムコードが並んでいるところだから、
ここではあまりやって欲しくはないが、興味深いテーマではあるね。


356:デフォルトの名無しさん
10/01/20 12:39:24
>>353

>私は、オペレータを知らないとそのプログラムの意味がわからない(APL的)ことは、
>関数型言語の欠点ではないかと思っています。

知らないとわからないのは、あたりまえです。
手続き型言語をひとつ覚えると他の手続き型言語のコードがなんとなくわかる
気がするのは前提とする知識がほとんど同じだからじゃないでしょうか。

357:デフォルトの名無しさん
10/01/20 13:32:59
スレリンク(tech板:22番)
# 次のゲームを考える
# ・二人のプレイヤーA、Bにそれぞれ持ち点m点を与える
# ・コイントスをして表が出たらAからBへ、裏が出たらBからAへ、1点渡す
# ・コイントスをくりかえして先に持ち点がなくなったほうが負け
#
# 一個の自然数mをキーボード入力から読み取ってこのゲームをたとえば1000ゲーム繰り返して、
# 平均何回のコイントスで勝負がつくか、シュミレーションして求めるプログラムを作成してください。
# ただしコイントスを10000回繰り返しても勝負がつかない場合があるかもしれないので、それは回数オーバーとして別にカウントしてください。
#


358:デフォルトの名無しさん
10/01/20 13:35:56
スレリンク(tech板:797番)
# 質問です!
# 文字列を受け取ってスペースと記号を削除した文字列を返すメソッドを作りたいんですが
# どうすればいいでしょうか?
# ちなみに条件はgsubメソッドをつかうこと
# 記号は全角も半角も含む(","とか"。"とか"?"とか"?"とか)
# どなたかお願いします
#


359:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/01/20 17:45:16
>>358
使用言語:J

f=:-.&(ucp&',.?、。?')

a=:ucp'a,い、b?ろ?c.は。'
f a
aいbろcは

361:デフォルトの名無しさん
10/01/20 18:02:12
>>358
使用言語:J

NB.f=:-.&(ucp&',.?、。?')間違えたので、訂正します。ucpの後ろの&はいりませんでした。

f=:-.&(ucp',.?、。?')

a=:ucp'a,い、b?ろ?c.は。'

f a
aいbろcは

362:デフォルトの名無しさん
10/01/20 18:19:02
スレリンク(tech板:31番)
# [1] プログラミング実習
# [2] URLリンク(ime.nu)
#
# 以下に示すプログラムは、リストを操作するプログラムの一部である。この
# プログラムに、リストの指定した位置(末尾以外)にノードを挿入する関数insert_nodeと、
# リストの指定した位置のノードを削除する関数delete_nodeを追加し、プログラムを完成させよ。
# insert_nodeは引数として挿入位置の情報(リストの何番目かという情報)とデータ(文字列)を受け取るものとする。
# また、挿入位置にもともとあったノードは、新しく挿入するノードの次の要素となるものとする。
# リストの先頭ノードとして挿入される場合も正しく動作するようにすること。
# delete_nodeは、引数として削除位置の情報を受け取る。リストの先頭のノード、
# 最後のノード、途中のノードが削除されたときにそれぞれ正しく動くようにすること。
# また、ノードが一個しかない場合も正しく動くようにすること。

363:デフォルトの名無しさん
10/01/20 18:21:50
スレリンク(tech板:755番)
# 【 課題 】インターネット書店を作成せよ
#       <条件>
#       ・画面サイズ→VGAとする
#       ・書籍は5ジャンル150冊
#       ・1回の注文で5種類まで書籍を注文可能
#       ・書籍の値段は20円単位とし、書籍の値段は自由
#       ・書籍価格の合計金額の2%のポイントが与えられる。(ただし、ポイントは第一ジャンルは2倍、第二ジャンルは3倍になる)
#       ・注文終了後、注文確認画面で注文と支払い代金、獲得ポイントが確認できる。(支払い代金とは、注文図書の合計金額と消費税の和)
#       ・貯まったポイントを併用して支払いが可能(ポイントの価値は、1ポイント1円)
#       ・書籍の発送は電子メールの添付ファイルで行う(発送は出来なくてよい)
#       ・ソフトキーボードのみ使用可能
#
# 【 補足 】実用的な画面インタフェースでは取消機能が必要であるが、ここでは取消機能については
#       考えなくてよい。
#       また、ユーザーは正しい操作を行うものと仮定して良い。

364:デフォルトの名無しさん
10/01/20 18:40:51
>>362>>351 と同じ問題でした。

365:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/01/20 22:58:22
>>336
% Prolog リストの変形では得られない点は同じ。

与えられた文字リスト中で複数回現れる文字を残して得られるリストを作成する(_文字リスト,_複数回現れる文字を残して得られるリスト) :-
  multiple(_文字リスト,_複数回現れる文字を残して得られるリスト).

multiple(_文字リスト,_複数回現れる文字を残して得られるリスト) :-
  findall(_文字,(append(L1,[_文字|L2],_文字リスト),\+(member(_文字,L1)),member(_文字,L2)),_複数回現れる文字を残して得られるリスト).


374:デフォルトの名無しさん
10/01/20 23:01:33
スレリンク(tech板:33番)
# [1] プログラミング基礎実習
# [2] 文字列strを逆順に格納する関数("SEC"を受け取ったら"CES"とする)
# void rev_string(char str[]){ /*…*/ }
# を作成せよ。



375:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/01/21 06:25:13
スレリンク(tech板:38番)
# 長くなったのでうpロダお借りしました。
#
# 問題1
# URLリンク(ime.nu)
# コピーさせていただきました URLリンク(nojiriko.asia)

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


379:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/01/21 13:02:50
>>379
二番目の定義が次の問題になってしまった。結果として意味不明。
make_clistがmake_listになってるところもあるし。>>379はなかったことにしてください。



381:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/01/22 20:10:32
スレリンク(tech板:771番)
# 【 課題 】
# サーバとクライアントでの間で文字列を送り合うプログラムをつくれ。
# ただし、以下の条件を満たすようにすること。
# アドレス、ポート、名前、文字列はキーボード入力し、お互いに自由に指定できるようにする。
# クライアントで quit が入力された場合、クライアントは接続を切りプログラムを終了し、
# サーバは接続が切られたら、次のクライアントの接続を待つ
# サーバで quit が入力された場合、サーバは接続を切り、次のクライアントの接続を待ち、
# クライアントは接続が切られたらプログラムを終了する
# エンターキーのみが入力された場合は、文字列を送らずもう一度文字列を入力させて、
# その文字列を送るようにする。


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


385:デフォルトの名無しさん
10/01/22 20:19:16
>>384
% Prolog programがmainにあたる。

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

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

386:デフォルトの名無しさん
10/01/22 21:09:18
>>384

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


387:386
10/01/22 23:43:35
アンカミス
X:>>384 --> O:>>385

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


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


390:デフォルトの名無しさん
10/01/23 03:59:06
>>386 >>387

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

391:デフォルトの名無しさん
10/01/23 04:11:07
>>386

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

392:391
10/01/23 04:33:07
すみません。私の名前は○○ですを3回繰り返すのを忘れました。



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

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

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

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

終了 :- halt.

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

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

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

396:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/01/23 07:44:33
>>395 これではだめかいwww

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

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

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

main :- display_name,display_name,display_name.



398:デフォルトの名無しさん
10/01/23 09:03:32
>>389 の URLリンク(kansai2channeler.hp.infoseek.co.jp)
には大量の実行例とデータが載っています。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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/01/23 09:08:27
>>384
使用言語:J

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

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

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


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

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


404:デフォルトの名無しさん
10/01/24 06:23:46
スレリンク(tech板: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:デフォルトの名無しさん
10/01/24 06:24:41
スレリンク(tech板: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:デフォルトの名無しさん
10/01/24 06:28:27
スレリンク(tech板:95番)
# [1] 授業単元: プログラミング演習
# [2] 問題文(含コード&リンク):URLリンク(ime.nu)
#
# 等しい合計点
#
# 太郎と花子はそれぞれカードを何枚か持っている.各カードには点数が書かれている.
# 太郎のカードと花子のカードを 1 枚ずつ交換して,それぞれの持つカードの合計点数が等しくなるようにしたい.
# どのカードとどのカードを交換したらよいか.
#
# ただし,カードを交換しなくても合計点数が等しい場合でも,必ずカードの交換を行うものとする.


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


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


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

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

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


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

418:デフォルトの名無しさん
10/01/25 06:22:12
スレリンク(tech板:135番)
# [1] 授業単元:C言語
# [2] 問題文(含コード&リンク):URLリンク(ime.nu)
#
# (1)複数の整数を平均値に近い順にソートするプログラムを作成せよ。
# 平均値は切り捨てして整数値で求めるものとし、平均値との距離が等しい
# 場合は値の小さな整数が優先されるものとする。
#
# 入力に関して

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


419:デフォルトの名無しさん
10/01/25 07:12:24
スレリンク(tech板: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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/01/25 15:28:46
スレリンク(tech板:143番)
# [1] データ構造とプログラミング
# [2]
# 演習問題4.5 逆ポーランド記法による入力文字列(空白で区切られている)に対して

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


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


424:デフォルトの名無しさん
10/01/25 18:07:11
スレリンク(tech板:154番)
# [1] 授業単元: プログラミング演習
# [2] 問題文(含コード&リンク):URLリンク(ime.nu)
# 等しい合計点
#
# 太郎と花子はそれぞれカードを何枚か持っている.
# 各カードには点数が書かれている.太郎のカードと花子のカードを 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:デフォルトの名無しさん
10/01/25 19:04:37
>>423
使用言語:J

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

f <'pm3.txt'
_316

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


427:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/01/26 01:18:57
スレリンク(tech板: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:デフォルトの名無しさん
10/01/26 01:21:28
>>429
ごめんなさい。>>416に既出でした。

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



432:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/01/26 06:04:00
>>433 (>>432) 訂正
% Prolog 訂正するのを忘れていた。

出力する([],_) :- !.
出力する([L|R],_表示フォーマット) :- '1行出力する'(L,_表示フォーマット),出力する(R,_表示フォーマット).



434:デフォルトの名無しさん
10/01/26 07:16:12
>>374
使用言語:J

rev_string=: ,~/

rev_string 'SEC'
CES


|. 'SEC'
CES

435:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/01/26 08:14:42
>>436
# 平均値との距離が等しい場合は値の小さな整数が優先されるものとする。

この判断が漏れている。

438:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/01/26 10:43:20
すみません。行末あたりに一文字何かが入ってしまったようで改行の制御が
正しくできませんでした。
URLリンク(nojiriko.asia)
に仕上げて書いておきます。

441:デフォルトの名無しさん
10/01/26 11:06:53
スレリンク(tech板:189番)
# [1] データ構造とプログラミング
# [2]
# ツリーにノードを追加するプログラムを完成させなさい。またプログラム中 に使われている要素 mitsugi, emura, satou, yonemura, murai, nakamura, kwkt がツリー上でどのように配置され ているか書きなさい。
# 以下の添付にあるプログラムを完成させろという課題です。
# URLリンク(ime.nu)


442:デフォルトの名無しさん
10/01/26 16:43:14
スレリンク(tech板:193番)
# [1] 授業単元:プロトタイプ宣言とか引数
# [2] 問題文(含コード&リンク):[3~6]∫x^2 dx(これだと正解は63)を計算するプログラムを作成せよ。
# 尚、積分本体(始点と終点)と関数本体f(x)に分けること。dx=1/N N=(10,1000…10000)誤差評価を行う事。積分範囲を変更すること。x^2の関数を変更すること。
#


443:デフォルトの名無しさん
10/01/26 16:44:31
スレリンク(tech板: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:デフォルトの名無しさん
10/01/26 17:33:48
スレリンク(tech板:200番)
# [1] 授業単元: プログラミング
# [2] 問題文(含コード&リンク):
# A組、B組、C組にそれぞれn人の生徒がいて、
# A組の生徒が一列に並んでいる。
# このとき、B組の生徒をA組の生徒の隣に並ばせたいが
# なるべく隣同士で身長に差がないようにしたい。
# どうやって計算すればいいでしょう?
# 加えて、C組の生徒もB組の隣に並ばせたい場合はどうすれば?
# (身長の配列) double height_a[n], height_b[n], height_c[n];

445:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/01/26 19:24:07
スレリンク(tech板: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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/01/27 02:28:09
スレリンク(tech板:233番)
# [1] 授業単元:プロトタイプ宣言とか引数
# [2] 問題文(含コード&リンク): 入力された数字が偶数なら、trueを返す関数。それ以外ならfalse


450:デフォルトの名無しさん
10/01/27 02:30:31
スレリンク(tech板:232番)
# [1] 授業単元:プロトタイプ宣言とか引数
# [2] 問題文(含コード&リンク): 得点を入力して以下のルールに従った成績を返す関数を実装せよ。
# 90点以上 S
# 80点以上 A
# 60点以上 B
# それ未満 C


451:デフォルトの名無しさん
10/01/27 02:41:54
>>449
% Prolog

入力された数字が偶数なら、trueを返す :-
  get_integer(N),
  入力された数字が偶数なら、trueを返す(N).

入力された数字が偶数なら、trueを返す(N) :- 0 is N mod 2.

452:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/01/27 02:58:21
>>450
% Prolog

得点を入力して以下のルールに従った成績を返す(_成績) :-
  get_integer(_得点),
  得点を入力して以下のルールに従った成績を返す(_得点,_成績).

得点を入力して以下のルールに従った成績を返す(_得点,_成績) :-
  以下のルール(_得点,_,_成績).

以下のルール(_得点,'90点以上','S') :- _得点 >= 90,!.
以下のルール(_得点,'80点以上','A') :- _得点 >= 80,!.
以下のルール(_得点,'60点以上','B') :- _得点 >= 60,!.
以下のルール(_得点,'それ未満','C') :- _得点 < 60,!.


455:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/01/27 06:29:40
>>456 訂正 成績がひとつ落ちた

'得点がそれ未満のはC' -> '得点がそれ未満の成績はC'

458:デフォルトの名無しさん
10/01/27 13:39:12
>>449
使用言語:Io

Number even:=method(self % 2 == 0)

Io> 23 even
==> false
Io> 24 even
==> true

459:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/01/27 17:34:13
>>449
使用言語:J

even=: 0=2&|

even 23
0
even 24
1

461:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/01/27 17:56:26
スレリンク(tech板:245番)
# [1] 授業単元: プログラミング
# [2] 問題文(含コード&リンク):
# キーボードから正の整数nを入力し、n!を計算して画面表示するプログラムを
# 作成せよ。ただし、階乗を計算する関数のプロトタイプを「void kaiyo(int , int *)」
# とし、第1引数にnを、第2引数に計算結果を格納する変数のポインタを指定すること。
#


463:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/01/27 20:16:34
>>464
書き忘れましたが、使用言語は maxima です。

466:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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
10/01/28 05:16:26
ついでに言うとこれは説明不能ww ということは、
重リストを使ったキュー操作はあまり推奨できるプログラムではないのかも。

471:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/01/28 15:26:00
>>449
使用言語:tcl

% proc even {n} {expr $n%2==0}
% even 23
0
% even 24
1

476:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/01/28 18:09:44
>>449
使用言語:R

> even <- function(n){n%%2==0}

> even(23)
[1] FALSE

> even(24)
[1] TRUE

480:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/01/28 22:51:35
スレリンク(tech板:296番)
# [1] 授業単元:プログラミング演習
# [2] 問題文(含コード&リンク):
# 10個の要素を持つ動的な整数配列を作るプログラムを作成しなさい。
# 動的な配列へのポインタを整数ポインタに代入しなさい。
# 次に、ポインタ算術または配列の添字を使って、1から10までの値を配列を構成する整数に代入しなさい。
# 最後に、代入した値を表示し、メモリを解放しなさい。
#


482:デフォルトの名無しさん
10/01/28 22:53:22
スレリンク(tech板:299番)
# [1] 授業単元:コンピュータリテラシー
# [2] 問題文(含コード&リンク):
# あるファイルの名簿を呼びだし、名前もしくは名字で検索しその結果を新しいファイルに保存する。あるファイルの名簿は特に決められていない。
# URLリンク(ime.nu)


483:デフォルトの名無しさん
10/01/28 22:57:40
スレリンク(tech板:307番)
# [1] Cプログラミング入門:
# [2] URLリンク(ime.nu)
# 次のプログラムを作成し二つのファイルを提出せよ。
# 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:デフォルトの名無しさん
10/01/28 22:59:38
スレリンク(tech板:309番)
# [1] C言語プログラミング演習(大学任意科目)
# [2] コマンドラインで指定された各テキストファイルに対して個別に以下の処理を行うCプログラムを作成
# ☆テキストファイルを通読し、各行のインデント深度の最大値を求める(それをNとおく)
# ☆テキストファイルの先頭から再度読み出し、それぞれの行についてインデント深度がnなら
# ば、インデント深度をN-nに変更したものを標準出力する。
# ☆新しいテキストファイルのNが判明した時点で、その改行とファイル名、改行を標準出力する。
# ここでインデント深度とは、行頭からタブ、空白以外の文字が現れるまでがn回(n>=0)現れた場合
# 深度=nとする。


485:デフォルトの名無しさん
10/01/28 23:04:35
スレリンク(tech板:315番)
# [1] 授業単元:プログラミング応用
# [2] 問題文(含コード&リンク):URLリンク(ime.nu)
#
# ■問題1
#  pnm(pbm, pgm, ppm)フォーマット画像ファイルを読み込み、
#  左右を反転させた画像をpnmフォーマット画像ファイルとして
#  保存するプログラムを作成せよ.
#
# ■問題2
#  256(横)×256(縦)の画素数をもつpgmフォーマット画像の階調度を
#  7段階(128階調,64階調,32階調,16階調,8階調,4階調,2階調)で変換し,
#  各階調に変換したときの画像(7枚)をpgmフォーマット画像として
#  保存するプログラムを作成せよ.
#
# ※問題1,2共に、アスキー形式とバイナリー形式のpnmフォーマット画像を
#  処理できるプログラムとすること


486:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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).



次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch