1read 100read
2011年10月1期プログラムいろんな言語で宿題 第五編 TOP カテ一覧 スレ一覧 削除依頼
・ 次のスレ
何でNULLって言うんですか?
ライフゲーム
YOUTUBEをすソフトを作りたい
市販ゲームソフト開発のための言語


いろんな言語で宿題 第五編


1 :10/06/19 〜 最終レス :11/12/05
前スレは512k超えで終了しました。

2 :
http://pc12.2ch.net/test/read.cgi/tech/1274827528/904
# 期限6月21日18時
# よろしくお願いします。
#
# 3次元の実数ベクトルを、要素がfloat型で要素数3の配列を用いて表すものとする。
# 二つの3次元ベクトルに対して、それらの和、差、内積、外積を求める関数を定義する。
# 和、差、内積、外積を計算する関数はそれぞれaddvec、subvec、innervec、outervecとし、
# それぞれの関数定義の頭部は
# void addvec(const float x[3], const float y[3], float z[3])
# void subvec(const float x[3], const float y[3], float z[3])
# float innervec(const float x[3], const float y[3])
# void outervec(const float x[3], const float y[3], float z[3])
# とする。
# プログラムの動作は、二つの3次元ベクトルaとbの各成分をじゅんじに入力して、それらの和、差、内積、外積を求めて出力する。
# 以上の説明に沿ったプログラムをC言語を用いて書け。
#

3 :
http://pc12.2ch.net/test/read.cgi/tech/1274827528/918
# [1] 授業単元:Cプログラミング演習
# [2] 問題文(含コード&リンク):
# 問題1:文字列"Computer1Programing2Communication3Electro4"を、"test.txt"に書き込むプログラムを作成せよ。
# 問題2:ファイル"test.txt"から文字列も読み込み、並びを逆にしてファイル"sample.txt"に出力するプログラムを作成せよ。("test.txt"は問題1で作成したものを使用すること。)
# 問題3:ファイル"sample.txt"から大文字だけを画面に表示させるプログラムを作成せよ。("sample.txt"は問題2で作成したものを使用すること。)
#

4 :
http://pc12.2ch.net/test/read.cgi/tech/1274827528/941
# ベクトルを規格化する関数 normal
#
# 2つのベクトルの差の大きさを返す関数 dist を作成せよ。
#
# よろしくお願いします
#

5 :
http://pc12.2ch.net/test/read.cgi/tech/1276810079/5
# 次の問題を解くプログラムを再帰を使って実装せよ。
# 問題 コインの種類として、1,5,8,10,15の5種類を与える。
# に対して、最小枚数のコインでmを支払うときの枚数を求めよ。
#

6 :
http://pc11.2ch.net/test/read.cgi/db/1274791771/139
# 期間の抽出について相談です。
# 元情報
# ID    START    END
# -----   -----    -----
# 10    2010/06/01  2010/06/12
# 10    2010/06/13  2010/06/14
# 10    2010/06/15  NULL
# 20    2010/06/01  2010/06/11
# 20    2010/06/13  2010/06/15
# ↓
# 欲しい情報
# ID    START    END
# -----   -----    -----
# 10    2010/06/01  NULL
# 20    2010/06/01  2010/06/11
# 20    2010/06/13  2010/06/15
#
# ・開始日、終了日の期間重複はなし
# ・IDごとにデータを抽出。抽出単位は連続している期間の最小開始日と最大終了日
# ・期間は綺麗に連続(ID=10)することもあれば非連続することもある(ID=20)

7 :
http://pc11.2ch.net/test/read.cgi/db/1274791771/154
# 質問です。
# Oracle10gです。
#
# 部門の親子関係を示す以下のようなテーブルがある。
#
# 親部門ID 子部門ID 子部門の区分
# 1       2      0
# 1       3      1
# 3       4      0
# 3       5      1
# 5       6      0
# 7       8      0
# 7       9      1
# 9       10     0
#
# ある親部門IDを指定し、その部門以下の階層に含まれる部門のうち区分が0となっているものを取得したい。
# 上の例だと部門ID=1と指定した場合2,4,6を取得したい。
#

