[表示 : 全て 最新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越えで終了しました。
前スレで未解決な課題は順次このスレにコピーします。

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).

514 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 21:03:05 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/336
# [1] 授業単元: 情報処理B
# [2] 問題文(含コード&リンク): ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10463.txt
#
# ★課題2★
# キーボードから(標準入力から)スペースで区切られた3つの実数 a b c を
# 受け取って(最後は改行)、二次方程式 ax2+bx+c=0 の解を画面に(標準出力に)出力せよ。
# 二次方程式の解は複素数の範囲で考えること。二次方程式を解く部分はmain関数とは
# 別にしてmain関数から呼ぶこと。グローバル変数の使用は禁止。


515 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 21:07:29 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/336
# [1] 授業単元: 情報処理B
# [2] 問題文(含コード&リンク): ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10463.txt
#
# ★課題1★
# キーボードから(標準入力から)1つの十進数表現の正の整数を受け取って、
# その数が3の倍数かまたは各桁の数字のいづれかに3が入っている数ならば
# 画面に(標準入力に)YES、そうでなければ、NOと出力せよ。与えられた条件を
# 判定する部分はmain関数とは別の関数にしてmain関数から呼ぶこと。
# グローバル変数の使用は禁止。


516 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 21:10:17 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/336
# [1] 授業単元: 情報処理B
# [2] 問題文(含コード&リンク): ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10463.txt
#
# ★課題3★
# キーボードから(標準入力から)スペースで区切られて最後が改行の3つの実数を
# 3回を受け取って、それらの合計9この実数からなる3行3列の行列の逆行列を
# 求めて画面に(標準出力)出力せよ。
# 逆行列を求める部分はmain関数とは別の関数にしてmain関数から呼ぶこと。
# グローバル変数の使用は禁止。


517 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 21:18:16 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/336
# [1] 授業単元: 情報処理B
# [2] 問題文(含コード&リンク): ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10463.txt
#
# ★課題4★
# 複素数の行列を扱うことを考える。実部と虚部をdouble型のメンバーとしてもつ
# 構造体struct complex型の二次元配列を使って、2行2列の成分からなる複素数の
# 行列を扱う。Struct complex型の変数の足し算やかけ算、および上述のような
# 2行2列の複素行列の足し算やかけ算を行う関数を準備し、それらの関数を
# 利用して、2行2列の複素数の行列のexpを、Maclaurin展開の10項目までを
# 計算することによって求めなさい。グローバル変数の使用は禁止。
# 実行時に入力する行列の内容については、実数だけからなる対角行列、
# 純虚数の対角行列、一般の複素数の対角行列、その他の一般の行列などの
# 多くの場合についてテストすること。




518 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 21:22:17 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/336
# [1] 授業単元: 情報処理B
# [2] 問題文(含コード&リンク): ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10463.txt
#
# ★課題5★
# 1行にスペースで区切られた2つの実数が書かれているデータファイルをエディタで
# 作成して適当な名前で保存しておけ。標準入力からのリダイレクトを使って
# そのファイルからデータを読み込み、データのグラフを画面に(標準入力に)出力せよ

# ここで、各行の左側のデータをxデータ、右側のデータをyデータとする。
# また、グラフはテキスト画面にマイナス(‐)やプラス(+)や縦棒(|)や
# アスタリスク(*)などの文字を出力することによって実現せよ。さらに、
# yデータの平均と標準偏差も求めて画面に(標準出力に)出力せよ。様々なデータ数や
# データ範囲をもつ入力データを与えられても適切に動くようにつくることが
# 望ましいが、難しければ入力データ範囲は0以上10以下に限定するなど、
# 自分でプログラムの仕様を簡素化してもよい。


519 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 21:28:15 ]
pc11.2ch.net/test/read.cgi/db/1252492296/474
# SQL Server Compact 3.5 で、a_tbl と b_tbl のコードが一致した場合に
# a_tbl に、b_tblの名前をセットするみたいなことしたいのですが無理ですか?
#
# UPDATE a_tbl
# SET name = b_tbl.name
# FROM b_tbl
# WHERE a_tbl.no = b_tbl.no
#
# 実行すると、「FROM 句はこのクエリの種類では使用できません」ってエラーになります。
# SQL Server 2008 だと問題ないのですが・・・

520 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 22:06:58 ]
>>519
% Prolog

'a_tbl と b_tbl のコードが一致した場合に a_tbl に、b_tblの名前をセットする' :-
  a_tbl(_no,_name1),
  b_tbl(_no,_name2),
  update_a_tbl(_no,_name2),
  fail.
'a_tbl と b_tbl のコードが一致した場合に a_tbl に、b_tblの名前をセットする'.

update_a_tbl(_no,_name2) :-
  retract(a_tbl(_no,_)),
  assertz(a_tbl(_no,_name2)),
  fail.
update_a_tbl(_,_).


521 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 22:25:00 ]
>>515
% Prolog
'キーボードから(標準入力から)1つの十進数表現の正の整数を受け取って、その数が3の倍数かまたは各桁の数字のいづれかに3が入っている数ならば画面に(標準入力に)YES、そうでなければ、NOと出力せよ' :-
'キーボードから(標準入力から)1つの十進数表現の正の整数を受け取って(_正の整数),
その数が3の倍数かまたは各桁の数字のいづれかに3が入っている(_正の整数,_診断),
write_formatted('%t\n',[_診断]),!.

'キーボードから(標準入力から)1つの十進数表現の正の整数を受け取って(_正の整数):-
  repeat,
  get_integer(_正の整数),
  integer(_正の整数),
  _正の整数 >= 0,!.

その数が3の倍数かまたは各桁の数字のいづれかに3が入っている(_数,'YES') :-
  0 is _数 mod 3,!.
その数が3の倍数かまたは各桁の数字のいづれかに3が入っている(_数,'YES') :-
  各桁の数字のいづれか(_数,L),
  member(3,L),!.
その数が3の倍数かまたは各桁の数字のいづれかに3が入っている(_,'NO').

各桁の数字のいづれか(N,[N]) :- N < 10,!.
各桁の数字のいづれか(N,[M|R]) :-
  M is N mod 10,
  M2 is N // 10,
  各桁の数字のいづれか(M2,R).

522 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 22:28:41 ]
>>521 (>>515) 一部表示し直し
% Prolog

'キーボードから(標準入力から)1つの十進数表現の正の整数を受け取って、その数が3の倍数かまたは各桁の数字のいづれかに3が入っている数ならば画面に(標準入力に)YES、そうでなければ、NOと出力せよ' :-
  'キーボードから(標準入力から)1つの十進数表現の正の整数を受け取って(_正の整数),
  その数が3の倍数かまたは各桁の数字のいづれかに3が入っている(_正の整数,_診断),
  write_formatted('%t\n',[_診断]),!.

523 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 05:59:00 ]
>>484
% Prolog (その一)

インデント深度とは(_行,_インデント深度) :-
  '行頭からタブ、空白以外の文字が現れるまでがn回(n>=0)現れた場合深度=nとする'(_行,_n),
  _n = _インデント深度,!.

'行頭からタブ、空白以外の文字が現れるまでがn回(n>=0)現れた場合深度=nとする'(_行,_n) :-
  sub_atom(_行,_n,1,_,C),
  \+(C=' '),
  \+(C='\t'),!.

524 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 06:13:04 ]
>>523 (>>484)
% Prolog (その一) 「インデント深度とは」の「とは」は説明的ではあるが実用上好ましいとはいえない。
% 備考的な部分の定義ではしばしば迷うところ。普通は以下だが、

インデント深度(_行,_インデント深度) :-
  '行頭からタブ、空白以外の文字が現れるまでがn回(n>=0)現れた場合深度=nとする'(_行,_n),
  _n = _インデント深度,!.

% 辞書引きの際は実務的な定義を参照する感じの定義。

インデント深度とは(_行,_インデント深度) :- インデント深度(_行,_インデント深度).

% ひっくり返して、実用時に辞書を引く感じ。

インデント深度(_行,_インデント深度) :- インデント深度とは(_行,_インデント深度).


525 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 06:26:39 ]
>>523 (>>484)
% Prolog 出題が不完全でtab処理ができていない。普通は、

tab(空白,6).

'行頭からタブ、空白以外の文字が現れるまでがn回(n>=0)現れた場合深度=nとする'(_行,_n) :-
  atom_chars(_行,Chars),
  行頭からタブ、空白以外の文字が現れるまでの文字数(0,Chars,_n).

行頭からタブ、空白以外の文字が現れるまでの文字数(_n,[],_n) :- !.
行頭からタブ、空白以外の文字が現れるまでの文字数(_n,[A|_],_n) :- \+(A='\t'),\+(A=' '),!.
行頭からタブ、空白以外の文字が現れるまでの文字数(N,['\t'|R],_n) :-
  tab(空白,M),
N2 is N + M,
行頭からタブ、空白以外の文字が現れるまでの文字数(N2,R,_n),!.
行頭からタブ、空白以外の文字が現れるまでの文字数(N,[' '|R],_n) :-
N2 is N + 1,
行頭からタブ、空白以外の文字が現れるまでの文字数(N2,R,_n),!.



526 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 06:28:44 ]
>>525 (>>484) 書き直し。すみません。
% Prolog 出題が不完全でtab処理ができていない。普通は、

tab(空白,6).

'行頭からタブ、空白以外の文字が現れるまでがn回(n>=0)現れた場合深度=nとする'(_行,_n) :-
  atom_chars(_行,Chars),
  行頭からタブ、空白以外の文字が現れるまでの文字数(0,Chars,_n).

行頭からタブ、空白以外の文字が現れるまでの文字数(_n,[],_n) :- !.
行頭からタブ、空白以外の文字が現れるまでの文字数(_n,[A|_],_n) :- \+(A='\t'),\+(A=' '),!.
行頭からタブ、空白以外の文字が現れるまでの文字数(N,['\t'|R],_n) :-
  tab(空白,M),
  N2 is N + M,
  行頭からタブ、空白以外の文字が現れるまでの文字数(N2,R,_n),!.
行頭からタブ、空白以外の文字が現れるまでの文字数(N,[' '|R],_n) :-
  N2 is N + 1,
  行頭からタブ、空白以外の文字が現れるまでの文字数(N2,R,_n),!.


527 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 07:35:48 ]
>>514
% Prolog
'キーボードから(標準入力から)スペースで区切られた3つの実数 a b c を 受け取って(最後は改行)、二次方程式 ax2+bx+c=0 の解を画面に(標準出力に)出力せよ。二次方程式の解は複素数の範囲で考えること。' :-
  'キーボードから(標準入力から)スペースで区切られた3つの実数 a b c を 受け取り(A,B,C),
  二次方程式の解(A,B,C,X).

'キーボードから(標準入力から)スペースで区切られた3つの実数 a b c を 受け取り(A,B,C) :-
  get_line(Line),
  split(Line,[' '],L),
  findall(V,(member(A,L),atom_to_term(A,V,_)),[A,B,C]),!.

二次方程式の解(A,B,C,X) :-
  _判別式 is B ^ 2 - 4 * A * C,
  判別式により解を求める(_判別式,A,B,C,X).

判別式により解を求める(_判別式,A,B,C,X) :-
  ( _判別式 > 0; _判別式 > 0.0),!,
  (  X is ((-1) * B + sqrt(_判別式)) / ( 2 * A);
    X is ((-1) * B + sqrt(_判別式)) / ( 2 * A)).
判別式により解を求める(_判別式,A,B,C,X) :-
  (_判別式 = 0;_判別式 = 0.0),!,
  X is ((-1) * B) / ( 2 * A).
判別式により解を求める(_判別式,A,B,C,X) :-
  ( _判別式 < 0; _判別式 < 0.0),!,
  U is (-1) / (2 * A),
  V is sqrt((-1) * _判別式)),
  ( X = (U + iV); X = (U - iV)).



528 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 12:11:35 ]
pc12.2ch.net/test/read.cgi/tech/1248012902/815
# 【 課題 】ime.nu/rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/915.txt
# 【 形態 】1. Javaアプリケーション(main()で開始)
#
# しりとりゲームをするプログラム
# 第一段階ーShiritori.javaを次に掲載する。
#      これをEclipseに入力する
#    ー与えられた単語の可否を判定するためのクラスReferee.javaを作成する
#
# 第二段階ーReferee.javaをしりとりのルールにのっとった判定をさせるように改善
#
# 第一段階のRefereeの使用
# ・直前に入力された単語の末尾の文字を記憶するchar型のフィールド
#    lastChar
# ・次の単語がどの文字で始まらなければならないかをchar型で返すメソッド
# mustBeginWith()
# ・引数として与えられた単語の可否を判定し、可ならtrueを返すとともにlastCharを更新し、否ならfalseを返すメソッド
#    isOK(String newWord)
# とりあえずは何でもかんでも「可」とするように作る



529 名前:デフォルトの名無しさん [2010/01/30(土) 13:33:48 ]
Microsoft社 Visual Studio C++のソフトウェアを用いて
チャットアプリケーションを作れと言われたのですが、
当方C言語系がとても苦手で困っています;;

システムの仕様は
・1対1の環境でのみ動作。
・サーバ側はポート番号を指定して、クライアントからの接続を待つ。
・クライアント側はサーバのIPアドレスとポート番号を指定して、サーバに接続する。
・この時の通信はTCPで行う。
・クライアントが通信をやめたい場合は"endc"
・サーバ側がやめたい場合は"ends"と入力。
・WinSockを使用してWindowsのコンソールプログラムとして基本的な簡易なチャット

以上の条件でプログラミングしていただけると幸いです。
よろしくお願いします m__)m





530 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 16:46:35 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/351
# [1] 授業単元:プログラミング演習�
# [2] 問題文(含コード&リンク):
# □1□2□3□4□5□6□7□8□9
# の□に四則の演算子(+,−)や空白を入れて100なるような
# 小町算の全ての解を求めるプログラムを作成すること
#
# 例えば
# 12 + 3 - 4 + 5 + 67 + 8 + 9 = 100
# 123 - 45 - 67 + 89 = 100
#


531 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 16:47:53 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/353
# [1] 授業単元:コンピュータグラフィック
# [2] 問題文(含コード&リンク):10468.txt
# モノクロ画像を読み込み,(319,239) の画素値を 0 とする
# 画像を関数を使用して読み込み,それを 2 次元配列に格納する関数を作成する.
# 指定した画素の画素値をセットする.
# 2 次元配列に格納していた画像を 1 次元配列に再度格納し,関数を使用して画像ファイルとして書き戻す.
#


532 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 17:17:04 ]
>>528
% Prolog 全然ルールが違うのですが「馬名しりとり」というのを作ってみました。
nojiriko.asia/prolog/j68_815.html

533 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 17:22:56 ]
>>532
全然違うというのは日本語として変かな。
javaの宿題とルールが違っている上に、馬名である特徴も今のところほとんどありません。
今後、血統や競争成績の検索やコメントを付与する機能を付け加えたいと思います。

534 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 23:25:03 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/369
# [1] 授業単元: プログラム演習?
# [2] 問題文(含コード&リンク):
# 3次元空間において線分が平面を通過しているか判定するプログラムを作りなさい
# (線分の座標(x1,y1,z1) (x2,y2,z2)と平面の四隅の座標は入力する)
# 平面を通過していても平面の四隅の中に交点がない場合は通過していないものとする


535 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 13:44:22 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/381
# [1] 授業単元:プログラミング演習?
# [2] 問題文(含コード&リンク): 入出力とデータファイルへの保存とその間の処理あるプログラムを作成する
#                ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10475.txt
# 入出力とデータファイルへの保存とその間の処理のあるプログラムの作成
#
# 作成条件
# 1.入力→処理→出力のシステムが構築されていること
# 2.データをファイルに保存しておけるようにしておく
# 3.データに構造体が用いられること
# 4.main以外を1つ以上関数化すること
# 5.datファイルも各自で作成する


536 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 19:32:39 ]
>>530
% Prolog (その一)

空白を含む文字列の空白を取り除いて解析する(_文字列,_項) :-
  文字列から空白を取り除く(_文字列,_空白を取り除かれた文字列),
  文字列を解析して項を生成する(_空白を取り除いた文字列,_項).

文字列から空白を取り除く(_文字列,_空白を取り除かれた文字列) :-
  atom_chars(_文字列,Chars),
  ならびから空白要素を取り除く(Chars,_空白を取り除かれたならび),
  atom_chars(_空白を取り除かれた文字列,_空白を取り除かれたならび).

ならびから空白要素を取り除く([],[]) :- !.
ならびから空白要素を取り除く([' '|R1],R2) :-
  ならびから空白要素を取り除く(R1,R2),!.
ならびから空白要素を取り除く([A|R1],[A|R2]) :-
  ならびから空白要素を取り除く(R1,R2),!.

文字列を解析して項を生成する(_文字列,_項) :- atom_to_term(_文字列,_項,_).

537 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 05:59:17 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/394
# [1] 授業単元: プログラミング演習
# [2] 問題文(含コード&リンク): 住所録の機能を実現するプログラムを作成せよ。




538 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 06:03:19 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/391
# すいませんが規制されてるので携帯から簡単に
# 問題文:ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10482.txt
# キーボードから名前と年齢をレコードとするデータを入力し、
# ファイルに書き出すプログラムを作成しなさい。ただしデータの終わりは^z(CTRL+Z)とする。
# また、書き出す先のファイル名はコマンドライン引数を使用して指定すること。
#
# 「実行結果」
#
# C:\Kadai01>Kadai01 a.txt
#
# 名前 年齢
# 上戸彩 20
# 長澤まさみ 29
# 新垣結衣 20
# ^z


539 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 06:06:12 ]
pc12.2ch.net/test/read.cgi/tech/1252382593/516
# 2つの同じ要素数のリスト (Num a) => [a] を、
# 片方を1要素分横にずらして和を取りたいです。
# たとえば [1, 2, 3] と [7, 8, 9] であれば
# [1, 2, 3, 0] と [0, 7, 8, 9] の和です。
#
# 今は定義を素直に実装して次のようにやってます。
# shearAdd :: (Num a) => [a] -> [a] -> [a]
# shearAdd as bs = zipWith (+) (as ++ [0]) (0 : bs)
#
# もっと洗練された方法はあるでしょうか。
# たとえば (++) 演算子は左辺のリストの要素数が大きいと不利なので、
# これを改善できるとか。



540 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 06:18:46 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/358
# [1] 授業単元:プログラミング演習?
# [2] 問題文(含コード&リンク):ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10471.txt
#
# ≪問題と条件≫
# 第1引数に指定したファイルからバイナリーモードで1バイトずつファイルを読み込み、
# ファイルの内容を16進数で示したものを第2引数に指定したファイルに書き込むプログラムを作成せよ。ただし、16バイトごとに改行を入れること。


541 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 06:34:03 ]
pc12.2ch.net/test/read.cgi/tech/1248012902/821
# 【 課題 】線分描画,点描画のメソッドをつかって,放物線を描画して下さい.

542 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 06:37:34 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/387
#
# 息抜きにって下さい。
# 自分は分からないっす
#
# お客様に「今後の夏のセールには、必ず連絡してほしい」といわれた時
#
# お客様に「もらいもので気に入らないので他の商品と取り替えて欲しい」といわれた時
#
# 販売員の正しい行動を。

543 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 07:05:19 ]
>>539
使用言語:J

f=:dyad def '(x,0)+0,y'

1 2 3 f 7 8 9
1 9 11 9

544 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 07:14:10 ]
>>481
使用言語:J

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

545 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 07:18:18 ]
>>483 問1
使用言語:J

]COM=: 30?100
95 18 11 58 67 85 60 21 30 10 81 27 47 0 35 75 24 69 23 26 29 98 54 92 40 34 45 52 33 79

546 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 13:29:23 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/369
# [1] 授業単元: プログラム演習�
# [2] 問題文(含コード&リンク):
# 3次元空間において線分が平面を通過しているか判定するプログラムを作りなさい
# (線分の座標(x1,y1,z1) (x2,y2,z2)と平面の四隅の座標は入力する)
# 平面を通過していても平面の四隅の中に交点がない場合は通過していないものとする

547 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 13:30:35 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/362
# ../test/read.cgi/tech/1263824755/361
# ≪問題と条件≫
# 第1引数に指定したファイルからバイナリーモードで1バイトずつファイルを読み込み、
# ファイルの内容を16進数で示したものを第2引数に指定したファイルに書き込むプログラムを作成せよ。ただし、16バイトごとに改行を入れること。
# (実行)
# >free1.exe test.txt test2.txt
#
# でしょ?




548 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 13:35:45 ]
>>545 >>483
使用言語:J
複数の問題だと勘違いしていたのでやり直しました。

read=: 1!:1
write=: 1!:2
f=: monad define
COM=. 30?100
MAN=. y
Work=. 100#0
COM=. I.1(COM)}Work
MAN=. I.1(MAN)}Work
count=. +/MAN e. COM
data=. ,((":COM),(":MAN),:":count),.LF
data write<'result.out'
)
f 5 10 77 85 99 43
read<'result.out'
4 9 12 14 16 20 21 22 23 26 30 31 34 36 37 40 60 61 62 63 65 67 70 77 82 84 92 93 98 99
5 10 43 77 85 99
2

549 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 13:54:12 ]
>>539
% Prolog

ならびをずらして加算(L1,L2,L) :-
  append(L1,[0],L3),
  append([0],L2,L4),
  行列の転置([L3,L4],L5),
  findsum(U,member(U,L5),L).

550 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 13:55:30 ]
>>546>>536 に既出でした。>>536 の方を使ってください。

551 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 14:35:38 ]
>>539
使用言語:R

> f <- function(a,b) c(a,0)+c(0,b)

> f(c(1,2,3),c(7,8,9))
[1] 1 9 11 9

552 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 14:37:21 ]
>>539
使用言語:maxima

(%i3) f(a,b):=endcons(0,a)+cons(0,b);
(%o3) f(a, b) := endcons(0, a) + cons(0, b)
(%i4) f([1,2,3],[7,8,9]);
(%o4) [1, 9, 11, 9]

553 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 14:54:28 ]
>>539
使用言語:Scilab

-->deff('r=f(a,b)','r=[a,0]+[0,b]')

-->f(1:3,7:9)
ans =

1. 9. 11. 9.

554 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 15:54:09 ]
>>547
% Prolog

program :-
  user_parameters([FileIn,FileOut]),
  open(FileIn,read,Input,[type(binary)]),
  open(FileOut,write,Output),
  get_byte(Input,C),
  free1(0,Input,Output,C),
  close(Output),
  close(Input).

free1(_,_,_,-1) :- !.
free1(16,Input,Output,C) :-
  write(Output,'\n'),
  free1(0,Input,Output,C),!.
free1(M,Input,Output,C) :-
  free1(M,Input,Output,C) :-
  N進数(16,C,A),
  write(Output,A),
  get_byte(Input,C2),
  M2 is M + 1,
  free1(M2,Input,Output,C2).

% N進数/3の定義は nojiriko.asia/prolog/j68_493.html 参照

555 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 16:01:21 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/406
# [1] 授業単元:プログラミング応用演習
# [2] 問題文(含コード&リンク): mikilab.doshisha.ac.jp/dia/research/report/2008/1118/002/report20081118002.html
# [5] その他の制限: ライブラリは使わず。問題文のリンク先のプログラム(DIRECT)を組む。
# よろしくお願いします。できれば解説を付けてくださると助かります。

[2]のサイトをコピーすることは困難でした。直接参照してください。

556 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 17:07:57 ]
>>537
% Prolog (その一)
% consult/1,reconsult/1,assertz/1,retract/1,clause/2,listing/1 を最終的に使用します。
% 実務ではもっとずっと丁寧にチェックしながら進みます。ここでは簡単に

住所の登録 :-
  名字は(_名字),
  名前は(_名前),
  郵便番号は(_郵便番号),
  住所は(_住所),
  電話番号は(_電話番号),
  メールアドレスは(_メールアドレス),
  住所の登録((_名字,_名前,_郵便番号,_住所,_電話番号,_メールアドレス),!.

住所の登録(_名字,_名前,_郵便番号,_住所,_電話番号,_メールアドレス) :-
  \+(住所録(_名字,_名前,_郵便番号_1,_住所_1,_電話番号_1,_メールアドレス_1)),
  assertz(住所録(_名字,_名前,_郵便番号,_住所,_電話番号,_メールアドレス)),
  write('登録を完了しました\n'),!.
住所の登録(_名字,_名前,_郵便番号,_住所,_電話番号,_メールアドレス) :-
  住所録(_名字,_名前,_郵便番号_1,_住所_1,_電話番号_1,_メールアドレス_1),
  この氏名は既に登録がありますが(_名字,_名前,_郵便番号_1,_住所_1,_電話番号_1,_メールアドレス_1,_郵便番号,_住所,_電話番号,_メールアドレス),!.

この氏名は既に登録がありますが(_名字,_名前,_郵便番号_1,_住所_1,_電話番号_1,_メールアドレス_1,_郵便番号,_住所,_電話番号,_メールアドレス) :-
  write_formatted('%t %tという氏名は以下の通り既に登録がありますが\n%t %t %t%t %t %t',[_名字,_名前,_名字,_名前,_郵便番号_1,_住所_1,_電話番号_1,_メールアドレス_1]),
  write('別人と考えて登録してよいでしょうか Y or N でお答えください : '),
  get_line(Line),
  この氏名は既に登録がありますが(Line,_名字,_名前,_郵便番号,_住所,_電話番号,_メールアドレス).

557 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 20:23:21 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/409
# [1] C言語演習
# [2]
# int x[10]={-1,2,-3,4,-5,6,-7,8,-9,10}
# int y[10]={-5,-4,-3,-2,-1,1,2,3,4,5}
# が与えられている。
# 値x[0]*y[0]+2*x[1]*y[1]+3*x[2]*y[2]+4*x[3]*y[3]+5*x[4]*y[4]+6*x[5]*y[5]
# が最大/最小になるようにx,yの各要素を並べ替えたものを出力するプログラム




558 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 21:33:56 ]
>>557 の訂正として出されましたが、それぞれ独立の問題としましょう。
pc12.2ch.net/test/read.cgi/tech/1263824755/409
# [1] C言語演習
# [2]
# int x[10]={-1,2,-3,4,-5,6,-7,8,-9,10}
# int y[10]={-5,-4,-3,-2,-1,1,2,3,4,5}
# が与えられている。
# 値x[0]*y[0]-2*x[1]*y[1]+3*x[2]*y[2]-4*x[3]*y[3]+5*x[4]*y[4]-6*x[5]*y[5]+7*x[6]*y[6]-8*x[7}*y[7]+9*x[8]}*y[8]-10*x[9]*x[9]
# が最大/最小になるようにx,yの各要素を並べ替えたものを出力するプログラム


559 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 21:42:32 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/418
# [1] C言語プログラミング演習(大学専門課程選択教科期末課題)
# [2]ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10483
.txt
# 以下のSQL文で定義されるテーブルに対する
# SQL操作をテーブルに対応する適当な構造体配列
# struct_SEISEKIHYOUを定義することにより
# 1関数として実装せよ。
# 関数は
# list(struct_SEISEKIHYOU* table,int N);
# とする。処理効率を十分に考えること。
#
# テーブル定義:
# CREATE TABLE SEISEKIHYOU (
# TANNINN VARCHAR, //担任教師
# NAME VARCHAR,//生徒名
# KOKUGO INTEGER,//国語得点
# SUUGAKU INTEGER//数学得点
# RIKA INTEGER,//理科得点
# SYAKAI INTEGER,//社会得点
# EIGO INTEGER,//英語得点
# )
#


560 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 21:44:36 ]
>>559 問題のつづきです。
#
# SQL操作  SELECTでリストアップされる項目リスト
# をコンソール出力させる。
#
# SELECT X.TANNINN,X.NAME,X.SUUGAKU,X.KOKUGO
# FROM SEISEKIHYOU AS X
# WHERE
# SUUGAKU>=KOKUGO
# AND
# SUUGAKU>=RIKA
# AND
# SUUGAKU>=SYAKAI
# AND
# SUUGAKU>=EIGO
# AND
# (KOKUGO+SUUGAKU+RIKA+SYAKAI+EIGO)/5.0
# >=(SELECT (AVG(KOKUGO)+AVG(SUUGAKU)+AVG(RIKA)
# +AVG(SYAKAI)+AVG(EIGO))/5.0 FROM SEISEKIHYOU
# GROUP BY TANNINN) HAVING COUNT(*)>=
# (SELECT COUNT(*) FROM SEISEKHYOU GROUP BY
# TANNINN HAVING TANNINN=X.TANNNIN)
#
# ORDER BY X.TANNIN,X.NAME,X.SUUGAKU;


561 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 03:12:54 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/420
# [1] 授業単元:プログラミング実践
# [2] 問題文
# アフィン変換のプログラムを作成し、下の図の真ん中を座標の中心にして90°回転した結果を出力せよ。
# (図)affin.txt
# 00000
# 00000
# 11111
# 00000
# 00000
#


562 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 04:30:07 ]
>>538
% Prolog (その一)
program :-
  user_parameters([_ファイル名]),
  'EOFがコントロールZであるファイルの読み込み'(Lines),
  tell(_ファイル名),
  write_formatted('%10s    %4s\n',[名前,年齢]),
  '名前・年齢の行表示'(Lines),
  told.

'EOFがコントロールZであるファイルの読み込み'(Lines) :-
  get_code(Code),
  'EOFがコントロールZであるファイルの読み込み'(Code,Lines),!.

'EOFがコントロールZであるファイルの読み込み'(-1,[]) :- !.
'EOFがコントロールZであるファイルの読み込み'(Code,[[_名前,_年齢]|R]) :-
  'EOFがコントロールZであるファイルの行読み込み'(Code,RCode,Codes),
  atom_codes(Line,Codes),
split(Line,[' ',','],[_名前,_年齢]),
  'EOFがコントロールZであるファイルの読み込み'(RCode,R).

'EOFがコントロールZであるファイルの行読み込み'(-1,-1,[]) :- !.
'EOFがコントロールZであるファイルの行読み込み'(26,-1,[]) :- !.
'EOFがコントロールZであるファイルの行読み込み'(10,Code2,[]) :-
  ひとつ先読みが同時に終了ステータスにもなる(Code2),!.
'EOFがコントロールZであるファイルの行読み込み'(Code1,RCode,[Code1|R]) :-
  get_code(Code2),
  'EOFがコントロールZであるファイルの行読み込み'(Code2,RCode,R).


563 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 04:31:08 ]
>>538
% Prolog (その二)

ひとつ先読みが同時に終了ステータスにもなる(Code2) :- get_code(Code2),!.

名前・年齢の行表示([]) :- !.
名前・年齢の行表示([[_名前,_年齢]|R]) :-
  write_formatted('%12s%t\n',[_名前,_年齢]),
  名前・年齢の行表示(R).

564 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 04:32:07 ]
> EOFがコントロールZであるファイルの読み込み
w

565 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 04:36:16 ]
>>564
やれやれww

566 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 04:53:35 ]
pc12.2ch.net/test/read.cgi/tech/1262163854/556
# こんばんは.失礼します.
# 現在,次のような課題に取り組んでいます.
# もしよろしければこの難問をハックしていただけないでしょうか.
# (できればCで・・・)
#
# N個の要素があり,その,すべての組み合わせ(2^N組)に対して,
# それぞれに値が決まっているものとします.
# そして,ある組み合わせの値は,その組み合わせの中の部分集合の
# どんな和よりも大きいです.
#
# また0個の集合では値は0とします.
#
# こうした場合に,全ての組み合わせの値を以上のルールに則ったまま
# 乱数を用いて決定したいと考えています.
#
# 具体的には
# 要素が一つの組み合わせは乱数.たとえばAのみの集合の場合 v(A)=random
# 要素が2つでは,v(A,B)=v(A)+v(B) + random
# 3つでは,v(A,B,C) = max(v(A,B)+v(C), v(B,C)+v(A), v(C,A)+v(B)) + random
# となります.
#
# この方式で,全ての組み合わせに値を当てはめることを考えているのですが
# コードに落とし込むことが出来ません.


567 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 04:56:05 ]
>>566 つづき
# 今のところ,各組み合わせを以下のような二進数で表そうと考えています.(N=3の場
合)
# 各行の一列目が1はAがその組み合わせにいることを意味し,
# 二列目はB,三列目はCを表しています.
#
# ABC V
# 000 0
# 001 rc
# 010 rb
# 011 ?
# 100 ra
# 101 ?
# 110 ?
# 111 ?
#





568 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 08:08:22 ]
>>495
使用言語:J

f=: monad define
l=.(#y)-2
t=.(l,l)$ ucp' '
g=.}.}:y
y,(|:g),t,|.g),|.y
)

f ucp'今日は、晴れです。'
今日は、晴れです。
日       す
は       で
、       れ
晴       晴
れ       、
で       は
す       日
。すでれ晴、は日今

569 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 09:37:53 ]
>>559
% Prolog

'SQL操作に対応する述語定義'(X) :-
  findall([TANNINN,NAME,SUGAKU,KOKUGO],
  (
    findall(TANNINN,'SEISEKIHYOU'(TANNINN,_,_,_,_,_,_),L1),sort(L1,L2),
    'SEISEKIHYOU'(TANNINN,NAME,KOKUGO,SUUGAKU,RIKA,SYAKAI,EIGO),
    SUUGAKU>=KOKUGO,SUUGAKU >= RIKA,SUUGAKU>=SYAKAI,SUUGAKU>=EIGO,
    U1 is (KOKUGO+SUUGAKU+RIKA+SYAKAI+EIGO)/5.0,
    findall(AVGs,(member(TANNINN2,L2),findavg([KOKUGO2,SUUGAKU2,RIKA2,SYAKAI2,EIGO2],'SEISEKIHYOU'(TANNINN2,NAME2,KOKUGO2,SUUGAKU2,RIKA2,SYAKAI2,EIGO2),AVGs)),L3),
    sum(L3,SUM1),
    U2 is SUM1 / 5.0,
    U1 >= U2,
    findavg(KOKUGO3,('SEISEKIHYOU'(TANNINN,_,KOKUGO3,_,_,_,_),KOKUGOAVG),
    KOKUGO > AVGKOKUGO)
  ),L4),
  sort(L4,L5),
  member(X,L5).

570 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 11:14:43 ]
>>496
使用言語:J

f=: monad define
t=.<;._2 y
for_i. i.#t do.
smoutput (":>:i),':',":|.;i{t
end.
)
read=: 1!:1

f ucp read <'test2.txt'
1:で雨、は日昨。すでれ晴、は日今
2:後明。うょしで曇、は日明。たし
3:。かうょしで晴快、は日

571 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 11:18:26 ]
>>556
何をいっているのかわからないので元スレを覗いてきます。

572 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 11:24:32 ]
>>571
すみません。>>556ではなく>>566でした。
元スレでも質問者が問題を理解していないだろうと指摘されていました。

573 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 12:01:03 ]
>>542
% Prolog 例えばこんな具合に書き進める。これからが大変。

販売員の正しい行動(_お客様,_お客様の要求,_販売員の正しい行動) :-
  お客様の要求の要約(_お客様,_お客様の要求,_お客様の要求の要約),
  お客様の要求の要約から販売員の正しい行動を考える(_お客様の要求の要約,_販売員の正しい行動).