8 :
>>3
使用言語:J
read=:1!:1
write=:1!:2
N.B.問題1
'Computer1Programing2Communication3Electro4' write <'test.txt'
N.B.問題2
reverse=: |.
(reverse read <'test.txt') write <'sample.txt'
N.B.問題3
ascii=: a. & i.
isUpper=: 65&<: *. 90&>:
smoutput (#~ isUpper@ascii) read <'sample.txt'
ECPC

9 :
http://pc12.2ch.net/test/read.cgi/tech/1276215571/54
# アルゴリズムや処理の高速化の知恵をお借りしたく。宿題ではありません。
#
# Cで英単語のスペルチェッカを作って、タイムアタックするYO!というお題。
# 与えられているのは、14万語強の英単語リスト(約1.4MB)、
# 700万語強の照合するテキスト(約39MB)と、プログラムのテンプレ。
# これに、各自で辞書の読み込みload()、チェックルーチンcheck()、
# 辞書の単語数のカウントcount()、メモリの開放unload()を実装するようです。
# 照合の仕様は、単純に辞書に同じ単語があるかどうかだけです。
# ただし大文字小文字は区別しません。
#
# 試しに手元のMacBook+gccで配列に突っ込んだ辞書を
# 逐一リニアサーチさせてみると9700秒、
# 辞書を50万個のハッシュの中に無理矢理おさめて14秒です。
#
# 講義で想定している実装は、ハッシュ+片方向の連結リスト。
# あるいはトライ木。ぼちぼちと試していくつもりですが、
# ↓の結果(クラウドなサーバー上で実行)を見る限り、
# トップのあたりはどうも想像の斜め上をいく実装をしている模様。
# ttp://www.cs50.net/boards/pset6.php
# みなさんなら、どう攻めますか?
# お題の詳細は↓の中のpset6.pdf、辞書はwords、
# テンプレのプログラムと照合テキストはpset6.zipにあります。
# ttp://cdn.cs50.net/2009/fall/psets/6/

10 :
>>7
% Prolog
'ある親部門IDを指定し、その部門以下の階層に含まれる部門のうち区分が0となっているものを取得したい。'(_親部門ID,_区間が0となっている子部門ID) :-
部門(_親部門ID,_子部門ID,_子部門の区分),
その部門以下の階層に含まれる部門のうち区分が0となっているものを取得(_子部門ID,_子部門区分,_区間が0となっている子部門ID).
その部門以下の階層に含まれる部門のうち区分が0となっているものを取得(_子部門ID,0,_子部門ID).
その部門以下の階層に含まれる部門のうち区分が0となっているものを取得(_子部門ID_1,_子部門の区分,X) :-
部門(_子部門ID_1,_子部門ID_2,_子部門の区分_2),
その部門以下の階層に含まれる部門のうち区分が0となっているものを取得(_子部門ID_2,_子部門の区分_2,X).

11 :
>>6
% Prolog
'IDごとにデータを抽出。抽出単位は連続している期間の最小開始日と最大終了日' :-
findsetof(_ID,期間(_ID,_期間下限,_期間上限),L1),
findall([_ID,_最小開始日,_最大終了日],(
member(_ID,L1),
findmin([_ID,_開始日],開始日(_ID,_開始日),_最小開始日),
findmax([_ID,_終了日],終了日(_ID,_終了日),_最大終了日)),
L).
write('ID START END \n----- ----- ----- \n'),
append(_,[[_ID,_Start,_End]|R],L),
write_formatted('%t %t %t\n',[_ID,_Start,_End]),
R = [].
開始日(_ID,_開始日) :- 期間(_ID,_開始日,_).
終了日(_ID,_終了日) :- 期間(_ID,_開始日,_終了日),\+(_終了日='NULL').

12 :
>>5
% Prolog
'与えられた金額に対して、最小枚数のコインでmを支払うときの枚数を求めよ。'(_m,_最小コイン枚数) :-
暫定候補枚数を得る(_m,[15,10,8,5,1],0,_暫定候補枚数),
最小枚数のコインでmを支払うときの枚数(_暫定候補枚数,_最小コイン枚数).
暫定候補枚数を得る(0,_,X,X) :- !.
暫定候補枚数を得る(_m,[P|R1],S1,X) :-
D is _m // P,
_m_2 is _m mod P,
S2 is S + D,
暫定候補枚数を得る(_m_2,S2,X).
最小枚数のコインでmを支払うときの枚数(_m,_暫定候補枚数,_最小コイン枚数) :-
findmin(_枚数,暫定候補枚数より少ない支払いを探す(_m,_暫定候補枚数,_枚数,_最小コイン枚数),!.
暫定候補枚数より少ない支払いを探す(_m,_暫定候補枚数,_枚数) :-
for(0,A,_暫定候補枚数),
for(0,B,_暫定候補枚数),
for(0,C,_暫定候補枚数),
for(0,D,_暫定候補枚数),
for(0,E,_暫定候補枚数),
_m is 1 * A + 5 * B + 8 * C + 10 * D + 15 * E,
_枚数 A + B + C + D + e,
_枚数 =< _暫定候補枚数.

13 :
>>3
使用言語:Io
P1 := method(
File clone open("test.txt") do(
write("Computer1Programing2Communication3Electro4\n")
close
)
)
P2 := method(
File clone open("sample.txt") do(
f := File clone open("test.txt")
write(f readLine reverse,"\n")
f close
close
)
)
P3 := method(
File clone open("sample.txt") do(
foreach(v,if(v>=65 and v<=90,v asCharacter print))
""println
close
)
)
P1;P2;P3

14 :
http://pc12.2ch.net/test/read.cgi/tech/1274827528/955
# [1] 授業単元:プログラミング
# [2] 問題文(含コード&リンク):
# 以下のプログラムで、pointを昇順に並び替えるプログラムを作る。ソートの部分の
みを書き換え、プログラムを作りなさい。
# http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10713.tx
#
# struct data {
# int car_num;
# char name[MAX_LEN];
# char cons[MAX_LEN];
# char nationality[MAX_LEN];
# int birth;
# double point;
# };

15 :
>>14
% Prolog
http://nojiriko.asia/prolog/c136_955.html

16 :
http://pc12.2ch.net/test/read.cgi/tech/1267796762/170
# 【 課題 】入力したテキストに含まれる文字を種類別に使用回数を表示し、降順にソートし出力するプログラムを作れ。
# 【 形態 】Javaアプリケーション(main()で開始)
# 【 期限 】6月22日
# 【 Ver  】1.6.0_20
# 【 補足 】../test/read.cgi/tech/1267796762/83と同様の問題ですが漢字や記号など全ての種類によらずに統計したい場合です。よろしくお願いします。
#
#

17 :
>>16
% Prolog
http://nojiriko.asia/prolog/j69_170.html

18 :
>>2
% Prolog
'二つの3次元ベクトルaとbの各成分をじゅんじに入力して、それらの和、差、内積、外積を求めて出力する' :-
    write('入力してください X1,Y1,Z1 : '),get_split_line([','],[X1,Y1,Z1]),
    write('入力してください X2,Y2,Z2 : '),get_split_line([','],[X2,Y2,Z2]),
    ベクトルの和([[X1],[Y1],[Z1]],[[X2],[Y2],[Z2]],_ベクトルの和),
    ベクトルの差([[X1],[Y1],[Z1]],[[X2],[Y2],[Z2]],_ベクトルの差),
    ベクトルの内積([[X1],[Y1],[Z1]],[[X2],[Y2],[Z2]],_ベクトルの内積),
    ベクトルの外積([[X1],[Y1],[Z1]],[[X2],[Y2],[Z2]],_ベクトルの外積),
    write_formatted('和は %t \n差は %t \n内積は %t \n外積は %t です\n').
ベクトルの和([],[],[]) :- !.
ベクトルの和([[A]|R1],[[B]|R2],[[C]|R3]) :-
    C is A + B,
    ベクトルの和(R1,R2,R3).
ベクトルの差([],[],[]) :- !.
ベクトルの差([[A]|R1],[[B]|R2],[[C]|R3]) :-
    C is A - B,
    ベクトルの差(R1,R2,R3).

19 :
>>2
% Prolog (その二)
ベクトルの内積([],[],0) :- !.
ベクトルの内積([[A]|R1],[[B]|R2],X) :-
    X is Y + A * B.
    ベクトルの内積(R1,R2,Y),
innervec([],[],0) :- !.
innervec([A|R1],[B|R2],Inner) :-
    innervec(R1,R2,Inner2),
    Inner is Inner2 + A * B,!.
ベクトルの外積([[X1],[Y1],[Z1]],[[X2],[Y2],[Z2]],_ベクトルの外積) :-
    X3 is Y1 * Z2 - Z1 * Y2,
    Y3 is Z1 * X2 - X1 * Z2,
    Z3 is X1 * Y2 - Y1 * X2,
    _ベクトルの外積 = [[X3],[Y3],[Z3]],!.

20 :
>>3
使用言語:maxima
P1():=(f:openw("test.txt"),
printf(f,"Computer1Programing2Communication3Electro4~%"),
close(f)
);
P2():=(fin:openr("test.txt"),fout:openw("sample.txt"),
printf(fout,"~a~%",sreverse(readline(fin))),
close(fin),
close(fout)
);
P3():=(fin:openr("sample.txt"),
text:readline(fin),
for v in charlist(text) do if uppercasep(v) then printf(true, "~a", v),
close(fin),
print("")
);
P1();P2();P3();

21 :
>>3
% Prolog (その一)
'文字列"Computer1Programing2Communication3Electro4"を、"test.txt"に書き込む' :-
    open('test.txt',write,Output),
    write(Output,'Computer1Programing2Communication3Electro4'),
    close(Output).
'ファイル"test.txt"から文字列も読み込み、並びを逆にしてファイル"sample.txt"に出力する' :-
    get_lines('test.txt',Lines),
    open('sample.txt',write,Output),
    append(_,[Line|R],Lines),
    並びを逆に(Line,_並びを逆にしたLine),
    write_formatted(Output,_並びを逆にしたLine),
    R = [],
    close(Output).
並びを逆に(Line,_並びを逆にしたLine) :-
    atom_chars(Line,Chars),
    reverse(Chars,Rchars),
    atom_chars(_並びを逆にしたLine,Rchars).

22 :
>>3
% Prolog (その二)
'ファイル"sample.txt"から大文字だけを画面に表示させる' :-
    get_chars('sample.txt',Chars),
    append(_,[Char|R],Chars),
    大文字だけを画面に表示させる(Char),
    R = [],!.
大文字だけを画面に表示させる(Char) :- Char @>= 'A',Char @=< 'Z',
    write(Char).
大文字だけを画面に表示させる(Char) :- \+((Char @>= 'A',Char @=< 'Z')).

23 :
>>16
使用言語:J
f=:monad def ';:inv":&.>(\:{:"1)(~.;"0#/.~)y'
f ucp'a/bb/ccc/漢字'
/ 3
c 3
b 2
a 1
漢 1
字 1

24 :
>>2
使用言語:J
addvec=: +
subvec=: -
innervec=: +/ .*
outervec=: [:(-/ .*)&>2<\(}.,2&{.)@,.
A=: 1 2 3
B=: 4 5 6
A addvec B
5 7 9
A subvec B
_3 _3 _3
A innervec B
32
A outervec B
_3 6 _3

25 :
>>2
使用言語:maxima
load("eigen");
addvec(a,b):= a + b;
subvec(a,b):= a - b
innervec(a,b):= inprod(a,b);
outervec(a,b):= transpose(adjoint(matrix(A,B,[1,1,1])))[3];
(%i102) A:[1,2,3];
(%i103) B:[4,5,6];
(%i105) addvec(A,B);
(%o105) [5, 7, 9]
(%i106) subvec(A,B);
(%o106) [- 3, - 3, - 3]
(%i107) innervec(A,B);
(%o107) 32
(%i111) outervec(A,B);
(%o111) [- 3, 6, - 3]

26 :
>>2
使用言語:十進BASIC
DIM a(3),b(3),c(3)
DATA 1,2,3
DATA 4,5,6
MAT READ a
MAT READ b
SUB addvec(a(),b(),c())
MAT c=a+b
END SUB
SUB subvec(a(),b(),c())
MAT c=a-b
END SUB
FUNCTION innervec(a(),b())
LET innervec=DOT(a,b)
END FUNCTION
SUB outervec(a(),b(),c())
MAT c=cross(a,b)
END SUB
CALL addvec(a,b,c)
MAT PRINT c
CALL subvec(a,b,c)
MAT PRINT c
PRINT innervec(a,b)
CALL outervec(a,b,c)
MAT PRINT c
END

27 :
http://pc12.2ch.net/test/read.cgi/tech/1276810079/90
# 1から10までの積を計算するプログラムを書け。このとき,whileループを用いて、
# 画面に 1*2*3*・・・・*10 = という風に表示されるようにすること。

28 :
http://pc12.2ch.net/test/read.cgi/tech/1276810079/95
# [1] 授業単元:数値計算法
# [2] 問題文(含コード&リンク):
# 与えられた零以上の実数(a,b,c,d)と正の実数(e,f)に対して
# つぎのロンバーグ表と積分値を求めるプログラムを作成せよ
# (分割数:n=2^k≧16,推定回数:m≧3)
#
# I=∫ 1/(a*x^3+b*x^2+c*x+d)dx (e≦x≦f)
#
# ただし、キーボードから(a,b,c,d,e,f)を入力すれば
# 上記の定積分のロンバーグ表の値と積分値が画面表示
# されるようなプログラムを作ること。
#

29 :
# ・テーブルデータ
# DATE    | DATA
# ------------+----------
# 2010-06-01 | aaa
# 2010-06-02 | bbb
# 2010-06-03 | ccc
# 2010-06-04 | ddd
# 2010-06-05 | eee
# 2010-06-06 | fff
# 2010-06-07 | ggg
#
# ・欲しい結果
# 最新3件を昇順で。
# DATE    | DATA
# ------------+----------
# 2010-06-05 | eee
# 2010-06-06 | fff
# 2010-06-07 | ggg
#
# ・説明
# select DATE, DATA from TABLE order by DATE desc limit 3;
# とすれば、最新3件を降順で取得できますが、
# できれば降順でなく昇順で最新3件を取得したいです。

30 :
>>29
% Prolog
'DATEの最新3件を昇順で取得する'(L) :-
    findsort([DATE],テーブル(DATE,DATA),L1),
    length(L,3),
    append(_,L,L1).
findsort(_鍵ならび,P,_解ならび) :-
    P =.. [F|L1],
    append(_鍵ならび,L1,L2),
    findall(L2,P,L3),
    sort(L3,L4),
    findall(L1,member(L2,L4),_解ならび).

31 :
>>27
% Prolog
'1から10までの積を計算する。このとき,画面に 1*2*3*・・・・*10 = という風に表示
されるようにする' :-
    '1から10までの積を計算する。このとき,画面に 1*2*3*・・・・*10 = という
されるようにする'(1,1).
'1から10までの積を計算する。このとき,画面に 1*2*3*・・・・*10 = という風に表示
されるようにする'(10,S1) :-
    S is S1 * 10,
    write_formatted('10 = %t\n',[S]),!.
'1から10までの積を計算する。このとき,画面に 1*2*3*・・・・*10 = という風に表示
されるようにする'(N,S1) :-
    S2 is S1 * N,
    N2 is N + 1,
    write_formatted('%t*',[N]),
    '1から10までの積を計算する。このとき,画面に 1*2*3*・・・・*10 = という
風に表示されるようにする'(N2,S2).

32 :
>>31 (>>27)
% Prolog 改行の補正をし忘れた。すみません。
'1から10までの積を計算する。このとき,画面に 1*2*3*・・・・*10 = という風に表示されるようにする' :-
    '1から10までの積を計算する。このとき,画面に 1*2*3*・・・・*10 = というされるようにする'(1,1).
'1から10までの積を計算する。このとき,画面に 1*2*3*・・・・*10 = という風に表示されるようにする'(10,S1) :-
    S is S1 * 10,
    write_formatted('10 = %t\n',[S]),!.
'1から10までの積を計算する。このとき,画面に 1*2*3*・・・・*10 = という風に表示されるようにする'(N,S1) :-
    S2 is S1 * N,
    N2 is N + 1,
    write_formatted('%t*',[N]),
    '1から10までの積を計算する。このとき,画面に 1*2*3*・・・・*10 = という風に表示されるようにする'(N2,S2).

33 :
>>4
% Prolog
ベクトルの正規化(V1,V2) :-
    flat(V1,L1),
    分散(L1,_分散),
    U is sqrt(_分散) / _分散,
    行列の積(V1,[[U]],V2).
ベクトルの差([],[],[]) :- !.
ベクトルの差([[A]|R1],[[B]|R2],[[C]|R3]) :-
  C is A - B,
  ベクトルの差(R1,R2,R3).
normal(V1,V2) :- ベクトルの正規化(V1,V2).
dist(V1,V2,Dist) :- ベクトルの差(V1,V2,Dist).

34 :
http://pc12.2ch.net/test/read.cgi/tech/1276810079/133
# [1] 授業単元:C言語プログラミング
# [2] 問題文(含コード&リンク):
# [1] 授業単元:
# char buf[80];
# int main(int ac, char ** av)
# {
# int i;
# buf[0] = '\0';
# for(i = 1; i < ac; i++){
# printf("%3d \"%s\"\n", strlen(av[i]), av[i]);
# strcat(buf, av[i]);
# }
# printf("%3d \"%s\"\n", strlen(buf), buf);
#
# これを入力した文字列を逆順に表示できるように書き換えよ
#

35 :
>>34
% Prolog 視点を少しずらしてみた。EUC版は易しい。
バイナリーモードで読み込まれたバイトコードならびを逆順に並べ変えた後に、EUC全角文字を復元して文字列を作る'(_コードならび,_逆順文字列) :-
    reverse(_コードならび,_逆転したコードならび),
    'EUC全角文字コードを復元する'(_コードならび,_文字単位ならび),
    atom_codes(_逆順文字列,_文字単位ならび).
'EUC全角文字コードを復元する'([],[]) :- !.
'EUC全角文字コードを復元する'([C1,C2|R1],[C|R2]) :-
    C1 > 127,
    C2 > 127,
    C is C2 * 256 + C1,
    'EUC全角文字コードを復元する'(R1,R2),!.
'EUC全角文字コードを復元する'([C|R1],[C|R2]) :-
    'EUC全角文字コードを復元する'(R1,R2),!.

36 :
http://pc12.2ch.net/test/read.cgi/tech/1276810079/138
# 1] 授業単元:システムコール
# [2] 問題文(含コード&リンク):
# コマンドライン引数で指定された文字列のいずれかと一致する名前の環境変数につい てのみ、
# #include <stdio.h>
# #include <stdlib.h>
# extern char **environ;
# main()
# {
# char **p;
# for (p = environ; *p != NULL; p ++) {
# printf("%s\n", *p);}
# return 0;}
# や
# #include <stdio.h>
# #include <stdlib.h>
# main(int argc, char *argv[], char *envp[])
# {
# char **p;
# for (p = envp; *p != NULL; p ++) {
# printf("%s\n", *p);}
# return 0;}
# のように変数名と値を表示するプログラムを書け。
# ただし、コマンドライン引数に重複があっても、対応する環境変数について複数回表示してはならない

37 :
>>36
% Prolog
program :-
    user_parameters(L),
    append(_,[_環境変数名|R],L),
    環境変数の表示(_環境変数名),
    R = [].
環境変数の表示(_環境変数名) :-
    getenv(_環境変数名,_値),
    write_formatted('%t=%t\n',[_環境変数名,_値]),!.
環境変数の表示(_).

38 :
http://pc12.2ch.net/test/read.cgi/tech/1267796762/181
# 【 課題 】 GUIで電卓の機能をもったプログラムを作成してください。デザインや機能は自由ですが、最低四則演算はできるようにしてください。
# アプレットのソースは結構あるのですがXPに入っている電卓のようなものが
# 一番ベストです!!
# よろしくお願いします

39 :
http://pc12.2ch.net/test/read.cgi/tech/1276810079/135
# 配列a[n],配列b[n] と配列の大きさn を渡すと配列の
# 要素を入れ換えるプログラムをポインタを用いて作成せよ.
# 例えば,a[3]={1,2,3},b[3]={101,102,103}とすると
# き,結果として,a[3]={101,102,103},b[3]={1,2,3}と
# なるようにせよ.

40 :
>>39
% Prolog
二つのリストの最初のN要素だけ入れ替える(L1_1,L2_1,N,L1_2,L2_2) :-
    length(L1_0,N),
    length(L2_0,N),
    append(L1_0,R1,L1),
    append(L2_0,R2,L2),
    append(L2_0,R1,L3),
    append(L1_0,R2,L4),!.

41 :
>>40
% Prolog 論理変数名が間違ってました。ついでに2パターン追加。
二つのリストの最初のN要素だけ入れ替える(L1_1,L2_1,N,L1_2,L2_2) :-
    length(L1_0,N),
    length(L2_0,N),
    append(L1_0,R1,L1_1),
    append(L2_0,R2,L2_1),
    append(L2_0,R1,L1_2),
    append(L1_0,R2,L2_2),!.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
二つのリストの最初のN要素だけ入れ替える(L1_1,L2_1,N,L1_2,L2_2) :-
    integer(N),
    length(LN,N),
    二つのリストの最初のN要素だけ入れ替える(L1_1,L2_1,LN,L1_2,L2_2).
二つのリストの最初のN要素だけ入れ替える(R1,R2,[],R1,R2).
二つのリストの最初のN要素だけ入れ替える([A|R1_1],[B|R2_1],[_|R],[B|R1_2],[A|R2_2]) :-
    二つのリストの最初のN要素だけ入れ替える(R1_1,R2_1,R,R1_2,R2_2).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
二つのリストの最初のN要素だけ入れ替える(R1,R2,0,R1,R2).
二つのリストの最初のN要素だけ入れ替える([A|R1_1],[B|R2_1],N,[B|R1_2],[A|R2_2]):-
    N1 is N - 1,
    二つのリストの最初のN要素だけ入れ替える(R1_1,R2_1,N1,R1_2,R2_2).

42 :
http://pc12.2ch.net/test/read.cgi/tech/1276810079/144
# [1] 授業単元:C・プログラミング
# [2] 問題文(含コード&リンク):
# 深さ優先探索をリスト表現で表すプログラムを作成せよ。
# 制限は特にないです。
#

43 :
http://pc12.2ch.net/test/read.cgi/tech/1267796762/182
# 【 課題 】GUIを使って、Gメールなどのユーザー名とパスワードを入力する画面を作成する。また、アカウントを持ってない人用の
#       ページも作成し、そこに入力した内容はDBにデータが保存されるようにプログラムを作りなさい。

44 :
http://pc12.2ch.net/test/read.cgi/tech/1276810079/148
#   http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10733.txt
# 次の構造体について要素数3の構造体配列を宣言し、
# それぞれの値を標準入力(キーボードから入力)し、
# 各科目の平均点を表示するプログラムを作成しなさい。
# なお、表示は実効例通りになるようにすること。
#
# struct Score{
# int english; // 英語の点数
# int math; // 数学の点数
# int physics; // 物理の点数
# 実効例
# 1人目
# 英語:(入力した点数)
# 数学:(入力した点数)
# 物理:(入力した点数)
# 2人目
# 英語:(入力した点数)
# 数学:(入力した点数)
# 物理:(入力した点数)
# 3人目
# 英語:(入力した点数)
# 数学:(入力した点数)
# 物理:(入力した点数)
# 英語の平均点は(英語の平均点の計算結果を表示)です。
# 数学の平均点は(数学の平均点の計算結果を表示)です。
# 物理の平均点は(物理の平均点の計算結果を表示)です。

45 :
http://pc12.2ch.net/test/read.cgi/tech/1276810079/150
# [1] 授業単元:C++プログラミング
# [2] 問題文(含コード&リンク):三目並べを作成せよ。ポインタとクラスを使用。

46 :
http://pc12.2ch.net/test/read.cgi/tech/1276810079/166
# 表示例のように,名前,性別,身長,体重,腹囲(ウエスト)を3人分入力した後, 3名全員について入力データに加えてBMI値とメタボリック症候群の疑いの判定を 表示するプログラムを作成しなさい.
# プログラムでは,名前,性別,身長,体重,腹囲をまとめて 個人データとして表すための構造体を定義して利用すること.
# 注意
# " 体重はkg, 身長,腹囲はcmで入力する.
# " 性別は 1 で男性,2で女性を表す.
# " BMI値 = 体重(kg) / 身長(m)2
# " 男性は腹囲85cm以上,女性は腹囲90cm以上でメタボリック症候群の疑い がある
#
# 表示例
# データ1を入力してください
# 名前: Hanako
# 性別: 2
# 身長: 156.4
# 体重: 65.3
# 腹囲: 93.4
# 名前: Hanako, 性別: 女, 身長: 156.4, 体重: 65.3, 腹囲: 93.4, BMI: 26.7, メタボリック症候群の疑いがあります

47 :
>>44
% Prolog 相当に無理があるが、構造体配列に近いものを定義してみた。
構造体(点数([英語(_英語),数学(_数学),物理(_物理)])).
要素数3の構造体配列を宣言 :-
    length(L,3),
    findall(L1,(member(L1,L),構造体(点数(L1))),X),
    assertz(構造体配列(点数構造体ならび,X)).
:- 要素数3の構造体配列を宣言.
'それぞれの値を標準入力(キーボードから入力)し、各科目の平均点を表示する'
    構造体配列(点数構造体ならび(L)),
    findall(L1,(member(L1,L),三科目を入力する(L1)),L),
    各科目の平均点を表示する(L).
三科目を入力する([]) :- !.
三科目を入力する([P|R]) :-
    P =.. [F,Q],
    write_formatted('%t:',[F]),get_integer(Q),
    三科目を入力する(R).
各科目の平均点を表示する(L) :-
    構造体(点数(L0)),
    member(_科目構造,L0),
    _科目構造=..[_科目名,_点数],
    findavg(_点数,(member(L1,L),member(_科目構造,L1)),_平均点),
    write_formatted('%tの平均点は%tです。\n',[_科目名,_平均点]),
    fail.
各科目の平均点を表示する(_).

48 :
>>42
% Prolog
出会うまでリストを手繰る(_求めるもの,[_求めるもの|R]) :-
    write_formatted('!%t!\n',[_求めるもの]).
出会うまでリストを手繰る(_求めるもの,[A|R]) :-
    list(A),
    write_formatted('%t-',[A]),
    出会うまでリストを手繰る(_求めるもの,A);
    \+(list(A)),
    write_formatted('%t-',[A]),
    出会うまでリストを手繰る(_求めるもの,R).

49 :
>>48 (>>42)
% Prolog 間違えました。>>48は、深く潜ってのリストの探索に失敗するとそれで終わりになってしまいます。
出会うまでリストを手繰る(_求めるもの,[_求めるもの|R]) :-
    write_formatted('!%t!\n',[_求めるもの]).
出会うまでリストを手繰る(_求めるもの,[A|R]) :-
    list(A),
    出会うまでリストを手繰る(_求めるもの,A);
    出会うまでリストを手繰る(_求めるもの,R).
出会うまでリストを手繰る(_求めるもの,[A|R]) :-
    \+(list(A)),
    write_formatted('%t-',[A]),
    出会うまでリストを手繰る(_求めるもの,R).

50 :
>>49 (>>42)
% Prolog これも致命的な欠陥がありました。一応訂正したものから示すと、
出会うまでリストを手繰る(_求めるもの,[_求めるもの|R]) :-
    write_formatted('!%t!\n',[_求めるもの]).
出会うまでリストを手繰る(_求めるもの,[A|R]) :-
    list(A),
    出会うまでリストを手繰る(_求めるもの,A).
出会うまでリストを手繰る(_求めるもの,[_|R]) :-
    list(A),
    出会うまでリストを手繰る(_求めるもの,R).
出会うまでリストを手繰る(_求めるもの,[A|R]) :-
    \+(list(A)),
    write_formatted('%t-',[A]),
    出会うまでリストを手繰る(_求めるもの,R).
% >>49 のどこがいけないかというと、Aがリストでないとき、
% \+(list(A))の節が実行されるのではなく、list(A)の節の ;より後の副目標が
% 実行されてしまいます。これだと write_formatted('%t-',[A]),による
% トレースができませんね。
出会うまでリストを手繰る(_求めるもの,[A|R]) :-
    list(A),
    出会うまでリストを手繰る(_求めるもの,A);
    出会うまでリストを手繰る(_求めるもの,R).
出会うまでリストを手繰る(_求めるもの,[A|R]) :-
    \+(list(A)),
    write_formatted('%t-',[A]),
    出会うまでリストを手繰る(_求めるもの,R).

51 :
>>46
% Prolog
'名前,性別,身長,体重,腹囲(ウエスト)を3人分入力した後, 3名全員について入力 データに加えてBMI値とメタボリック症候群の疑いの判定を表示する' :-
    '名前,性別,身長,体重,腹囲(ウエスト)を3人分入力'(L),
    '3名全員について入力データに加えてBMI値とメタボリック症候群の疑いの判定を表示する'(L).
'名前,性別,身長,体重,腹囲(ウエスト)を3人分入力'(L) :-
    findall([_名前,_性別,_身長,_体重,_腹囲],(
          for(1,N,3),
          write('名前:'),get_line(_名前),
          write('性別:'),get_integer(_性別),
          write('身長:'),get_integer(_身長),
          write('体重:'),get_integer(_体重),
          write('腹囲:'),get_integer(_腹囲)),
        L).
'3名全員について入力データに加えてBMI値とメタボリック症候群の疑いの判定を表示する'([]) :- !.
'3名全員について入力データに加えてBMI値とメタボリック症候群の疑いの判定を表示する'([[_名前,_性別,_身長,_体重,_腹囲]|R]) :-
    write_formatted('%t:%t, %t:%t, %t:%t, %t:%t,%t :%t, ',[名前,性別,身長,体重,腹囲,_名前,_性別,_身長,_体重,_腹囲]),
    _BMI値 = _体重 / ((_身長 / 100) ^ 2),
    write_formatted('%t:%t, ',['BMI値:',_BMI値]),
    診断(_性別,_腹囲,_診断),
    write_formatted('%t\n',[_診断]),
    '3名全員について入力データに加えてBMI値とメタボリック症候群の疑いの判定を表示する'(R).
診断(1,_腹囲,メタボリック症候群の疑いがあります) :- _腹囲 >= 85,!.
診断(2,_腹囲,メタボリック症候群の疑いがあります) :- _腹囲 >= 90,!.
診断(_,_,'').

52 :
>>51
% Prolog 名前が整数では困りますね。それから整数とは限らない入力が多いようなので
'名前,性別,身長,体重,腹囲(ウエスト)を3人分入力'(L) :-
findall([_名前,_性別,_身長,_体重,_腹囲],(
for(1,N,3),
write('名前:'),get_line(_名前),
write('性別:'),get_line(Line),atom_to_term(Line,_性別,_),
write('身長:'),get_line(Line),atom_to_term(Line,_身長,_),
write('体重:'),get_line(Line),atom_to_term(Line,_体重,_),
write('腹囲:'),get_line(Line),atom_to_term(Line,_腹囲,_)),
L).

53 :
http://pc12.2ch.net/test/read.cgi/tech/1276810079/170
# 【質問テンプレ】
# [1] 授業単元: C言語プログラミング
# [2] 問題文(含コード&リンク):
# 1.関数sqrtを使って1〜10までの二乗根の和を求めなさい。
# 2.16進数ABC.DEを10進数にしなさい。

54 :
>>53
% Prolog
'関数sqrtを使って1〜10までの二乗根の和を求める'(X) :-
    findsum(Y,(for(1,N,10),Y is sqrt(N)),X).
'16進数ABC.DEを10進数に変換'(X) :-
    小数点を含む16進数を10進数に変換('ABC.DE',X).
小数点を含む16進数を10進数に変換(_16進文字列,_10進数) :-
    sub_atom(_16進文字列,S,1,RLen,'.'),
    sub_atom(_16進文字列,0,S,_,S_1),
    sub_atom(_16進文字列,S+1,RLen,_,S_2),
    '16進文字列表現を10進整数に変換'(S_1,N1),
    '16進文字列表現を10進整数に変換'(S_2,N2),
    Z is truncate(16 ^ RLen),
    _10進数 is N1 + N2 / Z.
% '16進文字列表現を10進整数に変換'/2 は http://nojiriko.asia/prolog/c136_75.html 参照

55 :
http://pc12.2ch.net/test/read.cgi/tech/1276810079/172
# 【質問テンプレ】
# [1] 授業単元: プログラミングB
# [2] 問題文(含コード&リンク):実行したい処理を選ぶことが可能なプログラムを作りなさい。このとき、実
# 行できる処理は以下の三つとする。
#
# 処理1:複数の2択問題への回答に応じた結果を表示する。(例:職種選択、旅行先選び
#
# 処理2:文字コード一覧表を出力する。(文字コード32~126を一行に8文字ずつ)
#
# 処理3:本のページ数を入力し、その本を読み切るために必要な日数を表示
#     する。このとき、初日は10ページ、2日目は20ページ,,,と読むページ
#     数は増加するものとする。
#
# 以下の仕様で作成すること
#
# キーボードから入力された数に応じて、switch文で各処理に移動する。
# 処理1:if文を使って
# 処理2:for文を使って
# 処理3:while文またはdo・while文を使って。

56 :
http://pc12.2ch.net/test/read.cgi/tech/1276810079/190
# モンテカルロ法で√2の近似値を求めたいのですが、
# ネット調べてみるとモンテカルロ法と言えばπの近似に関するばかりで・・・
# どなたか教えてくださいませ
#

57 :
http://pc12.2ch.net/test/read.cgi/tech/1276810079/192
# [1] 授業単元:プログラミング演習
# [2] 問題文(含コード&リンク):
# 問題1:char name[20], int english, int mathematicsをメンバとする構造体 scoreを定義せよ
# 問題2:以下の5人の情報をもつ配列 seito[5] を、問題1で作成した構造体 score 型を使って宣言せよ。なお、5人の情報は初期値として宣言することにする。
# name  english mathematics
# "yamada" 50 70
# "tanaka" 70 60
# "suzuki" 80 70
# "yamamoto" 40 60
# "sakata" 90 80
# 問題3:問題2で初期値を代入した構造体 score 型の構造体配列 seito[5] を宣言し、各メンバ変数をソートする関数を作成せよ。

58 :
>>56% Prologモンテカルロ法で√2の近似値を求める(_試行回数,_除数,X) :-    count((for(1,N,_試行回数),U is (random mod _除数) ^ 2,U < _除数 * _除数/ 2),Y),    X is Y / (_試行回数 / 2).

59 :
>>58
% Prolog 字化けしてしまいました。書き直し。
モンテカルロ法で√2の近似値を求める(_試行回数,_除数,X) :-
    count((for(1,N,_試行回数),U is (random mod _除数) ^ 2,U < _除数 * _除数/ 2),Y),
    X is Y / (_試行回数 / 2).

60 :
http://pc12.2ch.net/test/read.cgi/tech/1276810079/195
# [1] 授業単元:情報処理
# [2] 問題文:ガウスの消去法のプログラムをピボット対応と
#       ピボット非対応の2つ作成し、連立方程式の解を求めよ。
#      (ただし解くべき連立方程式は5元1次方程式で、ピボットの
#       発生するものと発生しないものの2種類とする)

61 :
http://pc12.2ch.net/test/read.cgi/tech/1276810079/196
# 演習6-1
#
# 複数の文字列を読み込み,それらの文字列を空白を入れて繋ぎ合わせるプログラムを作成せよ.
#
# 【実行例】
#
# 何個の文字列を入力しますか?:3
# 入力文字列[1]:A
# 入力文字列[2]:B
# 入力文字列[3]:C
#
# 結果:A B C
#
# 演習6-3
#
# 入力したDNA塩基配列中にある塩基 t, c, a, gそれぞれの個数をカウントするプログラムを作成せよ.
# 【実行例】
#
# % ./a.out
# tataatccg ← 入力し,リターンを押して ^D
# Thymine (t) : 3
# Cytosine (c) : 2
# Adenine (a) : 3
# Guanine (g) : 1
# %

62 :
>>61
% Prolog
http://nojiriko.asia/prolog/c137_196.html

63 :
http://pc12.2ch.net/test/read.cgi/tech/1276810079/198
# ファイルkadai.txt に記述された数行の数値を表す文字列を読み込み、
# 整数に変更して数値として表示するプログラムを作成せよ。
# 関数としてstrtol()を使用すれば問題ないが、同じ機能の関数を作成すること。
# 基数の設定に関する引数は必要なくデフォルト(先頭が0 なら8 進、それ以外は10 進、16 進は使用しない)とする
#

64 :
>>63
% Prolog
'ファイルkadai.txt に記述された数行の数値を表す文字列を読み込み、整数に変更して数値として表示する' :-
    get_lines('kadai.txt',_行ならび),
    append(_,[_行文字列|R],_行ならび),
    整数に変更して(_行文字列,_整数),
    write_formatted('%t\n',[_整数]),
    R = [].
整数に変更して(_行文字列,_整数) :-
    sub_atom(_行文字列,0,1,_,'0'),
    atom_codes(_行文字列,Codes),
    reverse(Codes,Codes2),
    反転した基数コードならびから10進数を得る(8,Codes2,_整数),!.
整数に変更して(_行文字列,_整数) :-
    atom_codes(_行文字列,Codes),
    reverse(Codes,Codes2),
    反転した基数コードならびから10進数を得る(10,Codes2,_整数),!.
反転した基数コードならびから10進数を得る(_,[],0) :- !.
反転した基数コードならびから10進数を得る(_基数,[C|R],M) :-
    \+((C >=48,C =< 57)),
    反転した基数コードならびから10進数を得る(_基数,R,M),!.
反転した基数コードならびから10進数を得る(_基数,[C|R],M) :-
    M0 is C - 48,
    反転した基数コードならびから10進数を得る(_基数,R,M2),
    M is M2 * _基数 + M0.

65 :
# バブルソートでは, 配列のデータがすでに適正な順序, あるいはそれに近い順序で並んでいても
# n-1回の走査をしなければならない. すなわち, n(n-1)/2回の比較が行われなければならない. そこで, 各回の走査の終わりに,
# 交換が行われたか否かをチェックするようにし, 交換が行われていなければそれ以上走査の必要はないのでソートを完了するようなプログラムを作成しなさい.
# sizeofは使わない。
# ↓のような出力結果になるようにする。
# 初期状態: 10, 3, 1, 15, 2, 7
# [1回目の走査]
# 1回目の交換: 3, 10, 1, 15, 2, 72回目の交換: 3, 1, 10, 15, 2, 73回目の交換: 3, 1, 10, 2, 15, 74回目の交換: 3, 1, 10, 2, 7, 15
# [2回目の走査]
# 1回目の交換: 1, 3, 10, 2, 7, 15 2回目の交換: 1, 3, 2, 10, 7, 15 3回目の交換: 1, 3, 2, 7, 10, 15
# [3回目の走査]
# 1回目の交換: 1, 2, 3, 7, 10, 15
# [4回目の走査]
#
# 最終状態: 1, 2, 3, 7, 10, 15

66 :
http://pc12.2ch.net/test/read.cgi/tech/1276810079/212
# [1] 授業単元: 数値解析
# [2] 問題文(含コード&リンク): http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10745.txt
# ニュートン・ラフソン法についての問題です。教科書に例題として載っていたプログラミングに今回問題となっている方程式の当てはめ方がわかりません(おそらく初歩的な事だと思われます)
#

67 :
http://pc12.2ch.net/test/read.cgi/tech/1276810079/213
#
# [1] 授業単元:数値計算
# [2] 問題文(含コード&リンク):
#
# 以下に示す2階の定係数線形同次微分方程式につ
# いて,初期値y(0)=a, y’(0)=bをキーボードから入力し,
# t=4における値を出力するプログラムを作成する.
#
# y''(t)+2y'(t)+2y(t)=0
# 条件 y(0)=2 , y'(0)=-2
#
# 答え y(4)=-0.02394
#

68 :
http://pc11.2ch.net/test/read.cgi/db/1274791771/188
# 学校でSQLの授業とっててこんな問題が出たけど理解不能だったんで助けてくだしあ。
#
# XMLについて、その概要をコンピュータの意味処理という視点から書いて下さい。
# また、実際にどのような分野で使われていますか?
# 具体例を一つあげて説明してください。
#

69 :
# 今2つのテキストファイルがあって、内容はおおよそ下のようです
#
# --------------テキストA-------------------
# fcart1 -0.0000000000E+00 -0.0000000000E+00 1.0770536961E-04
# -0.0000000000E+00 -0.0000000000E+00 6.6543134784E-04
# -0.0000000000E+00 -0.0000000000E+00 -7.7313671745E-04
# getden1 0
# ------------------------------------------
#
# --------------テキストB--------------------
# xred 0.0 0.0 0.047843858990
# 0.0 0.0 0.000434433306
# 1/3 2/3 -0.011730466739
# #Definition of the planewave basis set
# ------------------------------------------
# テキストAの一番右の列の数値3つをそれぞれ上から順番に、テキストBの一番右の列の数値に足したいのですが
# どのようにしたらいいでしょうか

70 :
>>69
% Prolog (その一)
テキストAの一番右の列の数値3つをそれぞれ上から順番に、テキストBの一番右の列の
数値に足す(_テキストA,_テキストB) :-
    get_lines(_テキストA,LinesA),
    get_lines(_テキストB,LinesB),
    テキストAの一番右の列の数値3つをそれぞれ上から順番に、テキストBの一番
右の列の数値に足す(LinesA,LinesB,LinesC),
    put_lines(_テキストB,LineC).
テキストAの一番右の列の数値3つをそれぞれ上から順番に、テキストBの一番右の列の
数値に足す(LinesA,LinesB,LinesC) :-
    テキストの一番右の列の数値を切り取る(LinesA,LA),
    テキストの一番右の列の数値を切り取る(LinesB,LB),
    加算([LA,LB],LC),
    テキストBの最終数値要素を置換(LB,LC,LineC).
テキスト一番右の列の数値を切り取る([],[]) :- !.
テキスト一番右の列の数値を切り取る([Line|R1],[V|R2]) :-
    split(Line,[ ],L),
    数値要素が3個以上(L),
    last(L,V),
    テキストAの一番右の列の数値を切り取る(R1,R2).

71 :
>>69
% Prolog (その二)
テキストBの最終数値要素を置換([],_,[]) :- !.
テキストBの最終数値要素を置換([Line|R1],[V|R2],[LineC|R3]) :-
    sPLIT(Line,[ ],L1),
    数値要素が3個以上(L1),
    length(L1,Len),
    findmax(Nth,(
           for(1,Nth,Len),
           list_nth(Nth,L1,V1),number(V1)),
        LastNth),
    要素番号によるならびの置換(LastNth,V,L1,L3),
    concat_atom(L3,LineC),
    テキストBの最終数値要素を置換(R1,R2,R3),!.
テキストBの最終数値要素を置換([Line|R1],L2,[Line|R3]) :-
    テキストBの最終数値要素を置換(R1,L2,R3),!.
数値要素が3個以上(L1) :-
    count((member(A,L1),number(A)),Count),
    Count >= 3,!.

72 :
>>70
% Prolog 改行位置の調整をし忘れた。これを忘れるとatomの途中で改行してしまう。
http://nojiriko.asia/prolog/perl_ni_tsuite43_627.html を参照してください。

73 :
>>69
使用言語:J
マイナス符号を変換しなくてはいけないのがめんどう。
(9!:11)16 NB.表示桁数を16桁にする
load 'strings'
read=: 1!:1
f=: monad define
".>}:{:@cutopen;._2 toJ (read y) rplc '-';'_'
)
(f <'texta.txt') + f <'textb.txt'
0.04795156435961 0.00109986465384 _0.01250360345645

74 :
http://pc12.2ch.net/test/read.cgi/tech/1274121477/320
# 日本語文章中の複数の単語を置換したいです。
# ファイルは一つのディレクトリに複数あります。
# >http://ime.nu/www.machu.jp/diary/20070224.html#p01
# ファイル検索はcygwin かlinux上なので上記を参考にしています。
# trではうまくいきませんでした。
#
# お題
#
# 拡張子が .rb の全てのファイルに対して、
#
# #!/usr/bin/env ruby
#
# を
#
# #!/usr/local/bin/ruby
#
# に置換する。ついでに、「ruby」という文字を「perl」に置き換える

75 :
http://pc12.2ch.net/test/read.cgi/tech/1266565626/627

76 :
>>74
% Prolog
'拡張子が .rb の全てのファイルに対して、#!/usr/bin/env ruby を #!/usr/local/bin/ruby に置換する。ついでに、「ruby」という文字を「perl」に置き換える' :-
    shs('ls -N *.cs',Files),
    append(_,[File|R],Files),
    get_lines(File,Lines),
    指定された内容に文字列を置換する(Lines,Lines2),
    put_lines(File,Lines2),
    R = [].
指定された内容に文字列を置換する([],[]) :- !.
指定された内容に文字列を置換する([Line|R1],[Line2|R2]) :-
    sub_atom(Line,_,_,_,A1,'#!/usr/bin/env ruby',A3,L1,L2,L3),
    concat_atom([A1,'#!/usr/local/bin/ruby',A3],Line1),
    rubyをperlに置換する(Line1,Line2),
    指定された内容に文字列を置換する(R1,R2),!.
指定された内容に文字列を置換する([Line|R1],[Line2|R2]) :-
    rubyをperlに置換する(Line,Line2),
    指定された内容に文字列を置換する(R1,R2).
rubyをperlに置換する(Line,Line2) :-
    replace_all(Line,ruby,perl,Line2).
% replace_all/3は http://nojiriko.asia/prolog/replace_atom.html 参照

77 :
>>66 問題文が抜けてしまいました。
#
# 問題
# 適当な数字a,b,cを用いてax^3+bx^2-cx=0なる3次方程式をニュートン・ラフソン法を用いて解く為のプログラムを作成せよ。
#
# 以下は教科書に載っていたx^3-1=0を解く為の参考とするプログラムです。これを今回の問題に当てはめて解くようです。
#
# /* 《 ニュートン・ラフソン法の関数 》 */
# void S_NEWT(int *n,double *x0,double e,int NMAX,double (*FUNC)())
# /* n : スカラー 反復回数 (Out)
# x0 : スカラー 初期値(解) (In/Out)
# e : スカラー 収束判定定数 (In)
# NMAX : スカラー 最大反復回数 (In)
# FUNC : ユーザー定義関数 (In) */

78 :
>>66
% Prolog
'適当な数字a,b,cを用いてax^3+bx^2-cx=0なる3次方程式をニュートン・ラフソン法を用いて解く'(_最大反復回数,_収束判定定数,A,B,C,X0,X) :-
    Y0 is A * X0 ^ 3 + B * X0 ^ 2 + C * X0,
    '3次曲線上の(X0,Y0)が接点となる直線がX座標と交差する(X1,0)は'(1,_最大反復回数,_収束判定定数,A,B,C,X0,Y0,X).
'3次曲線上の(X0,Y0)が接点となる直線がX座標と交差する(X1,0)は'(N,_最大反復回数,_,_,_,X,_,X) :- N > _最大反復回数,!.
'3次曲線上の(X0,Y0)が接点となる直線がX座標と交差する(X1,0)は'(_,_,_収束判定定数,_,_,_,X,_,X) :-
    Y =< _収束判定定数,!.
'3次曲線上の(X0,Y0)が接点となる直線がX座標と交差する(X1,0)は'(N,_最大反復回数,_収束判定定数,A,B,C,X0,Y0,X) :-
    次のXはX軸との交点のX座標(A,B,C,X0,Y0,_X軸との交点のX座標,Y1),
    N2 is N + 1,
    '3次曲線上の(X0,Y0)が接点となる直線がX座標と交差する(X1,0)は'(N2,_最大反復回数,_収束判定定数,A,B,C,_X軸との交点のX座標,Y1,X).
次のXはX軸との交点のX座標(A,B,C,X0,Y0,_X軸との交点のX座標,Y1) :-
    _傾き is 3 * A * (X0 ^ 2) + 2 * B * X0 + C,
    _Y軸との交点のY座標 is Y0 - _傾き * X0,
    _X軸との交点のX座標 is (-1) * (_Y軸との交点のY座標) / _傾き,
    Y1 is A * _X軸との交点のX座標 ^ 3 + B * _X軸との交点のX座標 ^ 2 + C * _X軸との交点のX座標,!.

79 :
http://pc12.2ch.net/test/read.cgi/tech/1276810079/215
# [1] 授業単元: 画像処理
#
# [2] 問題文(含コード&リンク):
# 入力した2値白黒画像をハフ変換して直線および円を検出し、結果を表示するプログラムを作成せよ。
# 直線の式はρ= xcosθ + ysinθを、円の式はr2= (x-a)2 + (y-b)2をそれぞれ使用する。
#
# なお、直線について処理後のρθ平面を濃淡画像として出力せよ。
# 円については処理後のabrパラメータ空間をGnuplotを用いて、
# 1点のエッジに対する軌跡(円錐)と2点以上のエッジに対する軌跡(円錐)を出力せよ。
#
# また、円と直線両方について、3種類以上に閾値を変化させた実験結果を逆変換し、
# その結果を原画像に投影した画像も出力せよ。

80 :
http://pc12.2ch.net/test/read.cgi/tech/1276810079/217
# [1] 授業単元:プログラミング
# [2] 問題文(含コード&リンク):
# 午前四時から正午までは Good Morning! と、
# 正午から午後八時までは Good Afternoon! と、
# 午後八時から午前四時までは Good Evening! と、表示するプログラムを書け。ただし、境界の時刻は前の時間帯に含まれるものとする
#
#

81 :
>>80
% Prolog
挨拶 :-
    '午前四時から正午までは Good Morning! と、正午から午後八時までは Good Afternoon! と、午後八時から午前四時までは Good Evening! と、表示する'.
'午前四時から正午までは Good Morning! と、正午から午後八時までは Good Afternoon! と、午後八時から午前四時までは Good Evening! と、表示する' :-
    _時刻 is time,
    localtime(_時刻,_年,_月,_日,_曜日番号,_通算日数,_時,_分,_秒),
    挨拶を表示する(_時,_分,_秒),!.
挨拶を表示する(_時,_分,_秒) :-
    [_時,_分,_秒] @> [4,0,0],
    [_時,_分,_秒] @=< [12,0,0],
    write(' Good Mornig! \n').
挨拶を表示する(_時,_分,_秒) :-
    [_時,_分,_秒] @> [12,0,0],
    [_時,_分,_秒] @=< [20,0,0],
    write(' Good Afternoon! \n').
挨拶を表示する(_時,_分,_秒) :-
    [_時,_分,_秒] @> [20,0,0],
    write(' Good Evening! \n').
挨拶を表示する(_時,_分,_秒) :-
    [_時,_分,_秒] @=< [4,0,0],
    write(' Good Evening! \n').

82 :
>>80
使用言語:J
f=: monad define
'Good ',>(3|<.8%~4+3{6!:0''){'Evening!';'Morning!';'Afternoon!'
)
f ''
Good Afternoon!

83 :
http://pc12.2ch.net/test/read.cgi/tech/1197620454/609
# 以下の問題を頼む。(ルンゲクッタ、クラス、配列、ファイルの書き込み、反復処理を使って)
#
# GAを使って理想的なドアになるようにkp,kd,mを求める
# m:ドアの重さ
# v:ドアの閉まる速さ
# kp:ばね定数
# kd:ダンパー
# x:距離
# x':xをtで微分
# x'':xをtで二階微分
#
# eq of motion
# -kp*x-kd*x'=m*x''
#

84 :
http://pc12.2ch.net/test/read.cgi/tech/1276810079/218
# [1] 授業単元: プログラム
# [2] 問題文(含コード&リンク): 番号 国語 数学 英語のメンバを持っている構造体を作って各教科の平均値と、全平均値を求めてください。(人数は4人とか5人で行ってください。あと番号っていうのは、番号は、4人なら1〜4までで5人なら1〜5までです)

85 :
>>80
使用言語:Io
f := method(
writeln("Good ",list("Evening!","Morning!","Afternoon!")at(((Date hour + 4) / 8) floor % 3))
)
Io> f()
Good Afternoon!
==> nil

86 :
>>84
% Prolog
構造定義(成績,成績(_番号,_国語,_数学,_英語)).
構造検査(成績,成績(_番号,_国語,_数学,_英語)) :-
    integer(_番号),integer(_国語),integer(_数学),integer(_英語).
'番号 国語 数学 英語のメンバを持っている構造体を作る :-
    '番号 国語 数学 英語のメンバを持っている構造体を作る'(1,L).
'番号 国語 数学 英語のメンバを持っている構造体を作る(_,[]) :-!.
'番号 国語 数学 英語のメンバを持っている構造体を作る(N,[[A,B,C]|R]) :-
    assertz(成績(N,A,B,C)),
    N2 is N + 1,
    '番号 国語 数学 英語のメンバを持っている構造体を作る(N2,R).
各教科の平均値と、全平均値を求める(_各教科の平均,_全平均値) :-
    findavg([_国語,_数学,_英語],(
          成績(_,_国語,_数学,_英語),
        _各教科の平均値ならび),
    findavg(_個人合計,(
          成績(_,_国語,_数学,_英語),
          _個人合計 is _国語 + _数学 + _英語),
        _全平均値).

87 :
>>86 (>>84)
% Prolog 述語名の終わりの'が落ちているところがあった。
構造定義(成績,成績(_番号,_国語,_数学,_英語)).
構造検査(成績,成績(_番号,_国語,_数学,_英語)) :-
    integer(_番号),integer(_国語),integer(_数学),integer(_英語).
'番号 国語 数学 英語のメンバを持っている構造体を作る' :-
    '番号 国語 数学 英語のメンバを持っている構造体を作る'(1,L).
'番号 国語 数学 英語のメンバを持っている構造体を作る'(_,[]) :-!.
'番号 国語 数学 英語のメンバを持っている構造体を作る'(N,[[A,B,C]|R]) :-
    assertz(成績(N,A,B,C)),
    N2 is N + 1,
    '番号 国語 数学 英語のメンバを持っている構造体を作る'(N2,R).
各教科の平均値と、全平均値を求める(_各教科の平均,_全平均値) :-
    findavg([_国語,_数学,_英語],(
          成績(_,_国語,_数学,_英語),
        _各教科の平均値ならび),
    findavg(_個人合計,(
          成績(_,_国語,_数学,_英語),
          _個人合計 is _国語 + _数学 + _英語),
        _全平均値).

88 :
しまった。境界の時刻の処理ができていません。
>>82 >>85 はボツにしてください。

89 :
http://pc12.2ch.net/test/read.cgi/tech/1276810079/224
# [1] 授業単元: 解析
#
# [2] 問題文(含コード&リンク):
# x=1.0, 1.1,...,3.9, 4.0が与えられた時のlogxの値をラグランジュ補間で求め、
# その近似値とlogxの真値をそれぞれ出力せよ。
# また、求めた値と真値との誤差(絶対値)も求め、一次多項式の誤差と2次多項式の誤差を
# それぞれ出力せよ。

90 :
http://pc12.2ch.net/test/read.cgi/tech/1276810079/226
# [1] 授業単元:プログラミング演習
# [2] 問題文(含コード&リンク):
# 構造体Triangleを下のように定義する。
# http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10750.txt
# この構造体により一つの三角形を表現する。
# Triangle構造体の構成要素は、三つの頂点のx座標、y座標をメンバとして持つ構造体Pointである。
# このTriangle構造体を用いて、以下の使用に従う関数を作成し、任意の三角形の面積、その三角形を適切な2×2行列で線形変換した結果の三角形の座標とその面積、および任意の二つの三角形が合同であるかどうかを表示するプログラムを実装しなさい。
# ・一つのTriangle構造体の変数を引数とし、その構造体が表す三角形の面積を返す関数。
# ・一つのTriangle構造体の変数と、double型の二次元配列(2×2行列Aとする)を引数とし、引数で与えた三角形を行列Aによって線形変換した後の三角形を返す関数。
# ・二つのTriangle構造体の変数を引数とし、その構造体が合同であれば1を、合同でなければ0を返す関数。
#

91 :
http://pc12.2ch.net/test/read.cgi/tech/1276810079/223
# 【質問テンプレ】
# [1] 授業単元:画像処理
# [2] 問題文:http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10749.txt
#
# <問題>
# 画像ファイル1つに対して、ラプラシアンマスクを適用した画像を作成せよ。
# ラプラシアンマスクは下図に示す8近傍方を使用すること。
# | -1|-1 |-1|
# | -1| 8 |-1|
# | -1|-1 |-1|
#
# ラプラシアンマスクを画像に適用したあとの画素値が(0〜255 の範囲外になった場合、0よりも小さいならば0に、255以上ならば255にすること。)
# 今回は画像の縁については処理を行わなくてよい。
#
# 画像の作成にはbmp.hに定義されたSaveBMPを用いて行う。
# ヘッダファイルの定義は http://nojiriko.asia/data/10669.txt にコピー保存させていただきました。

92 :
http://pc11.2ch.net/test/read.cgi/db/1274791771/197
# ・DBMS名とバージョン
# VB2008でOLEDBを使ってOracle10gに繋いでます。
#
# ・テーブルデータ
# どの部品にはどの部品が使われてて〜といううような、
# 部品の構成を表す、下記のような親子関係と必要数のテーブルがあります
# -------------
# OYA KO KAZU
# -------------
# A   B  1
# A   G  1
# B   C  1
# B   F  1
# C   D  1
# C   E  1
# G   C  2
# G   H  1
#

93 :
>>92 のつづきです。
#
# ツリーで表記すると、
# A
# ├B
# │├C
# ││├D
# ││└E
# │└F
# └G
#  ├C
#  │├D
#  │└E
#  └H
#
# Aという部品は、BとGの部品で出来ている。
# Bという部品はCとFの部品で出来ている〜という感じです。
#

94 :
>>92 >>93 のつづきです。

95 :
>>92 >>93 のつづきです。
# ・欲しい結果
# これを階層のレベルと、それぞれの子の合計数を出したい。
# ここでいうBの下のCは1なので、DもEも1だが、
# Gの下のCは2なので、DもEもx2されて2になる
# ----------------
# LV KO  GOUKEI
# ----------------
# 1  B   1
# 2  C   1
# 3  D   1
# 3  E   1
# 2  F   1
# 1  G   1
# 2  C   2
# 3  D   2
# 3  E   2
# 2  H   1
#

96 :
http://pc11.2ch.net/test/read.cgi/db/1274791771/200
# JDK1.4とオラクル9iです
#
# TESTのテーブルから下の結果を得たいのですが可能でしょうか?
#
# 1カラム目はIDで
# 2カラム目は開始日で
# 3カラム目は終了日です
#
#
# テーブルTEST
# a,20110403,20110611
# b,20110505,20110721
#
# 結果
# a,201104
# a,201105
# a,201106
# b,201105
# b,201106
# b,201107
#

97 :
>>80
使用言語:J
分、秒も参照するようにしました。
f=: monad define
'Good ',>(3|<.8%~3+({.>.@+[:*[:+/}.)3 4 5{6!:0''){'Evening!';'Morning!';'Afternoon!'
)
f ''
Good Morning!

98 :
>>89
% Prolog
標本値を採取(LX,LY) :-
    findall(X,(for(10,N,40),X is N / 10),LX),
    findall(Y,(member(V,LX),Y is log(V)),LY).
ラグランジェ補間(X,Y) :-
    標本値を採取(LX,LY),
    ラグランジェ補間(LX,LY,X,0.0,Y).
ラグランジェ補間(_,_,[],[],_,Y,Y) :- !.
ラグランジェ補間([B|R1],[C|R2],X,A,Y) :-
    ラグランジェ補間(LX,[B|R1],X,1.0,U),
    A2 is A + U * C,
    ラグランジェ補間(R1,R2,X,A2,Y).
ラグランジェ補間([],_,_,U,U) :- !.
ラグランジェ補間([C|R1],[B|R2],X,D,U) :-
    \+(R1=R2),!,
    D2 is D * (X-C) / (B-C),
    ラグランジェ補間(R1,[B|R2],X,D2,U).
ラグランジェ補間([C|R1],[B|R2],X,D,U) :-
    ラグランジェ補間(R1,[B|R2],X,D,U).

99 :
http://pc12.2ch.net/test/read.cgi/tech/1267796762/186
# 【課題 】ネストを用いて九九を出力するためのプログラムを2種類作成
# 【 補足】出力画面は1行で1*1=1〜1*9、2行目は1*2=2〜9*2となるように表示するプログラムと(下は例)
# 1*1=1 2*1=1 3*1=3 4*1=4 5*1=5 6*1=6 7*1=7 8*1=8 9*1=9
# 1*2=2 2*2=2 3*2=6 4*2=8 5*2=10 6*2=12 7*2=14 8*2=16 9*2=18
# ・
# 1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 8*9=72
# 1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9*=81
# もうひとつは下記みたいに数字が横3つごとにに出力されるプログラムです
# 1*1=1 2*1=2 3*1=3
# 1*2=2 2*2=4 3*2=6
# ・   ・    ・
# 1*8=8 2*8=16 3*8=24
# 1*9=9 2*9=18 3*9=27
#
# 4*1=4 5*1=5 6*1=6
# 4*2=8 5*2=10 6*2=12
# ・   ・    ・
# 4*8=32 5*8=40 6*8=48
# 4*9=36 5*9=45 6*9=54
#
# 7*1=7 8*1=8 9*1=9
# ・   ・    ・
# 7*9=63 8*9=72 9*9=81
# 行数の関係で・・と省略したところもありますが実際は・を省略せずに作成してください

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 削除依頼
・ 次のスレ
何でNULLって言うんですか?
ライフゲーム
YOUTUBEをすソフトを作りたい
市販ゲームソフト開発のための言語