お客様の要求の要約(_お客様,_お客様の要求,_お客様の要求の要約) :-
  お客様がどんな方か明確にする(_お客様,_お客様の情報),
  お客様が関心をお持ちの分野を明確にする(_お客様,_お客様の情報,_お客様が関心をお持ちの分野),
  お客様の情報を解析して要求を要約する(_お客様,_お客様の要求,_お客様の情報,_お客様が関心をお持ちの分野,_お客様の要求の要約).

お客様がどんな方か明確にする(_お客様,_お客様の情報) :- 顧客情報(_お客様,_お客様の情報).

お客様が関心をお持ちの分野を明確にする(_お客様,_お客様の情報,_お客様が関心をお持ちの分野) :-
  購買情報(_お客様,_過去の購買情報ならび,_過去のクレームならび),
  関心のある分野診断(_お客様,_過去の購買情報ならび,_過去のクレームならび,_お客様が関心をお持ちの分野).

お客様の情報を解析して要求を要約する(_お客様,_お客様の要求,_お客様の情報,_お客様が関心をお持ちの分野,_お客様の要求の要約) :-
  句構造解析(_お客様の要求,_解析された句構造),
  句構造からキーワードを拾い出して意味を推定する(_解析された句構造,_キーワードならび,_お客様の要求の要約).

574 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 12:23:19 ]
>>497
使用言語:J

f=: monad define
t=:<;._2 y
for_i. i.#t do.
s=.;i{t
w=.":#cutopen s
smoutput (":>:i),':',":s
smoutput '=>',(":#s),'文字、',w,'ワード'
end.
)

read=: 1!:1

f read<'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ワード

575 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 14:05:25 ]
>>498
使用言語:J

f=: monad define
'M D'=.y
t=.0 0 31 59 90 120 151 181 212 243 273 304 334
w=.ucp'木金土日月火水'
a=.(7|(M{t)+D){w
smoutput (":M),(ucp'月'),(":D),(ucp'日は、'),a,ucp'曜日です。'
)

f 9 15
9月15日は、水曜日です。

576 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 17:22:34 ]
>>510
使用言語:J

f=: dyad def ';,|:(;/x),:;/y'

'asdfgh' f '123'
a1s2d3fgh

577 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 17:27:22 ]
>>512
使用言語:J

test2=: dyad def 'y-:~.x'
'abccba' test2 'abc'
1
'abcbc' test2 'cba'
0



578 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 18:11:22 ]
pc12.2ch.net/test/read.cgi/tech/1248012902/827
# 【 課題 】 ime.nu/rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/918.txt
# 課題1
# ラーメンをオブジェクト指向で表現。
# 3種類程度のラーメンが表現できるようにする。
# フィールド、メソッド、オーバーロード、オーバーライド、カプセル化(他クラスからのアクセスはgetメソッドとsetメソッドのみ)が確実に表現されていること。
#
# 実行は以下のクラスから呼び出される
# class RamenExample{
# public static void main(String [] args){
# Ramen shouyuRamen = new Ramen("しょうゆ");
# Ramen misoRamen = new Ramen("みそ");
# Ramen shioRamen = new Ramen("しお");
# }
# }
#
# また、以下のクラスは生成が条件
# class Ramen{ }
# class Utsuwa{ }
# class Soup{ }
# class Pasta{ }
# class Topping{ }


579 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 18:14:12 ]
pc12.2ch.net/test/read.cgi/tech/1248012902/827
# 【 課題 】 ime.nu/rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/918.txt
# 課題2
# 以下の、お金をうけとり、おつりを計算するプログラムをつくりなさい。
#
# ここから、よくわからなくなりました。
# たとえば、6200円の買い物をして、7000円受とると、100円を8枚って計算したいです。
#


580 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 21:11:17 ]
>>579
% Prolog (その一)

金種計算(0,_,[]) :- !.
金種計算(_おつり残高,[],[]) :- _おつり残高 > 0,write('レジ不足です\n'),!,fail.
金種計算(_おつり残高,[_金種|R1],[(_金種,B)|R2]) :-
  _おつり残高 >= _金種,
  金種が足りる(_おつり残高,_金種,N,B),
  _残り金額 is _おつり残高 mod _金種,
  金種計算(_残り金額,R1,R2).
金種計算(_おつり残高,[_金種|R1],[(_金種,N)|R2]) :-
  _おつり残高 >= _金種,
  金種が足りない(_おつり残高,_金種,N,B),
  _残り金額 is _おつり残高 - _金種 * N,
  金種計算(_残り金額,R1,R2).
金種計算(_おつり残高,[_金種|R1],R2) :-
  _おつり残高 >= _金種,
  \+(レジの中(_金種,N)),
  金種計算(_おつり残高,R1,R2).
金種計算(_おつり残高,[_金種|R1],R2) :-
  _おつり残高 < _金種,
  金種計算(_おつり残高,R1,R2).

金種が足りる(_おつり残高,_金種,N,B) :-
  レジの中(_金種,N),
  B is _おつり残高 // _金種,
  N >= B,!.
金種が足りない(_おつり残高,_金種,N,B) :-
  レジの中(_金種,N),
  B is _おつり残高 // _金種,
  N < B,!.

581 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 03:21:11 ]
>>579 (その二)
% Prolog こちらがトップレベル >>580 はレジの中身を更新するのを忘れている

おつりの計算(_お買い上げ金額,_うけとったお金,_金種) :-
  _受け取ったお金 > _お買い上げ金額,
  _おつり is _うけとったお金 - _お買い上げ金額,
  金種計算(_おつり,[10000,5000,2000,1000,500,100,50,10,5,1],_金種).


582 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 03:25:18 ]
>>580 >>581
一般に、給料計算の一部に金種計算が現れる場合は、銀行がその金種を
用意するものと考えられるから、レジの中身についての考慮は必要ないが、
おつりの場合はレジの内容が計算を主導する。

583 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 05:26:20 ]
>>225
% Prolog (その一)
'0から10の中からランダムに整数の2組を決める。それを平面上の座標と、座標を10個つくる。'(_10個の座標点ならび) :-
  '座標を10個つくる。'(1,_10個の座標点ならび).

座標を10個つくる。'(N,[]) :- N > 10,!.
座標を10個つくる。'(N,[[X,Y]|R]) :-
  '0から10の中からランダムに整数の2組を決める。'(X,Y),
  N2 is N + 1,
  座標を10個つくる。'(N2,R).

'0から10の中からランダムに整数の2組を決める。'(X,Y) :- X is random mod 9,Yis random mod 9.

ユーザに座標を入力させ、その点から最も遠い点と近い点を求める。(_10個の座標点ならび,X,Y,_最も遠い点,_最も近い点) :-
  ユーザに座標を入力させ、(X,Y),
  その点から最も遠い点と近い点を求める(_10個の座標点ならび,X,Y,_最も遠い点のX座標,_最も遠い点のY座標,_最も近い点のX座標,_最も近い点のY座標),
  ユーザ座標と10個の座標点の表示(_10個の座標点ならび,X,Y,_最も遠い点のX座標,_最も遠い点のY座標,_最も近い点のX座標,_最も近い点のY座標).

ユーザに座標を入力させ、(X,Y) :-
  催促付き整数入力('X座標を入力してください :',X),
  催促付き整数入力('Y座標を入力してください :',Y),!.

その点から最も遠い点と近い点を求める。(_10個の座標点ならび,X,Y,_最も遠い点のX座標,_最も遠い点のY座標,_最も近い点のX座標,_最も近い点のY座標) :-
  ユーザの入力点からの距離ならびを得る(_10個の座標点ならび,X,Y,_ユーザの入力点からの距離ならび),
  ユーザの入力座標から最も遠い点を得る(_ユーザの入力点からの距離ならび,X,Y,_最も遠い点X座標,_最も遠い点Y座標),
  ユーザの入力座標から最も近い点を得る(_ユーザの入力点からの距離ならび,X,Y,_最も近い点X座標,_最も近い点Y座標),!.


584 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 06:20:55 ]
>>225
% prolog (その二)

ユーザの入力点からの距離ならびを得る([],_,_,[]) :- !.
ユーザの入力点からの距離ならびを得る([[X1,Y1]|R1],X,Y,[[_距離,X1,Y1]|R2]) :-
  _距離 is sqrt(((Y1-Y)^2 + (X1-X)^2)),
  ユーザの入力点からの距離ならびを得る(R1,X,Y,R2).

ユーザの入力座標から最も遠い点を得る(_ユーザの入力点からの距離ならび,X,Y,_最も遠い点X座標,_最も遠い点Y座標) :-
  findmax(L,member(L,_ユーザの入力点からの距離ならび),[_最も遠い距離,_最も遠い点X座標,_最も遠い点Y座標]).
ユーザの入力座標から最も近い点を得る(_ユーザの入力点からの距離ならび,X,Y,_最も近い点X座標,_最も近い点Y座標) :-
  findmin(L,member(L,_ユーザの入力点からの距離ならび),[_最も近い距離,_最も近い点X座標,_最も近い点Y座標]).

ユーザ座標と10個の座標点の表示(_10個の座標点ならび,X,Y,_最も遠い点のX座標,_最も遠い点のY座標,_最も近い点のX座標,_最も近い点のY座標) :-
  ユーザ座標と10個の座標点の表示(0,0,_10個の座標点ならび,X,Y,_最も遠い点のX座標,_最も遠い点のY座標,_最も近い点のX座標,_最も近い点のY座標).

ユーザ座標と10個の座標点の表示(M,N,_10個の座標点ならび,X,Y,_最も遠い点のX座標,_最も遠い点のY座標,_最も近い点のX座標,_最も近い点のY座標) :- N > 9,!.
ユーザ座標と10個の座標点の表示(M,N,_10個の座標点ならび,X,Y,_最も遠い点のX座標,_最も遠い点のY座標,_最も近い点のX座標,_最も近い点のY座標) :-
  M > 9,N2 is N + 1,wr('\n'),
  ユーザ座標と10個の座標点の表示(0,N2,_10個の座標点ならび,X,Y,_最も遠い点のX座標,_最も遠い点のY座標,_最も近い点のX座標,_最も近い点のY座標),!.
ユーザ座標と10個の座標点の表示(M,N,_10個の座標点ならび,X,Y,_最も遠い点のX座標,_最も遠い点のY座標,_最も近い点のX座標,_最も近い点のY座標) :-
  座標点表示(M,N,_10個の座標点ならび,X,Y,_最も遠い点のX座標,_最も遠い点のY座標,_最も近い点のX座標,_最も近い点のY座標),
  M2 is M + 1,
  ユーザ座標と10個の座標点の表示(M,N2,_10個の座標点ならび,X,Y,_最も遠い点のX座標,_最も遠い点のY座標,_最も近い点のX座標,_最も近い点のY座標).



585 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 06:23:40 ]
>>225
% Prolog (その三)

座標点表示(X,Y,_,X,Y,_,_,X,Y) :- write('◎'),!.
座標点表示(X,Y,_,X,Y,_,_,_,_) :- write('×'),!.
座標点表示(_最も遠い点のX座標,_最も遠い点のY座標,_,_,_,_最も遠い点のX座標,_最も遠い点のY座標,_,_) :- write('●'),!.
座標点表示(_最も近い点のX座標,_最も近い点のY座標,_,_,_,_,_,_最も近い点のX座標,_最も近い点のY座標) :- write('○'),!.
座標点表示(M,N,_10個の座標点ならび,_,_,_,_,_,_) :- member([M,N],10個の座標点ならび),write('△'),!.
座標点表示(_,_,_,_,_,_,_,_,_) :- write(' '),!.

586 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 06:38:51 ]
>>227
% Prolog

program :-
  user_parameters([A,B]),
  atom_to_term(A,_実数1,_),
  atom_to_term(B,_実数2,_),
  sasho(_実数1,_実数2,_差,_商,_診断),
  program_1(_差,_商,_診断),!.

sasho(_実数1,_実数2,_差,_商,0) :-
  (_実数2 = 0.0;_実数=0),
  _差 is _実数1 - _実数2,!.
sasho(_実数1,_実数2,_差,_商,1) :-
  \+(_実数2 = 0.0),
  \+(_実数=0),
  _差 is _実数1 - _実数2,
  _商 is _実数1 / _実数2,!.

program_1(_差,_商,0) :- write_formatted('%t',[_差]),!.
program_1(_差,_商,1) :- write_formatted('%t,%t',[_差,_商]),!.

587 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 06:42:17 ]
>>227 訂正
% Prolog 除数検査の中で _実数2 とするべきところを _実数 としていたものがある。

program :-
  user_parameters([A,B]),
  atom_to_term(A,_実数1,_),
  atom_to_term(B,_実数2,_),
  sasho(_実数1,_実数2,_差,_商,_診断),
  program_1(_差,_商,_診断),!.

sasho(_実数1,_実数2,_差,_商,0) :-
  (_実数2 = 0.0;_実数2=0),
  _差 is _実数1 - _実数2,!.
sasho(_実数1,_実数2,_差,_商,1) :-
  \+(_実数2 = 0.0),
  \+(_実数2=0),
  _差 is _実数1 - _実数2,
  _商 is _実数1 / _実数2,!.

program_1(_差,_商,0) :- write_formatted('%t',[_差]),!.
program_1(_差,_商,1) :- write_formatted('%t,%t',[_差,_商]),!.



588 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 07:36:27 ]
pc12.2ch.net/test/read.cgi/tech/1197620454/586
# 問題こちら↓
# 階乗 n! を計算する関数を作成し,
# 順列
#  n個の異なるものからr個取り出して並べる。
#  このときの順列の総数をnPrとあらわす。
#  nPr=n(n-1)(n-2)・・・(n-r+1)
# を計算する関数を作成し,
#
# 組み合わせ
#  異なるn個からr個取り出して組を作る。
#  このときの組合せの総数をnCrとあらわす。
#  nCr = nPr/r!
#
# を計算するプログラムを作成してください。できればFORTRANで。

589 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 08:27:50 ]
>>588
% Prolog

nPr(N,R,X) :-
  U is N - R + 1,
  階乗(U,N,X).

nCr(N,R,X) :-
  U is N - R + 1,
  階乗(U,N,K1),
  階乗(R,K2),
  X is K1 // K2 .

階乗(M,N,1) :- M > N,!.
階乗(M,N,X) :-
  M2 is M + 1,
  階乗(M2,N,Y),
  X is M * Y.

階乗(0,1) :- !.
階乗(1,1) :- !.
階乗(N,X) :-
  N2 is N - 1,
  階乗(N2,Y),
  X is N * Y,
  asserta((階乗(N,X) :- (!))) .

590 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 16:35:57 ]
>>211
% Prolog
nojiriko.asia/prolog/c133_678.html


591 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 16:51:15 ]
>>216
% Prolog

search(Text,Pat,Start) :-
  sub_atom(Text,Start,_,_,Pat),!.
search(_,_,-1).

search(Start) :-
  write('Text :'),get_line(Text),
  write('Pat :'),get_line(Pat),
  search(Text,Pat,Start),!.

592 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 17:45:56 ]
>>214
% Prolog

述語数値を第二引数が昇順になるように定義し直す。その際追番を1から振り直す :-
  findall(_値,数値(_,_値),L1),
  quicksort(L1,L2),
  abolish(数値/2),
  述語数値を第二引数が昇順になるように定義し直す。その際追番を1から振り直す(1,L2).

述語数値を第二引数が昇順になるように定義し直す。その際追番を1から振り直す(_,[]) :- !.
述語数値を第二引数が昇順になるように定義し直す。その際追番を1から振り直す(M,[N|R]) :-
  assertz(数値(M,N)),
  M2 is M + 1,
  述語数値を第二引数が昇順になるように定義し直す。その際追番を1から振り直す(M2,R).


593 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 18:33:33 ]
>>530
使用言語:J

op=:a:,;/'+-'
a=:,;&.>,{(<a:,<'-')0},(<op),.<&.>":L:0;/>:i.9
;"1,.&(<'=100'),.a{~I.(<100)=".&.>a

123+45-67-8-9=100
123+4-5-67-89=100
123-45+67-89=100
123-4+5+6+7-8-9=100
12+3+4+5-6+7-89=100
12+3-4-5+67+8+9=100
12-3+4-5-6-7+89=100
1+23-4-56+7+8+9=100
1+23-4-5+6+78-9=100
1+2+34-5-67-8-9=100
1+2+3-4-5+6+78+9=100
-1-2-3-4+5+6+78+9=100

594 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 21:30:57 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/451
# [1] 授業単元:情報処理入門
# [2] 問題文(含コード&リンク):
# rep1.ppmとrep2.ppmの2つの画像を加算するプログラムを作成せよ.
# プログラム中で加算したデータは,コントラスト強調を行った上で
# PPM画像ファイル(h12r.ppm)として保存するようにすること.
# Cのソースファイルh12r.cおよび実行することにより作成
# される画像ファイルを提出すること.rep1.ppmとrep2.ppmの
# サイズはいずれも横124×縦124画素である.h12r.ppmのサイズも同じとする.
#
# rep1.ppm
# ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10487.zip
# rep2.ppm
# ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10488.zip

595 名前:デフォルトの名無しさん [2010/02/04(木) 00:50:42 ]
優勝賞金500万円

www.jaist.ac.jp/ICGA-events-2010/olympiad/

1989年にロンドンで第1回目のコンピュータオリンピアードが開催されました。
毎年開催される本イベントでは,コンピュータゲームプレイヤー同士が競技し,世界最高位を決定します。
これまでの優勝者には,Neurogammon(バックギャモン, 1989年), Chinook (チェッカー, 1989年および1990年) そして Tacos(将棋, 2005年, 2006年, 2008年, 2009年)などがあります。
コンピュータオリンピアードは国際コンピュータゲーム協会(ICGA)が主催して実施されています。

競技部門には,アマゾン,バックギャモン,ブリッジ,コンピュータプール,六目並べ,象棋,ドッツアンドボックス,国際ドローツ,囲碁,9路盤囲碁,ヘックス,ハバナ,ラインズオブアクション,
将棋,スラカルタなどがあります。

この他のゲームもコンピュータによる競技会を開催する可能性があります。主催者までコンタクトしてください。
2010年に第15回目となるコンピュータオリンピアードは金沢市内で開催されます。
ICGAとJAISTとの共同イベントとして9月25日から10月2日にかけて金沢市内で開催されます。
各競技の日程は後日決定します。
参加申し込みなどの詳細も後日お知らせ致します。

596 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 06:08:29 ]
>>595
% Prolog
コンピュータオリンピアード(優勝賞金,500万円).
コンピュータオリンピアード('URL','www.jaist.ac.jp/ICGA-events-2010/olympiad/').
コンピュータオリンピアード(歴史,第1回目,ロンドン,1989).
コンピュータオリンピアード(開催,毎年).
コンピュータオリンピアード(主催,'国際コンピュータゲーム協会(ICGA)').
コンピュータオリンピアード(出場者,コンピュータゲームプレイヤー同士).
コンピュータオリンピアード(競技部門,アマゾン).
コンピュータオリンピアード(競技部門,バックギャモン).
コンピュータオリンピアード(競技部門,ブリッジ).
コンピュータオリンピアード(競技部門,コンピュータプール).
コンピュータオリンピアード(競技部門,六目並べ).
コンピュータオリンピアード(競技部門,象棋).
コンピュータオリンピアード(競技部門,ドッツアンドボックス).
コンピュータオリンピアード(競技部門,国際ドローツ).
コンピュータオリンピアード(競技部門,囲碁).
コンピュータオリンピアード(競技部門,'9路盤囲碁').
コンピュータオリンピアード(競技部門,ヘックス).
コンピュータオリンピアード(競技部門,ハバナ).
コンピュータオリンピアード(競技部門,ラインズオブアクション).
コンピュータオリンピアード(競技部門,X) :- 新しい競技種目になる(X).
コンピュータオリンピアード(開催予定,第15回,金沢市内,'2010年','自9月25日','至10月2日').
コンピュータオリンピアード(第15回大会開催形態,共同エベント).
コンピュータオリンピアード(第15回大会共同エベント,主催,'ICGA').
コンピュータオリンピアード(第15回大会共同エベント,主催,'JAIST').
コンピュータオリンピアード(第15回大会,競技日程,後日決定).
コンピュータオリンピアード(参加申し込みなどの詳細,後日お知らせ致します).

597 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 06:28:59 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/455
# [1] 授業単元: アルゴリズム
# [2] 問題文(含コード&リンク):課題2−2と2−3です。
# 課題2-2
# コマンドライン引数で入力される任意個の実数を,malloc関数で動的に確保した配列に 格納するように,kadai2_1.c を修正したプログラム kadai2_2.c を作成せよ.
#
# 実行例は課題2-1と同じ.
# --------------------------------------------------------------------------------
# 課題2-3
# コマンドライン引数で入力される任意個の実数に対し,整数部(integer part)と小数部(fractional part)に分割し,実行例のように出力するプログラム kadai2_3.c を作成せよ.ただし,以下の仕様を満足すること.
#
# 実数値,整数部,小数部をメンバにもつ構造体を定義し,構造体の配列として利用すること.
# 構造体の配列は,malloc関数を利用して動的に確保すること.
# 整数部,小数部の分割および構造体メンバへの格納は,dividePart関数を定義して利用すること.
# 構造体配列の内容を実行例のように出力する printData関数を定義して利用すること.
# 構造体配列の内容もとに整数部の合計,小数部の合計,実数値の合計を出力する printSum関数を定義して利用すること.



598 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 06:36:09 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/456
# [1] 授業単元: データ演習
# [2] 問題文(含コード&リンク):
# できなかった問題は11−1です。
# 課題10−1を使う問題なので、できている10−1のソースコードを一緒に入れています。
# どなたか、よろしくお願いします。
# 課題10-1
# コマンドライン引数で指定される整数列を順番に二分探索木に登録し,キーボードから入力される値を探索するプログラム kadai10_1.c を作成せよ.
# また,最初に inorderで木をなぞった結果を示せ.
#
# 課題10−1に番兵を導入したプログラム kadai11_1.c を作成せよ.
#
# ヒント:番兵用に1個のノードを定義し,ノードのNULLポインタが番兵を指すようにすればよい.
# 挿入関数と探索関数,inorder, main関数を変更すればよい.挿入時の挿入ノードを決める操作も番兵を使えばよい.
# その際,初期状態として,rootが番兵を指す状態から開始する必要がある.

599 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 06:38:48 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/459
# [1] 授業単元:プログラミング実践
# [2] 問題文
# アフィン変換のプログラムを作成し、下の図の真ん中を座標の中心にして60°左回転した結果を出力せよ。
# (図)affin.txt
# 000000000
# 000010000
# 000010000
# 000010000
# 011111110
# 000010000
# 000010000
# 000010000
# 000000000
#


600 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 07:45:56 ]
>>597
% Prolog

program :-
  user_parameters(L),
  dividePart(L,L1),
  assertz('>>597 構造体'(L1)).

dividePart([],[]) :- !.
dividePart([A|R1],[(整数部(_整数部),小数部(_小数部),(実数値(_実数値))|R2]) :-
  atom_to_term(A,_実数値,_),
  _整数部 is float_integer_part(_実数値),
  _小数部 is float_fractional_part(_実数値),
  dividePart(R1,R2).

printData :-
  '>>597 構造体'(L),
  printSum(L,0.0,0.0,0.0).

printSum([],_整数部の合計,_小数部の合計,_実数値の合計) :-
  write_formatted('整数部の合計=%t,小数部の合計=%t,実数値の合計=%t\n',[_整数部の合計,_小数部の合計,_実数値の合計]),!.
printSum((整数部(_整数部),小数部(_小数部),(実数値(_実数値))|R1],_整数部の合計1,_小数部の合計1,_実数値の合計1) :-
  _整数部の合計2 is _整数部 + _整数部の合計1,
  _整数部の合計2 is _小数部 + _小数部の合計1,
  _実数値の合計2 is _実数値 + _実数値の合計1,
  printSum(R1,_整数部の合計2,_小数部の合計2,_実数値の合計2).

601 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 07:52:16 ]
>>596 の二節を訂正します
% Prolog

コンピュータオリンピアード(競技部門,X) :- 新しい競技種目になる(X).
=>
コンピュータオリンピアード(競技部門,X) :-
  コンピュータオリンピアード(新しい競技種目になる,X).


コンピュータオリンピアード(開催予定,第15回,金沢市内,'2010年','自9月25日','至10月2日').
=>
コンピュータオリンピアード(開催予定,第15回,金沢市内,'自2010年9月25日','至2010年10月2日').

下は原文のニュアンスから少し遠くなりますが。
'9月25日'-'10月2日'のような構造を持ったデータを持ってきたくないんです。

602 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 08:02:08 ]
>>601
それなら、

コンピュータオリンピアード(開催予定,第15回,金沢市内,'2010年').
コンピュータオリンピアード('第15回',開催日時,'9月25日から10月2日まで').

の方がいいのでは。
文の解析を残すのがいいかどうかというところだね。


603 名前:602 mailto:sage [2010/02/04(木) 08:07:27 ]
コンピュータオリンピアードを述語に持って来ているということは、
これがクラスという意識が多少はあるのかな?


604 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 08:32:44 ]
>>602
コンピュータオリンピアード('第15回',開催予定日,'9月25日から10月2日まで').
ですか。
「9月25日から10月2日まで」に比べて「9月25日から10月2日にかけて」は
ふくらみがありますね。こういう部分の表現は自然言語に敵わない。
いや、自然言語は大袈裟で単に「掛かる」という言葉のふくらみかな。

>>603
検索の都合もあるw ゼネラルデータベースのように特権的なテーブルとか
述語を持たない系は魅力がありますが、現実には大変でしょう。しかしまあ、
アナーキズムも再評価されているようですから、わからないですよね。

605 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 09:15:50 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/465
# [2] CIP法での1次元の移流計算
#
# 自分で以下のプログラムを作ったところ。
# kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10493.txt
# tの値を増やすにつれてf[n][t]のnの初期のほうの値がなぜかでかい数字が出てしまいます。
# 自分の計算ではtの値を増やせば、f[n][t]のnの初期のほうの値は0になると思うんですが、一体どこが悪いのか、ご教授をお願いいたします。

606 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 13:20:04 ]
pc12.2ch.net/test/read.cgi/tech/1153585095/340
# 【 課題 】
# 次の要求を満たすフィルタプログラムを作れ。
# 1.標準入力から行を読み込み、空白をカンマに変換し、標準出力に出力する
# 2.連続した複数の空白はひとつの空白と同じと見なす
# 3.タブ文字も空白と見なす
# 4.オプション等は設けない
# 5.フィルタとして動作するので余分なメッセージ類は一切出力しない
#
# 例として「1 Bill  1955 Oct 28」と入力したら「1,Bill,1955,Oct,28」と出力されるようにします。

607 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 17:11:30 ]
>>606
% Prolog (その一) 例で ","の後に空白が一つ入っているのは誤りだと思う。

program :-
  repeat,
  標準入力から行を読み込み(_行),
  空白をカンマに変換し、標準出力に出力する(_行).

空白をカンマに変換し、標準出力に出力する(end_of_file) :- !.
空白をカンマに変換し、標準出力に出力する(_行) :-
  空白をカンマに変換し、(_行,_変換された行),
  標準出力に出力する(_変換された行),
  fail.

標準入力から行を読み込み(_行) :-
  get_line(_行).

空白をカンマに変換し、(_行,_変換された行) :-
  atom_chars(_行,Chars),
  文字ならびの空白をカンマに変換(Chars,Chars2),
  atom_chars(_変換された行,Chars2).

文字ならびの空白をカンマに変換([],[]) :- !.
文字ならびの空白をカンマに変換(L,[',']) :- 空白またはタブならび(L),!.
文字ならびの空白をカンマに変換(L1,[',',A|R2]) :-
  append(L0,[A|R3],L1),
  \+(A=' '),\+(A='\t'),
  空白またはタブならび(L0),
  文字ならびの空白をカンマに変換(R3,R2),!.
文字ならびの空白をカンマに変換([A|R1],[A|R2]) :-
  文字ならびの空白をカンマに変換(R1,R2),!.



608 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 17:13:11 ]
>>606
% Prolog (その二)

空白またはタブならび([' ']) :- !.
空白またはタブならび(['\t']) :- !.
空白またはタブならび([' '|R]) :-
  空白またはタブならび(R),!.
空白またはタブならび(['\t'|R]) :-
  空白またはタブならび(R),!.

標準出力に出力する(_行) :- write_formatted('%t\n',[_行]).

609 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 17:18:29 ]
pc12.2ch.net/test/read.cgi/tech/1260922392/27
# 微分方程式の境界値問題
#
# y''(x) = f(y(x)), 0<x<1, y(0)=y(1)=0
#
# の解を数値的に求める方法のひとつとして、射的法(shooting method)
# があります。自然数nを与えて、区間[0,1]をn等分して、ykをy(k/n)
# の近似式として、漸化式(ここから下のyの後ろのカッコの中身は添え字と思え)
# y(0) = 0, y(1)= t,
# y(k+1) = 2y(k) - y(k-1) + 1/n²f(y(k)), k=1,2,…,2n-1,
# の解の数値的y(n)=0 を満たすものを、上の問題の近似解として求める方法です。
# yn=0となる数列を求めるために、ynを未知パラメータtの関数とみなして、tに関する二分法を使います。
#
# 正の実数aを適当に定めて、
# f(y) = ay(1 - y)
# の場合の近似解y(k)を、誤差10-6の範囲で求めるプログラムを作成してください。
# 自然数nは適当に決めてください。(2のベキ乗にするのが無難です)
# 実数あの値は、とりあえず20にしてみてください。
# (注意:a≧10でないと…)

610 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 18:24:04 ]
>>52

音通(恨み,浦見).
音通(恨み,裏見).

この系統は根深い。


611 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 20:58:20 ]
>>515
使用言語:J

g=:(0=3&|)+.(3 e. 10&#.inv)
f=:[:;{&('NO';'YES')

f g 11
NO
f g 12
YES
f g 13
YES

612 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 06:06:05 ]
>>206
% Prolog (その一)

自分で五つの問題文を入力して練習するタイピング練習ソフト :-
  自分で五つの問題文を入力して(1,_五つの問題文),
  問題文は入力した五つの中から10題がランダムに出題される(1,_五つの問題文,_問題文ならび),
  タイプ練習(_問題文ならび,_正解数),
  write_formatted('正解数は%tです\n',[_正解数]).

自分で五つの問題文を入力して(N,[]) :- N > 5,!.
自分で五つの問題文を入力して(N,[_問題文|R]) :-
  問題文を入力して(_問題文1),
  問題文の長さを調整する(_問題文1,_問題文),
  N2 is N + 1,
  自分で五つの問題文を入力して(N2,R).
 
問題文を入力して(_問題文) :- write_formatted('%tつ目の問題文 :',[N]),get_line(問題文),!.

問題文の長さを調整する(_問題文,_問題文) :-
  sub_atom(_問題文,0,_長さ,_,_問題文),
  _長さ =< 20,!.
問題文の長さを調整する(_問題文1,_問題文) :-
  sub_atom(_問題文1,0,20,_,_問題文).


613 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 06:07:07 ]
>>206
% Prolog (その二)

問題文は入力した五つの中から10題がランダムに出題される(N,_,[]) :- N > 10,!.
問題文は入力した五つの中から10題がランダムに出題される(N,_問題集,[_問題|R]) :-
  M is (random mod 5) + 1,
  list_nth(M,_問題集,_問題),
  N2 is N + 1,
  問題文は入力した五つの中から10題がランダムに出題される(N2,_問題集,R).

タイプ練習([],0) :- !.
タイプ練習([_問題文|R],_正解数) :-
  write_formatted('%t\n',[_問題文]),get_line(Line),
  _問題文 = Line,
  タイプ練習(R,_正解数2),
  _正解数 is _正解数2 + 1,!.
タイプ練習([_|R],_正解数) :- タイプ練習(R,_正解数).

614 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 06:28:08 ]
>>212
% Prolog

'2つの名前を入力しステータス(ランダム)を決定し 勝敗表示する' :-
  '2つの名前を入力し'(_名前1,_名前2),
  'ステータス(ランダム)を決定し'(_名前1のステータス,_名前2のステータス),
  勝負表示する(_名前1,_名前2,_名前1のステータス,_名前2のステータス),!.

'ステータス(ランダム)を決定し'(_名前1のステータス,_名前2のステータス) :-
  _名前1のステータス is random mod 100 + 1,
  _名前2のステータス is random mod 100 + 1.

勝負表示する(_名前1のステータス,_名前2のステータス) :-
  _名前1のステータス > _名前2のステータス,
  write_formatted('%tの勝ちです\n',[_名前1]),!.
勝負表示する(_名前1のステータス,_名前2のステータス) :-
  _名前1のステータス < _名前2のステータス,
  write_formatted('%tの勝ちです\n',[_名前2]),!.
勝負表示する(_名前1のステータス,_名前2のステータス) :-
  _名前1のステータス = _名前2のステータス,
  write('引き分けです\n'),!.

615 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 09:44:04 ]
>>238
% Prolog ここでは構造体=述語定義と解釈してみる。

'構造体を利用して、氏名,年齢,性別が5人分書かれたテキストファイルを読み込んで、画面に表示する'(_テキストファイル) :-
  '構造体を利用して、氏名,年齢,性別が5人分書かれた次のようなテキストファイルを読み込んで、(_テキストファイル,Lines),
  abolish(氏名・年齢・性別/3),
  '氏名・年齢・性別構造体として定義'(Lines).
  画面に表示する,!.

'構造体を利用して、氏名,年齢,性別が5人分書かれたテキストファイルを読み込んで、(_テキストファイル,Lines) :-
  get_lines(_テキストファイル,Lines),!.

'氏名・年齢・性別構造体として定義'([]) :- !.
'氏名・年齢・性別構造体として定義'([Line|R]) :-
  split(Line,[' '],[_氏名,_年齢,_性別]),
  assertz(氏名・年齢・性別(氏名(_氏名),年齢(_年齢),性別(_性別))),
  '氏名・年齢・性別構造体として定義'(R).

画面に表示する :-
  write('%20s %6s %4s\n',[氏名,年齢,性別]),
  氏名・年齢・性別(氏名(_氏名),年齢(_年齢),性別(_性別)),
  write_formatted('%20s %6d %4s\n',[_氏名,_年齢,_性別]),
  fail.
画面に表示する.

616 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 10:45:47 ]
>>515
使用言語:J
同じ値がでないステータスの生成なので引き分けはない。

f=:dyad define
'xs ys'=. 2?10000
smoutput x,' status ',":xs
smoutput y,' status ',":ys
smoutput (;(xs<ys){x;y),' win'
)

'scala' f 'clojrure'
scala status 8546
clojrure status 8515
scala win

617 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 10:49:07 ]
>>616

>>515 ではなくて >>212 でした



618 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 16:47:01 ]
>>229
% Prolog

'テキストファイルの内容を,別のテキストファイルにコピーする'(_コピー元ファイル,_コピー先ファイル) :-
  open(_コピー元ファイル,read,Input,[type(binary)]),
  open(_コピー先ファイル,write,Output,[type(binary)]),
  repeat,
  一文字読む(Input,C),
  一文字書き出す(Output,C),
  close(Input),
  close(Output),!.

一文字読む(Input,C) :- get_byte(C).

一文字書き出す(Output,-1) :- !.
一文字書き出す(Output,C) :- put_byte(Output,C),fail.!.

テキストファイルの中身の内容を画面に出力(_コピー元ファイル,_コピー先ファイル) :-
  get_lines(_コピー元ファイル,Lines1),
  get_lines(_コピー先ファイル,Lines2),
  '2テキストを並べて行表示'(Lines1,Lines2),!.

'2テキストを並べて行表示'([],[]) :- !.
'2テキストを並べて行表示'([A|R1],[B|R2]) :-
  write_formatted('%t %t\n',[A,B]),
  '2テキストを並べて行表示'(R1,R2).

619 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 17:10:32 ]
>>232
% Prolog

モンテカルロ法で円周率を計算する(_円周率) :-
  モンテカルロ法で円周率を計算する(1,10000,0,_円周率),!.

モンテカルロ法で円周率を計算する(M,N,Y,X) :- M > N,X is 4.0 * Y / N,!.
モンテカルロ法で円周率を計算する(M,N,Y,X) :-
  U1 is ((random mod 10000) / 10000) ^ 2,
  U2 is ((random mod 10000) / 10000) ^ 2,
  U1 + U2 =< 1.0,
  Y2 is Y + 1,
  M2 is M + 1,
  モンテカルロ法で円周率を計算する(M2,N,Y2,X),!.
モンテカルロ法で円周率を計算する(M,N,Y,X) :-
  M2 is M + 1,
  モンテカルロ法で円周率を計算する(M2,N,Y,X),!.

620 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 17:24:20 ]
>>244
% Prolog

オイラー級数を用いて、πの近似値を求める(_円周率) :-
  findsum(U,(for(1,N,100000),U is 1 / (N * N)),Sum),
  _円周率 is sqrt(6 * Sum).

621 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 17:25:31 ]
Prolog氏かっけー。

622 名前:620 mailto:sage [2010/02/05(金) 19:16:08 ]
ごめん出題は >>144 だった。

623 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 07:00:34 ]
大学が ->受験->春休み になるから、出題なくなりますね。未解決問題を
しばらくは潰していきます。

624 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 05:47:54 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/483
# [1] C言語プログラミング初歩(専門学校)
# [2] int型の配列変数A[64][32]をB[32][64]に代入する.
# 次の対応があるようにすること
# A[0][0] -> A[0][1] -> A[0][31] ->A[1][0] ->....->A[63][31]
# B[0][0] -> B[0][1]-> B[0][31] -> B[0][32]->....->B[31][63]
# (上の段と下の段が一致)
# A[m][n]には値 (m+n) % 31が入っているものとする。


625 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 05:51:59 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/480
# [2] プログラム
# 環境
# [3.1] OS:Linux
# [3.2] コンパイラ名:gcc
# [3.3] 言語:C++
# 以下の実行結果はどうなるか
#
#
# #include<stdio.h>
# #define N10
# int main(){
# int i,wa=0;
# for(i=1;i<N;i++){
# if((i%2) == 0) continue;
# wa+=i;}
# printf("%d\n",wa);
# return 0;}
#
# これを、C言語を他の言語に書き換える課題とします。



626 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 06:23:14 ]
>>624
% Prolog

ならびを2要素ごとに纏める([],[]) :- !.
ならびを2要素ごとに纏める([L1,L2|R1],[L3|R2]) :-
  append(L1,L2,L3),
  ならびを2要素ごとに纏める(R1,R2).

627 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 06:34:42 ]
>>624
% Prolog

'A[m][n]には値 (m+n) % 31が入っている'(A) :-
  'A[m][n]には値 (m+n) % 31が入っている'(0,A),!.

'A[m][n]には値 (m+n) % 31が入っている'(M,[]) :- M > 31,!.
'A[m][n]には値 (m+n) % 31が入っている'(M,[L|R]) :-
  'A[m][n]には値 (m+n) % 31が入っている'(M,0,L),
  M2 is M + 1,
  'A[m][n]には値 (m+n) % 31が入っている'(M2,R).

'A[m][n]には値 (m+n) % 31が入っている'(M,N,[]) :- N > 63,!.
'A[m][n]には値 (m+n) % 31が入っている'(M,N,[X|R]) :-
  X is (M + N) mod 31,
  N2 is N + 1,
  'A[m][n]には値 (m+n) % 31が入っている'(M,N2,R),!.




628 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 07:03:06 ]
>>625
% Prolog

'Prologでの表現' :-
  'Prologでの表現'(1,X),
  write_formatted('%t\n',[X]).

'Prologでの表現'(9,0) :- !.
'Prologでの表現'(N,X) :-
  0 is N mod 2,
  N2 is N + 1,
  'Prologでの表現'(N2,Y),
  X is Y + 1,!.
'Prologでの表現'(N,X) :-
  \+(0 is N mod 2),
  N2 is N + 1,
  'Prologでの表現'(N2,X).


629 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 16:33:47 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/494
# 【質問テンプレ】
# [1] 授業単元:C言語入門
# [2] 問題文:
# キーボードから英文を1文字ずつ入力し母音の出現数をカウントする。
# その数だけアスタリスクを表示する。
# ただし、入力を終了するときはCtrl+Zを押すものとする。(vowel.c)

630 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 16:44:40 ]
>>629
% Prolog

キーボードから英文を1文字ずつ入力し母音の出現数をカウントする。その数だけアスタリスクを表示する :-
  キーボードから英文を1文字ずつ入力し(Chars),
  母音の出現数をカウントする(Chars,L),
  その数だけアスタリスクを表示する(L).

キーボードから英文を1文字ずつ入力し(Chars) :-
  get_chars(Chars).

母音の出現数をカウントする(L) :-
  findall('*',(member(A,Chars),member(A,['A','E','I','O','U',a,e,i,o,u])),L).

その数だけアスタリスクを表示する(L) :-
  concat_atom(L,S),
  write_formatted('%t\n',[S]).

631 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 16:50:26 ]
>>630 (>>629) 訂正
% Prolog 述語 母音の出現数をカウントする の第一引数が落ちていました。

キーボードから英文を1文字ずつ入力し母音の出現数をカウントする。その数だけアスタリスクを表示する :-
  キーボードから英文を1文字ずつ入力し(Chars),
  母音の出現数をカウントする(Chars,L),
  その数だけアスタリスクを表示する(L).

キーボードから英文を1文字ずつ入力し(Chars) :-
  get_chars(Chars).

母音の出現数をカウントする(Chars,L) :-
  findall('*',(member(A,Chars),member(A,['A','E','I','O','U',a,e,i,o,u])),L).

その数だけアスタリスクを表示する(L) :-
  concat_atom(L,S),
  write_formatted('%t\n',[S]).


632 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 16:55:48 ]
>>629
% Prolog 母音出現数をカウントする 以下は、この定義の方が自然かもしれない。
% でも、私はアスタリスクの表示でカウントしているとする>>631の方が好きだ。

キーボードから英文を1文字ずつ入力し母音の出現数をカウントする。その数だけアスタリスクを表示する :-
  キーボードから英文を1文字ずつ入力し(Chars),
  母音の出現数をカウントする(Chars,_カウント),
  その数だけアスタリスクを表示する(_カウント).

キーボードから英文を1文字ずつ入力し(Chars) :-
  get_chars(Chars).

母音の出現数をカウントする(Chars,_カウント) :-
  count((member(A,Chars),member(A,['A','E','I','O','U',a,e,i,o,u])),_カウント).

その数だけアスタリスクを表示する(_カウント) :-
  length(L,_カウント),
  all(L,'*'),
  concat_atom(L,S),
  write_formatted('%t\n',[S]).

633 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 19:30:00 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/502
# [1] 授業単元:プログラミング演習
# [2] 問題文(含コード&リンク):
#  入力された2つの文字列str1,str2を比較し、str1にstr2の文字列が含まれている場合に1を、
#   含まれていない場合に-1を返す関数、strcmpを作成せよ。
# int strcmp( char *str1, char *str2);
# ex. str1=”abaabab” , str2=”aab” 1
# ex. str1=”abaabab” , str2=”abb” -1


634 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 19:36:17 ]
>>633
% Prolog

入力された2つの文字列Str1,Str2を比較し、Str1にStr2の文字列が含まれている場合に1を、含まれていない場合に-1を返す(Str1,Str2,1) :-
  sub_atom(Str1,_,_,_,Str2),!.
入力された2つの文字列Str1,Str2を比較し、Str1にStr2の文字列が含まれている場合に1を、含まれていない場合に-1を返す(Str1,Str2,(-1)) :-
  \+(sub_atom(Str1,_,_,_,Str2)),!.

635 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 19:54:06 ]
>>633
% Prolog 「1を返す」という部分が微妙な位置にある例。

入力された2つの文字列Str1,Str2を比較する(Str1,Str2,_診断) :-
  'Str1にStr2の文字列が含まれている場合に1を返す'(Str1,Str2,_診断),!.
入力された2つの文字列Str1,Str2を比較する(Str1,Str2,_診断) :-
  'Str1にStr2の文字列が含まれていない場合に-1を返す'(Str1,Str2,_診断),!.

'Str1にStr2の文字列が含まれている場合に1を返す'(Str1,Str2,1) :-
  sub_atom(Str1,_,_,_,Str2),!.

'Str1にStr2の文字列が含まれていない場合に-1を返す'(Str1,Str2,(-1)) :-
  \+(sub_atom(Str1,_,_,_,Str2)),!.



636 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 04:33:36 ]
>>633
% Prolog

入力された2つの文字列Str1,Str2を比較し、Str1にStr2の文字列が含まれている場合に1を、含まれていない場合に-1を返す(Str1,Str2,1) :-
  'Str1にStr2の文字列が含まれている'(Str1,Str2),!.
入力された2つの文字列Str1,Str2を比較し、Str1にStr2の文字列が含まれている場合に1を、含まれていない場合に-1を返す(Str1,Str2,(-1)) :-
  'Str1にStr2の文字列が含まれていない'(Str1,Str2),!.

'Str1にStr2の文字列が含まれている'(Str1,Str2) :-
  sub_atom(Str1,_,_,_,Str2),!.

'Str1にStr2の文字列が含まれていない'(Str1,Str2) :-
  \+(sub_atom(Str1,_,_,_,Str2)),!.

637 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 04:51:03 ]
>>634->>636
要するにどこで組込述語を含む原初的な述語を目標とする節に行き着くか。そこまで
自然な説明として目標を辿ることができるように定義できるか、ということ。
ここで原初的な述語とは、先祖定義に現れる親子/2のような述語。

先祖(X,Y) :- 親子(X,Y).
先祖(X,Y) :- 親子(X,Z),先祖(Z,Y).

親子(義朝,頼朝).
親子(為朝,義朝).



638 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 04:52:59 ]
ふつう祖先だったかw

639 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 05:01:20 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/515
# 【質問テンプレ】
# [1] 授業単元:C言語
# [2] 問題文:
# input.ppm というPPMフォーマットのファイルを読み込み, ヘッダをつけて縦横をそれぞれ 1/2(面積にして1/4) にして出力するプログラムを書きなさい.
# input.ppm のサイズは 410x307 である.


640 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 21:12:40 ]
pc12.2ch.net/test/read.cgi/tech/1248012902/839
# 【 課題 】5個以上の学生番号(2桁程度の数字で良い)、
#       名前、身長をプログラム中でセットし、
#       学生番号または名前をもとに身長を調べるプログラム。
#       学生番号と名前の入力データ、検索結果の身長データを両方表示する機
能があること。
# 【 形態 】1. Javaアプリケーション(main()で開始)/
# 【 期限 】2/10(水)
#
# たぶん二分探索使うかと思うのですが
# よくわかりません!すみませんがよろしくおねがいします!!

641 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 21:38:31 ]
>>640
% Prolog

学生(11,源亮,168).
学生(33,高階高子,156).
学生(7,九条良常,173).
学生(61,石川広也,162).
学生(16,藤原隆甫,177).

学生番号または名前をもとに身長を調べる(_学生番号または名前,_身長) :-
  integer(_学生番号または名前),
  学生(_学生番号または名前,_名前,_身長),
  write_formatted('学生番号=%t,名前=%t,身長=%t\n',[_学生番号または名前,_名前,_身長]).
学生番号または名前をもとに身長を調べる(_学生番号または名前,_身長) :-
  atom(_学生番号または名前),
  学生(_学生番号,_学生番号または名前,_身長),
  write_formatted('学生番号=%t,名前=%t,身長=%t\n',[_学生番号,_学生番号または名前,_身長]).


642 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 21:56:43 ]
>>641
% Prolog
write_formatted/2で結果を表示するのに、第二引数に"_身長"が付いているのは
奇妙ですね。これは同姓同名の有り得ることを思い起こさせるための配慮と
考えてください。


643 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 05:06:03 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/528
# [1] 授業単元:C言語
# [2] 問題文: ガウス分布における数値積分 I=∫f(x)dx,←xmin〜xmax f(x)=1/√(2*π*σ)*exp(a)  a=-(x-μ)*(x-μ)/(2*σ*σ)
# 積分区間は[xmin,xmax]=[myuu-2siguma,myuu+2siguma]として計算すること。なおμ=0,σ=1とした場合、I=0.95449と
#   なるので確認すること。


644 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 05:09:15 ]
pc11.2ch.net/test/read.cgi/db/1252492296/500
# MYSQLなんですけど
#
# date      data
# 2010/01/01 hoge1
# 2010/01/05 hoge2
#
# みたいなテーブルから
#
# 2010/01/01 hoge1
# 2010/01/02 NULL
# 2010/01/03 NULL
# 2010/01/04 NULL
# 2010/01/05 hoge2
#
# のような結果の出せるSQLを求めてます。
#
# select * from table between date '2010/01/01' and '2010/01/05'
#
# とするとデータのある2レコードしか出ないのですが、
# データがない部分も日付を出しつつ、デフォルトのデータないよっていう文字列を出せると助かります。


645 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 07:04:31 ]
>>644
% Prolog こんな述語定義が必要。日付連鎖は未定義かも知れない。後で。

'日付からデータを表示する。存在しない日はデータをNULLとして表示'(_日付下限,_日付上限) :-
  日付からデータを表示する。存在しない日はデータをNULLとして表示(_日付下限),
  日付連鎖(_日付下限,_日付),
  日付からデータを表示する。存在しない日はデータをNULLとして表示(_日付),
  _日付=_日付上限.

'日付からデータを表示する。存在しない日はデータをNULLとして表示'(_日付) :-
  _日付 = (_年/_月/_日),
  table(_日付,Data),
write_formatted('%2d%2d%2d %t\n',[_年,_月,_日,Data]),!.
'日付からデータを表示する。存在しない日はデータをNULLとして表示'(_日付) :-
  _日付 = ( _年/_月/_日),
  \+(table(_日付,Data)),
  write_formatted('%2d%2d%2d NULL\n',[_年,_月,_日]),!.

646 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 07:06:43 ]
pc12.2ch.net/test/read.cgi/tech/1248012902/847
# 【 課題 】電話番号検索を行うjavaプログラムを、探索アルゴリズムを用いて作成せよ。
# 【 補足 】・最初に顧客番号(2桁の数字)、顧客名(Yamadaなど姓のみ)、
# 電話番号(09012345678の形式、ハイフンなし)という顧客データを10人以上プログラム中でセットし、
# 顧客番号または姓をもとに電話番号を調べるアルゴリズムを作成する。
#       ・顧客番号と顧客名の入力データ、電話番号データを両方表示させる機能をつけなければならない。
#       ・(もし可能なら)データリストへの顧客データの追加or削除機能を盛り込みたい


647 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 07:21:04 ]
>>646
% Prolog 実際には、入力された項・要素の形式検査をしますが。

電話番号を10件登録する :-
  write('引数として、顧客番号(2桁の数字)、顧客名(Yamadaなど姓のみ)、電話番号(09012345678の形式、ハイフンなしの三つの項をもつ複合項、電話番号を10件入力します\n'),
  for(1,N,10),write_formatted('%t件目 : '),read(X),assertz(X),N=10.

顧客データの追加(_追加する項) :- assertz(_追加する項).

顧客データの削除(_追加する項) :- retract(_削除する項).

電話番号の検索(_顧客番号,_顧客名,_電話番号) :- 電話番号(_顧客番号,_顧客名,_電話番号).



648 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 07:23:27 ]
>>647 訂正 write_formatted/2の引数が目標で1個になってしまっているところがあった。
% Prolog 実際には、入力された項・要素の形式検査をしますが。

電話番号を10件登録する :-
  write('引数として、顧客番号(2桁の数字)、顧客名(Yamadaなど姓のみ)、電話番号(09012345678の形式、ハイフンなしの三つの項をもつ複合項、電話番号を10件入力します\n'),
  for(1,N,10),write_formatted('%t件目 : ',[N]),read(X),assertz(X),N=10.

顧客データの追加(_追加する項) :- assertz(_追加する項).

顧客データの削除(_追加する項) :- retract(_削除する項).

電話番号の検索(_顧客番号,_顧客名,_電話番号) :- 電話番号(_顧客番号,_顧客名,_電話番号).


649 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 07:25:45 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/534
# [1] 授業単元:プログラミング
# [2] 問題文(含コード&リンク):
# 配列に
# Institute of Technology
# という文字列を代入し、ポインタを利用して
# ・各文字が格納されているアドレス
# ・そのアドレスに格納されている文字
# を表示するプログラムを作成せよ。

650 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 07:27:55 ]
>>649
% Prolog
% Prologではアドレス操作はできない。したがって、この問題は解けない。

651 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 07:48:06 ]
>>648 (>>646)
% Prolog さすがにちょっと乱暴だったか。

顧客データの追加(_顧客番号,_顧客名,_電話番号) :- assertz(電話番号(_顧客番号,_顧客名,_電話番号)).

顧客データの削除(_顧客番号,_顧客名,_電話番号) :- retract(電話番号(_顧客番号,_顧客名,_電話番号)).


652 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 07:59:23 ]
>>648
% Prolog この「いろんな言語で宿題スレ」に書き込みだしてから初めて read/1 を使っています。
% この組込述語は入力を項として解釈する便利で基本的なものですが、
% 入力時にピリオドで終了する必要があります。これを一般ユーザに要請するのは
% 現実的ではないと考えて、get_line/1等を用いてきました。
% 利用者がPrologの項とそのルールについて理解している場合はreadを使って
% 構わないと思います。なお細かいことですが、read/1の場合、
% 標準では処理系がプロンプトを表示するが普通です。その表示するプロンプトの
% 変更なども組込述語で行えるようになっています。

653 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 08:10:02 ]
>>642



654 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 08:26:31 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/535
# [1] 授業単元:プログラミング
# [2] 問題文(含コード&リンク):
# まず次の内容のテキストファイルを準備せよ。
# (メモ帳で作成し、test02.txtという名前で保存すること)
#
# abc
# 123
# def
# 456
# ghi
# 789
# jkl
# 000
#
# 次に、作成したテキストファイルから内容を読み出し、
# 各行の先頭に 01 02 03 というように番号を付加して
# 画面に出力するプログラムを作成せよ。

655 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 08:38:03 ]
>>654
% Prolog

'テキストファイルから内容を読み出し、各行の先頭に 01 02 03 というように番号を付加して画面に出力する' :-
  get_lines('test02.txt',L),
  '各行の先頭に 01 02 03 というように番号を付加して画面に出力する'(1,L).

'各行の先頭に 01 02 03 というように番号を付加して画面に出力する'(_,[]) :- !.
'各行の先頭に 01 02 03 というように番号を付加して画面に出力する'(N,[Line|R]) :-
  write_formatted_atom('%2d',[N],A),
  空白を0に置換する(A,A2),
  write_formatted('%t %t\n',[A2,Line]),
  N2 is N + 1,
  '各行の先頭に 01 02 03 というように番号を付加して画面に出力する'(N2,R).

空白を0に置換する(A,A2) :-
  atom_chars(A,L),
  ならびの置換(' ','0',L,L2),
  atom_chars(A2,L2).

656 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 09:04:16 ]
>>653
% Prolog

ある述語の引数を表示する場合の一般解は :-
  ある述語(_引数),
  write_formatted('%t\n'm,[_引数]),
  fail.
ある述語の引数を表示する場合の一般解は.

でしょう。>>641では同姓同名をきっちりと表示することをサボっています。
それでそのことをこの述語を利用するプログラマに注意するために変数の引数を
強制しています。こうして置けば、この述語をテストした時に

?- 学生番号または名前をもとに身長を調べる(藤原隆甫,_身長).
_身長 = 177

という解を示してインタプリタが停止します。これがPrologプログラマをして
同姓同名への配慮が必要かどうか判断させる契機となるということです。

657 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 09:07:39 ]
>>656
変な"m"が混入してしまいました。

write_formatted('%t\n'm,[_引数]),  -> write_formatted('%t\n',[_引数]),

です。



658 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 11:53:10 ]
>>654
% Prolog 出題の元スレの覗いていたら、%02d というformat表記が出ていた。
% もしかしてと試みたら私のPrologでも同じ。これまでの私の人生は何だったんだwww
% ということで、

'テキストファイルから内容を読み出し、各行の先頭に 01 02 03 というように番号を付加して画面に出力する' :-
  get_lines('test02.txt',L),
  '各行の先頭に 01 02 03 というように番号を付加して画面に出力する'(1,L).

'各行の先頭に 01 02 03 というように番号を付加して画面に出力する'(_,[]) :- !.
'各行の先頭に 01 02 03 というように番号を付加して画面に出力する'(N,[Line|R]) :-
  write_formatted('%02d %t\n',[N,Line]),
  N2 is N + 1,
  '各行の先頭に 01 02 03 というように番号を付加して画面に出力する'(N2,R).


659 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 12:19:44 ]
>>644
% Prolog これも実はヘッドゼロサプライだったのだけれど、サボっていた。
% 直そうと見たら、スラッシュも落ちていた。修正。

'日付からデータを表示する。存在しない日はデータをNULLとして表示'(_日付下限,_日付上限) :-
  日付からデータを表示する。存在しない日はデータをNULLとして表示(_日付下限),
  日付連鎖(_日付下限,_日付),
  日付からデータを表示する。存在しない日はデータをNULLとして表示(_日付),
  _日付=_日付上限.

'日付からデータを表示する。存在しない日はデータをNULLとして表示'(_日付) :-
  _日付 = (_年/_月/_日),
  table(_日付,Data),
  write_formatted('%02d/%02d/%02d %t\n',[_年,_月,_日,Data]),!.
'日付からデータを表示する。存在しない日はデータをNULLとして表示'(_日付) :-
  _日付 = ( _年/_月/_日),
  \+(table(_日付,Data)),
  write_formatted('%02d/%02d/%02d NULL\n',[_年,_月,_日]),!.

660 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 12:37:38 ]
>>645 (>>644)
% Prolog 日付連鎖は

日付連鎖(_日付,_今日) :- var(_日付),前日・今日(_日付,_今日).
日付連鎖(_日付,_今日) :- var(_日付),前日・今日(_前日,_今日),日付連鎖(_日付,_前日).
日付連鎖(_今日,_日付) :- var(_日付),前日・今日(_今日,_日付).
日付連鎖(_今日,_日付) :- var(_日付),前日・今日(_今日,_翌日),日付連鎖(_翌日,_日付).

前日・今日(_前日の年/12/31,_年/1/1) :- 一つ違い(_前日の年,_年),!.
前日・今日(_年/2/29,_年/3/1) :- うるう年(_年),!.
前日・今日(_年/2/28,_年/3/1) :- not(うるう年(_年)),!.
前日・今日(_年/_前月/30,_年/_月/1) :- 一つ違い(_前月,_月),member(_前月,[4,6,9,11]),!.
前日・今日(_年/_前月/31,_年/_月/1) :- 一つ違い(_前月,_月),member(_前月,[1,3,5,7,8,10,12]),!.
前日・今日(_年/_月/_前日,_年/_月/_日) :- 一つ違い(_前日,_日),!.

一つ違い(M,N) :- integer(M),!,N is M + 1 .
一つ違い(M,N) :- integer(N),!,M is N - 1 .

うるう年(_年) :- 0 is _年 mod 400,!.
うるう年(_年) :- 0 is _年 mod 100,!,fail.
うるう年(_年) :- 0 is _年 mod 4,!.
うるう年(_年) :- not(0 is _年 mod 4),fail.


661 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 14:16:05 ]
# t_date 1_dekidaka a_dekidaka
# 2010/01/28 1000 1500
# 2010/01/29 1026 0
# 2010/01/30 0 3400
# みたいな感じなんですけど。

662 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 14:18:07 ]
>>661 上半分がちぎれてしまった。
pc11.2ch.net/test/read.cgi/db/1252492296/502
# すいませんが、SQLを教えてください MySQL 5.1.35です
# 日付テーブル dailytbl
# t_date 西暦日付
#
# 出来高aテーブル
# code 1,2,3〜
# a_date 西暦日付
# dekidaka
#
# 出来高bテーブル
# code a,b,c〜
# a_date 西暦日付
# dekidaka
#
# 日付テーブルのt_dateに沿って出来高を表示させたいです。
# 出来高aテーブルにしても、出来高bテーブルにしても出来高のない日が
# ありますが、出来高のない日はdekidakaを0として表示させたい
#
# イメージとしては
# 日付テーブル 出来高aテーブル 出来高bテーブル
# t_date 1_dekidaka a_dekidaka
# 2010/01/28 1000 1500
# 2010/01/29 1026 0
# 2010/01/30 0 3400
# 2010/01/31 0 5500
# みたいな感じなんですけど。

663 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 14:22:31 ]
>>662
% Prolog

日付テーブルのt_dateに沿って出来高を表示する :-
  write('日付テーブル 出来高aテーブル 出来高bテーブル\n'),
  日付テーブル(_西暦日付),
  出来高aテーブルの取得(_西暦日付,_出来高a),
  出来高bテーブルの取得(_西暦日付,_出来高b),
  write_formatted('%t   %10d   %10d\n',[_西暦日付,_出来高a,_出来高b]),
  fail.
日付テーブルのt_dateに沿って出来高を表示する.

出来高aテーブルの取得(_西暦日付,_出来高a) :- 出来高aテーブル(_西暦日付,_出来高a),!.
出来高aテーブルの取得(_,0).

出来高bテーブルの取得(_西暦日付,_出来高b) :- 出来高bテーブル(_西暦日付,_出来高b),!.
出来高bテーブルの取得(_,0).


664 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 14:39:10 ]
>>662
% Prolog 日付テーブルにそって常に全部表示するというのは現実味がない。

日付テーブルのt_dateに沿って出来高を表示する(_日付下限,_日付上限) :-
  write('日付テーブル 出来高aテーブル 出来高bテーブル\n'),
  日付テーブル(_西暦日付),
  _西暦日付>=_日付下限,
  _西暦日付=<_日付上限,
  出来高aテーブルの取得(_西暦日付,_出来高a),
  出来高bテーブルの取得(_西暦日付,_出来高b),
  write_formatted('%t   %10d   %10d\n',[_西暦日付,_出来高a,_出来高b]),
  fail.
日付テーブルのt_dateに沿って出来高を表示する(_,_).

665 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 14:49:05 ]
>>663 (>>662)
% Prolog もう一つの表記法を示す。この表記法もread/1と同様このスレでは
% 私は故意に使用しなかった。

日付テーブルのt_dateに沿って出来高を表示する :-
  write('日付テーブル 出来高aテーブル 出来高bテーブル\n'),
  (
    日付テーブル(_西暦日付),
    ( 出来高aテーブル(_西暦日付,_出来高a);\+(出来高aテーブル(_西暦日付,_)),_出来高a=0),
    ( 出来高bテーブル(_西暦日付,_出来高b);\+(出来高bテーブル(_西暦日付,_)),_出来高b=0),
    write_formatted('%t   %10d   %10d\n',[_西暦日付,_出来高a,_出来高b]),
    fail;
    true
  ).

666 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 17:09:19 ]
pc12.2ch.net/test/read.cgi/tech/1248012902/850
# 【 課題 】‐出題内容‐
# Testプロジェクトのsrc直下にパッケージtest5を作成し、下記のテストプログラムを作成する。そして、TripTestをパスする実装を作成しなさい。
# <TripTestの説明>
# 日本旅行(JapanTrip)とアメリカ旅行(AmericaTrip)それぞれの旅費を算出する機能を実装する。抽象クラスTripを作成すること。
# 日本旅行もアメリカ旅行も食費(1万円)と宿泊費(3万円)は全く同じ金額で変わらないものとする。
# それぞれの食費、宿泊費、交通費はそのまま金額が取得でき、旅費合計は食費と宿泊費と交通費を足したものである。
#
# package test5;
#
# import static org.junit.Assert.*;
# import org.junit.Test;
# public class TripTest {
# @Test // 旅費を算出するテストプログラム
# public void testCost() throws Exception {
# Trip jpTrip = new JapanTrip();
# assertEquals(10000, jpTrip.getFoodCost()); // 食費
# assertEquals(30000, jpTrip.getRoomCost()); // 宿泊費
# assertEquals(50000, jpTrip.getTravelCost()); // 交通費
# assertEquals(90000, jpTrip.getTotalCost()); // 旅費合計(食費+宿泊費+交通費)
# Trip americaTrip = new AmericaTrip();
# assertEquals(10000, americaTrip.getFoodCost()); // 食費
# assertEquals(30000, americaTrip.getRoomCost()); // 宿泊費
# assertEquals(300000, americaTrip.getTravelCost()); // 交通費
# assertEquals(340000, americaTrip.getTotalCost()); // 旅費合計(食費+宿泊費+交通費)
# }
# }


667 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 17:34:26 ]
>>666
% Prolog 旅費を算出するまでもない。

旅費(日本,食費,10000).
旅費(日本,宿泊費,30000).
旅費(日本,交通費,50000).
旅費(日本,合計,_旅費合計) :-
  旅費(日本,食費,_食費),
  旅費(日本,宿泊費,_宿泊費),
  旅費(日本,交通費,_交通費),
  _旅費合計 is _食費 + _宿泊費 + _交通費.
旅費(アメリカ,食費,10000).
旅費(アメリカ,宿泊費,30000).
旅費(アメリカ,交通費,300000).
旅費(アメリカ,合計,_旅費合計) :-
  旅費(アメリカ,食費,_食費),
  旅費(アメリカ,宿泊費,_宿泊費),
  旅費(アメリカ,交通費,_交通費),
  _旅費合計 is _食費 + _宿泊費 + _交通費.



668 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 18:30:28 ]
# pc12.2ch.net/test/read.cgi/tech/1248012902/848
# 【 課題 】クラスの継承 rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/920.zip
# 課題11-2
# オブジェクト指向型の特徴である多態性(ポリモーフィズム)を利用して
# AnimalクラスのDogとCatからbarkメソッドを呼び出し、実行結果と同じメッセージが
# 表示されるプログラムを作成しなさい。
# 【 Animalクラス仕様 】
# barkメソッドが宣言されている。(処理内容:「動物が吠えている」と表示する。)
#
# 【 Dogクラス仕様 】
# Animalクラスを継承。
# Animalクラスのbarkメソッドをオーバーライト(処理内容:「犬がワンワン吠えている!!」と表示する。)
#
# 【 Catクラス仕様 】
# Animalクラスを継承。
# Animalクラスのbarkメソッドをオーバーライト(処理内容:「猫がニャーニャー鳴く!!」と表示する。)
#
# 【 Kad11_2クラス 】
# Animalクラスの参照変数animal1を宣言し、参照先はAnimalオブジェクトとする。
# Animalクラスの参照変数animal2を宣言し、参照先はDogオブジェクトとする。
# Animalクラスの参照変数animal3を宣言し、参照先はCatオブジェクトとする。
# animal1、animal2、animal3のオブジェクトに対してbarkメソッドを実行する。

669 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 18:35:24 ]
>>668
% Prolog

動物(猫,吠える) :- write('ニャーニャーと鳴く!!'),!.
動物(犬,吠える) :- write('ワンワン吠えている!!'),!.
動物(_,吠える) :- write('動物が吠えている').

670 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 18:46:29 ]
>>668
% Prolog 主語が抜けた。

動物(猫,吠える) :- write('猫がニャーニャーと鳴く!!'),!.
動物(犬,吠える) :- write('犬がワンワン吠えている!!'),!.
動物(_,吠える) :- write('動物が吠えている').

671 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 20:13:24 ]
>>668
% Prolog (その一) 課題11-3

得点表を入力した上で平均点を付加して一覧表示する :-
  write('入力人数は? >'),get_integer(_入力人数),
  得点表入力(1,_入力人数,L),
  得点表表示(L).

得点表入力(N,_入力人数,[]) :- N > _入力人数,!.
得点表入力(N,_入力人数,[[_名前,_得点ならび]|R]) :-
  write_formatted('%t人目 受験科目数 :',[N]),get_integer(_受験科目数),
  write('名前 :'),get_line(_名前),
  科目別得点入力(_受験科目数,_得点ならび),
  N2 is N + 1,
  得点表入力(N2,_入力人数,R).

科目別得点入力(3,[_国語,_数学,_英語]) :-
  write('国語 :'),get_integer(_国語),
  write('数学 :'),get_integer(_数学),
  write('英語 :'),get_integer(_英語),!.
科目別得点入力(5,[_国語,_数学,_英語,_社会,_理科]) :-
  write('国語 :'),get_integer(_国語),
  write('数学 :'),get_integer(_数学),
  write('英語 :'),get_integer(_英語),
  write('社会 :'),get_integer(_社会),
  write('理科 :'),get_integer(_理科),!.

672 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 20:16:10 ]
>>668
% Prolog (その二) 課題11-3

得点表表示(L) :- 得点表見出し表示,得点表明細表示(L).

得点表見出し表示 :- write('  国語 数学 英語 社会 理科 | 平均点\n').

得点表明細表示([[_名前,[_国語,_数学,_英語]]|R]) :-
  _平均点 is (_国語+_数学+_英語) // 3,
  write_formatted('%t %t %t %t    | %t\n',[_名前,_国語,_数学,_平均点]),
  得点表明細表示(R),!.
得点表明細表示([[_名前,[_国語,_数学,_英語,_社会,_理科]]|R]) :-
  _平均点 is (_国語+_数学+_英語+_社会+_理科) // 5,
  write_formatted('%t %t %t %t %t %t | %t\n',[_名前,_国語,_数学,_英語,_社会,_理科,_平均点]),
  得点表明細表示(R),!.

673 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 02:43:22 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/547
# [1] 情報処理応用
# [2] Fortranで,
#
#
# 階乗 n! を計算する関数を作成し,
#
# 順列
# n個の異なるものからr個取り出して並べる。
# このときの順列の総数をnPrとあらわす。
# nPr=n(n-1)(n-2)・・・(n-r+1)
# を計算する関数を作成し,
#
# 組み合わせ
# 異なるn個からr個取り出して組を作る。
# このときの組合せの総数をnCrとあらわす。
# nCr = nPr/r!
# を計算するプログラムを作成してください



674 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 02:45:56 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/549
# [1] 授業単元:プログラミング 1
# [2] 問題文(含コード&リンク):
# 球の体積をもとめよ。


675 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 03:03:34 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/554
# [1] 授業単元:プログラミング 1
# [2] 問題文(含コード&リンク):
# /*************************
# ある二つの文字列str1,str2 の編集距離はつぎの3つの操作を行うことによりstr1をstr2 に変換するのに要する操作の最低回数である
# ・ 1文字挿入する
# ・ 1文字削除する
# ・ 1文字を他の1文字に置き換える
# たとえば str1="sport" はstr2="sort" に, 文字 'p' を削除することによりstr2 に変換できるため編集距離は 1 である
#
# str_n を文字列str の頭からn 番目までの部分列としm(i,j)をstr i とstr j の編集距離を表すものとする.m(i,j)とm(i+1,j),m(i,j+1),m(i+1,j+1)の間に成り立つ再帰式を記述しなさい
#
# この再帰式に基づき効率良く編集距離を計算するプログラムを2次元配列を利用して作成しなさい.ただし,関数m(i,j)はint型の編集距離を返り値とする.
# ******************************/



676 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 03:06:10 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/548
# [1]C言語課題
# [2] コマンドラインに与えられた文字列が単数で自然数を表しているとして
# 以下の例のように出力されるプログラムを作れ
# 入力==>3
# 132
# 231
# 入力==>5
# 1304
# 2552
# 4031
# 入力==>10
# 136107
# 259084
# 480952
# 710631
# 入力==>20
# 13610150016
# 25914201711
# 48131918127
# 71218191384
# 11172014952
# 16001510631


677 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 03:19:32 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/551
# [1] 授業単元:プログラミング 1
# [2] 問題文(含コード&リンク):
# 二つの数列の和によってできる数列を表示したい。



678 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 03:52:22 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/568
# [1]数値計算演習
# [2] 極座標で表される曲線 r(t)=sin^2(πt) θ(t)=α sin(πt^2) (0<=t<=1)でαを指定した時
# の曲線の長さと囲む面積の近似値を求め、π/4<=α<=πまで変化させる時、
# 面積/曲線の長さが最大になるαを推定する
# 曲線上の代表点をとり隣接する点の間の距離の和で曲線の長さを近似。
# 面積は隣接する代表点と原点が作る三角形の面積の和で近似する。

679 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 03:57:07 ]
>>677
% Prolog

二つの数列の和によってできる数列を表示する(L1,L2) :-
  二つの数列の和によってできる数列(L1,L2,L),
  write_formatted('%t+%t=%t\n',[L1,L2,L3]).

二つの数列の和によってできる数列([],L,L) :- !.
二つの数列の和によってできる数列(L,[],L) :- !.
二つの数列の和によってできる数列([A|R1],[B|R2],[C|R3]) :-
  C is A + B,
  二つの数列の和によってできる数列(R1,R2,R3).


680 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 04:16:37 ]
>>674
% Prolog 積分で、の意味かな。とりあえず球の体積の公式で。

球の体積(_半径,_球の体積) :-
  _球の体積 is ( 4 / 3 ) * pi * _半径 ^ 3.

681 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 06:16:37 ]
>>673

階乗(M,N,1) :- M > N,!.
階乗(M,N,X) :-
  M2 is M + 1,
  階乗(M2,N,Y),
  X is M * Y.

階乗(0,1) :- !.
階乗(1,1) :- !.
階乗(N,X) :-
  N2 is N - 1,
  階乗(N2,Y),
  X is N * Y,
  asserta((階乗(N,X) :- (!))).

nPr(N,R,X) :-
  M is N - R + 1,
  階乗(M,N,X).

nCr(N,R,X) :-
  U is N - R + 1,
  階乗(U,N,K1),
  階乗(R,K2),
  X is K1 // K2.

682 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 10:27:50 ]
>>677
使用言語:J

A=:+:>:i.10
A
2 4 6 8 10 12 14 16 18 20
B=:2^i.10
B
1 2 4 8 16 32 64 128 256 512
A + B
3 6 10 16 26 44 78 144 274 532

683 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 10:54:30 ]
>>679 (>>677) 訂正
% Prolog L3とするべきところがLになっていた。

二つの数列の和によってできる数列を表示する(L1,L2) :-
  二つの数列の和によってできる数列(L1,L2,L3),
  write_formatted('%t+%t=%t\n',[L1,L2,L3]).

二つの数列の和によってできる数列([],L,L) :- !.
二つの数列の和によってできる数列(L,[],L) :- !.
二つの数列の和によってできる数列([A|R1],[B|R2],[C|R3]) :-
  C is A + B,
  二つの数列の和によってできる数列(R1,R2,R3).

% C/C++の宿題スレで採りあげやすい出題がなかったので一日完全休養しました。


684 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 12:53:34 ]
>>633
使用言語:J

f=: dyad def '-_1^+./y E. x'

'abaabab' f 'aab'
1
'abaabab' f 'abb'
_1

685 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 13:13:26 ]
>>625
使用言語:J

f=: monad def '+/>:I.2|>:i.<:y'

f 10
25

686 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 16:22:41 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/602
# [1] 授業単元:C言語
# [2] 問題文(含コード&リンク):
# #include <stdio.h>
# int main(void){
# int a=0,k;
# for (k=0;k<100;k++){a++;
# if(a%5==0&&a%9==0)printf("A\n");
# else if(a%5==0)printf("B\n");
# else if(a%9==0)printf("C\n");
# else printf("%d\n",a);
# }return 0;}
# この処理のプログラムをスペース、改行を含み140字以内で書き直したい。
%
% 別の言語で同じ意味のプログラムを140字以内でということにしましょう。

687 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 17:18:38 ]
>>686
使用言語:J

smoutput&>((0 i.~45 5 9|]){(;/'ABC'),<)"0>:i.100



688 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 19:06:48 ]
>>686
% Prolog

main:-for(1,N,100),(q(N),u(N)->A='A';q(N)->A='B';u(N)->A='C';A=N),write(A),nl,N
=100.
q(N):-0 is N mod 5.
u(N):-0 is N mod 9.


689 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 21:50:42 ]
>>686
使用言語:R

a=b=1:100;a[b%%5==0]="B";a[b%%9==0]="C";a[b%%45==0]="A";write(a,"")

690 名前:デフォルトの名無しさん mailto:sage [2010/02/11(木) 22:12:19 ]
>>686
使用言語:Lua

for i=1,100 do print(({i,"B","C","A"})[2-i*i*i*i%5+2*0^(i%9)])end

691 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 01:14:32 ]
>>686
% Prolog

main:-for(1,N,100),(0=:=N mod 5,0=:=N mod 9->A='A';0=:=N mod 5->A='B';0=:=N mod 9->A='C';A=N),write(A),nl,N=100.


692 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 05:34:48 ]
>>687
仮に45は反則ということにすると、どうなりますか?

693 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 07:05:25 ]
>>692 >>686
使用言語:J

smoutput&>((0 i.~[:(,~+/)5 9|]){(;/'ABC'),<)"0>:i.100

694 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 10:26:37 ]
>>693
ありがとうございます。

695 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 12:08:24 ]
>>686
使用言語:maxima

f(a,b):=1-signum(mod(a,b));for i thru 100 do print([i,"B","C","A"][f(i,5)+f(i,9)*2+1]);

696 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 14:34:00 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/555
# [1]C言語とプログラミング
# [2] キーボードから3つの整数を受け取り大きさの小さい順に出力するプログラムを作りなさい。
# 但しmain関数内ではint変数一つだけが使えるものとします。またmain関数の再帰呼び出しも
# 出来ません。(main関数の引数、argc,argvをint変数として使用することも勿論禁止します)
# main関数のみで構成されるプログラムとして下さい。
# 入力される数は1から10までの範囲にあることを常にチェックし、それ以外の入力の場合は
# 再入力を促して下さい。

697 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 16:00:22 ]
>>696
% Prolog
% 述語make/0 で 述語main/0 のソースプログラムを生成する。

nojiriko.asia/prolog/c134_555.html



698 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 16:38:21 ]
>>697
再帰は禁止でしたね。うっかりしました。
再入力はrepeat/0を使えば書けますが、repeat自体が再帰そのものですから、
あまり意味がないですね。
Prologでは>>697のmainのような膨大な冗長述語の定義は稀ではないので、
ここでは題意から離れて、その述語の生成に焦点を当ててみました。

699 名前:デフォルトの名無しさん mailto:sage [2010/02/12(金) 22:56:39 ]
>>696
// F#

[<EntryPoint>]
let main _ =
  "1〜10の数字を3つ入力:"
  |> Seq.unfold (printf "%s" >> System.Console.ReadLine >> System.Int32.TryParse
    >> function
      | true, x when 1 <= x && x <= 10 -> Some(Some(x), "次を入力:")
      | _ -> Some(None, "1〜10の数字を再入力:"))
  |> Seq.choose id |> Seq.take 3 |> Seq.sort |> Seq.iter (printf "%d ")
  0

700 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 02:10:11 ]
>>696
使用言語:J
エラーチェックに苦労してなんとも悲惨なことになってしまった。データnをn番目の素数で表して
変数aに掛けていき、最後に因数分解(ここで勝手にソートしてくれた)して素数からnに変換。

f=: monad define
a=.1
label_b. smoutput '(1-10)?' select. ".(1!:1)1
case. 1 do. a=.a*p:1 case. 2 do. a=.a*p:2 case. 3 do. a=.a*p:3 case. 4 do. a=.a*p:4 case. 5 do. a=.a*p:5
case. 6 do. a=.a*p:6 case. 7 do. a=.a*p:7 case. 8 do. a=.a*p:8 case. 9 do. a=.a*p:9 case. 10 do. a=.a*p:10
case. do. goto_b.
end.
label_c. smoutput '(1-10)?' select. ".(1!:1)1
case. 1 do. a=.a*p:1 case. 2 do. a=.a*p:2 case. 3 do. a=.a*p:3 case. 4 do. a=.a*p:4 case. 5 do. a=.a*p:5
case. 6 do. a=.a*p:6 case. 7 do. a=.a*p:7 case. 8 do. a=.a*p:8 case. 9 do. a=.a*p:9 case. 10 do. a=.a*p:10
case. do. goto_c.
end.
label_d. smoutput '(1-10)?' select. ".(1!:1)1
case. 1 do. a=.a*p:1 case. 2 do. a=.a*p:2 case. 3 do. a=.a*p:3 case. 4 do. a=.a*p:4 case. 5 do. a=.a*p:5
case. 6 do. a=.a*p:6 case. 7 do. a=.a*p:7 case. 8 do. a=.a*p:8 case. 9 do. a=.a*p:9 case. 10 do. a=.a*p:10
case. do. goto_d.
end.
smoutput _1 p:q:a
)

701 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 06:48:19 ]
pc12.2ch.net/test/read.cgi/tech/1248012902/868
# 【 課題 】GUIを使った簡易テキストエディターのプログラムです。
#       ---------------------------------------------------------------------------
#       テキストを入力してください: I am a student!
#       フォント変換後のテキスト: I am a student!
#       --------------------------------------------------------------------------
#       上のような形で、JTextField オブジェクト内に文字を入力した後、
#       その下に“Helvetica”, Bold, 24のフォントで変換した文字を表示させたいのですが。
# 【 形態 】1. Javaアプリケーション(main()で開始)
# 【 GUI  】JTextFieldとJLabelオブジェクトを使用します
# 【 期限 】2/14(水) 夜まで
# 【 補足 】Java初心者でよく分かりません。よろしくお願いします。 


702 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 09:40:36 ]
>>701
% Prolog SWI-PrologにはXPCEというグラフィックライブラリが
% 付いているのですが、私はうまく使うことができずにいます。
% それでこの課題はパス。

703 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 09:47:43 ]
>>702
>>698なんかも、これはPrologではできません!とした方が親切なんじゃないの?
多少とも、Prologを知らしめたいという願いがあるのなら。


704 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 11:48:09 ]
できるのにできないって言うのはただのネガキャンにしかなんねえだろ

705 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 15:05:27 ]
大域変数を標準に取り込むかは現在ISOの作業グループで検討中。
元々の出題の意図は「ひとつの変数だけ使って」ということでしょうから、
代入できない論理変数ではできるはずもない。大域変数を使用できたとしても、
少なくとも一つ論理変数が必要でこれは題意に沿うかどうか。
それで、冗談のような方向へ逃げてみた。
もっとも元スレを読み直してみたら、私のと同じ発想の回答がずっと前に
書き込まれていた。


706 名前:705 mailto:sage [2010/02/13(土) 15:13:25 ]
代入できない論理変数 --> 破壊代入できない論理変数
に訂正。
大域変数については、実は現在ほとんどの処理系がサポートしています。
しかし、私はこのスレで使うつもりはありません。

707 名前:705 mailto:sage [2010/02/13(土) 15:18:17 ]
>>705 またまた訂正。元スレを読み直したら --> 出題元スレを読み直したら



708 名前:デフォルトの名無しさん mailto:sage [2010/02/13(土) 17:24:16 ]
>>701
// F#

open System.Windows.Forms
open System.Drawing

type TinyEditorForm() =
    inherit Form(Text = "TinyEditor", Width = 450, Height = 150)
    let labelInput = new Label(Text = "テキストを入力してください:", Left = 10, Top = 10, Width = 140)
    let textboxInput = new TextBox(Left = 160, Top = 10, Width = 240)
    let labelOutput = new Label(Text = "フォント変換後のテキスト:", Left = 10, Top = 50, Width = 140)
    let textboxOutput = new TextBox(ReadOnly = true, Left = 160, Top = 50, Width = 240, Height = 50, Font = new Font("Helvetica", 24.f, FontStyle.Bold))
    do
        textboxInput.TextChanged |> Event.map (fun _ -> textboxInput.Text)
        |> Event.add (fun text -> textboxOutput.Text <- text)
        base.Controls.AddRange [|labelInput; textboxInput; labelOutput; textboxOutput|]

[<System.STAThread>]
do
    new TinyEditorForm() |> Application.Run

709 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 05:33:41 ]
pc12.2ch.net/test/read.cgi/tech/1258320456/104
# 以下の5行の文字列のいずれかをランダムに返すプログラムを書きなさい
# あいうえお
# かきくけこ
# さしすせそ
# たちつてと
# なにぬねの

710 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 07:31:37 ]
>>709
使用言語:J

] a=:5 5$ucp'あいうえおかきくけこさしすせそたちつてとなにぬねの'
あいうえお
かきくけこ
さしすせそ
たちつてと
なにぬねの
f=:monad def '(1?(#y)){y'

f a
あいうえお
f a
たちつてと

711 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 08:05:21 ]
pc11.2ch.net/test/read.cgi/db/1252492296/521
# 販売集計処理について教えてください。
# 商品テーブル
# 商品名 販売本数
# ─── ────
# お菓子
# お弁当
# 飲み物
#
# 販売履歴テーブル
# 商品名
# ───
# 飲み物
# お菓子
# お弁当
# お菓子
# お菓子
# 飲み物
# お弁当
# お弁当
#
# 商品テーブルの各商品が、販売履歴テーブルに何件ずつあるかを集計し、
# 商品テーブルの販売本数に記録させたいと思っております(日次処理)。

712 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 08:27:31 ]
>>710
% Prolog

'5行の文字列のいずれかをランダムに返す'(_文字列) :-
  findall(S,文字列(S),L),
  N is random mod 5 + 1,
  list_nth(N,L,_文字列).

文字列(あいうえお).
文字列(かきくけこ).
文字列(さしすせそ).
文字列(たちつてと).
文字列(なにぬねの).

713 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 08:43:03 ]
>>710
% Prolog 非決定性にするには

'5行の文字列のいずれかをランダムに返す'(_文字列) :-
  findall(S,文字列(S),L),
  '5行の文字列のいずれかをランダムに返す'(L,_文字列).

'5行の文字列のいずれかをランダムに返す'(L,_文字列) :-
  N is random mod 5 + 1,
  list_nth(N,L,_文字列).
'5行の文字列のいずれかをランダムに返す'(L,_文字列) :-
  '5行の文字列のいずれかをランダムに返す'(L,_文字列).

文字列(あいうえお).
文字列(かきくけこ).
文字列(さしすせそ).
文字列(たちつてと).
文字列(なにぬねの).

% ただし、
% ?- ..<Aゾーン>.. ,'5行の文字列のいずれかをランダムに返す'(_文字列), ..<Bゾーン>.. ,fail.
% のように使うと<Bゾーン>の記述によっては<Aゾーン>には決してバックトラックしないことに注意。

714 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 08:49:35 ]
>>713
% Prolog
% <Aゾーン>にバックトラックさせるためには例えば、

'5行の文字列のいずれかをランダムに返す'(L,_文字列) :-
  N is random mod 5 + 1,
  list_nth(N,L,なにぬねの),!.
'5行の文字列のいずれかをランダムに返す'(L,_文字列) :-
  N is random mod 5 + 1,
  list_nth(N,L,_文字列).
'5行の文字列のいずれかをランダムに返す'(L,_文字列) :-
  '5行の文字列のいずれかをランダムに返す'(L,_文字列).

% これで一度なにぬねのが利用された後はこの述語は非決定性の性質を一旦失う。

715 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 09:26:14 ]
>>711
% Prolog

販売履歴(飲み物).
販売履歴(お菓子).
販売履歴(お弁当).
販売履歴(お菓子).
販売履歴(お菓子).
販売履歴(飲み物).
販売履歴(お弁当).
販売履歴(お弁当).

販売集計処理 :-
  一意な商品名ならびを得る(L),
  商品テーブルに追加(L).

一意な商品名ならびを得る(L) :- setof(_商品名,販売履歴(_商品名),L).

商品テーブルに追加([]) :- !.
商品テーブルに追加([_商品名|R]) :-
  count(販売履歴(_商品名),_販売本数),
  assertz(商品(_商品名,_販売本数)),
  商品テーブルに追加(R).


716 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 21:09:11 ]
>>711
// F#

let countCommodities cs hs =
    let cnt = hs |> Seq.countBy id |> Map.ofSeq
    List.map (fun c -> (c, defaultArg (Map.tryFind c cnt) 0)) cs

let commodities = ["お菓子"; "お弁当"; "飲み物"]
let salesHistory = ["飲み物"; "お菓子"; "お弁当"; "お菓子";
                    "お菓子"; "飲み物"; "お弁当"; "お弁当"]
countCommodities commodities salesHistory

717 名前:デフォルトの名無しさん mailto:sage [2010/02/14(日) 22:21:13 ]
>>701
使用言語:なでしこ
文字スタイルの指定方法はわかりませんでした。


母艦は「フォント変換表示」
「テキストを入力してください」と表示
入力欄とはエディタ
その幅は200
「フォント変換後のテキスト」と表示
出力欄とはラベル
そのテキストは「」
その幅は200
その文字書体は「Helvetica」
その文字サイズは24

入力欄を変更した時は〜出力欄のテキストは入力欄のテキスト



718 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 12:06:38 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/654
# 【質問テンプレ】
# [1] 授業単元:データ構造とアルゴリズム
# [2] 問題文(含コード&リンク):
# 生徒数1000人分の学力テスト(五教科)の得点データが有る。ここで、任意の生徒Aと

# 得点の傾向が一番近い生徒の番号を高速で抽出できるようデータ構造を組みなさい。

# (合計点が近い、ではなく、各教科の得点の傾向が大事のようです。)
#
# 生徒のデータはstruct seito{int tensuu[5];};こんな感じです。
# 単に全部検索して得点差を計算したのを提出したらダメと言われました。
# こういう問題を解く定石のようなものがあるのでしょうか・・・
# 先輩方、よろしくお願いします。

719 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 21:26:13 ]
>>718
イメージとしてはレーダーチャートの五角形のかたちを「傾向」として
その重心を「近さ」のものさしにしたいけど、さっとコードにする能力はない。

720 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 21:41:59 ]
最近傍探索を高速にできるアルゴリズムかな?kd木?

721 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 21:47:22 ]
それか、「各教科の得点の傾向」を「点数の比率」と受け取るなら
コサイン尺度を使って普通に最近傍探索でもいいかも

722 名前:デフォルトの名無しさん mailto:sage [2010/02/16(火) 02:56:24 ]
# 公認野球規則二・〇四には、
#
# 「ボール」 ストライクゾーンを通過しなかった投球、または地面に
# 触れた投球で、いずれも打者が打たなかったものである。
#
# とある。この定義をプログラムとして表現しなさい。

723 名前:デフォルトの名無しさん mailto:sage [2010/02/16(火) 06:49:49 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/683
# [1] 授業単元:プログラミング
# [2] 問題文(含コード&リンク): ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10530.zip
# ポーカープログラム
# # 1,二つのクラス(Card,Deck)が与えられていて、
# game1.hとgame1.cppのプラグラムを書け。
# このプログラムはデッキから5枚配る事を1回とし、
# その中に何回ペアまたはフラッシュ(同じ手札に同じマークが5枚揃う事)が
# あるかの10000回の統計であり、以下を表示させること
#
# 何回の統計か
# そのうち何個の手札がペアを持つか
# そのうち何個の手札がフラッシュを持つか
# ペアは全体の何%か
# フラッシュは全体の何%か
#
# 無作為化する為に以下を必ず含める事
# stand(unsigned)time(NULL);
#
# #2,新しいクラスhand(hand.hとhand.cpp)と、これを実行させる為の
# game2.hとgame2.cppを書け。
# これはカードの配布、ペア・フラッシュの確認、そしてデッキにカードを戻す為の
# プログラムである。

724 名前:デフォルトの名無しさん mailto:sage [2010/02/16(火) 07:25:21 ]
>>722
% Prolog

ボール(X) :-
  投球(X),
  \+(通過した(X,ストライクゾーン)),
  \+(打った(打者,X)).
ボール(X) :-
  投球(X),
  触れた(X,地面),
  \+(打った(打者,X)).

725 名前:デフォルトの名無しさん mailto:sage [2010/02/16(火) 08:45:55 ]
>>722
% Prolog

ボール(公認野球規則二・〇四,X) :-
  'ストライクゾーンを通過しなかった投球、または地面に触れた投球で、いずれも打者が打たなかったものである。'(X).

726 名前:デフォルトの名無しさん mailto:sage [2010/02/16(火) 08:47:35 ]
>>722
% Prolog

% Prolog

公認野球規則(二・〇四,ボール,X) :-
  'ストライクゾーンを通過しなかった投球、または地面に触れた投球で、いずれも打者が打たなかったものである。'(X).


727 名前:デフォルトの名無しさん mailto:sage [2010/02/16(火) 16:31:33 ]
>>723
% Prolog 一枚のカードを作る/2 や トランプのようにならびを切る/4 は
% nojiriko.asia/prolog/c134_683.html 参照

ペアまたはフラッシュの出現度数(_回数,_ペアの度数,_フラッシュの度数) :-
  findsum([M1,M2],(for(1,N,_回数),トランプの準備([A,B,C,D,E|R]),役([A,B,C,D,E],M1,M2)),[_ペアの度数,_フラッシュの度数]).

役(L,1,0) :- sort(L,L1),ペア(L1),!.
役([A|R],0,1) :- sub_atom(A,1,1,_,_種類),フラッシュ(_種類,R),!.

ペア([A,B]) :- sub_atom(A,0,1,_,C),sub_atom(B,0,1,_,C),!.
ペア([A,B,C|R]) :- sub_atom(A,0,1,_,E),sub_atom(B,0,1,_,E),sub_atom(C,0,1,_,E),ペア(R),!.
ペア([A,B,C|R]) :- sub_atom(A,0,1,_,E),sub_atom(B,0,1,_,E),\+(sub_atom(C,0,1,_,E)),!.
ペア([A|R]) :- ペア(R).

フラッシュ(_,[]) :- !.
フラッシュ(A,[B|R]) :- sub_atom(B,1,1,_,A),フラッシュ(A,R).

トランプの準備(X) :-
  findall(U,(for(1,N,52),一枚のカードを作る(N,U)),_整列したカード),
  トランプを切るようにならびを切る(41,53,_整列したカード,X),!.




728 名前:デフォルトの名無しさん mailto:sage [2010/02/16(火) 16:48:06 ]
>>727 (>>723)
% Prolog ペア度数の数え方ですが、ワンペアを1 ツーペアを2 と勘定するなら
% ここでは採用していないがスリーカーズを3 フォーカーズを4と数えるなどもあるかもしれない。

役(L,N,0) :- sort(L,L1),ペア(L1,0,N),\+(N=0),!.
役([A|R],0,1) :- sub_atom(A,1,1,_,_種類),フラッシュ(_種類,R),!.

ペア([],N,N) :- !.
ペア([A,B],N1,N) :- sub_atom(A,0,1,_,C),sub_atom(B,0,1,_,C),N is N1 + 1,!.
ペア([A,B,C|R],N1,N) :- sub_atom(A,0,1,_,E),sub_atom(B,0,1,_,E),sub_atom(C,0,1,_,E),ペア(R,N1,N),!.
ペア([A,B,C|R],N1,N) :- sub_atom(A,0,1,_,E),sub_atom(B,0,1,_,E),\+(sub_atom(C,0,1,_,E)),N2 is N1 + 1,ペア([C|R],N2,N),!.
ペア([A|R],N1,N) :- ペア(R,N1,N).

729 名前:デフォルトの名無しさん mailto:sage [2010/02/17(水) 21:53:46 ]
# 公開された日本最大の競馬情報データベースjbisのサイトで
# ディープインパクトの五代血統表は
# www.jbis.or.jp/horse/0000742976/pedigree/ を検索することによって
# 得られます。このサイトを利用し、これを起点にして、
# 父系(父親の父親の父親・・・と遡る)20代前の大種牡馬Eclipseまで列記する
# プログラムを作りなさい。

730 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 05:14:30 ]
>>729
% Prolog jbis/2 の定義を長くなるのでここでは省略して。

父系の収集(_目標馬,_五代血統書,X) :-
  五代血統書に於いて父系は最初の5要素以内に現れる(_目標馬,_五代血統表,X),!.
父系の収集(_目標馬,[_一代父,_二代父,_三代父,_四代父,_五代父|_],[_一代父,_二代父,_三代父,_四代父,_五代父|R]) :-
  jbis(_五代父,_五代遡った五代血統表),
  父系の収集(_目標馬,_五代遡った五代血統表,R).

五代血統書に於いて父系は最初の5要素以内に現れる(_目標馬,_五代血統表,X) :-
  append(L1,[_目標馬|_],_五代血統書),
  length(L1,N),
  N < 5,
  append(L1,[_目標馬],X),!.

731 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 05:27:25 ]
>>730 (>>729)
% Prolog jbis/2 の定義を書くと長くなるのでここでは省略して。

732 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 05:44:54 ]
>>730
実はこんなに単純ではない。
最終的に五代遡らない内に牝馬が現れてしまうことがある。
父系に目標馬が存在しなかった場合だ。このことは、
五代血統表は牡馬、牝馬の区別ができるための情報を
持つ必要があることを意味する。これがめんどうなら
jbis/2に於いて牝馬が現れたら、それ以降の情報を
切り捨ててしまう方法もある。これだと五代血統表と
名乗ることはできず「_五代父系ならび」とでもなるが。

733 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 06:11:28 ]
>>732 (>>729)
% Prolog 理屈の上では、三頭の始祖馬が出てきたら、とすればそれで良さそう
% ですが、実際には血統不詳で切れている血統表も存在するからこれでは済まない。

父系の収集(_目標馬,_五代血統表,X) :-
  member(_始祖馬,['Byerley Turk','Darley Arabian','Godolphin Arabian']),
  append(L1,[_始祖馬|_],_五代血統表),
  length(L1,N),
  N < 5,
  \+(member(_目標馬,L1)),
  !,fail.
父系の収集(_目標馬,_五代血統書,X) :-
  五代血統書に於いて父系は最初の5要素以内に現れる(_目標馬,_五代血統表,X),!.
父系の収集(_目標馬,[_一代父,_二代父,_三代父,_四代父,_五代父|_],[_一代父,_二代父,_三代父,_四代父,_五代父|R]) :-
  jbis(_五代父,_五代遡った五代血統表),
  父系の収集(_目標馬,_五代遡った五代血統表,R).

734 名前:デフォルトの名無しさん [2010/02/18(木) 11:19:38 ]
父系でも血統不詳なんてあるの?


735 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 15:01:57 ]
>>734
データベースがある程度完備していればない。だから>>733は間違い。
Eclipseの時代まで遡ると種牡馬欄が空欄で母系だけ3-4代伸びている場合が
あるのだけれど、これは何だろう。

736 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 01:04:59 ]
pc11.2ch.net/test/read.cgi/db/1252492296/545
# ・データ
# ■Relationテーブル
# TaskNo RelationTaskNo
# 1 2
# 2 3
# 2 4
# 4 5
# : :
#
# 上記はタスクと、そのタスクに関連するタスクのNoを保持しているテーブルです。
# このようなテーブルから、指定したTaskNoに関連するタスクを取得して、
# その関連タスクにまた関連するタスクを…といった形でデータを取得したいのです。
# 以前SQLServerで似たような結果を取得した際は
# WITH RELATIONS (TaskNo,RelationTaskNo)
# AS
# (SELECT TaskNo,RelationTaskNo FROM Relation WHERE TaskNo = 取得したい番号
# UNION ALL
# SELECT R.TaskNo,R.RelationTaskNo
# FROM Relation AS R INNER JOIN RELATIONS AS CTE ON R.RelationTaskNo = CTE.TaskNo)
# SELECT * FROM RELATIONS
# (当時の環境が手元にないため構文が微妙に間違っているかも…)
# どなたかご存じだったら知恵を貸してください。

737 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 09:59:16 ]
>>736
% Prolog

'RelationTaskNoS'(TaskNo,[TaskNo|R]) :-
  'Relation'(TaskNo,RelationTaskNo),
  'RelationTaskNoS(RelationTaskNo,R).
'RelationTaskNoS'(TaskNo,[TaskNo]).



738 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 12:54:03 ]
>>729
% Prolog jbis/2 の定義は
nojiriko.asia/prolog/sonota_729.html を参照してください。

739 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 16:10:29 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/713
# HPはどのページも3クリック以内でたどり着けるのが良いとされています。
# さて問題です。どのページからも、すべてのページへこの条件を満たすようにするには
# 各ページにリンクはいくつ必要でしょうか。
# link(n)をページnのリンク数としたとき min { link(n) } を決定するという問題です。
# ページ数は、1000から1万の任意の値が与えられる物とします。


740 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 20:46:28 ]
>>739
// F#

// click : 最大クリック数、page : 全ページ数
let minLink click page =
    Seq.initInfinite id
    |> Seq.find (fun x -> List.sumBy (pown x) [0 .. click] >= page)

741 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 23:11:30 ]
>>729
// F#

open System.Text.RegularExpressions

let paternal last =
    use client = new System.Net.WebClient()
    let rec paternal' url =
        seq {
            let page = "www.jbis.or.jp" + url + "pedigree/" |> client.DownloadString
            let firstRow = Regex.Match(page, @"<tr>(.+?)</tr>", RegexOptions.Singleline).Groups.[1].Value
            let horses = Regex.Matches(firstRow, @"<(?:td|th).*?><a href=""(.+?)"">(.+?)</a>")
                        |> Seq.cast<Match> |> Seq.map (fun m -> (m.Groups.[1].Value, m.Groups.[2].Value))
                        |> Seq.cache
            yield! Seq.map snd horses
            yield! Seq.nth (Seq.length horses - 1) horses |> fst |> paternal' }
    let horses = paternal' "/horse/0000742976/" |> Seq.cache
    Seq.take (Seq.findIndex ((=) last) horses + 1) horses

paternal "Eclipse" |> Seq.iter (printfn "%s")

742 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 08:23:18 ]
# 以下は「中世の秋」ホイジンガ/堀越孝一訳(中公文庫による)の冒頭ちかくの段落です。
# ここにあらわれる文章をプログラム言語で書き換えなさい。
#
#  夏と冬の対照は、わたしたちの経験からはとても考えられないほど強烈だったが、
# 光と闇、静けさと騒がしさとの対照もまた、そうだったのである。現在、都市に住む
# 人びとは、真の暗闇、真の静寂を知らない。ただひとつまたたく灯、遠い一瞬の叫ぶ
# 声がどんな感じのものかを知らない。

743 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 15:08:26 ]
pc12.2ch.net/test/read.cgi/tech/1255277760/82
# [1] 授業単元:
# [2] 問題文(含コード&リンク):
#
# 一次方程式y=a*x+bにおいて、A[x1,y1]とB[x2,y2]が与えられた時、
# 方程式の係数a,bを求めよ。
# x1 y1: 450 454.4
# x2 y2: 452 454.8
# y=0.2*x+364.4


744 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 16:33:23 ]
>>743
使用言語:J

x1=:450
y1=:454.4
x2=:452
y2=:454.8
(y1,y2)%.2 2$x1,1,x2,1
0.2 364.4

745 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 18:35:05 ]
>>743
% Prolog

'一次方程式y=ax+bの二点[x1,y1][x2,y2]から係数a,bを求める'(X1,Y1,X2,Y2,A,B) :-
  A is (Y1 - Y2) / (X1 - X2),
  B is Y1 - (A * X1).

746 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 21:27:49 ]
>>709
使用言語:Clojure

user=> (def A ["あいうえお","かきくけこ","さしすせそ","たちつてと","なにむねの"])
#'user/A
user=> (defn f [x] (x (int(* (Math/random)(.length x)))))
#'user/f
user=> (f A)
"たちつてと"
user=> (f A)
"かきくけこ"

747 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 06:21:56 ]
>>742
% Prolog 第二節目は
# 人びとは、真の暗闇、真の静寂を知らない。ただひとつまたたく灯、遠い一瞬の叫ぶ
# 声がどんな感じのものかを知らない。

知らない(人びと,_何かを) :-
  知らない(_何かを).

知らない(_暗闇) :-
  真の暗闇(_暗闇).
知らない(_静寂) :-
  真の静寂(_静寂).

知らない(人びと,_何かの,_感じ) :-
  感じ(_何かの,_感じ).

感じ(_またたく灯) :-
  またたく灯(_またたく灯),
  ただひとつ(_またたく灯).
感じ(_叫ぶ声) :-
  叫ぶ声(_叫ぶ声),
  遠い(_叫ぶ声),
一瞬の(_叫ぶ声).



748 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 20:17:19 ]
pc12.2ch.net/test/read.cgi/tech/1263824755/746
# [1] 授業単元:
# UNIX C Programming
# [2] 問題文(含コード&リンク):
# ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10541.txt
#
# 下記のコードはUnixコマンドのmoreの低水準バージョンである。
# このmoreにundoの機能を付加しターミナルで使えるようにしたい。
# 例:ファイルの中を'Enter'で1行進み、'UNDO'で1行戻る。
#   'Enter'で1行進み、' '(Space)で1ページ進んだ後、'UNDO'で1ページ元に戻る。
#
# 一案として、/dev/ttyからのinputをarrayの中に残しておき、それを元に作業を一つ戻すことが考えられる。
# 下記のコードはmoreの基本的な機能である、’Enter’で一行前進・’ ’(Space)で一ページ前進を既に盛り込んでいる。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前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