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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
前スレは512k超えで終了しました。
2デフォルトの名無しさん:2010/06/19(土) 00:06:50
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デフォルトの名無しさん:2010/06/19(土) 00:09:04
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デフォルトの名無しさん:2010/06/19(土) 00:11:08
http://pc12.2ch.net/test/read.cgi/tech/1274827528/941
# ベクトルを規格化する関数 normal
#
# 2つのベクトルの差の大きさを返す関数 dist を作成せよ。
#
# よろしくお願いします
#

5デフォルトの名無しさん:2010/06/19(土) 00:13:51
http://pc12.2ch.net/test/read.cgi/tech/1276810079/5
# 次の問題を解くプログラムを再帰を使って実装せよ。
# 問題 コインの種類として、1,5,8,10,15の5種類を与える。
# に対して、最小枚数のコインでmを支払うときの枚数を求めよ。
#

6デフォルトの名無しさん:2010/06/19(土) 00:24:25
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デフォルトの名無しさん:2010/06/19(土) 00:27:38
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デフォルトの名無しさん:2010/06/19(土) 04:52:35
>>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デフォルトの名無しさん:2010/06/19(土) 08:30:47
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デフォルトの名無しさん:2010/06/19(土) 14:22:34
>>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デフォルトの名無しさん:2010/06/19(土) 14:24:53
>>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デフォルトの名無しさん:2010/06/19(土) 14:28:05
>>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デフォルトの名無しさん:2010/06/19(土) 15:24:49
>>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デフォルトの名無しさん:2010/06/19(土) 15:53:08
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デフォルトの名無しさん:2010/06/19(土) 15:55:02
16デフォルトの名無しさん:2010/06/19(土) 16:21:50
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デフォルトの名無しさん:2010/06/19(土) 17:13:41
18デフォルトの名無しさん:2010/06/19(土) 21:35:13
>>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デフォルトの名無しさん:2010/06/19(土) 21:36:39
>>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デフォルトの名無しさん:2010/06/19(土) 21:59:08
>>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デフォルトの名無しさん:2010/06/19(土) 22:39:23
>>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デフォルトの名無しさん:2010/06/19(土) 22:40:44
>>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デフォルトの名無しさん:2010/06/20(日) 06:44:30
>>16
使用言語:J

f=:monad def ';:inv":&.>(\:{:"1)(~.;"0#/.~)y'

f ucp'a/bb/ccc/漢字'
/ 3
c 3
b 2
a 1
漢 1
字 1
24デフォルトの名無しさん:2010/06/20(日) 15:11:56
>>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デフォルトの名無しさん:2010/06/20(日) 16:41:55
>>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デフォルトの名無しさん:2010/06/20(日) 21:41:07
>>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デフォルトの名無しさん:2010/06/20(日) 23:14:50
http://pc12.2ch.net/test/read.cgi/tech/1276810079/90
# 1から10までの積を計算するプログラムを書け。このとき,whileループを用いて、
# 画面に 1*2*3*・・・・*10 = という風に表示されるようにすること。
28デフォルトの名無しさん:2010/06/20(日) 23:18:23
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デフォルトの名無しさん:2010/06/20(日) 23:28:41
# ・テーブルデータ
# 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デフォルトの名無しさん:2010/06/21(月) 00:38:32
>>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デフォルトの名無しさん:2010/06/21(月) 07:40:51
>>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デフォルトの名無しさん:2010/06/21(月) 08:07:14
>>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デフォルトの名無しさん:2010/06/21(月) 21:42:27
>>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デフォルトの名無しさん:2010/06/22(火) 11:49:26
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デフォルトの名無しさん:2010/06/22(火) 12:22:29
>>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デフォルトの名無しさん:2010/06/22(火) 15:47:03
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デフォルトの名無しさん:2010/06/22(火) 15:48:33
>>36
% Prolog

program :-
    user_parameters(L),
    append(_,[_環境変数名|R],L),
    環境変数の表示(_環境変数名),
    R = [].

環境変数の表示(_環境変数名) :-
    getenv(_環境変数名,_値),
    write_formatted('%t=%t\n',[_環境変数名,_値]),!.
環境変数の表示(_).
38デフォルトの名無しさん:2010/06/22(火) 16:43:01
http://pc12.2ch.net/test/read.cgi/tech/1267796762/181
# 【 課題 】 GUIで電卓の機能をもったプログラムを作成してください。デザインや機能は自由ですが、最低四則演算はできるようにしてください。
# アプレットのソースは結構あるのですがXPに入っている電卓のようなものが
# 一番ベストです!!
# よろしくお願いします
39デフォルトの名無しさん:2010/06/22(火) 17:47:07
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デフォルトの名無しさん:2010/06/22(火) 17:53:17
>>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デフォルトの名無しさん:2010/06/22(火) 18:18:11
>>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デフォルトの名無しさん:2010/06/22(火) 18:49:57
http://pc12.2ch.net/test/read.cgi/tech/1276810079/144
# [1] 授業単元:C・プログラミング
# [2] 問題文(含コード&リンク):
# 深さ優先探索をリスト表現で表すプログラムを作成せよ。
# 制限は特にないです。
#

43デフォルトの名無しさん:2010/06/22(火) 19:56:45
http://pc12.2ch.net/test/read.cgi/tech/1267796762/182
# 【 課題 】GUIを使って、Gメールなどのユーザー名とパスワードを入力する画面を作成する。また、アカウントを持ってない人用の
#       ページも作成し、そこに入力した内容はDBにデータが保存されるようにプログラムを作りなさい。
44デフォルトの名無しさん:2010/06/22(火) 20:34:45
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デフォルトの名無しさん:2010/06/23(水) 04:47:09
http://pc12.2ch.net/test/read.cgi/tech/1276810079/150
# [1] 授業単元:C++プログラミング
# [2] 問題文(含コード&リンク):三目並べを作成せよ。ポインタとクラスを使用。

46デフォルトの名無しさん:2010/06/23(水) 04:49:28
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デフォルトの名無しさん:2010/06/23(水) 06:38:39
>>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デフォルトの名無しさん:2010/06/23(水) 07:26:59
>>42
% Prolog

出会うまでリストを手繰る(_求めるもの,[_求めるもの|R]) :-
    write_formatted('!%t!\n',[_求めるもの]).
出会うまでリストを手繰る(_求めるもの,[A|R]) :-
    list(A),
    write_formatted('%t-',[A]),
    出会うまでリストを手繰る(_求めるもの,A);
    \+(list(A)),
    write_formatted('%t-',[A]),
    出会うまでリストを手繰る(_求めるもの,R).
49デフォルトの名無しさん:2010/06/23(水) 07:56:07
>>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デフォルトの名無しさん:2010/06/23(水) 08:17:40
>>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デフォルトの名無しさん:2010/06/23(水) 12:21:01
>>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デフォルトの名無しさん:2010/06/23(水) 12:51:11
>>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デフォルトの名無しさん:2010/06/23(水) 16:37:12
http://pc12.2ch.net/test/read.cgi/tech/1276810079/170
# 【質問テンプレ】
# [1] 授業単元: C言語プログラミング
# [2] 問題文(含コード&リンク):
# 1.関数sqrtを使って1〜10までの二乗根の和を求めなさい。
# 2.16進数ABC.DEを10進数にしなさい。
54デフォルトの名無しさん:2010/06/23(水) 16:48:16
>>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デフォルトの名無しさん:2010/06/23(水) 16:51:36
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デフォルトの名無しさん:2010/06/24(木) 05:39:57
http://pc12.2ch.net/test/read.cgi/tech/1276810079/190
# モンテカルロ法で√2の近似値を求めたいのですが、
# ネット調べてみるとモンテカルロ法と言えばπの近似に関するばかりで・・・
# どなたか教えてくださいませ
#

57デフォルトの名無しさん:2010/06/24(木) 05:42:12
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デフォルトの名無しさん:2010/06/24(木) 11:10:47
>>56% Prologモンテカルロ法で√2の近似値を求める(_試行回数,_除数,X) :-    count((for(1,N,_試行回数),U is (random mod _除数) ^ 2,U < _除数 * _除数/ 2),Y),    X is Y / (_試行回数 / 2).
59デフォルトの名無しさん:2010/06/24(木) 11:13:05
>>58
% Prolog 字化けしてしまいました。書き直し。

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

60デフォルトの名無しさん:2010/06/24(木) 12:13:40
http://pc12.2ch.net/test/read.cgi/tech/1276810079/195
# [1] 授業単元:情報処理
# [2] 問題文:ガウスの消去法のプログラムをピボット対応と
#       ピボット非対応の2つ作成し、連立方程式の解を求めよ。
#      (ただし解くべき連立方程式は5元1次方程式で、ピボットの
#       発生するものと発生しないものの2種類とする)
61デフォルトの名無しさん:2010/06/24(木) 13:56:28
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デフォルトの名無しさん:2010/06/24(木) 14:47:25
63デフォルトの名無しさん:2010/06/24(木) 17:43:23
http://pc12.2ch.net/test/read.cgi/tech/1276810079/198
# ファイルkadai.txt に記述された数行の数値を表す文字列を読み込み、
# 整数に変更して数値として表示するプログラムを作成せよ。
# 関数としてstrtol()を使用すれば問題ないが、同じ機能の関数を作成すること。
# 基数の設定に関する引数は必要なくデフォルト(先頭が0 なら8 進、それ以外は10 進、16 進は使用しない)とする
#

64デフォルトの名無しさん:2010/06/24(木) 19:06:29
>>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デフォルトの名無しさん:2010/06/24(木) 21:18:45
# バブルソートでは, 配列のデータがすでに適正な順序, あるいはそれに近い順序で並んでいても
# 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デフォルトの名無しさん:2010/06/25(金) 02:41:43
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デフォルトの名無しさん:2010/06/25(金) 02:43:01
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デフォルトの名無しさん:2010/06/25(金) 02:52:19
http://pc11.2ch.net/test/read.cgi/db/1274791771/188
# 学校でSQLの授業とっててこんな問題が出たけど理解不能だったんで助けてくだしあ。
#
# XMLについて、その概要をコンピュータの意味処理という視点から書いて下さい。
# また、実際にどのような分野で使われていますか?
# 具体例を一つあげて説明してください。
#

69デフォルトの名無しさん:2010/06/25(金) 05:37:46
# 今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デフォルトの名無しさん:2010/06/25(金) 06:32:37
>>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デフォルトの名無しさん:2010/06/25(金) 06:33:34
>>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デフォルトの名無しさん:2010/06/25(金) 06:38:10
>>70
% Prolog 改行位置の調整をし忘れた。これを忘れるとatomの途中で改行してしまう。
http://nojiriko.asia/prolog/perl_ni_tsuite43_627.html を参照してください。
73デフォルトの名無しさん:2010/06/25(金) 07:44:06
>>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デフォルトの名無しさん:2010/06/25(金) 08:02:01
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」に置き換える

7569:2010/06/25(金) 08:34:45
76デフォルトの名無しさん:2010/06/25(金) 08:41:00
>>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デフォルトの名無しさん:2010/06/25(金) 09:28:41
>>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デフォルトの名無しさん:2010/06/25(金) 12:16:13
>>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デフォルトの名無しさん:2010/06/25(金) 12:20:29
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デフォルトの名無しさん:2010/06/25(金) 14:49:52
http://pc12.2ch.net/test/read.cgi/tech/1276810079/217
# [1] 授業単元:プログラミング
# [2] 問題文(含コード&リンク):
# 午前四時から正午までは Good Morning! と、
# 正午から午後八時までは Good Afternoon! と、
# 午後八時から午前四時までは Good Evening! と、表示するプログラムを書け。ただし、境界の時刻は前の時間帯に含まれるものとする
#
#

81デフォルトの名無しさん:2010/06/25(金) 15:12:36
>>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デフォルトの名無しさん:2010/06/25(金) 15:45:05
>>80
使用言語:J

f=: monad define
'Good ',>(3|<.8%~4+3{6!:0''){'Evening!';'Morning!';'Afternoon!'
)
f ''
Good Afternoon!
83デフォルトの名無しさん:2010/06/25(金) 16:47:19
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デフォルトの名無しさん:2010/06/25(金) 17:25:48
http://pc12.2ch.net/test/read.cgi/tech/1276810079/218
# [1] 授業単元: プログラム
# [2] 問題文(含コード&リンク): 番号 国語 数学 英語のメンバを持っている構造体を作って各教科の平均値と、全平均値を求めてください。(人数は4人とか5人で行ってください。あと番号っていうのは、番号は、4人なら1〜4までで5人なら1〜5までです)

85デフォルトの名無しさん:2010/06/25(金) 19:10:36
>>80
使用言語:Io

f := method(
writeln("Good ",list("Evening!","Morning!","Afternoon!")at(((Date hour + 4) / 8) floor % 3))
)

Io> f()
Good Afternoon!
==> nil
86デフォルトの名無しさん:2010/06/25(金) 20:07:02
>>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デフォルトの名無しさん:2010/06/25(金) 20:09:37
>>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デフォルトの名無しさん:2010/06/25(金) 21:43:05
しまった。境界の時刻の処理ができていません。
>>82 >>85 はボツにしてください。
89デフォルトの名無しさん:2010/06/26(土) 05:51:28
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デフォルトの名無しさん:2010/06/26(土) 05:53:29
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デフォルトの名無しさん:2010/06/26(土) 06:13:34
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デフォルトの名無しさん:2010/06/26(土) 06:18:09
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デフォルトの名無しさん:2010/06/26(土) 06:20:45
>>92 のつづきです。

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

94デフォルトの名無しさん:2010/06/26(土) 06:43:55
>>92 >>93 のつづきです。
95デフォルトの名無しさん:2010/06/26(土) 06:45:39
>>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デフォルトの名無しさん:2010/06/26(土) 06:49:00
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デフォルトの名無しさん:2010/06/26(土) 06:53:43
>>80
使用言語:J
分、秒も参照するようにしました。

f=: monad define
'Good ',>(3|<.8%~3+({.>.@+[:*[:+/}.)3 4 5{6!:0''){'Evening!';'Morning!';'Afternoon!'
)
f ''
Good Morning!
98デフォルトの名無しさん:2010/06/26(土) 13:24:31
>>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デフォルトの名無しさん:2010/06/26(土) 17:41:40
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
# 行数の関係で・・と省略したところもありますが実際は・を省略せずに作成してください

100デフォルトの名無しさん:2010/06/26(土) 17:46:42
http://pc12.2ch.net/test/read.cgi/tech/1276810079/234
# [1]授業単元:システムプログラミング
# [2]課題:http://nojiriko.asia/data/10751.txt にコピーさせていただきました。
#

101デフォルトの名無しさん:2010/06/26(土) 20:02:13
>>99
使用言語:J

f=:dyad define
7{.(":x),'*',(":y),'=',":x*y
)

NB. p1
;"1|:<@f"0/~>:i.9
1*1=1 2*1=2 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=4 3*2=6 4*2=8 5*2=10 6*2=12 7*2=14 8*2=16 9*2=18
:
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

NB. p2
;"1(|:"2)3 3 9$,<@f"0/~>:i.9
1*1=1 2*1=2 3*1=3
1*2=2 2*2=4 3*2=6
:
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*9=36 5*9=45 6*9=54

7*1=7 8*1=8 9*1=9
7*2=14 8*2=16 9*2=18
:
7*9=63 8*9=72 9*9=81
102デフォルトの名無しさん:2010/06/26(土) 20:18:09
>>53
使用言語:J


NB. p1
+/%:>:i.10
22.4683

NB. p2
16babc.de
2748.87
103デフォルトの名無しさん:2010/06/27(日) 03:13:49
>>99
% Prolog (最初のパターン)

九九 :- 九九([_],[_]).

九九([_,_,_,_,_,_,_,_,_,_],_) :- !.
九九(L1,[_,_,_,_,_,_,_,_,_,_]) :-
    write('\n'),
    九九([_|L1],[_]),!.
九九(L1,L2) :-
    掛け算(L1,L2,LX),
    '式をN1*N2=N3で表現する'(L1,L2,LX,N1,N2,N3),
    九九(L1,[_|L2]).

掛け算(L1,L2,X) :- list(L1),list(L2),掛け算(L1,L2,[],X).

掛け算([],_,LX,LX) :- !.
掛け算([_|R1],L2,LY,LX) :-
    append(L2,LY,LY2),
    掛け算(R1,L2,LY2,LX).

'式をN1*N2=N3で表現する'(L1,L2,L3,N1,N2,N3) :-
    length(L1,N1),
    length(L2,N2),
    length(L3,N3),
    write_formatted('%d*%d=%2d ',[N1,N2,N3]).
104デフォルトの名無しさん:2010/06/27(日) 08:08:10
>>99
% Prolog (第二パターン) 変数_にしておくより、具体的なアトムの方が実効速度が100倍も速くなるようなので_をaに変更。

九九_3 :- 九九([a],[a],[a,a,a,a],[a]).

九九([a,a,a,a,a,a,a,a,a,a],_,_,_) :- !.
九九(LK,L11,LK,L2) :-
    write('\n'),
    九九(L11,L11,LK,[a|L2]).
九九(L1,L11,LK,[a,a,a,a,a,a,a,a,a,a]) :-
    九九([a,a,a|L11],[a,a,a|L11],[a,a,a|LK],[a]),!.
九九(L1,L11,LK,L2) :-
    掛け算(L1,L2,LX),
    '式をN1*N2=N3で表現する'(L1,L2,LX,N1,N2,N3),
    九九([a|L1],L11,LK,L2).
105デフォルトの名無しさん:2010/06/27(日) 08:19:43
>>99
% Prolog length/2 を使うのが不本意なら、

'式をN1*N2=N3で表現する'(L1,L2,L3,N1,N2,N3) :-
    割り算(L1,[a,a,a,a,a,a,a,a,a,a],LM1),
    ならびによる数表現を数値文字列に変換(LM1,S1),
    割り算(L2,[a,a,a,a,a,a,a,a,a,a],LM2),
    ならびによる数表現を数値文字列に変換(LM2,S2),
    割り算(L3,[a,a,a,a,a,a,a,a,a,a],LM3),
    ならびによる数表現を数値文字列に変換(LM3,S3),
    write_formatted('%t*%t=%2s ',[S1,S2,S3]),!.

割り算(L1,L2,L) :- list(L1),list(L2),割り算(L1,L2,[],[],L).

割り算([],_,_,U,U) :- !.
割り算(L1,L2,LD1,U,X) :-
    append(L2,R1,L1),
    割り算(R1,L2,[a|LD1],U,X).
割り算(LM,L2,LD,U,X) :-
    割り算(LD,L2,[],[LM|U],X).
106デフォルトの名無しさん:2010/06/27(日) 08:20:49
>>99
% Prolog (つづき)

ならびと数字の対応([],'0').
ならびと数字の対応([a],'1').
ならびと数字の対応([a,a],'2').
ならびと数字の対応([a,a,a],'3').
ならびと数字の対応([a,a,a,a],'4').
ならびと数字の対応([a,a,a,a,a],'5').
ならびと数字の対応([a,a,a,a,a,a],'6').
ならびと数字の対応([a,a,a,a,a,a,a],'7').
ならびと数字の対応([a,a,a,a,a,a,a,a],'8').
ならびと数字の対応([a,a,a,a,a,a,a,a,a],'9').

ならびによる数表現を数値文字列に変換([],'') :- !.
ならびによる数表現を数値文字列に変換([L|R],_数値文字列) :-
    ならびと数字の対応(L,S),
    ならびによる数表現を数値文字列に変換(R,_数値文字列2),
    concat_atom([S,_数値文字列2],_数値文字列).
107デフォルトの名無しさん:2010/06/27(日) 08:41:03
>>104 - >>106 は何をやってるか?
もし、Prologに整数がなかったら、九九表はこのように書く、というのが>>106
組込述語length/2の第二引数は整数となるから、「整数がない」と言うわけにはいかない。
それでlength/2を排除しようとしている。
108デフォルトの名無しさん:2010/06/27(日) 08:55:58
http://pc12.2ch.net/test/read.cgi/tech/1276810079/246
# [1] 授業単元:計算機とアルゴリズム
# [2] 問題文(含コード&リンク):数列と漸化式を表示できるように9行目からお願いし
ます。http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10754.txt
# 練習問題1
# 01: #include<stdio.h>
# 02:
# 03: main()
# 04:{
# 05: int n, m, an, sum;
# 06:
# 07: m = 5;
# 08: printf("数列 an = n*n とその和を %d 項目まで表示します\n",m);
#
# 練習問題2
# 01: #include<stdio.h>
# 02:
# 03: main()
# 04:{
# 05: int n, m, an;
# 06:
# 07: m = 5;
# 08: printf("漸化式 a(n) = 2*a(n-1), a1 = 2 で生成される数列を %d 項目まで表示します\n");

109デフォルトの名無しさん:2010/06/27(日) 09:31:35
>>96
% Prolog

連続した日付の生成(_ID,_年月) :-
    'TEST'(_ID,_開始日,_終了日),
    sub_atom(_開始日,0,6,_,_開始年月),
    sub_atom(_終了日,0,6,_,_終了年月),
    年月の生成(_開始年月,_年月,_終了年月).

年月の生成(_開始年月,_,_終了年月) :- _開始年月 @> _終了年月,!.
年月の生成(_開始年月,_開始年月,_終了年月).
年月の生成(_開始年月,_年月,_終了年月) :-
    次の年月(_開始年月,_次の年月),
    年月の生成(_次の年月,_年月,_終了年月).

次の年月(_年月,_次の年月) :-
    sub_atom(_年月,4,2,_,'12'),
    sub_atom(_年月,0,4,_,_年),
    atom_to_term(_年,_年整数,_),
    _年整数2 is _年整数 + 1,
    number_chars(_年整数2,Chars),
    atom_chars(_次の年,Chars),
    concat_atom([_次の年,'01],_次の年月),!.
次の年月(_年月,_次の年月) :-
    atom_to_term(_年月,_年月整数,_),
    _年月整数2 is _年月整数 + 1,
    number_chars(_年月整数2 is Chars),
    atom_chars(_次の年月,Chars).
110デフォルトの名無しさん:2010/06/27(日) 09:38:00
>>109 (>>96)

% Prolog 日付ではなかった。述語名を連続した年月の生成に訂正。

連続した年月の生成(_ID,_年月) :-
    'TEST'(_ID,_開始日,_終了日),
    sub_atom(_開始日,0,6,_,_開始年月),
    sub_atom(_終了日,0,6,_,_終了年月),
    年月の生成(_開始年月,_年月,_終了年月).

年月の生成(_開始年月,_年月,_終了年月) :-
    次の年月(_開始年月,_次の年月),
    年月の生成(_次の年月,_年月,_終了年月).

次の年月(_年月,_次の年月) :-
    sub_atom(_年月,4,2,_,'12'),
    sub_atom(_年月,0,4,_,_年),
    atom_to_term(_年,_年整数,_),
    _年整数2 is _年整数 + 1,
    number_chars(_年整数2,Chars),
    atom_chars(_次の年,Chars),
    concat_atom([_次の年,'01],_次の年月),!.
次の年月(_年月,_次の年月) :-
    atom_to_term(_年月,_年月整数,_),
    _年月整数2 is _年月整数 + 1,
    number_chars(_年月整数2 is Chars),
    atom_chars(_次の年月,Chars).
111デフォルトの名無しさん:2010/06/27(日) 10:32:23
>>108
% Prolog

'数列 an = n*n とその和をM項目まで表示する'(M) :-
    '数列 an = n*n とその和をM項目まで'(M,_数列,_和),
    write_formatted('%t 和=%t\n',[_数列,_和]).

'数列 an = n*n とその和をM項目まで'(M,_数列,_和) :-
    findall(U,(for(1,N,M),U is N * N),_数列),
    加算(_数列,_和_1),
    _和 is truncate(_和_1).

'漸化式 a(n) = 2*a(n-1), a1 = 2 で生成される数列をM項目まで表示します'(M) :-
    '漸化式 a(n) = 2*a(n-1), a1 = 2 で生成される数列をM項目まで'(M,_数列),
    write_formatted('%t\n',[_数列]).

'漸化式 a(n) = 2*a(n-1), a1 = 2 で生成される数列をM項目まで'(M,_数列) :-
    findall(U,(for(1,N,M),a(N,U)),_数列).

a(1,2).
a(N,X) :- N1 is N - 1,a(N1,Y),X is 2 * Y.
112デフォルトの名無しさん:2010/06/27(日) 13:37:37
>>92
% Prolog

部品('A','G',1).
部品('B','C',1).
部品('B','F',1).
部品('C','D',1).
部品('C','E',1).
部品('G','C',2).
部品('G','H',1).

階層のレベルと、それぞれの子の合計数を出力する :-
    階層のレベルと、それぞれの子の合計数を出力する(0,'A',_,A,B,C).
階層のレベルと、それぞれの子の合計数を出力する.

階層のレベルと、それぞれの子の合計数を出力する(_階層,_部品,_個数,_階層,_部品,_個数) :-
    \+(_階層=0),
    write_formatted('%t,%t,%t\n',[_階層,_部品,_個数]),
    fail.

階層のレベルと、それぞれの子の合計数を出力する(_階層1,_親1,_,_階層,_親,_個数) :-
    部品(_親1,_子,_個数2),
    _階層2 is _階層1 + 1,
    階層のレベルと、それぞれの子の合計数を出力する(_階層2,_子,_個数2,_階層,_親,_個数).

113デフォルトの名無しさん:2010/06/27(日) 17:45:12
http://pc12.2ch.net/test/read.cgi/tech/1276810079/251
# 【質問テンプレ】
# [1] 授業単元: プログラミング演習
# [2] 問題文(含コード&リンク): 入力した2つの整数の間 (入力した数も範囲に含める) にある
#  「2の倍数でない」かつ「3の倍数でない」かつ「5の倍数でない」
# の条件を満たす整数を順に表示し,最後にその個数を表示するプログラムを作成せよ
#

114デフォルトの名無しさん:2010/06/27(日) 19:44:13
>>113
% Prolog

'入力した2つの整数の間 (入力した数も範囲に含める) にある「2の倍数でない」かつ「3の倍数でない」かつ「5の倍数でない」の条件を満たす整数を順に表示し,最後にその個数を表示する' :-
    入力した2つの整数(N1,N2),
    count((for(N1,N,N2),\+(0 is N mod 2),\+(0 is N mod 3),\+(0 is N mod 5),write_formatted('%t ',[N])),Count),
    write_formatted('\n個数 = %t\n',[Count]).

入力した2つの整数(N1,N2) :-
    催促付き整数入力('開始整数を入力してください : ',N1),
    催促付き整数入力('終了整数を入力してください : ',N2).

115デフォルトの名無しさん:2010/06/27(日) 20:39:28
>>27
使用言語:J

((,'*'&,)&":/,' = '"_,":@(*/))>:i.10
1*2*3*4*5*6*7*8*9*10 = 3628800
116デフォルトの名無しさん:2010/06/27(日) 21:16:43
>>113
使用言語:J

f=:dyad define
a=.x+i.>:y-x
b=.(0~:*/*2 3 5|/a)#a
smoutput b
smoutput #b
)

1 f 100
1 7 11 13 17 19 23 29 31 37 41 43 47 49 53 59 61 67 71 73 77 79 83 89 91 97
26
117デフォルトの名無しさん:2010/06/28(月) 03:56:30
http://pc12.2ch.net/test/read.cgi/tech/1267796762/199
# 【 課題 】下記参照です。
# 【 形態 】1. Javaアプリケーション(main()で開始)/
# 【 期限 】6/29
# 【 Ver  】"1.6.0_20"
# 【 補足 】丸投げです。よろしくお願いします。
#
# キーホ゛ート゛から整数(0-100)をいくつか入力し、終わった時点で、それらの最大値・最小値・平均を表示させよう。
# 「!」の入力で処理を終了する。
# 数値の入力のたびにすべきこと:
# 最大値と最小値の更新
# 入力の総和に加算
# 入力の個数を1増加
#

118デフォルトの名無しさん:2010/06/28(月) 03:58:47
http://pc12.2ch.net/test/read.cgi/tech/1276810079/254
# [1] 授業単元:情報処理学
# [2] 問題文(含コード&リンク):
# do-while文を用いて、キーボードから入力された値が素数であるかどうかを
# 判別するプログラムを作成せよ。入力された値が素数の場合は"素数"と出力し、
# 素数でない場合は最小の因数を出力せよ。
119デフォルトの名無しさん:2010/06/28(月) 04:02:00
http://pc12.2ch.net/test/read.cgi/tech/1276810079/255
# 1] 授業単元:情報処理学
# [2] 問題文(含コード&リンク):
# 1次元配列に34 57 45 21 89 63 39 48 78 68 76 84 92 53 62 のデータをセットして、
# これらの平均値を求めよ。さらにint eval[3]という1次元配列を用意して
# eval[0]には0〜60の数の個数
# eval[1]には61〜80の数の個数
# eval[2]には81〜100の数の個数
# を格納するようにし、それらを出力するプログラムを作成せよ。(配列、for文、if文を使って)

120デフォルトの名無しさん:2010/06/28(月) 04:03:21
http://pc12.2ch.net/test/read.cgi/tech/1276810079/258
# [1] 授業単元:C言語入門
# [2] 問題文(含コード&リンク):
# 次のように表示するプログラムを作りなさい。
#
# 私の学籍番号は0000000Aです。
# 氏名は aaaaa aaaaaaaaです。
#        ↑半角スペース
#

121デフォルトの名無しさん:2010/06/28(月) 05:07:38
>>117
% Prolog (その一)

'キーホ゛ート゛から整数(0-100)をいくつか入力し、終わった時点で、それらの最大値・最小値・平均を表示させよう。「!」の入力で処理を終了する。'((-1),_度数,_合計値,_最大値,_最小値) :-
    '終わった時点で、それらの最大値・最小値・平均を表示させよう。'(_度数1,_合計値,_最大値,_最小値).
'キーホ゛ート゛から整数(0-100)をいくつか入力し、終わった時点で、それらの最大値・最小値・平均を表示させよう。「!」の入力で処理を終了する。'(N1,_度数1,_合計値1,_最大値1,_最小値1) :-
    N1 < _最小値1,
    _度数2 is _度数 + 1,
    _合計値2 is _合計値1 + N1,
    'キーホ゛ート゛から整数(0-100)を入力し'(N2),
    'キーホ゛ート゛から整数(0-100)をいくつか入力し、終わった時点で、それらの最大値・最小値・平均を表示させよう。「!」の入力で処理を終了する。'(N2,_度数2,_合計値2,_最大値1,N1),!.

'キーホ゛ート゛から整数(0-100)をいくつか入力し、終わった時点で、それらの最大値・最小値・平均を表示させよう。「!」の入力で処理を終了する。'(N1,_度数1,_合計値1,_最大値1,_最小値1) :-
    N1 > _最大値1,
    _度数2 is _度数 + 1,
    _合計値2 is _合計値1 + N1,
    'キーホ゛ート゛から整数(0-100)を入力し'(N2),
    'キーホ゛ート゛から整数(0-100)をいくつか入力し、終わった時点で、それらの最大値・最小値・平均を表示させよう。「!」の入力で処理を終了する。'(N2,_度数2,_合計値2,N1,_最小値1),!.
'キーホ゛ート゛から整数(0-100)をいくつか入力し、終わった時点で、それらの最大値・最小値・平均を表示させよう。「!」の入力で処理を終了する。'(N1,_度数1,_合計値1,_最大値1,_最小値1) :-
    _度数2 is _度数 + 1,
    _合計値2 is _合計値1 + N1,
    'キーホ゛ート゛から整数(0-100)を入力し'(N2),
    'キーホ゛ート゛から整数(0-100)をいくつか入力し、終わった時点で、それ らの最大値・最小値・平均を表示させよう。「!」の入力で処理を終了する。'(N2,_度数2,_合計値2,_最大値1,_最小値1),!.
122デフォルトの名無しさん:2010/06/28(月) 05:09:06
>>117
% Prolog (その二)

'終わった時点で、それらの最大値・最小値・平均を表示させよう。'(_度数1,_合計値1,_最大値1,_最小値1) :-
    _平均値 is _合計値 / _度数,
    write_formatted('最大値=%t,最小値=%t,平均値=%t\n',[_最大値,_最小値,_平均値]),!.

'キーホ゛ート゛から整数(0-100)を入力し'(N) :-
    write('整数(0-100)を入力してください : ',
    get_line(Line),
    '「!」の入力で処理を終了する。'(Line,N).

'「!」の入力で処理を終了する。'((!),(-1)) :- !.
'「!」の入力で処理を終了する。'(Line,N) :- atom_to_term(Line,N,_).

123デフォルトの名無しさん:2010/06/28(月) 07:32:58
>>119
% Prolog にとって不自然な部分排除した。構造体などの課題もこのように改変して答える方が本当は良いのだろう。

'1次元配列に34 57 45 21 89 63 39 48 78 68 76 84 92 53 62 のデータをセットして、これらの平均値を求めよ'(L,_平均値) :-
    '1次元配列に34 57 45 21 89 63 39 48 78 68 76 84 92 53 62 のデータをセットして'(L),
avg(L,_平均値).

'1次元配列に34 57 45 21 89 63 39 48 78 68 76 84 92 53 62 のデータをセットして'(L) :-
split('34 57 45 21 89 63 39 48 78 68 76 84 92 53 62',[','],L).

'1次元配列に34 57 45 21 89 63 39 48 78 68 76 84 92 53 62 のデータをセットして、0〜60の数の個数 61〜80の数の個数 81〜100の数の個数 を集計して出力する' :-
    '1次元配列に34 57 45 21 89 63 39 48 78 68 76 84 92 53 62 のデータをセットして'(L),
    '0〜60の数の個数 61〜80の数の個数 81〜100の数の個数 を集計して出力する'(L,0,0,0),!.

124デフォルトの名無しさん:2010/06/28(月) 07:35:31
>>119
% Prolog (つづき)

'0〜60の数の個数 61〜80の数の個数 81〜100の数の個数 を集計して出力する'([],_0〜60の数の個数,_61〜80の数の個数,_81〜100の数の個数) :-
    write_formatted('0〜60の数の個数=%t\n',[_0〜60の数の個数]),
    write_formatted('61〜80の数の個数=%t\n',[_61〜80の数の個数]),
    write_formatted('81〜100の数の個数=%t\n',[81〜100の数の個数]),!.
'0〜60の数の個数 61〜80の数の個数 81〜100の数の個数 を集計して出力する'([N|R],_0〜60の数の個数_1,_61〜80の数の個数,_81〜100の数の個数) :-
    N =< 60,
    _0〜60の数の個数_2 is_0〜60の数の個数_1 + 1,
    '0〜60の数の個数 61〜80の数の個数 81〜100の数の個数 を集計して出力する'(R,_0〜60の数の個数_2,_61〜80の数の個数,_81〜100の数の個数),!.
'0〜60の数の個数 61〜80の数の個数 81〜100の数の個数 を集計して出力する'([N|R],_0〜60の数の個数,_61〜80の数の個数_1,_81〜100の数の個数) :-
    N >= 61,N =< 80,
    _61〜80の数の個数_2 is_61〜80の数の個数_1 + 1,
    '0〜60の数の個数 61〜80の数の個数 81〜100の数の個数 を集計して出力する'(R,_0〜60の数の個数,_61〜80の数の個数_2,_81〜100の数の個数),!.
'0〜60の数の個数 61〜80の数の個数 81〜100の数の個数 を集計して出力する'([N|R],_0〜60の数の個数,_61〜80の数の個数,_81〜100の数の個数_1) :-
    N >= 81,N =< 100,
    _81〜100の数の個数_2 is_81〜100の数の個数_1 + 1,
    '0〜60の数の個数 61〜80の数の個数 81〜100の数の個数 を集計して出力する'(R,_0〜60の数の個数,_61〜80の数の個数,_81〜100の数の個数_2),!.
125デフォルトの名無しさん:2010/06/28(月) 07:43:32
http://pc12.2ch.net/test/read.cgi/tech/1276810079/273
# 社員の情報を管理するプログラムを作りたい。
# 下の実行例のような社員データベースを処理するプログラムを実装しなさい。
# http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10757.txt
# 現在何人社員がいますか:3
#
# 1人目の情報を入力してください。
# 名前:TANAKA
# 年齢:26
# 年俸:550
#
# 2人目の情報を入力してください。
# 名前:NAKAMURA
# 年齢:50
# 年俸:1000
#
# 3人目の情報を入力してください。
# 名前:YAMADA
# 年齢:35
# 年俸:650
#
# **** 社員データベース管理プログラム ****
#     1:社員追加
# 2:昇級
# 3:名前検索
# 4:年俸検索(ある値以上の年俸を表示)
# 5:全社員の表示
#
# 9:End
#
# Select a number ?
126デフォルトの名無しさん:2010/06/28(月) 08:30:24
>>118
% Prolog

キーボードから入力された値が素数であるかどうかを判別する :-
    get_integer(N),
    素数であるかどうかを判別する(N).

素数であるかどうかを判別する(N) :-
    素数ではない(N,_最小因子),
    write_formatted('%tは素数ではありません。最小因子は%tです。\n',[N,_最小,!.
素数であるかどうかを判別する(N) :-
    write_formatted('%tは素数です。\n',[N]).

素数ではない(N,_最小因子) :-
    N2 is N // 2,
    for(2,M,N2),
    0 is N mod M,
    _最小因子 = M,!.

127デフォルトの名無しさん:2010/06/28(月) 12:59:17
>>118
使用言語:J

f=:monad define
a=.q:y
if. 1=#a do.
smoutput (":y),' は素数です。'
else.
smoutput (":y),' は素数ではありません。最小因子は ',(":{.a),' です。'
end.
)
f 7
7 は素数です。
f 77
77 は素数ではありません。最小因子は 7 です。
128デフォルトの名無しさん:2010/06/28(月) 13:00:11
>>119
使用言語:J

data=: 34 57 45 21 89 63 39 48 78 68 76 84 92 53 62
eval=: +/"1=/:~data{61 20 20 # 0 1 2

eval
7 5 3
129デフォルトの名無しさん:2010/06/28(月) 14:03:07
http://pc12.2ch.net/test/read.cgi/tech/1276810079/274
# 1] 授業単元: プログラム入門
# [2] 問題文(含コード&リンク): 2つの自然数 n と m を入力し、その積 n×m を
# たし算のみで計算するプログラムを作成せよ。
130デフォルトの名無しさん:2010/06/28(月) 14:06:00
>>129
% Prolog

'2つの自然数 n と m を入力し、その積 n×m を たし算のみで計算する'(_n,0,0) :- !.
'2つの自然数 n と m を入力し、その積 n×m を たし算のみで計算する'(_n,_m,X) :-
    _m_1 is _m - 1,
    '2つの自然数 n と m を入力し、その積 n×m を たし算のみで計算する'(_n,_m_1,Y),
    X is Y + _n.

131デフォルトの名無しさん:2010/06/28(月) 14:08:06
http://pc12.2ch.net/test/read.cgi/tech/1276810079/278
# [1] 授業単元: C言語プログラミング入門
# [2] 問題文:関数の再帰的呼び出しによりAckermann(アッカーマン)関数を計算するプログラムを作れ。同じプログラムを繰り返し処理(ループ計算)により実現できるか考えよ。Ackermann関数は次式で定義される。
#

132デフォルトの名無しさん:2010/06/28(月) 14:11:34
>>131 まだつづきがありました
#
# n+1 m=0 and n>_0
# ack(m,n)= ack(m-1,1) m>0 and n=0
# ack(m-1,ack(m,n-1)) m>0 and n>0
133デフォルトの名無しさん:2010/06/28(月) 16:59:03
http://pc12.2ch.net/test/read.cgi/tech/1267796762/200
# [課題]携帯のiアプリをSTARを使い作成しています。
# 学校のホームページに載っている休講情報に接続して、それから先生の名前と日にちだけ取り出す方法が知りたいです。
# 休講情報は
#
# 6月
# 24日
#  野口 文子 先生
#  山下 紗枝 先生
#  井上 恵子 先生
#
# 25日
#  山下 紗枝 先生
#
# 26日
# ・
# ・
# ・
#
# のようになっています。
# 先生の名前の前の全角スペースを目印にして、配列に入れるそうなのですが・・・。
134デフォルトの名無しさん:2010/06/28(月) 17:08:55
>>131
使用言語:J

ack=: dyad define M.
if. x=0 do. >:y
elseif. y=0 do. (<:x) ack 1
elseif. do. (<:x) ack x ack <:y
end.
)

3 ack 1
13
3 ack 8
2045
135デフォルトの名無しさん:2010/06/28(月) 17:17:36
>>131
% Prolog

アッカーマン関数(0,N,X) :-
    N > 0,
    X is N + 1.
アッカーマン関数(M,0,X) :-
    M > 0,
    M_1 is M - 1,
    アッカーマン関数(M_1,1,X).
アッカーマン関数(M,N,X) :-
    M > 0,
    N > 0,
    M_1 is M - 1,
    N_1 is N - 1,
    アッカーマン関数(M,N_1,Y),
    アッカーマン関数(M_1,Y,X).
136デフォルトの名無しさん:2010/06/28(月) 17:27:23
>>129
使用言語:J
大きい数の方を小さい数だけコピーしてリストをつくり合計。

f=: dyad define
if. 0=x<.y do. 0 else. x(<.+/@#>.)y end.
)

628 f 2010
1262280

12 f 0
0
137デフォルトの名無しさん:2010/06/28(月) 20:10:56
>>131
使用言語:maxima
なんかあっさりスタックオーバーフローになるなあ。

ack(m,n):=
if m=0 then n+1
elseif n=0 then ack(m-1,1)
else ack(m-1,ack(m,n-1));

(%i7) ack(3,4);
(%o7) 125
(%i8) ack(3,5);

Maxima encountered a Lisp error:

Error in PROGN [or a callee]: Bind stack overflow.

Automatically continuing.
To reenable the Lisp debugger set *debugger-hook* to nil.
138デフォルトの名無しさん:2010/06/28(月) 20:26:04
>>129
使用言語:maxima

f(a,b):=(x:min(a,b),y:max(a,b),sum(y,i,1,x));

(%i19) f(628,2010);
(%o19) 1262280
(%i20) f(2,0);
(%o20) 0
139デフォルトの名無しさん:2010/06/28(月) 20:57:33
>>118
使用言語:maxima

f(x):=(
a:ifactors(x),
if length(a)=1 then
printf(true,"~d は素数です。~%",x)
else
printf(true,"~d は素数ではありません。最小因子は ~d です。~%",x,a[1][1])
);

(%i6) f(7);
7 は素数です。
(%o6) false
(%i7) f(77);
77 は素数ではありません。最小因子は 7 です。
(%o7) false
140デフォルトの名無しさん:2010/06/28(月) 21:25:28
http://pc12.2ch.net/test/read.cgi/tech/1276810079/286
# [1] プログラミング1
# [2] 現在のインターネットを実現しているTCP/IP通信プロトコルでは主にIPv4
#   を用いており、コンピュータを一意に識別するために32ビットのIPアドレスを
#   用いている。これを踏まえ、IPアドレスの4つの数字を入力させ、これらを32ビットの
#   データ型であるunsigned int型の変数にIPアドレスを示す2進数の数値として保存せよ。
#   保存したIPアドレスがunsigned intの整数値として解釈するといくつとなるか表示する
#   プログラムを作成せよ。
141デフォルトの名無しさん:2010/06/28(月) 21:29:37
http://pc12.2ch.net/test/read.cgi/tech/1276810079/288
# [1] 応用プログラミング
# [2] 問題文(含コード&リンク):
#   http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10758.txt
#
# 次の構造体について配列を5個宣言し、標準入力でそれぞれの値を初期化し、
# 身長(height)が小さい順にソートするプログラムを作成しなさい。
#
# (下記のプログラムの続きから作成することとする)
# また実効例結果を下に記す。この通りに表示されるように作成する。
#
# 課題では以下の宣言以外はすべてmain関数内で作成すること。
# 配列変数を入れ替える要領で構造体を入れ替えプログラムを作成すること。
#
#
# #include<stdio.h>
# typedef struct
# {
# char name[32];
# double height;
# }Student;
142デフォルトの名無しさん:2010/06/28(月) 21:30:46
http://pc12.2ch.net/test/read.cgi/tech/1276810079/300
# [1] 授業単元:情報処理学
# [2] 問題文(含コード&リンク):
# 例1は、3教科5人の生徒の合計得点を求めるプログラムである。
# これを実行し、動作を説明せよ。さらに、教科毎の平均点、
# 生徒毎の平均点を計算して表示できるようにプログラムを修正し、
# 結果とともに示せ。
#
143デフォルトの名無しさん:2010/06/28(月) 21:31:54
>>27
使用言語:maxima

(%i13) printf(true,"10 = ~d~%",product((printf(true,"~d*",i),i),i,1,9)*10);
1*2*3*4*5*6*7*8*9*10 = 3628800


(%i24) printf(true,"~{~a~^*~} = ~d~%",makelist(i,i,1,10),10!);
1*2*3*4*5*6*7*8*9*10 = 3628800
144デフォルトの名無しさん:2010/06/28(月) 21:33:10
http://pc12.2ch.net/test/read.cgi/tech/1276810079/304
# 次レスにまとめても規制されてしまったので・・・・
# [2] 問題文:[1],[2]のプログラムを作成せよ。
#       [1]多項式の次数nと係数a,(i=0,1・・・・,n)を入力し、
# その多項式f(x)=a_nx^2+a_n-1x^n-1+・・・+a_2x^2+a_1x+a_0と
#        その微分の多項式f'(x)を出力するプログラムを作成せよ。
#        ただし、nはint型,a_iはdouble型の配列とせよ。n<100と仮定してよい。
#        以下に入力例を示す
# n=5
# a5=1
# a4=0
# a3=2
# a2=0
# a1=3
# a0=0
# f(x)=x^5+2x^3+3x
# f'(x)=5x^4+6x^2+3
#
#

145デフォルトの名無しさん:2010/06/28(月) 21:36:06
http://pc12.2ch.net/test/read.cgi/tech/1276810079/305
# [2]以下の要領で、平均点、分散、標準偏差、最小値、最大値を求めるプログラム
#         を作成せよ。
#         (1)100人分の点数(int型)を記憶するための配列変数aを定義する
#         (2)人数(int型)を記憶するための変数nを定義する。
#         (3)人数nの初期値を0とする
#         (4)点数をa[n]に入力する
#         (5)点数が負の数ならば終了する
#         (6)人数nを1つ増やす
#         (7)全員の点数を空白で区切って表示する。例:83 52 64
#         (8)平均点を出力する
#         (9)分散を出力する
#         (10)標準偏差を出力する
#         (11)最小値を出力する
#         (12)最大値を出力する
#         (13)(4)へ戻る
#         ※標準ライブラリのsqrt関数を使わずニュートン法によって平方根を
#          求める自作の関数を使え。
#         ※平均点、分散、標準偏差を求めるとき、キャスト演算子を用いてdouble型へ
#          型変換せよ。
146デフォルトの名無しさん:2010/06/28(月) 22:56:35
http://pc12.2ch.net/test/read.cgi/tech/1276810079/309
# [1] 授業単元:C++プログラミング
# [2] 問題文(含コード&リンク):コンピュータ対人間の○×ゲームプログラムを作りなさい。
147デフォルトの名無しさん:2010/06/29(火) 06:37:36
http://pc12.2ch.net/test/read.cgi/tech/1276810079/317
# [1] 授業単元:プログラミング言語
# [2] # リストに格納したデータを,データファイルとは
# 別のファイル(出力先ファイルとよぶ)に書き出す.
# データファイルと出力先ファイルのファイル名は
# コマンドライン引数として指定する
# 下記テンプレートを使用すること
# http://ime.nu/codepad.org/d9CUmfae

148デフォルトの名無しさん:2010/06/29(火) 07:47:45
http://pc11.2ch.net/test/read.cgi/db/1274791771/231
# tbl1にnum1,num2,id1,id2,id3
# tbl2にid,name,ssというフィールドがあるとして
# SELECT name, num1, num2, id1, id2, id3, time FROM tbl1, tbl2
# WHERE num1 = 1
# AND id1 = ( SELECT id FROM tbl2 WHERE ss = "monga")
# 上記のようなSQLを
# 特定のフィールドが他の行と重複してたら抜かすというのはどうやればいいでしょうか?
# 単にdistinctつけるだけだとどれかひとつでも重複していなかったら抽出されますよね。
# id1,id2,id3が他のレコードのid1,id2,id3と重複してたら
# 検索結果に入れないみたいな感じにしたいのですが。
# MYSQLです。
149デフォルトの名無しさん:2010/06/29(火) 08:42:29
>>140
% Prolog 多分ほとんどの処理系で符号なし整数はサポートされていないと思う。ここでは符号付き整数で考えてみる。

'IPアドレスを32ビットの符号付き整数データとして保持する'([A1,A2,A3,A4],_アドレス) :-
    var(A1),var(A2),var(A3),var(A4),_アドレス >= 0,
    A1 is _アドレス // 16777216,
    M1 is _アドレス mod 16777216,
    A2 is M1 // 65536,
    M2 is M1 mod 65536,
    A3 is M2 // 256,
    A4 is M2 mod 256,!.
'IPアドレスを32ビットの符号付き整数データとして保持する'([A1,A2,A3,A4],_アドレス) :-
    var(A11),var(A22),var(A33),var(A44),_アドレス < 0,
    A11 is _アドレス // -16777216,
    M1 is _アドレス mod -16777216,
    A22 is M1 // -65536,
    M2 is M1 mod -65536,
    A33 is M2 // ((-1) * 256),
    A44 is M2 mod 256,
    A1 is 255 - A11,A2 is 255 - A22,A3 is 255 - A33,A4 is A44 + 256.!.
'IPアドレスを32ビットの符号付き整数データとして保持する'([A1,A2,A3,A4],_アドレス) :-
    A1 > 127,A11 is A1 - 256,
    _アドレス is A11 * 256 * 256 * 256 + A2 * 256 * 256 + A3 * 256 + A4,!.

'IPアドレスを32ビットの符号付き整数データとして保持する'([A1,A2,A3,A4],_アドレ
ス) :-
    A1 < 128,
    _アドレス is A1 * 256 * 256 * 256 + A2 * 256 * 256 + A3 * 256+ A4,!.

150デフォルトの名無しさん:2010/06/29(火) 10:14:46
>>144
% Prolog

'多項式の次数nと係数a,(i=0,1・・・・,n)を入力し、その多項式f(x)=a_nx^n+a_n-1x^n-1+・・・+a_2x^2+a_1x+a_0とその微分の多項式f'(x)を出力する' (_n,_係数ならび) :-
    findall(S,(
          append(L0,[A|R],_係数ならび),
          length(R,N),
          項文字列の生成(A,N)),
        L1),
    多項式に整形(L1,L2),
    concat_atom(L2,_多項式).

項文字列の生成(0,_,'') :- !.
項文字列の生成(A,0,S) :- write_formatted_atom('%t',[A],S),!.
項文字列の生成(A,1,S) :- A > 1,write_formatted_atom('%tx',[A],S),!.
項文字列の生成(1,1,x) :- !.
項文字列の生成(A,N,S) :- write_formatted_atom('%tx^%t',[A,N],S),!.

多項式に整形(L1,_多項式) :-
    加減算符号を付加(L1,L2),
    先頭項のプラスは削除(L2,L3),
    concat_atom(L3,_多項式),!.

加減算符号を付加([],[]) :- !.
加減算符号を付加([A|R1],[A|R2]) :- sub_atom(A,0,1,_,'-'),加減算符号を付加(R1,R2,!.
加減算符号を付加([A|R1],['+',A|R2]) :- 加減算符号を付加(R1,R2),!.

先頭項のプラスは除去(['+'|L],L) :- !.
先頭項のプラスは除去(L,L).
151デフォルトの名無しさん:2010/06/29(火) 10:33:05
http://pc12.2ch.net/test/read.cgi/tech/1276810079/316
# http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10760.txt
#
# (1)複数の文字列を読み込み,さらに,それらの文字列を繋ぎ合わせる順番を入力し結果を出力するプログラムを作成せよ.
#
# 【実行例】
#
# 何個の文字列を入力しますか?:3
# 入力文字列[1]:B
# 入力文字列[2]:A
# 入力文字列[3]:C
#
# 繋ぎ合わせる順番を入力してください。
# 2
# 1
# 3
#
# 結果 -> ABC
#
# (2)入力した文字配列中に,abcという並びがいくつあるか調べるプログラムを作成せよ.
bfaabcabc
# gatagataabc
# (ここで ^D を押す)
# #ABC is 3

152デフォルトの名無しさん:2010/06/29(火) 12:35:39
>>151
% Prolog

'複数の文字列を読み込み,さらに,それらの文字列を繋ぎ合わせる順番を入力し結果を出力する' :-
    催促付き整数入力('文字列の個数を予約してください : ',N),
    findall(S,(
          for(1,_,N),write_formatted('入力文字列[%t] : ',[M]),
          get_line(S)),
        _入力文字列ならび),
    write('繋ぎ合わせる順番を入力してください。\n'),
    findall(N2,(for(1,_,N),get_integer(N2)),_結合順序指定ならび),
    文字列のならびの並べ替え(_入力文字列ならび,_結合順序指定ならび,_指定順序に並び替えられたならび),
    concat_atom(_指定順序に並べ替えられたならび,_繋ぎ合わされた文字列),
    write_formatted('%t\n',[_繋ぎ合わされた文字列]).

文字列のならびの並べ替え(_,[],[]) :- !.
文字列のならびの並べ替え(_選択対象ならび,[N|R2],[_取り出し文字列|R3]) :-
    list_nth(N,_選択対象ならび,_取り出し文字列),
    文字列のならびの並べ替え(_選択対象ならび,R2,R3).
153デフォルトの名無しさん:2010/06/29(火) 13:20:25
>>151
% Prolog [2]

'入力した文字配列中に,abcという並びがいくつあるか調べる' :-
    get_chars(Chars),
    count(append(_,[a,b,c|_],Chars),Count),
    write_formatted('#abc = %t\n'[Count]).
154デフォルトの名無しさん:2010/06/29(火) 13:25:25
http://pc12.2ch.net/test/read.cgi/tech/1276810079/325
# 画像上のある点からy=ax^2の2次曲線を赤線で描画しなさい(画像 320×240)
#
#
# (x,y)=(160,120)
# a=1/3のとき
# a=1/2のとき
# a=1のとき
# a=2のとき
#
# 描画範囲
# yの範囲は40
# xの範囲は60
#

155デフォルトの名無しさん:2010/06/29(火) 13:47:10
>>148
% Prolog

'id1,id2,id3が他のレコードのid1,id2,id3と重複してたら検索結果に入れない'([_name,_num1,_num2,_id1,_id2,_id3]) :-
    findall([_name,_num1,_num2,_id1,_id2,_id3],(
          tbl1(num1,_num2,_id1,_id2,_id3),
          num1 = 1,
          tbl2(id1,_name,monga)),
        L1),
    findsetof([_id1,_id2,_id3],member([_,_,_,_id1,_id2,_id3],L1),L2),
    findall([_id1,_id2,_id3],(
          count((member([_id1,_id2,_id3],L2),1)),
        L2),
    member([_name,_num1,_num2,_id1,_id2,_id3],L1),
    member([_id1,_id2,_id3],L2).
156デフォルトの名無しさん:2010/06/29(火) 15:42:04
>>147
% Prolog

program :-
    user_parameters([_データファイル,_出力ファイル]),
    get_chars(_データファイル,Chars),
    put_chars(_出力ファイル,Chars).
157デフォルトの名無しさん:2010/06/29(火) 17:34:43
http://pc12.2ch.net/test/read.cgi/tech/1276810079/331
# [1] 授業単元:一般情報処理
# [2] 問題文(含コード&リンク):次のような動作をするプログラムを作成せよ。
#                配列内のデータの最小値を返す。int min() 配列内のデータの最大値を返す。int max()
# 配列内のデータの平均値を返す。double mean() 配列内のデータの標準偏差を返す。double stdev()
# ただしmain関数は次のものを使うこと。
#                int main(void){
# int a[15]={81,36,45,67,73,98,62,56,77,61,65,70,25,51,18};
# printf("min=%d\n",min(15,a));
# printf("max=%d\n",max(15,a));
# printf("average=%lf\n",mean(15,a));
# printf("standard deviation=%lf\n",stdev(15,a));

# return 0; }
# さらに、配列a[]の各要素の偏差値を表示するプログラムを作成せよ
#

158デフォルトの名無しさん:2010/06/29(火) 18:02:13
>>157
% Prolog

平均値([],N,S,M) :- M is S / N,!.
平均値([A|R],N,S,M) :- S1 is S + A,平均値(R,N,S1,M) .

平均値(L,M) :- length(L,N),平均値(L,N,0.0,M) .

最小値最大値([A|R],_最小値,_最大値) :- 最小値最大値(R,A,A,_最小値,_最大値).

最小値最大値([],_最小値,_最大値,_最小値,_最大値) :- !.
最小値最大値([A|R],_最小値1,_最大値1,_最小値,_最大値) :- A @> _最大値,最小値最大値(R,_最小値1,A,_最小値,_最大値),!.
最小値最大値([A|R],_最小値1,_最大値1,_最小値,_最大値) :- A @< _最小値,最小値最大値(R,A,_最大値1,_最小値,_最大値),!.
最小値最大値([A|R],_最小値1,_最大値1,_最小値,_最大値) :- 最小値最大値(R,_最小値1,_最大値1,_最小値,_最大値),!.

標準偏差(L,V) :- length(L,N),平均値(L,M),標準偏差(L,N,M,0.0,V).

標準偏差([],N,M,S,V) :- V is sqrt(S / (N - 1)),!.
標準偏差([A|R],N,M,S,V) :- S1 is (A - M) ^ 2,S2 is S + S1,標準偏差(R,N,M,S2,V).

偏差値(_標本値,_平均値,_標準偏差,_偏差値) :- _偏差値 is 10 * (_標本値 - _平均値 ) / _標準偏差 + 50.

偏差値(L,_偏差値ならび) :-
    平均値(L,_平均値),
    標準偏差(L,_標準偏差),
    findall(_偏差値,(member(_値,L) ,偏差値(_値,_平均値,_標準偏差,_偏差値)),_偏差値ならび).
159デフォルトの名無しさん:2010/06/29(火) 19:04:21
http://pc12.2ch.net/test/read.cgi/tech/1276810079/334
# [1] 授業単元:画像処理
# [2] 問題文(含コード&リンク):16×16サイズの白黒ビットマップ画像を読み込んで、
#                  上下反転させた画像をビットマップで保存するプログラムを作成。
#
160デフォルトの名無しさん:2010/06/29(火) 22:57:29
http://pc12.2ch.net/test/read.cgi/tech/1276810079/335
# [1] 授業単元:プログラミング演習
# [2] 問題文(含コード&リンク):ファイルに保存された会員情報を指定された項目をキーとしてソートするプログラムを作成する.
# 出力形式は,入力データと同じ,つまり1行に1人分のデータを格納し,各項目間はカンマで区切るものとする.
# また,ソート済みのデータはファイルではなく標準出力に出力するものとする.
# 整数型のデータについては数値として,文字列型のデータについては大文字/小文字を区別せずにソートをすること.
# ソートアルゴリズムはこれまでの演習で使用したもの,していないものに関わらず,何を用いてもよい.
#
# また,会員数は最大で20,000人と仮定してもよい.
#
# 会員情報の入ったファイルのファイル名,キーとなる項目,正順か逆順かの指定はプログラム実行時の引数として与える.第一引数が会員情報の入ったファイル名,第二引数が項目番号(表1参照),第三引数がソート方法(0なら昇順,1なら降順)とする.
nt)
# 州 5 文字列(最大で50文字)
# 郡 6 文字列(最大で50文字)#
# 表1: データ型 項目名 項目番号 型
# 会員ID 1 整数(int)
# 姓 2 文字列(最大で50文字)
# 名 3 文字列(最大で50文字)

161デフォルトの名無しさん:2010/06/29(火) 23:52:14
http://pc12.2ch.net/test/read.cgi/tech/1276810079/340
# [1] 授業単元: プログラミング開発基礎
# [2] 問題文 複数ありますのでこちらで
# http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10764.txt
# 問題1
# 1 問題1読み込んで,その数が10 で割り切れるかどうかを表示するプログラムを作成
# 整数値を読み込んで,その数が10 で割り切れるかどうかを表示するプログラムを作成せよ.,表示後に,もう一度続けるかの確認を促し,それに応じて何度でも繰り返せる# なお,表示後に,もう一度続けるかの確認を促し,それに応じて何度でも繰り返せるようにすること
# 2 問題2
# 2 問題2数値を読み込んで,その桁数を表示するプログラムを作成せよ.
# 非負の整数値を読み込んで,その桁数を表示するプログラムを作成せよ.と.
# なお,負の値を読み込んだ場合は,再入力を促すメッセージを表示すること.
# 3 問題3
# 3 問題3数値を読み込んで,小さい方の数以上で大きい方の数以下の整数を全て加え
# 二つの整数値を読み込んで,小さい方の数以上で大きい方の数以下の整数を全て加えた値を表示するプログラムを作成せよ.
# 4 問題4読み込むまで次々と整数値を読み込んでいき,合計値および平均値を表示する
# 9999 を読み込むまで次々と整数値を読み込んでいき,合計値および平均値を表示するプログラムを作成せよ.なお,最後に読み込んだ9999 は合計には加えないものとする
162デフォルトの名無しさん:2010/06/30(水) 00:03:23
http://pc12.2ch.net/test/read.cgi/tech/1266565626/675
# ../test/read.cgi/tech/1266565626/673
# ・とあるディレクトリd0以下に存在する全てのディレクトリをなぞる。
#
# ・このとき、今位置するディレクトリdnの相対的な深さをdとして、
#  d個のピリオドをディレクトリdnの名前の前に足した文字列 をファイルFに出力する。
#
# ・また、このとき、今位置するディレクトリdnにテキストファイルがあれば、
#  d+1個のピリオドをテキストファイルtnの名前の前に足し、拡張子.txtを除いた文字列 をファイルFに出力する。
# ・さらに、そのテキストファイルtnの内容をそのままファイルFに出力する。
#  テキストファイルtnの内容の各行頭には、ピリオドはつけない。
#  テキストファイルtnの内容のとある行頭にピリオドがある場合は、ピリオドの前に半角空白を入れる。
163デフォルトの名無しさん:2010/06/30(水) 02:04:53
>>161
% Prolog [1] [2]

'整数値を読み込んで,その数が10 で割り切れるかどうかを表示する' :-
    催促付き整数入力('整数値を入力してください : ',N),
    '10で割り切れるか判定する'(N),
    write('入力を続けますか y or n : '),get_line(Line),
    Line = y,
    '整数値を読み込んで,その数が10 で割り切れるかどうかを表示する'.
'整数値を読み込んで,その数が10 で割り切れるかどうかを表示する'.

'10で割り切れるか判定する'(N) :- 0 is N mod 10,
    write('あなたの入力した数%tは10で割り切れます\n',[N]),!.
'10で割り切れるか判定する'(N) :-
    write('あなたの入力した数%tは10で割り切れません\n',[N]),!.

'非負の整数値を読み込んで,その桁数を表示する' :-
    催促付き整数入力('非負の整数値を入力してください : ',N),N >= 0,
    入力された整数の桁数を表示する(1,N),
    write('入力を続けますか y or n : '),get_line(Line),
    Line = y,
    '非負の整数値を読み込んで,その桁数を表示する'.
'非負の整数値を読み込んで,その桁数を表示する'.

入力された整数の桁数を表示する(M,N) :-
    truncate(10 ^ M) > N,write('入力された非負整数は%桁です\n',[M]),!.
入力された整数の桁数を表示する(M1,N) :- M2 is M1 + 1,入力された整数の桁数を表示
する(M2,N).
164デフォルトの名無しさん:2010/06/30(水) 07:14:15
>>161
% Prolog 問題3 問題4

二つの整数値を読み込んで,小さい方の数以上で大きい方の数以下の整数を全て加えた値を表示する :-
    write('整数値をカンマで区切り二つ読み込みます : '),
    get_split_line([','],[N1,N2]),
    小さい順に(N1,N2,N3,N4),
    findsum(N,for(N3,N,N4),Sum1),
    Sum is truncate(Sum1),
    write_formatted('%t以上%t以下のすべての整数の和は%tです。\n',[N3,N4,Sum]).

小さい順に(N1,N2,N1,N2) :- N1 =< N2,!.
小さい順に(N1,N2,N2,N1) :- N1 > N2,!.

'9999 を読み込むまで次々と整数値を読み込んでいき,合計値および平均値を表示する':-
    findall(N,(repeat,get_integer(N),(N=9999,!,fail;true)),L),
    length(L,Len),\+(Len=0),
    合計値および平均値(L,Len,0,_合計値,_平均値),
    write_formatted('合計値 = %t, 平均値 = %t\n',[_合計値,_平均値]).

合計値および平均値([],Len,_合計値,_合計値,_平均値) :- _平均値 is _合計値 / Len,!.
合計値および平均値([N|R],Len,_合計値1,_合計値,_平均値) :-
    _合計値2 is _合計値 + N,
    合計値および平均値(R,Len,_合計値2,_合計値,_平均値).
165デフォルトの名無しさん:2010/06/30(水) 07:30:57
>>163->>164 (>>161)
% Prolog write_formattedであるべきところがwriteになっているところが複数箇所ありました。% 以下サイトに書き直しておきます。
http://nojiriko.asia/prolog/c137_340.html

166デフォルトの名無しさん:2010/06/30(水) 11:44:59
http://pc12.2ch.net/test/read.cgi/tech/1200175247/861
# [1] 授業単元:ファイル操作、2分探索法
# [2] 問題文:学生の身長、体重のデータを読み込みある学籍番号を入力した
# ときにその学生の学籍番号、身長、体重を2分探索法により求め、出力しなさい。
# 学生のデータは、txtファイルでxx yyy zzという風に記載されています。
# (例)出力結果
# 学生番号:xx
# 身長:yyy (cm)
# 体重:zz (kg)
167デフォルトの名無しさん:2010/06/30(水) 17:07:33
168デフォルトの名無しさん:2010/06/30(水) 17:24:16
http://pc12.2ch.net/test/read.cgi/tech/1200175247/863
# 【質問テンプレ】
# [1] 授業単元:プログラミング
# [2] 問題文:
# 二分法による平方根の計算。但し、求めたい平方根(自
# 然数)を入力できるようにした上で、プログラムの実行時
# の計算回数を計算・表示できるように、プログラムを作成
# すること。
169デフォルトの名無しさん:2010/06/30(水) 18:02:30
>>168
% Prolog

二分法による平方根の計算(X,Y) :-
    S1 is X / 2,
    二分法による平方根の計算(1,X,S1,Y).

二分法による平方根の計算(N,X,S1,Y) :-
    Y is X / 2 + S1,
    write_formattd('%t %10.4f\n',[N,Y]),
    0.0001 > abs(Y - S1),!.
二分法よる平方根の計算(N1,X,S1,Y) :-
    S2 is S / 2 + S1,
    N2 is N1 + 1,
    二分法による平方根の計算(N2,X,S2,Y).
170デフォルトの名無しさん:2010/06/30(水) 20:56:38
http://pc12.2ch.net/test/read.cgi/tech/1276810079/357
# [1] 授業単元:プログラミング
# [2] 問題文(含コード&リンク):
# http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10767.txt
#
# 登録番号(int no)と名前(char *name)と年齢(int age)を含む構造体person型のポインタ変数を宣言し,
# 登録人数分だけの動的メモリ確保をせよ. そして, データをファイルから入力せよ. (malloc関数を使用すること)
# ファイルの形式は, 先頭に登録する人数とし, そのあとに人数分のデータを登録番号,名前, 年齢の順に書いていく
# (下の例を参照. 登録番号は入力順に1,2,3,4,5, …とする. そして, 入力した全員データを表示せよ.
#
# (ファイルの例)
# 3
# 1 田中 20
# 2 大田 40
# 3 井上 35

171デフォルトの名無しさん:2010/06/30(水) 21:54:55
>>170
% Prolog データファイルを作ることも問題のうちなのかな。例によってポインター云々は無視。

ファイル作成(_ファイル名) :-
    write('作成するデータ数を入力してください : '),
    get_integer(N),
    tell(_ファイル名),
    write_formatted('%t\n',[N]),
    for(1,M,N),
    write('名前と年齢をカンマまたはスペース区切りで入力してください : '),
    get_split_line([',',' '],[_名前,_年齢]),
    write_formatted('%t %t %t\n',[N,_名前,_年齢]),
    M = N,
    told.

ファイルから読み取ったデータを登録する(_ファイル名) :-
    get_split_lines(_ファイル名,[' '],LL),
    LL = [_|LL2],
    'この場合、要素数(構造体の数)はいらないから',
    append(_,[[_登録番号,_名前,_年齢]|R],LL2),
    assertz(人物(_登録番号,_名前,_年齢)),
    R = [].

'この場合、要素数(構造体の数)はいらないから'.
172デフォルトの名無しさん:2010/06/30(水) 22:54:32
>>170
% Prolog >>171はナンセンスで、Prologのプログラマなら、

ファイル作成(_ファイル名) :-
    write('作成するデータ数を入力してください : '),
    get_integer(N),
    tell(_ファイル名),
    for(1,M,N),
    write('名前と年齢をカンマまたはスペース区切りで入力してください : '),
    get_split_line([',',' '],[_名前,_年齢]),
    write_formatted(人物('%q,%q,%q).\n',[N,_名前,_年齢]),
    M = N,
    told.

ファイルから読み取ったデータを登録する(_ファイル名) :-
    consult(_ファイル名).


173デフォルトの名無しさん:2010/06/30(水) 23:39:49
174デフォルトの名無しさん:2010/07/01(木) 05:33:43
http://pc12.2ch.net/test/read.cgi/tech/1257968644/58
# 二分法とニュートン法で次の非線形方程式の解を求めるプログラムを作成せよ
#
# x=2+logx (x≧1)
#

175デフォルトの名無しさん:2010/07/01(木) 09:00:30
>>170
% Prolog (その一) 整列と併合を除く外殻だけ。
オンメモリ整列限界数(1000).

ファイルに保存された会員情報を指定された項目をキーとしてソートする(_対象ファイル,_鍵項目番号,_ソート方法) :-
    オンメモリ整列限界数(_オンメモリ整列限界数),
    open(_対象ファイル,read,Input),
    ふたつの仮ファイルの取得と交互からくり生成,
    入力出力ファイルを交互しながらの繰り返し(_,_仮出力ファイル,InputT,OutputT),
    対象ファイルから読み込む(Input,_オンメモリ整列限界数,Lines,_診断),
    鍵・昇降順・指定整列(Lines,_鍵項目番号,_ソート方法,_整列されたLines),
    鍵項目番号とソート方法をしてファイル併合(_整列されたLines,_鍵項目番号,_ソート方法,InputT,OutputT),
    _診断 = end_of_file,close(Input),
    仮出力ファイルの内容を整理しながら標準出力に表示する(_仮出力ファイル,_鍵項目番号).

入力出力ファイルを交互しながらの繰り返し(_仮ファイルA,_仮ファイルB,InputT,OutputT) :-
    仮ファイルからくり(_仮ファイルA,_仮ファイルB),
    open(_仮ファイルA,read,InputT),
    open(_仮ファイルB,write,OutputT).

仮ファイルからくり(X) :- 仮ファイルからくり(X).

ふたつの仮ファイルの取得と交互からくり生成 :-
    tmpnam(_仮ファイル1),open(_仮ファイル1,write,Output1),close(Output1),
    tmpnam(_仮ファイル2),opne(_仮ファイル2,write,Output2),close(Output2),
    asserta(仮ファイルからくり(_仮ファイル2,_仮ファイル1)),
    asserta(仮ファイルからくり(_仮ファイル1,_仮ファイル2)).
176デフォルトの名無しさん:2010/07/01(木) 11:24:56
>>200
% Prolog

学校のホームページに載っている休講情報に接続して、それから先生の名前と日にちだけ取り出す(URL,_休講情報ならび) :-
    w3c(URL,Lines),
    先生の名前と日にちだけ取り出す(Lines,_休講情報ならび),!.

先生の名前と日にちだけ取り出す(Lines,_休講情報ならび) :-
    append(L0,[A|R1],Lines),
    sub_atom(A,_,2,_,先生),
    月日を取り出す(L0,_月,_日),
    ある日の休講情報ならびを得る([A|R1],_月,_日,_ある日の休講となる情報ならび,_残りならび),
    先生の名前と日にちだけ取り出す(_残りならび,R),
    append(_ある日の休講となる情報ならび,_休講情報ならび),!.
先生の名前と日にちだけ取り出す(_,[]) :- !.

月日を取り出す(Lines,_月,_日) :-
    append(_,[A|_],Lines),sub_atom(A,S,1,_,月),sub_atom(A,0,S,_,_月),
    append(_,[B|_],Lines),sub_atom(A,S,1,_,日),sub_atom(B,0,S,_,_日),!.

ある日の休講情報ならびを得る([],_,_,[],[]) :- !.
ある日の休講情報ならびを得る(['\n'|R],_,_,[],R) :- !.
ある日の休講情報ならびを得る([A|R1],_月,_日,[[_氏名,_月,_日]|R2],_残りならび) :-
    sub_atom(A,_,2,_,先生),
    split(A,[' '],[_姓,_名,先生]),
    concat_atom([_姓,_名],_氏名),
    ある日の休講情報ならびを得る(R1,_月,_日,R2,_残りならび).
177デフォルトの名無しさん:2010/07/01(木) 11:29:40
>>176 の出題レス番号は >>200 ではなくて >>133 でした。
178デフォルトの名無しさん:2010/07/01(木) 13:47:49
>>175
これも >>170 ではなくて >>160 だった。
179デフォルトの名無しさん:2010/07/01(木) 15:45:50
http://pc12.2ch.net/test/read.cgi/tech/1276810079/390
# [1] 授業単元: プログラミング言語
# [2] 問題文(含コード&リンク): http://ime.nu/kansai2channeler.hp.infoseek.co. jp/cgi-bin/joyful/img/10772.txt
#
# 演習1
# 再帰呼び出しを用いたフィボナッチ数
180デフォルトの名無しさん:2010/07/01(木) 16:13:56
>>179
% Prolog

フィボナッチ数(0,1).
フィボナッチ数(1,1).
フィボナッチ数(N,X) :-
    N >= 2,
    N_1 is N - 1,フィボナッチ数(N_1,X1),
    N_2 is N - 2,フィボナッチ数(N_2,X2),
    X is X1 + X2.
181デフォルトの名無しさん:2010/07/01(木) 19:54:48
182デフォルトの名無しさん:2010/07/02(金) 00:20:09
>>131
使用言語:十進BASIC

FUNCTION ack(m,n)
IF m=0 THEN
LET ack=n+1
ELSEIF n=0 THEN
LET ack=ack(m-1,1)
ELSE
LET ack=ack(m-1,ack(m,n-1))
END IF
END FUNCTION
FOR i=0 TO 8
PRINT USING "ask(3,#) = ####":i,ack(3,i)
NEXT I
END

ask(3,0) = 5
ask(3,1) = 13
ask(3,2) = 29
ask(3,3) = 61
ask(3,4) = 125
ask(3,5) = 253
ask(3,6) = 509
ask(3,7) = 1021
ask(3,8) = 2045
183デフォルトの名無しさん:2010/07/02(金) 00:21:11
>>131
使用言語:Lua

function ack(m,n)
if m==0 then return n+1
elseif n==0 then return ack(m-1,1)
else return ack(m-1,ack(m,n-1))
end
end

for i=0,8 do print("ack(3,"..i..") = "..ack(3,i))end


ack(3,0) = 5
ack(3,1) = 13
ack(3,2) = 29
ack(3,3) = 61
ack(3,4) = 125
ack(3,5) = 253
ack(3,6) = 509
ack(3,7) = 1021
ack(3,8) = 2045
184デフォルトの名無しさん:2010/07/02(金) 00:22:11
>>131
使用言語:Xtal

ack:fun(m,n){
if (m==0) return n+1;
if (n==0) return ack(m-1,1);
return ack(m-1,ack(m,n-1));
}

ix:009>9.times{%f"ack(3,%d)=%d"(it,ack(3,it)).p;};
ack(3,0)=5
ack(3,1)=13
ack(3,2)=29
ack(3,3)=61
ack(3,4)=125
ack(3,5)=253
ack(3,6)=509
ack(3,7)=1021
ack(3,8)=2045
ix:010>
185デフォルトの名無しさん:2010/07/02(金) 04:59:37
http://pc12.2ch.net/test/read.cgi/tech/1276810079/405
# 摂氏から華氏,及び華氏から摂氏に換算する関数を作成して、
# main関数でキーボードから温度とその値が摂氏であるか華氏であるかを
# 入力し,摂氏ならば華氏に,華氏ならば摂氏に換算した値を小数点以下1桁までで出力するプログラムを作成しなさい。
# なお出力は main関数で行うこと。
#

186デフォルトの名無しさん:2010/07/02(金) 05:00:56
http://pc12.2ch.net/test/read.cgi/tech/1276810079/409
# [1] 授業単元:プログラミングC
# [2] 問題文(含コード&リンク):
# 極座標(r,θ)の値を入力すると、直交座標(x,y)に変換するプログラムを作成せよ。
# 但し,θの値はdegree(度)で入力すること。また、πの値は逆三角関数(arctan(x))を使って計算をすること。
#

187デフォルトの名無しさん:2010/07/02(金) 05:01:48
http://pc12.2ch.net/test/read.cgi/tech/1276810079/410
# [1] 授業単元:アルゴリズム論
# [2] 問題文(含コード&リンク):分離連作法と外部ハッシュ法の性能比較
#

188デフォルトの名無しさん:2010/07/02(金) 05:04:19
http://pc12.2ch.net/test/read.cgi/tech/1267796762/215
#
# 【 課題 】
# 課題1
#
# 整数型の変数n1,n及びn3には、数値が格納されている。
# これらの3個の数値の大小比較を行い、最大値を変数maxに、最小値を変数minに格納する手続き部である。
# 最初にn1とn2の大小比較を行い、大きいほうをmaxに入れ、小さい方をmmminに入れる。
# 次に、max及びminとn3を大小比較して、大きいほうをmaxに、小さい方をminに入れて、最終的な最大値および
#
# 最小値を決定する。

189デフォルトの名無しさん:2010/07/02(金) 05:21:57
http://pc12.2ch.net/test/read.cgi/tech/1200175247/877
# [1] 授業単元:2分探索法
# [2] 問題文: http://nojiriko.asia/jpeg/up10962.jpg にコピーさせていただきました。
#

190デフォルトの名無しさん:2010/07/02(金) 05:26:20
http://pc12.2ch.net/test/read.cgi/tech/1260922392/45
# 以下の条件(仕様)を満たすプログラムを作成し, そのプログラム(Pascalプログラムソースファイル)とともに その解説書を提出すること.
# 逆ポーランド記法で入力された論理式の充足可能性を判定し, その式の値をtrueにする変数値を,通常の表記とともに出力すること.
# 可能な演算は論理積(and), 論理和(or), 否定(not), の3種類として, それぞれ'a','o','n' で表現すること.
# 使用可能な論理変数は x0, x1, ..., x9 の10種類とし, それぞれ '0','1',...,'9' で表現すること.
# 例) (x1∧x2)∨(¬x1∧x3) ⇒  12a1n3ao
# 使用できない文字が含まれる入力に対してエラーの旨を出力すること.
# 入力された論理式の充足可能性を判定, 式の値を true にする変数値を出力した後, 再度入力待ち状態になり, 空の文字列を入力するとプログラムが終了すること.
191デフォルトの名無しさん:2010/07/02(金) 06:10:53
>>189
% Prolog 問題B 問題B.1

_学籍番号+_氏名+_誕生_月+_誕生_日 :-
    open('data_b.txt',append,Output),
    write_formatted(Output,'%t %t %t %t\n',[_学籍番号,_氏名,_誕生_月,_誕生_日]),
    close(Output).

'data_b.txtを読み込み、4月1日を年初めとして、誕生日の早いもの順にソートし、その結果を「output_b.txt」ファイルに出力する' :-
    get_split_lines([' '],'data_b.txt',LL),
    鍵項目の付加(LL,LL2),
    整列(LL2,LL3),
    鍵項目を除去しながら出力する(LL3).

鍵項目の付加([],[]) :- !.
鍵項目の付加([[_学籍番号,_氏名,_誕生_月,_誕生_日]|R1],[_誕生_月_2,_誕生_日,_学籍番号,_氏名,_誕生_月,_誕生_日]|R2]) :-
    '1-3月を13-15月に修正'(_誕生_月,_誕生月_2),
    鍵項目の付加(R1,R2).

'1-3月を13-15月に修正'(_誕生_月,_誕生月_2) :- _誕生_月 >= 1,_誕生_月 =< 3,_誕生_月_2 is _誕生_月 + 12,!.
'1-3月を13-15月に修正'(_誕生_月,_誕生月).

鍵項目を除去しながら出力する([]) :- !.
鍵項目を除去しながら出力する([[_,_|L]|R]) :-
    open('out_b.txt',append,Output),
    write_formatted(Output,'%t %t %t月 %t日\n',L),
    close(Output),
    鍵項目を除去しながら出力する(R).
192デフォルトの名無しさん:2010/07/02(金) 06:57:45
>>191 (>>189)
% Prolog get_split_lines/3の引数の取り方に誤りがあった。修正。

_学籍番号+_氏名+_誕生_月+_誕生_日 :-
    open('data_b.txt',append,Output),
    write_formatted(Output,'%t %t %t %t\n',[_学籍番号,_氏名,_誕生_月,_誕生_日]),
    close(Output).

'data_b.txtを読み込み、4月1日を年初めとして、誕生日の早いもの順にソートし、その結果を「output_b.txt」ファイルに出力する' :-
    get_split_lines('data_b.txt',[' '],LL),
    鍵項目の付加(LL,LL2),
    整列(LL2,LL3),
    鍵項目を除去しながら出力する(LL3).

鍵項目の付加([],[]) :- !.
鍵項目の付加([[_学籍番号,_氏名,_誕生_月,_誕生_日]|R1],[_誕生_月_2,_誕生_日,_学籍番号,_氏名,_誕生_月,_誕生_日]|R2]) :-
    '1-3月を13-15月に修正'(_誕生_月,_誕生月_2),
    鍵項目の付加(R1,R2).

'1-3月を13-15月に修正'(_誕生_月,_誕生月_2) :- _誕生_月 >= 1,_誕生_月 =< 3,_誕生_月_2 is _誕生_月 + 12,!.
'1-3月を13-15月に修正'(_誕生_月,_誕生月).

鍵項目を除去しながら出力する([]) :- !.
鍵項目を除去しながら出力する([[_,_|L]|R]) :-
    open('out_b.txt',append,Output),
    write_formatted(Output,'%t %t %t月 %t日\n',L),
    close(Output),
    鍵項目を除去しながら出力する(R).
193デフォルトの名無しさん:2010/07/02(金) 07:00:34
>>189
% Prolog 問題B.2

'output_b.txtを読み込み、ある誕生日を入力したときに、その学生の学籍番号、氏名、
誕生月、誕生日を二分探索法により出力する'(_誕生_月,_誕生_日) :-
    get_split_lines('output_b.txt',[' ',月,日],LL),
    二分探索法(LL,_誕生_月,_誕生_日,[_学籍番号,_氏名,_誕生_月,_誕生_日]),
    write_formatted('%t %t %t %t月%t日\n',[_学籍番号,_誕生_月,_誕生_日]).

二分探索法(LL,_誕生_月,_誕生_年,[_学籍番号,_氏名,_誕生_月,_誕生_日]) :-
    '1-3月を13-15月に修正'(_誕生_月,_誕生月_0),
    length(LL,Len),
    Len0 is Len // 2,
    append(L0,[[_学籍番号_1,_氏名_1,_誕生_月_1,_誕生_日_1|L1],LL),
    length(L0,Len0),
    '1-3月を13-15月に修正'(_誕生_月_1,_誕生月_10),
    二分探索法(L0,L,L1,_誕生_月_0,_誕生_日,_誕生_月_10,_誕生_日_1,[_学籍番
号,_氏名,_誕生_月,_誕生_日]).

二分探索法(L0,L,L1,_誕生_月,_誕生_日,_誕生_月,_誕生_日,L) :- !.
二分探索法(L0,L,L1,_誕生_月_0,_誕生_日,_誕生_月_10,_誕生_日_1,[_学籍番号,_氏名,
_誕生_月,_誕生_日]) :-
    [_誕生_月_0,_誕生_日] @> [_誕生_月_10,_誕生_日_1],!,
    二分探索法(L0,_誕生_月,_誕生_年,[_学籍番号,_氏名,_誕生_月,_誕生_日]).
二分探索法(L0,L,L1,_誕生_月_0,_誕生_日,_誕生_月_10,_誕生_日_1,[_学籍番号,_氏名,
_誕生_月,_誕生_日]) :-
    [_誕生_月_0,_誕生_日] @< [_誕生_月_10,_誕生_日_1],!,
    二分探索法(L1,_誕生_月,_誕生_年,[_学籍番号,_氏名,_誕生_月,_誕生_日]).

194デフォルトの名無しさん:2010/07/02(金) 07:05:19
>>193 (>>189)
% Prolog また、改行ミスがあった。

'output_b.txtを読み込み、ある誕生日を入力したときに、その学生の学籍番号、氏名、誕生月、誕生日を二分探索法により出力する'(_誕生_月,_誕生_日) :-
    get_split_lines('output_b.txt',[' ',月,日],LL),
    二分探索法(LL,_誕生_月,_誕生_日,[_学籍番号,_氏名,_誕生_月,_誕生_日]),
    write_formatted('%t %t %t %t月%t日\n',[_学籍番号,_誕生_月,_誕生_日]).

二分探索法(LL,_誕生_月,_誕生_年,[_学籍番号,_氏名,_誕生_月,_誕生_日]) :-
    '1-3月を13-15月に修正'(_誕生_月,_誕生月_0),
    length(LL,Len),
    Len0 is Len // 2,
    append(L0,[[_学籍番号_1,_氏名_1,_誕生_月_1,_誕生_日_1|L1],LL),
    length(L0,Len0),
    '1-3月を13-15月に修正'(_誕生_月_1,_誕生月_10),
    二分探索法(L0,L,L1,_誕生_月_0,_誕生_日,_誕生_月_10,_誕生_日_1,[_学籍番号,_氏名,_誕生_月,_誕生_日]).

二分探索法(L0,L,L1,_誕生_月,_誕生_日,_誕生_月,_誕生_日,L) :- !.
二分探索法(L0,L,L1,_誕生_月_0,_誕生_日,_誕生_月_10,_誕生_日_1,[_学籍番号,_氏名,_誕生_月,_誕生_日]) :-
    [_誕生_月_0,_誕生_日] @> [_誕生_月_10,_誕生_日_1],!,
    二分探索法(L0,_誕生_月,_誕生_年,[_学籍番号,_氏名,_誕生_月,_誕生_日]).
二分探索法(L0,L,L1,_誕生_月_0,_誕生_日,_誕生_月_10,_誕生_日_1,[_学籍番号,_氏名,_誕生_月,_誕生_日]) :-
    [_誕生_月_0,_誕生_日] @< [_誕生_月_10,_誕生_日_1],!,
    二分探索法(L1,_誕生_月,_誕生_年,[_学籍番号,_氏名,_誕生_月,_誕生_日]).
195デフォルトの名無しさん:2010/07/02(金) 07:17:53
>>191->>194 (>>189)
% Prolog もう二ヶ所エラーがあった。書き直しはしません。アーカイブの方を見てください。
http://nojiriko.asia/prolog/c137_877.html
196デフォルトの名無しさん:2010/07/02(金) 08:00:34
197デフォルトの名無しさん:2010/07/02(金) 10:33:56
>>185
% Prolog

main :-
    write('温度を入力してください : '),
    get_line(Line),
    atom_to_term(Line,_温度,_),
    write('摂氏または華氏と入力してください : '),
    get_line(_摂氏または華氏),
    摂氏・華氏温度変換(_摂氏または華氏,_温度,_摂氏または華氏の二,_温度の二)
,
    write_formatted('入力された%t%t度は%t%3.1f度です,[_摂氏または華氏,_温度,_摂氏または華氏の二,_温度の二).

摂氏・華氏温度変換(摂氏,_温度,華氏,_華氏) :- 摂氏・華氏変換計算(_温度,_華氏).
摂氏・華氏温度変換(華氏,_温度,摂氏,_摂氏) :- 摂氏・華氏変換計算(_摂氏,_温度).

摂氏・華氏変換計算(_摂氏,_華氏) :- \+(var(_摂氏)),_華氏 is 9 * _摂氏 / 5 + 32,! .
摂氏・華氏変換計算(_摂氏,_華氏) :- \+(var(_華氏)),_摂氏 is 5 * (_華氏 - 32) / 9,!.

198デフォルトの名無しさん:2010/07/02(金) 12:22:18
>>131
使用言語:R

ack <- function(m,n){
if (m==0) n+1
else if (n==0) ack(m-1,1)
else ack(m-1,ack(m,n-1))
}

> for(i in 0:8)cat("ack( 3 ,",i,") =",ack(3,i),"\n")
ack( 3 , 0 ) = 5
ack( 3 , 1 ) = 13
ack( 3 , 2 ) = 29
ack( 3 , 3 ) = 61
ack( 3 , 4 ) = 125
ack( 3 , 5 ) = 253
エラー: 評価があまりに深く入れ子になっています。無限の再帰か options(expressions=)?
>
199デフォルトの名無しさん:2010/07/02(金) 12:44:54
>>131
使用言語:uwsc

for i=0 to 6
print ack(3,i)
next
function ack(m,n)
if m = 0 then result = n+1
elseif n = 0 then result = ack(m - 1,1)
else result = ack(m - 1,ack(m,n - 1))
fend

5
13
29
61
125
253
509
200デフォルトの名無しさん:2010/07/02(金) 17:55:15
>>131
使用言語:Clojure

(defn ack[m n]
(cond (zero? m) (inc n)
(zero? n) (ack (dec m) 1)
:else (ack (dec m) (ack m (dec n)))))

user=> (dotimes [i 9] (printf "(ack 3 %d) -> %d\n" i (ack 3 i)))
(ack 3 0) -> 5
(ack 3 1) -> 13
(ack 3 2) -> 29
(ack 3 3) -> 61
(ack 3 4) -> 125
(ack 3 5) -> 253
(ack 3 6) -> 509
(ack 3 7) -> 1021
(ack 3 8) -> 2045
201デフォルトの名無しさん:2010/07/02(金) 17:56:43
>>131
使用言語:Io

Io> ack:=method(m,n,if(m==0,n+1,if(n==0,ack(m-1,1),ack(m-1,ack(m,n-1)))))
Io> 8 repeat(i,ack(3,i)println)
5
13
29
61
125
253
509
1021
==> 1021
202デフォルトの名無しさん:2010/07/02(金) 19:05:41
http://pc12.2ch.net/test/read.cgi/tech/1276810079/414
# [1] 授業単元:C言語
# [2] 問題文(含コード&リンク):switch 文を使用して
# 1. データファイルの新規作成
# 2. データファイルの追加作成
# 3. データファイルの読み込みと表示
# 4. 終了
# をメニュー形式で処理するプログラムを作成せよ。
# ・ ファイル名はキーボードから入力する。
# ・ 1〜4の処理はユーザ関数として定義すること。
# void data_write(void)
# void data_append(void)
# void data_read(void)
# void the_end(void)
# ・1〜4以外の数値が入力されたら再入力させること。
203デフォルトの名無しさん:2010/07/02(金) 19:06:31
http://pc12.2ch.net/test/read.cgi/tech/1276810079/417
# [1] 授業単元:C言語入門
# [2] 問題文(含コード&リンク):
# 正の整数を引数とし、その階乗(n!)を計算して戻り値とする関数
# factを作成して動作を確認せよ。
#

204デフォルトの名無しさん:2010/07/02(金) 19:13:16
http://pc12.2ch.net/test/read.cgi/tech/1267796762/222
# 【 課題 】http://nojiriko.asia/data/993.html にコピーさせていただきました。
# 【 形態 】1. Javaアプリケーション(main()で開始)
# 【 期限 】7月7日
# 【 Ver  】"1.6.0_20"
# 【 補足 】アップしたファイルに先生が途中まで解答したものが含まれているので、なるべくならそれを使用して下さい。
#

205デフォルトの名無しさん:2010/07/02(金) 21:07:45
>>202
% Prolog

switch(N,{N:P}) :- !,call(P).
switch(N,{N:P;_}) :- !,call(P).
switch(N,{P1;P2}) :- switch(N,{P1});switch(N,{P2}).

switch述語を使ってメニューを処理する(N,File) :-
    switch(N,{1:データファイルの新規作成(File);2:データファイルの追加作成(File);3:データファイルの読み込みと表示(File);4:終了}).

データファイルの新規作成(File) :- open(File,write,Output),close(Output).

データファイルの追加作成(File) :-
    write('追加要素を入力しなさい : '),
    get_line(Line),
    open(File,append,Output),
    write_formatted(Output,'%t\n',[Line]),
    close(Output).

データファイルの読み込みと表示(File) :-
    get_lines(File,Lines),
    put_lines(Lines).

終了 :- halt.
206デフォルトの名無しさん:2010/07/02(金) 21:12:00
http://pc12.2ch.net/test/read.cgi/tech/1276810079/420
# [1] 授業単元:C言語入門
# [2] 問題文(含コード&リンク):
# 実数値(xとする)と正の実数値(yとする)を引数としてx^yを戻り値とする
# 関数mypowを作成し、プログラムリストと実行結果を示せ。
# ただし、xとyについてはmain関数でキーボードから入力するようにし、
# 出力結果としては、mypow関数の計算結果と数学関数pow関数の結果を
# 両方表示するようにせよ。また、mypow関数のプロトタイプ宣言も行うこと。
#
207デフォルトの名無しさん:2010/07/02(金) 21:13:42
http://pc12.2ch.net/test/read.cgi/tech/1276810079/421
# [1] 授業単元: プログラム言語
# [2] 問題文(含コード&リンク):
# 10 人の成績を入力し,その順位を成績と共に表示したい。以下の考え方に基づいた
# プログラムを作成せよ。
# 1 ?
# 2次元配列s[10][2] を用意する。
# 2 ?
# i=0〜9 のfor 文を用いてs[i][0] に成績を入力する。
# 3 ?
# s[0][0] とs[j][0],j=0〜9 を比較し,s[0][0] より大きい数値の個数n を数え
#  る。その個数+1 が成績順位になるので,s[0][1] にn+1 を代入する。
# 4 ?
# 同様の操作をs[i][0],i=0〜9 に対して行なえば,その成績順位がs[i][1] とし
#  て求められるので,あとは成績と共に表示すればよい。
#

208デフォルトの名無しさん:2010/07/02(金) 22:03:42
>>186
使用言語:J

f=:[:+.[r.(180%~4*_3 o.1)*]

2 f 30
1.73205 1
1 f 45
0.707107 0.707107
209デフォルトの名無しさん:2010/07/02(金) 22:38:10
>>203
% Prolog

fact(N,X) :-
    length(L1,N),
    fact(L1,L1,LX),
    length(LX,X) .

fact(L1,[_],L1) :- !.
fact(L1,[_|R2],LX) :-
    findall(L1,member(_,R2),LY),
    flat(LY,LZ),
    fact(LZ,R2,LX).
210デフォルトの名無しさん:2010/07/02(金) 22:57:09
>>186
使用言語:maxima

f(r,d):=(a:d*4.*atan(1)/180,[float(r*cos(a)),float(r*sin(a))]);

(%i21) f(2,30);
(%o21) [1.732050807568877, 1.0]
(%i22) f(1,45);
(%o22) [0.70710678118655, 0.70710678118655]
211デフォルトの名無しさん:2010/07/03(土) 08:02:22
>>207
使用言語:J

a=: 30 50 50 70 50 100 90 70 80 60
f=:>:@(+/"1)@(</~)

a,:f a
30 50 50 70 50 100 90 70 80 60
10 7 7 4 7 1 2 4 3 6
212デフォルトの名無しさん:2010/07/03(土) 11:19:52
>>207
% Prolog

'10 人の成績を入力し,その順位を成績と共に表示する' :-
    '要素数10の変数ならびを二本用意する'(L1,L2),
    'L1に成績を入力する'(L1),
    'L1の先頭から順位を対応するL2の位置にセット'(1,10,L1,L2),
    二本のならびを順に表示(L1,L2).

'要素数10の変数ならびを二本用意する'(L1,L2) :-
    length(L1,10),length(L2,10).

'L1に成績を入力する'(L1) :-
    for(1,N,10),get_integer(_点数),list_nth(N,L1,_点数),N=10,!.

'L1の先頭から順位を対応するL2の位置にセット'(N,M,L1,L2) :- N > M,!.
'L1の先頭から順位を対応するL2の位置にセット'(N,M,L1,L2) :-
    list_nth(N,L1,_点数),list_nth(N,L2,_順位),
    count((member(_点数1,L1),_点数1 > _点数),_成績上位者数),_順位 is _成績上位者数 + 1,
    N2 is N + 1,
    'L1の先頭から順位を対応するL2の位置にセット'(N2,M,L1,L2).

二本のならびを順に表示(L1,L2) :-
    for(1,N,10),
    list_nth(N,L1,A),list_nth(N,L2,B),
    write_formatted('%t,%t位\n',[A,B]),
    N=10.
213デフォルトの名無しさん:2010/07/03(土) 11:28:49
>>186
使用言語:Io

f:=method(r,d,a:=1 atan*4/180*d;list(a cos*r,a sin*r))

Io> f(2,30)
==> list(1.7320508075688774, 0.9999999999999999)
Io> f(1,45)
==> list(0.7071067811865476, 0.7071067811865475)
214デフォルトの名無しさん:2010/07/03(土) 17:26:07
http://pc12.2ch.net/test/read.cgi/tech/1276810079/441
# [1] 授業単元:プログラミング演習
# [2] 問題文(含コード&リンク):
# UNIXコマンドのgrep(指定したファイルを読み込み、指定した文字列とマッチする行を出力するコマンド)と同じ動作をするプログラムを実装しなさい。
# ただし、オプションなどの副次的な機能はつけなくてもよい。
#

215デフォルトの名無しさん:2010/07/03(土) 19:54:29
>>207
使用言語:Lua

a={30,50,50,70,50,100,90,70,80,60}
b={}
for i,v in pairs(a) do
r=1
for j,w in pairs(a) do
if v<w then r=r+1 end
end
b[i]=r
end
for i,v in pairs(b) do
print(a[i]..' '..v)
end


30 10
50 7
50 7
70 4
50 7
100 1
90 2
70 4
80 3
60 6
216デフォルトの名無しさん:2010/07/03(土) 22:37:10
>>186
% Prolog

'極座標(r,θ)の値を入力すると、直交座標(x,y)に変換する'(_r,_θ,_x,_y) :-
    _x is _r * cos(4 * atan(1) * _θ / 180),
    _y is _r * sin(4 * atan(1) * _θ / 180).
217デフォルトの名無しさん:2010/07/04(日) 06:18:13
http://pc12.2ch.net/test/read.cgi/tech/1276810079/457
# [1] 授業単元:プログラム演習
# [2] 問題文(含コード&リンク):
# 以下のプログラムに、下に示す二つの関数を実装し、組み込みなさい。
# ファイル中に保存するデータはアスキー形式でも、バイナリ形式でもどちらでも構わないものとする。
# http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10778.txt
# ・構造体Employee型のデータが順に保存されているファイルからデータを読み込む 数。
# ・作成したデータをファイルに書き出す関数。
# 例えば、構造体Employeeを下に示すものと同じ定義にしたとする。
# この構造体に従ったASCII形式のデータベースファイルを読み込み、
# 社員の追加や、給与の変更をした後、同様なデータベースファイルとして保存できるようにしなさい(もちろん、バイナリ形式のファイルにしても構わない)。 # [構造体Employeeの例]
# typedef struct {
# char name[16];
# int age;
# int salary;
# } Employee;
#
# [データベースファイルの例]
# TANAKA 32 620
# SUZUKI 25 500
# CHIBA 35 650
# NAKAMURA 50 1000
# IIDA 45 800

218デフォルトの名無しさん:2010/07/04(日) 08:26:53
http://pc12.2ch.net/test/read.cgi/tech/1276810079/461
# [1] 授業単元: プログラミング実験
# [2] 問題文(含コード&リンク):http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10780.zip
# 【問題3-01】 50点 高速整列算法の挿入法の効率化
# 半乱順列に対する、クイック・マージ・ヒープの3つの高速整列算法の性能を評価する。再帰法を使った実装でよい。
# 計算量は、処理時間で計測する。データ数nを100〜10000の範囲で変更してみる。両対数グラフを描くとよい。
# 各条件で、10000回以上の試行を行い、平均と分散を求め、度数分布表も作成してみる。
# 必要なプログラムを作成し、データを用意する。シミュレーション実験を行い、実行結果を数表やグラフで示し、考察を述べる。
# (1) 確率指定 p の増大による処理時間 t への影響を調べる。各整列算法について、グラフを描き、増加の傾向を考察する。
# (2) 回数指定 m の増大による処理時間 t への影響を調べる。各整列算法について、グラフを描き、増加の傾向を考察する。
# 【問題3-02】 50点 クイックソートの効率化
# クイックソートの効率化を実装し、実行結果を考察する。
# (1) クイックソートは、振分処理の基準値によって、効率性が大きく変わってしまう。片寄った基準値では、非常に効率が悪くなる。
# そこで、部分列の先頭要素を選ぶのではなく、先頭・中央・末尾の要素の平均値または中央値を基準値にする手法が用いられる。
# この手法によって、平均計算量がどれくらい効率化されるか調べよ。
# (2) クイックソートは、データ数 nに対して、n×log(n) 程度の計算量となる
# データ数 が大きいときは効率的であるが、小さいときはかえって効率が悪くなる。
# そこで、データ数が m 以下になった部分列に対して、単純挿入法に切り替える手法が用いられる。

219デフォルトの名無しさん:2010/07/04(日) 08:28:30
http://pc12.2ch.net/test/read.cgi/tech/1276810079/466
# どなたか教えてください。ずっと考えてたけど、答えがわかりませんorz。
#
# <標準関数>文字列と削除文字列を入力し、文字列中から削除文字列を削除しなさい。
# ※配列の使用は2つだけ。
# 例) 文字列入力→ABCDEFAABCDABC
#    削除文字列→ABC
#    結果文字列→DEFAD
#
# どなたか教えてください、お願いします。

220デフォルトの名無しさん:2010/07/04(日) 10:01:14
>>219
使用言語:J

f=:dyad def 'y{~<<<,(i.#x)+/~I.x E.y'

'ABC' f 'ABCDEFAABCDABC'
DEFAD
'ABA' f 'ABABABC'
BC

二番目の例のように検索文字列が重なった場合どこまで消す?
221デフォルトの名無しさん:2010/07/04(日) 13:25:52
http://pc11.2ch.net/test/read.cgi/db/1274791771/243
# プログラム言語で以下の集約を定義しなさい。
# SELECT CASE pref_name
#        WHEN '徳島' THEN '四国'
#        WHEN '香川' THEN '四国'
#        WHEN '愛媛' THEN '四国'
#        WHEN '高知' THEN '四国'
#        WHEN '福岡' THEN '九州'
#        WHEN '佐賀' THEN '九州'
#        WHEN '長崎' THEN '九州'
#        ELSE 'その他' END AS district,
#     SUM(population)
#  FROM PopTbl
#  GROUP BY CASE pref_name
#        WHEN '徳島' THEN '四国'
#        WHEN '香川' THEN '四国'
#        WHEN '愛媛' THEN '四国'
#        WHEN '高知' THEN '四国'
#        WHEN '福岡' THEN '九州'
#        WHEN '佐賀' THEN '九州'
#        WHEN '長崎' THEN '九州'
#        ELSE 'その他' END;
222デフォルトの名無しさん:2010/07/04(日) 15:20:36
>>219
% Prolog

文字列中から削除文字列を除去する(_文字列,_削除する文字列,_削除された文字列) :-
    sub_atom(_文字列,A,Len,B,_削除する文字列),
    sub_atom(_文字列,0,A,_,S1),
    sub_atom(_文字列,A+Len,B,_,S2),
    文字列中から削除文字列を削除する(S2,_削除する文字列,S3),
    concat_atom([S1,S3],_削除された文字列).
文字列中から削除文字列を除去する(S,_,S).

% >>220 の第二番目の解釈、挑戦してみたが、結構複雑。
223デフォルトの名無しさん:2010/07/04(日) 15:23:07
http://pc12.2ch.net/test/read.cgi/tech/1276810079/475
# [1] 授業単元:プログラミング
# [2]問題文:
# ファイルseiseki.txt から氏名と点数を読み込んで、成績順に並べ替え、結果を画
# 面に表示するプログラムを作成せよ。
# ・氏名は2次元配列、点数は1次元配列に格納する。
# ・ データの並べ替えには単純挿入法、単純選択法またはバブルソートを使用する。
# ・ 文字列 x[]と文字列y[]の入れ替えは、文字列操作関数strcpy を用いて行う。
# strcpy(z,x); strcpy(x,y); strcpy(y,z);
#

224デフォルトの名無しさん:2010/07/04(日) 16:14:09
http://pc12.2ch.net/test/read.cgi/tech/1276810079/481
# [1] 授業単元:方程式の解
# [2] 問題文(含コード&リンク):方程式exp(-x^2/2)=0.5の解を求める
#

225デフォルトの名無しさん:2010/07/04(日) 18:38:36
http://pc12.2ch.net/test/read.cgi/tech/1267796762/230
# 【 課題 】テキストファイルを読み込み行毎に出現頻度を統計するプログラムを作れ
# 【 形態 】1. Javaアプリケーション(main()で開始)
# 【 GUI  】4. 制限なし
# 【 期限 】7月6日
# 【 Ver  】"1.6.0_20"
# 【 補足 】
# 例:
# ああA1111あa1AAAa
# BBBbいbいbB2
#
# という2行のテキストファイルであれば
#
# 1. 1,5 A,4 あ,3 a,2
# 2. B,4 b,3 い,2 2,1
#
# という風に表示します。
226デフォルトの名無しさん:2010/07/04(日) 18:43:07
http://pc12.2ch.net/test/read.cgi/tech/1267796762/231
# 【 課題 】()が使える電卓に改造しなさい。(再帰メソッド使用)
# 【 形態 】2. Applet
# 【 GUI  】2. Swing
# 【 期限 】7/5
# 【 Ver  】1.6.0_15
# 【 補足 】()以外の部分は完成しているのですが、()の部分をどう作って
# いいかわからず困っています。「再帰メソッド」というのも色々調べてみましたが、
# 上手く理解できません。以下がソースです。
# http://nojiriko.asia/data/s0.txt にコピーさせていただきました。
227デフォルトの名無しさん:2010/07/04(日) 23:31:37
>>225
% Prolog (その一)

テキストファイルを読み込み行毎に出現頻度を統計する(_テキストファイル) :-
    get_lines(_テキストファイル,Lines),
    行毎に出現頻度を統計する(Lines,_行統計ならび),
    行統計ならびを表示する(_行統計ならび).

行毎に出現頻度を統計する([],[]) :- !.
行毎に出現頻度を統計する([_行文字列|R1],[_降順に整列した出現頻度ならび|R2]) :-
    文字毎の出現頻度を調べる(Chars,[],_出現頻度ならび),
    降順に整列(_出現頻度ならび,_降順に整列した出現頻度ならび),
    行毎に出現頻度を統計する(R1,R2).

文字毎の出現頻度を調べる([],_出現頻度ならび,_出現頻度ならび) :-
文字毎の出現頻度を調べる([A|R1],L1,_出現頻度ならび) :-
    \+(member([_,A],L1)),
    文字毎の出現頻度を調べる(R1,[[1,A]|L1],_出現頻度ならび),!.
文字毎の出現頻度を調べる([A|R1],L1,_出現頻度ならび) :-
    append(L0,[[N1,A]|L2],L1),
    N2 is N1 + A,
    append(L1,[[N2,A]|L2],L3),
    文字毎の出現頻度を調べる(R1,L3,_出現頻度ならび),!.
228デフォルトの名無しさん:2010/07/04(日) 23:34:57
>>225
% Prolog (その二)

降順に整列(L1,L2) :- sort(L1,L3),reverse(L3,L2).

行統計ならびを表示する(_行統計ならび) :-
    append(L0,[_行統計|L1],_行統計ならび),
    length(L0,Len),
    _行番号 is Len + 1,write('%t.'),
    行の統計を表示する(_行統計),
    L1 = [].

行の統計を表示する([]) :- write('\n'),!.
行の統計を表示する([[N,A]|R]) :-
    write_formatted(' %t,%t',[A,N]),
    行の統計を表示する(R).

229デフォルトの名無しさん:2010/07/04(日) 23:37:49
http://pc12.2ch.net/test/read.cgi/tech/1276810079/501
# [1] 授業単元:C言語入門
# [2] 問題文(含コード&リンク):
# 次式の値を返す関数を作成せよ。
# f(x)=e^{-x} cos(2πx)
# その関数を用いて0≦x≦3の間で0.1刻みで計算し、結果をリダイレクトで
# ファイルに記録せよ。その結果をgnuplotでグラフにして示せ。
#

230デフォルトの名無しさん:2010/07/05(月) 00:18:05
>>221
% Prolog

地方で集約する(_地方,_人口) :-
    findsetof(_地方,(
          'PopTbl'(_pref_name,_population),
          地方(_地方,_pref_name)),
         L1),
    append(_,[_地方|_],L1),
    findsum(_population,(
          'PopTbl'(_pref_name,_population),
          地方(_地方,_pref_name)),
        _人口).

地方(四国,徳島).
地方(四国,香川).
地方(四国,愛媛).
地方(四国,高知).
地方(九州,福岡).
地方(九州,佐賀).
地方(九州,長崎).
231デフォルトの名無しさん:2010/07/05(月) 04:59:32
>>229
% Prolog

program :-
    M is truncate((3 - 0) / 0.1),
    for(0,N,M),
    _x is N * 0.1,
    Y is exp(1) ^ (-1 * _x) * cos(2 * pi * _x),
    write_formatted('%t\n',[Y]),
    N = M .

232デフォルトの名無しさん:2010/07/05(月) 05:30:09
>>229
% Prolog

[IF/Prolog]# prolog -c temp.pro >temp.txt
[SWI-Prolog]# pl -s temp.pro >temp.txt

% temp.pro

program :-
    'c137_501:f(x)=e^{-x} cos(2πx) その関数を用いて0≦x≦3の間で0.1刻みで計算'.

'c137_501:f(x)=e^{-x} cos(2πx) その関数を用いて0≦x≦3の間で0.1刻みで計算' :-
    M is truncate((3 - 0) / 0.1),
    for(0,N,M),
    _x is N * 0.1,
    Y is exp(1) ^ (-1 * _x) * cos(2 * pi * _x),
    write_formatted('%t\n',[Y]),
    N = M .
233デフォルトの名無しさん:2010/07/05(月) 05:34:16
http://pc12.2ch.net/test/read.cgi/tech/1276810079/504
# [1]授業単元:プログラミング演習
# [2]問題文;離散探索木(26進)と外部ハッシュ法の比較(探索関数)
#  キー:   文字列
#  使用ファイル: wordE100KR.dat
#  上記ファイルを読み込み、通常の配列に格納する。
#  この配列から要素を読み込み、分離連鎖法および離散探索木(26進)を生成する。
#  格納された要素と同一の要素集合すなわち、配列に格納された用語集合に対して、1万語毎に探索を行い、照合回数、および探索時間を測定する。
#  結果として、照合回数について20個のデータ(2×10)、同様に探索時間について20
個のデータ(2×10)が得られる。
#  これらのデータをExcelに格納し、表、グラフを作成し、分析せよ。

234デフォルトの名無しさん:2010/07/05(月) 06:00:39
>>232
% Prolog "-g program " が必要だった。

[SWI-Prolog]# pl -s temp.pro -g program >temp
235デフォルトの名無しさん:2010/07/05(月) 12:42:13
http://pc12.2ch.net/test/read.cgi/tech/1276810079/506
# [1] 授業単元: C言語プログラミング
# [2] 問題文メモリや実行時間の許容範囲内の、最大完全数、最大友愛数、および最大婚約数を算出プログラムを作成
#

236デフォルトの名無しさん:2010/07/05(月) 12:46:03
http://pc12.2ch.net/test/read.cgi/tech/1267796762/233
# 【 課題 】部分一致文字列の探索関数の比較(配列‐二分探索とTrie(26進))
#  作成関数:   追加、探索
#  キー:   文字列
#  使用ファイル: wordE100KR.dat
# ・二分探索法を改良し、前方一致(例: info?)を実現する関数を作成する。
# ・多分探索木の巡回関数に基づき、部分木出力関数をTrie(26進)に適用し、前方一致(例: info?)を実現する関数(部分木巡回‐出力関数)を作成する。
# ・特定の部分文字集合(100)に対し、比較(照合)回数、および出力時間を測定し、これらの結果を、表、グラフに表し、分析する。
# 【 形態 】1. Javaアプリケーション(main()で開始)
# 【 GUI  】4. 制限なし
# 【 期限 】7月12日
# 【 Ver  】1.6.0_15
# 【 補足 】参照ファイルはアップしてあります。
237デフォルトの名無しさん:2010/07/05(月) 15:08:39
>>233
% Prolog (その一)

分離連鎖法による文字列の検索(_文字列,_付加情報) :-
    atom_codes(_文字列,Codes),
    加算(Codes,Y),
    _ハッシュ値 is truncate(Y) mod 26,
    分離連鎖(_ハッシュ値,L),
    append(_,[[_文字列|_付加情報]|_],L).

分離連鎖法による文字列の追加(_文字列,_付加情報) :-
    atom_codes(_文字列,Codes),
    加算(Codes,Y),
    _ハッシュ値 is truncate(Y) mod 26,
    retract(分離連鎖(_ハッシュ値,L)),
    asserta(分離連鎖(_ハッシュ値,[[_文字列|_付加情報]|L])).

分離連鎖(0,[]). 分離連鎖(1,[]). 分離連鎖(2,[]).
分離連鎖(3,[]). 分離連鎖(4,[]). 分離連鎖(5,[]).
分離連鎖(6,[]). 分離連鎖(7,[]). 分離連鎖(8,[]).
分離連鎖(9,[]). 分離連鎖(10,[]). 分離連鎖(11,[]).
分離連鎖(12,[]). 分離連鎖(13,[]). 分離連鎖(14,[]).
分離連鎖(15,[]). 分離連鎖(16,[]). 分離連鎖(17,[]).
分離連鎖(18,[]). 分離連鎖(19,[]). 分離連鎖(20,[]).
分離連鎖(21,[]). 分離連鎖(22,[]). 分離連鎖(23,[]).
238デフォルトの名無しさん:2010/07/05(月) 15:24:59
>>233
% Prolog 最後一行が千切れてしまった。

分離連鎖(24,[]). 分離連鎖(25.[]).
239デフォルトの名無しさん:2010/07/05(月) 15:39:40
>>233
% Prolog

分離連鎖の初期化(_ハッシュ表の長さ) :-
    abolish(分離連鎖/2),
    abolish(ハッシュ表の長さ/1),
    assertz(ハッシュ表の長さ(_ハッシュ表の長さ)),
    M is _ハッシュ表の長さ - 1,
    for(0,N,M),
    assertz(分離連鎖(N,[])),
    N = M,!.

分離連鎖法による文字列の検索(_文字列,_付加情報) :-
    atom_codes(_文字列,Codes),
    加算(Codes,Y),
    ハッシュ表の長さ(_ハッシュ表の長さ),
    _ハッシュ値 is truncate(Y) mod _ハッシュ表の長さ,
    分離連鎖(_ハッシュ値,L),
    append(_,[[_文字列|_付加情報]|_],L).

分離連鎖法による文字列の追加(_文字列,_付加情報) :-
    atom_codes(_文字列,Codes),
    加算(Codes,Y),
    ハッシュ表の長さ(_ハッシュ表の長さ),
    _ハッシュ値 is truncate(Y) mod _ハッシュ表の長さ,
    retract(分離連鎖(_ハッシュ値,L)),
    asserta(分離連鎖(_ハッシュ値,[[_文字列|_付加情報]|L])).
240デフォルトの名無しさん:2010/07/05(月) 17:27:48
>>229
使用言語:J

load 'plot'
f=:monad def '(^ -y) * cos 2p1 * y'
smoutput '10.5'(8!:2)(,.f)"0 range 0 3 0.1
exit ''

上のコードをコンソール版で実行すれば、標準出力に下のようなデータが出力される。
(8!:2)のformatは、マイナス符号を変換してくれるようだ。

0.00000 1.00000
0.10000 0.73203
0.20000 0.25300
0.30000 -0.22893
0.40000 -0.54230
:
2.90000 0.04451
3.00000 0.04979


J言語のグラフ機能をつかう場合は
load 'plot'
plot (range 0 3 0.1) ; '(^ -y) * cos 2p1 * y'
241デフォルトの名無しさん:2010/07/05(月) 18:18:25
http://pc12.2ch.net/test/read.cgi/tech/1267796762/241
# 【 課題 】1.B木を実現するプログラムを作成しなさい。ただし、プログラムの
最初で各節点が持つ最大の子の数(m)を入力して、プログラムを開始する。
242デフォルトの名無しさん:2010/07/05(月) 21:09:35
http://pc12.2ch.net/test/read.cgi/tech/1276810079/519
# [1] 授業単元:プログラミング演習
# [2] 問題文(含コード&リンク): 四則演算と平方根を求める事が出来る電卓プログラムを作成せよ.
#

243デフォルトの名無しさん:2010/07/06(火) 04:13:13
http://pc12.2ch.net/test/read.cgi/tech/1276810079/523
# [1] 授業単元: Visual Studio 入門
# [2] 問題文 3問ほどあるのでリンクを
# http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10782.txt
#
# 問題1
# 下に示すように,非負の整数値を読み込んで,その数を逆順に表示するプログラムを作成せ
# よ.なお,負の値を読み込んだ場合は,再入力を促すメッセージを表示すること.
#
#
# 非負の整数を入力してください: 1963
# 1963 を逆から読むと3691 です.
#

244デフォルトの名無しさん:2010/07/06(火) 04:14:05
http://pc12.2ch.net/test/read.cgi/tech/1276810079/523
# [1] 授業単元: Visual Studio 入門
# [2] 問題文 3問ほどあるのでリンクを
# http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10782.txt
#
# 問題2
# 下に示すように,非負の整数を次々と読み込んでいき,各値の二乗値の和を表示するプログ
# ラムを作成せよ.なお,整数の読み込みは,負の整数を読み込んだ段階で終了するものとし,
# その数の二乗値の和は加算しないものとする.
#
# 整数を入力してください
# 整数1 : 3
# 整数2 : 5
# 整数3 : -1
# 二乗値の合計は34 です.
#

245デフォルトの名無しさん:2010/07/06(火) 04:15:18
http://pc12.2ch.net/test/read.cgi/tech/1276810079/523
# [1] 授業単元: Visual Studio 入門
# [2] 問題文 3問ほどあるのでリンクを
# http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10782.txt
#
# 問題3
# 下に示すように,行数と列数を読み込み,1 行目には1234567890…を列数の個数だけ,2 行
# 目には2345678901…を列数の個数だけ,…と表示するプログラムを作成せよ.
#
# 何行ですか: 7
# 何列ですか: 12
# 123456789012
# 234567890123
# 345678901234
# 456789012345
# 567890123456
# 678901234567
# 789012345678
246デフォルトの名無しさん:2010/07/06(火) 04:17:51
http://pc12.2ch.net/test/read.cgi/tech/1276810079/534
# [1] 授業単元: Visual Studio 入門
# [2] 問題 半乱順列の関数作成

247デフォルトの名無しさん:2010/07/06(火) 04:19:01
http://pc12.2ch.net/test/read.cgi/tech/1276810079/535
# [1] 授業単元:C言語入門
# [2] 問題文(含コード&リンク):data.txtに書かれている氏名と成績を読み込み、氏名を2次元配列、成績を1次元配列に格納せよ。
#

248デフォルトの名無しさん:2010/07/06(火) 04:29:25
http://pc11.2ch.net/test/read.cgi/db/1274791771/248
# TABLE test
# id | data
# ---+------
# 100 | AAA
#
# TABLE hoge
# id | value
# ---+------
# 100 | 10
# 100 | 20
#
# TABLE 100
# id |val1| val2
# ---+---+----
# 100 | 20 | 40
#
# SELECT a.id, test.data, a.cnt + b.cnt + c.cnt
# FROM
# (SELECT id, SUM( aa.val1 ) cnt FROM (SELECT id, val1 FROM `100`)aa)a,
# (SELECT id, SUM( bb.val2 ) cnt FROM (SELECT id, val2 FROM `100`)bb)b,
# (SELECT id, SUM( value ) cnt FROM hoge WHERE id = 100)c,test
# WHERE a.id = c.id AND test.id = 100
#
# 欲しい結果
# id data a.cnt + b.cnt + c.cnt
# ----------------------------
# 100 AAA 180

#
249デフォルトの名無しさん:2010/07/06(火) 05:01:23
http://pc12.2ch.net/test/read.cgi/tech/1247100724/713
# 宿題片づけスレで省られたのでお願いします。
# C言語初級者、画像処理初心者です。
#
# [1] 授業単元:画像処理
# [2] 問題文(含コード&リンク):16×16サイズの白黒ビットマップ画像を読み込んで、
#                  上下反転させた画像をビットマップで保存するプログラムを作成。
#

250デフォルトの名無しさん:2010/07/06(火) 06:51:56
>>243
% Prolog

'非負の整数値を読み込んで,その数を逆順に表示する' :-
    催促付き整数入力('非負の整数を入力してください: ',N),
    number_chars(N,L1),
    reverse(L1,L2),
    number_chars(L2,N2),
    write_formatted(' %t を逆から読むと%t です.\n',[N,N2]).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

'非負の整数値を読み込んで,その数を逆順に表示する' :-
    催促付き整数入力('非負の整数を入力してください: ',N),
    非負の整数値から逆順整数を得る(N,0,N2),
    write_formatted(' %t を逆から読むと%t です.\n',[N,N2]).

非負の整数値から逆順整数を得る(0,X,X).
非負の整数値から逆順整数を得る(N,Y1,X) :-
    Y2 is Y1 * 10 + (N mod 10),
    N1 is N // 10,
    非負の整数値から逆順整数を得る(N1,Y2,X).
251デフォルトの名無しさん:2010/07/06(火) 07:08:51
>>244
% Prolog

'非負の整数を次々と読み込んでいき,各値の二乗値の和を表示する' :-
    write('整数を入力してください\n'),
    findsum(S,(非負の整数を次々と読み込んでいき(1,X),(X < 0,!,fail;S is X *X)),_二乗和),
    write_formatted('二乗値の合計は%t です.\n',[_二乗和]).

非負の整数を次々と読み込んでいき(N,X) :-
    write_formatted('整数%t : ',[N]),get_integer(X).
非負の整数を次々と読み込んでいき(N,X) :-
    N2 is N + 1,
    非負の整数を次々と読み込んでいき(N2,X).

252デフォルトの名無しさん:2010/07/06(火) 07:59:21
>>245
% Prolog

'行数と列数を読み込み,1 行目には1234567890…を列数の個数だけ,2 行目には2345678901…を列数の個数だけ,…と表示する' :-
    '行数と列数を読み込み(_行数,_列数),
    '1から始める数字循環を生成'(_行数,_列数,L),
    length(L1,_列数),
    append(L0,L2,L),
    行数分表示する(L0,L1,L2).

行数と列数を読み込み(_行数,_列数) :-
    write('行数を入力してください : '),get_integer(_行数),
    write('列数を入力してください : '),get_integer(_列数).

'1から始める数字循環を生成'(_行数,_列数,L) :-
    M is _行数 + _列数,
    '数字循環を生成'(1,M,L).

'数字循環を生成'(N,M,[]) :- N > M,!.
'数字循環を生成'(N,M,[X|R]) :- X is N mod 10,N2 is N + 1,'数字循環を生成'(N2,M,R).

行数分表示する(L0,L0,L2) :- !.
行数分表示する(L0,L1,L2) :-
    append(L1,_,L2),
    concat_atom(L1,S),
    write_formatted('%t\n',[S]),
    fail.
253デフォルトの名無しさん:2010/07/06(火) 08:04:52
>>252 (>>245)
% Prolog 行数分表示する/3に誤りがあった。

'行数と列数を読み込み,1 行目には1234567890…を列数の個数だけ,2 行目には2345678901…を列数の個数だけ,…と表示する' :-
    '行数と列数を読み込み(_行数,_列数),
    '1から始める数字循環を生成'(_行数,_列数,L),
    length(L1,_列数),
    append(L0,L2,L),
    行数分表示をする(_行数,L0,L1,L2).

行数と列数を読み込み(_行数,_列数) :-
    write('行数を入力してください : '),get_integer(_行数),
    write('列数を入力してください : '),get_integer(_列数).

'1から始める数字循環を生成'(_行数,_列数,L) :-
    M is _行数 + _列数,
    '数字循環を生成'(1,M,L).

'数字循環を生成'(N,M,[]) :- N > M,!.
'数字循環を生成'(N,M,[X|R]) :- X is N mod 10,N2 is N + 1,'数字循環を生成'(N2,M,R).

行数分表示する(_行数,L0,_,_) :- length(L0,_行数),!.
行数分表示する(_,L0,L1,L2) :-
    append(L1,_,L2),
    concat_atom(L1,S),
    write_formatted('%t\n',[S]),
    fail.
254デフォルトの名無しさん:2010/07/06(火) 08:28:59
>>248
% Prolog

'欲しい結果 id  data  a.cnt + b.cnt + c.cnt' :-
    test(_id,_data),
    findsum(U,(findsum(_value,hoge(_id,_value),U1),findsum(_val3,('100'(_id,_val1,_val2),_val3 is _val1 + _val2),U2),U is U1 + U2),S).
    write('id  data  a.cnt + b.cnt + c.cnt\n'),
    write_formatted('%t %t %t\n',[_id,_data,S]),!.
255デフォルトの名無しさん:2010/07/06(火) 10:45:25
>>247
% Prolog 例によって、配列をリストに変更して解釈。

'data.txtに書かれている氏名と成績を読み込み、氏名を2次元配列、成績を1次元配列に格納する' :-
    get_split_lines('data.txt',[' '],LL),
    '氏名を2次元配列、成績を1次元配列に格納する'(LL,_氏名ならび,_成績ならび
),
    氏名ならび・成績ならびを格納する(_氏名ならび,_成績ならび).

'氏名を2次元配列、成績を1次元配列に格納する'([],[],[]).
'氏名を2次元配列、成績を1次元配列に格納する'([[_氏名,_成績]|R1],[_氏名文字ならび|R2],[_成績|R3]) :-
    atom_chars(_氏名,_氏名文字ならび),
    '氏名を2次元配列、成績を1次元配列に格納する'(R1,R2,R3).

氏名ならび・成績ならびを格納する(_氏名ならび,_成績ならび) :-
    assertz(氏名ならび(_氏名ならび)),
    assertz(成績ならび(_成績ならび)).
256デフォルトの名無しさん:2010/07/06(火) 10:54:55
>>255 (>>247)
% Prolog 表示方法をちょっと工夫してみる。

'data.txtに書かれている氏名と成績を読み込み、氏名を2次元配列、成績を1次元配列に格納する' :-
                   get_split_lines('data.txt',[' '],LL),
    '氏名を2次元配列、成績を1次元配列に格納する'(LL,_氏名ならび,_成績ならび,
          氏名ならび・成績ならびを格納する(_氏名ならび,_成績ならび).


    '氏名を2次元配列、成績を1次元配列に格納する'([],[],[]).
    '氏名を2次元配列、成績を1次元配列に格納する'([[_氏名,_成績]|R1],[_氏名文字ならび|R2],[_成績|R3]) :-
                     atom_chars(_氏名,_氏名文字ならび),
    '氏名を2次元配列、成績を1次元配列に格納する'(R1,R2,R3).


          氏名ならび・成績ならびを格納する(_氏名ならび,_成績ならび) :-
                       assertz(氏名ならび(_氏名ならび)),
                       assertz(成績ならび(_成績ならび)).
257デフォルトの名無しさん:2010/07/06(火) 10:59:41
>>256 (>>247)
% Prolog 失敗。やり直し。やはり、うまくいかない。

'data.txtに書かれている氏名と成績を読み込み、氏名を2次元配列、成績を1次元配列に格納する' :-
                   get_split_lines('data.txt',[' '],LL), 
    '氏名を2次元配列、成績を1次元配列に格納する'(LL,_氏名ならび,_成績ならび, 
          氏名ならび・成績ならびを格納する(_氏名ならび,_成績ならび). 


    '氏名を2次元配列、成績を1次元配列に格納する'([],[],[]). 
    '氏名を2次元配列、成績を1次元配列に格納する'([[_氏名,_成績]|R1],[_氏名文字ならび|R2],[_成績|R3]) :- 
                     atom_chars(_氏名,_氏名文字ならび), 
    '氏名を2次元配列、成績を1次元配列に格納する'(R1,R2,R3). 


          氏名ならび・成績ならびを格納する(_氏名ならび,_成績ならび) :- 
                       assertz(氏名ならび(_氏名ならび)), 
                       assertz(成績ならび(_成績ならび)). 
258デフォルトの名無しさん:2010/07/06(火) 11:04:03
>>257
Prologのプログラムを読む場合の注意は、引数の中にある論理変数の変化に集中するから、
そこの部分の桁位置を揃えるようにしてみたい。>>256->>257は失敗。
259デフォルトの名無しさん:2010/07/06(火) 12:07:16
>>258
% Prolog 全体として書の雰囲気を持つ算譜にしたい。
http://nojiriko.asia/prolog/c137_535.html
260デフォルトの名無しさん:2010/07/06(火) 16:46:08
http://pc11.2ch.net/test/read.cgi/db/1274791771/255
# 同一テーブルで、自分自身を除く前回の履歴を結合したいです
# SQLServer2005
#
# 設備
# X
#
# 生産履歴
# 履歴ID 設備 製造ロット ロット枝番 状態
# 10 X 002 2  生産中
# 09 X 002 1  完了
# 08 X 001 1  完了
#
# 設備と生産履歴から設備稼働状況を表示
# SELECT * FROM 設備
# LEFT OUTER JOIN 生産履歴
# ON 設備.設備=生産履歴.設備
# AND 生産履歴.状態='生産中'
#
# 設備稼働状況 ※これに前回ロットを表示したい。
# 設備  製造ロット ロット枝番 前回ロット
# X NULL NULL 002
# となる。
#

261デフォルトの名無しさん:2010/07/06(火) 16:47:50
>>260 つづき
#
# LEFT OUTER JOIN
# SELECT MAX(製造ロット) AS MAX製造ロット
# FROM 生産履歴 生産履歴前回
# WHERE 製造ロット<>生産履歴.製造ロット※2
# GROUP BY 設備
#
# ※2で引っかかる。
# どなたか回答よろしくお願いします。
262デフォルトの名無しさん:2010/07/06(火) 17:24:08
http://pc12.2ch.net/test/read.cgi/unix/1127388574/83
# 1
# 12
# 123
# 1234
# 12345
# このプログラミング作成したい。
263デフォルトの名無しさん:2010/07/06(火) 17:33:45
>>262
% Prolog

'1からの文字連鎖によって文字列を成長させながら表示する' :-
    文字連鎖によって文字列を成長させながら表示する('1').

文字連鎖によって文字列を成長させながら表示する(_文字列) :- write_formatted('%t\n',_文字列]).
文字連鎖によって文字列を成長させながら表示する(_文字列) :-
    sub_atom(_文字列,_,1,1,_最後の文字),
    文字連鎖(_最後の文字,_次の文字),
    atom_concat(_文字列,_次の文字,_付加された文字列),
    文字連鎖によって文字列を成長させながら表示する(_付加された文字列).

文字連鎖('1','2'). 文字連鎖('2','3'). 文字連鎖('3','4'). 文字連鎖('4','5'). 文字連鎖('5','6').
文字連鎖('6','7'). 文字連鎖('7','8'). 文字連鎖('8','9'). 文字連鎖('9','0'). 文字連鎖('0','1').
264デフォルトの名無しさん:2010/07/06(火) 17:41:48
>>263 (>>262)
% Prolog 一ヶ所、間違い。"["が抜けた。

'1からの文字連鎖によって文字列を成長させながら表示する' :-
    文字連鎖によって文字列を成長させながら表示する('1').

文字連鎖によって文字列を成長させながら表示する(_文字列) :- write_formatted('%t\n',[_文字列]).
文字連鎖によって文字列を成長させながら表示する(_文字列) :-
    sub_atom(_文字列,_,1,1,_最後の文字),
    文字連鎖(_最後の文字,_次の文字),
    atom_concat(_文字列,_次の文字,_付加された文字列),
    文字連鎖によって文字列を成長させながら表示する(_付加された文字列).

文字連鎖('1','2'). 文字連鎖('2','3'). 文字連鎖('3','4'). 文字連鎖('4','5'). 文字連鎖('5','6').
文字連鎖('6','7'). 文字連鎖('7','8'). 文字連鎖('8','9'). 文字連鎖('9','0'). 文字連鎖('0','1').
265デフォルトの名無しさん:2010/07/06(火) 18:08:31
>>264 (>>262)
% Prolog 終了指定を忘れてたw

:- op(600,xfx,が). :- op(700,xf,回現れるまで).

'ある文字がN回現れるまで1からの文字連鎖によって文字列を成長させながら表示する' :-
    文字連鎖によって文字列を成長させながら表示する('5' が 1 回現れるまで,'1').
文字連鎖によって文字列を成長させながら表示する(_ が 0 回現れるまで,_) :- !.
文字連鎖によって文字列を成長させながら表示する(A が N 回現れるまで,_文字列) :-
    write_formatted('%t\n',_文字列]).
文字連鎖によって文字列を成長させながら表示する(A が N 回現れるまで,_文字列) :-
    sub_atom(_文字列,_,1,1,A),
    文字連鎖(A,_次の文字),
    atom_concat(_文字列,_次の文字,_付加された文字列),
    N1 is N - 1,
    文字連鎖によって文字列を成長させながら表示する(A が N1 回現れるまで,_付加された文字列).
文字連鎖によって文字列を成長させながら表示する(A が N 回現れるまで,_文字列) :-
    sub_atom(_文字列,_,1,1,_最後の文字),
    文字連鎖(_最後の文字,_次の文字),
    atom_concat(_文字列,_次の文字,_付加された文字列),
    文字連鎖によって文字列を成長させながら表示する(A が N 回現れるまで,_付加された文字列).

文字連鎖('1','2'). 文字連鎖('2','3'). 文字連鎖('3','4'). 文字連鎖('4','5'). 文字連鎖('5','6').
文字連鎖('6','7'). 文字連鎖('7','8'). 文字連鎖('8','9'). 文字連鎖('9','0'). 文字連鎖('0','1').

266デフォルトの名無しさん:2010/07/06(火) 19:32:02
>>265 (>>262)
% Prolog さらに誤りがあったのでこの修正版は
http://nojiriko.asia/prolog/unix_shitsumon_83.html を参照してください。

% 12345 を数値と解釈するならば、
:- op(600,xfx,が).
:- op(700,xf,回現れるまで).

'ある数値がN回現れるまで1からの数値連鎖によって数値列を成長させながら表示する'(_ が 0 回現れるまで,_) :- !.
'ある数値がN回現れるまで1からの数値連鎖によって数値列を成長させながら表示する'(A が N 回現れるまで,M) :-
    A is (M + 1) mod 10,
    M10 is M * 10,
    M2 is M10 + M1,
    write_formatted('%t',[M2]),
    N1 is N - 1,
    'ある数値がN回現れるまで1からの数値連鎖によって数値列を成長させながら表示する'(A が N1 回現れるまで,M2).
'ある数値がN回現れるまで1からの数値連鎖によって数値列を成長させながら表示する'(A が N 回現れるまで,M) :-
    M1 is (M + 1) mod 10,
    M10 is M * 10,
    M2 is M10 + M1,
    write_formatted('%t',[M2]),
    N1 is N - 1,
    'ある数値がN回現れるまで1からの数値連鎖によって数値列を成長させながら表示する'(A が N 回現れるまで,M2).
267デフォルトの名無しさん:2010/07/06(火) 20:10:02
>>246
% Prolog

:- op(300,xf,回).
:- op(700,xf,切る).

半乱順列の作成(_置換指定,_対象ならび,_半乱順列ならび) :-
    整列(_対象ならび,_整列したならび),
    整列したならび乱す(_置換指定,_整列したならび,_半乱順列ならび).

整列したならび乱す(最初と最後の要素を入れ替える,L1,L2) :-
    [A|R]=L3,
    append(L4,[B],R),
    append([B|L4],[A],L2),!.
整列したならびを乱す(0 回 切る,L,L) :- !.
整列したならびを乱す(N 回 切る,L1,L2) :-
    length(L1,Len),
    N1 is random mod Len,
    N2 is random mod Len,
    ならびの交換(N1,N2,L1,L3),
    N1 is N - 1,
    整列したならびを乱す(N1 回 切る,L1,L2).
整列したならびを乱す([],L,L) :- !.
整列したならびを乱す([[N1,N2]|R],L1,L2) :-
    ならびの交換(N1,N2,L1,L3),
    整列したならびを乱す(R,L3,L2).
268デフォルトの名無しさん:2010/07/06(火) 22:29:47
http://pc12.2ch.net/test/read.cgi/tech/1276810079/569
# コインの種類(例えば、1円、5円、8円、10円、15円)に対して、金額を入力すると
# その金額を払うのに最も枚数が少なくて済むコインの出し方を出力してくれる
# プログラム。
# 例えば、23円と入力すると、「10円1枚・8円1枚・5円1枚の計3枚」と出力できるプログラムです。
# ただし、「10円2枚・1円3枚の計5枚」は「最小」ではないため、上の出力を優先します。
# 入力された金額が負の場合は、「Error」を出力するようにします。
# そこで、下のようなプログラムを書いたのですが、うまく起動しません。
# このプログラムを、上の出力例のように出力してくれるように書きなおしてくれませんか??
# 下のプログラムでは合計枚数を出力する部分しか書いてません。
# ちなみに、再帰を使ってプログラミングお願いします。

269デフォルトの名無しさん:2010/07/07(水) 05:08:38
http://pc12.2ch.net/test/read.cgi/tech/1276810079/595
# [1] 授業単元:プログラミング演習
# Q1. 問題文:4つの整数を入力し、それらを要素とする行列を求め、その値を以下のような
# 形式で表示するプログラムを作成せよ。
#
# 例 100 20 30 40と入力すれば
#   | 100 20 | =3400
# | 30 40 | と表示される
#
# Q.2ディスカウントストアでどの商品でも5個以上買えば1割引、10個以上で2割引、20個以上で
# 4割引となっていた。キーボードから買う商品の単価と個数を入力し、合計金額を計算するプログラミングを
# 作成せよ。
#

270デフォルトの名無しさん:2010/07/07(水) 07:32:53
>>269
% Prolog Q1

'4つの整数を入力し、それらを要素とする行列を求め、行列とその値を表示する' :-
    get_split_line([' ',','],[A,B,C,D]),
    正方行列の行列式の値([[A,B],[C,D]],_行列式の値),
    write_formatted('  |%3d %3d| = %t\n',[A,B,_行列式の値]),
    write_formatted('  |%3d %3d|\n',[C,D]).

正方行列の行列式の値(_正方行列,_行列式の値) :-
    ガウス行列に変形(_正方行列,X,Y),
    '行列式|C|の値'(X,Z1),
    ならびの積(Y,Z2),
    _行列式の値 is Z1 // Z2.

ならびの積([A],A) :- !.
ならびの積([A|R],X) :-
    ならびの積(R,Y),
    X is A * Y.

'行列式|C|の値'(_行列,_値) :-
    length(_行列,Len),
    findall(U,(for(1,N,Len),list_nth(N,_行列,_行),list_nth(N,_行,U)),L),
    ならびの積(L,_値).
271デフォルトの名無しさん:2010/07/07(水) 07:52:13
>>269
% Prolog Q2

:- op(700,xfx,は).

'ディスカウントストアでどの商品でも5個以上買えば1割引、10個以上で2割引、20個以上で4割引となっていた。キーボードから買う商品の単価と個数を入力し、合計金額を計算する' :-
    write('商品単価と個数を入力してください : '),
    get_split_line([' ',','],[_単価,_個数]),
    合計金額を計算する(_単価,_個数,_合計金額).

合計金額を計算する(_単価,_個数,_合計金額) :-
    abs(_個数) < 5,
    _合計金額 は 四捨五入(_単価 * _個数).
合計金額を計算する(_単価,_個数,_合計金額) :-
    abs(_個数) >= 5,abs(_個数) < 10,
    _合計金額 は 四捨五入(_単価 * _個数 * (1 - 0.1)).
合計金額を計算する(_単価,_個数,_合計金額) :-
    abs(_個数) >= 10,abs(_個数) < 20,
    _合計金額 は 四捨五入(_単価 * _個数 * (1 - 0.2)).
合計金額を計算する(_単価,_個数,_合計金額) :-
    abs(_個数) >= 20,
    _合計金額 は 四捨五入(_単価 * _個数 * (1 - 0.4)).

_値 は 四捨五入(_式) :- _値_1 は _式,_値 is truncate(floor(_値_1 + 0.5)),!.
_値 は _式 :- _値 is _式.
272デフォルトの名無しさん:2010/07/07(水) 08:33:41
>>271 (>>269)
% Prolog 訂正。

:- op(700,xfx,は).

_値 は 四捨五入(_式) :-
    _値_1 は _式,
    _値_1 >= 0.0,
    _値 is truncate(floor(_値_1 + 0.5)),!.
_値 は 四捨五入(_式) :-
    _値_1 は _式,
    _値_1 < 0.0,
    _値 is truncate(ceiling(_値_1 - 0.5)),!.
_値 は _式 :-
    _値 is _式.
273デフォルトの名無しさん:2010/07/07(水) 14:05:52
http://pc12.2ch.net/test/read.cgi/tech/1276810079/602
# [1] 授業単元: プログラミング演習
# [2] 問題文(含コード&リンク):http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10791.txt
# 問題文
#
# 0から7までの数字が描かれたカードがある。ただし、0だけ2枚で、合計9枚とする。
# この中から4枚を選ぶ組合せを考える。ただし、6と7は同時に選ばない(両方選ばなくてもよい)。
# このような組合せを列挙し、何通りあるかを、C言語のプログラムで求める。何通りあるかは、数学的に解いて確認せよ。
# 例題プログラムEnumFull.c を修正する。
#
# 部分問題への分解 0が現れる枚数で場合分けして、それぞれの個数を集計
# 弱化問題への緩和 0および6と7に関する条件を無視して、とりあえず全てを列挙し、題意に合わないものを排除
# 等価問題への還元 2枚の0を、0と8に読み換え、8は単独で選ばないという条件に置換
# 7は外して列挙し、6が現れる場合に、7に読み換えたものも追加

274デフォルトの名無しさん:2010/07/07(水) 15:04:06
>>273
% Prolog

'0から7までの数字が描かれたカードがある。ただし、0だけ2枚で、合計9枚とする。こ
の中から4枚を選ぶ組合せを考える。ただし、6と7は同時に選ばない(両方選ばなくても
よい)。このような組合せを列挙する'(U) :-
    findall(L,(
          組み合わせ([0,0,1,2,3,4,5,6,7],4,L),
          許される組み合わせ(L)),
        X),
    sort(X,Y),
    append(_[U|R],Y).

許される組み合わせ(A) :- append(_[6|_],A),append(_,[7|_],A),!,fail.
許される組み合わせ(A) :- append(B,[0|C],A),append(D,[0|E],C),!,fail.
許される組み合わせ(A).

275デフォルトの名無しさん:2010/07/07(水) 15:11:45
>>274 (>>273)
% Prolog 述語名の途中で改行してしまった。書き直し。

'0から7までの数字が描かれたカードがある。ただし、0だけ2枚で、合計9枚とする。この中から4枚を選ぶ組合せを考える。ただし、6と7は同時に選ばない(両方選ばなくてもよい)。このような組合せを列挙する'(U) :-
    findall(L,(
          組み合わせ([0,0,1,2,3,4,5,6,7],4,L),
          許される組み合わせ(L)),
        X),
    sort(X,Y),
    append(_[U|R],Y).

許される組み合わせ(A) :- append(_[6|_],A),append(_,[7|_],A),!,fail.
許される組み合わせ(A) :- append(B,[0|C],A),append(D,[0|E],C),!,fail.
許される組み合わせ(A).
276デフォルトの名無しさん:2010/07/07(水) 16:06:52
>>273
% Prolog

'0から7までの数字が描かれたカードがある。ただし、0だけ2枚で、合計9枚とする。この中から4枚を選ぶ組合せを考える。ただし、6と7は同時に選ばない(両方選ばなくてもよい)。このような組合せは何通りあるか'(_何通り) :-
    count(('0から7までの数字が描かれたカードがある。ただし、0だけ2枚で、合計9枚とする。この中から4枚を選ぶ組合せを考える。ただし、6と7は同時に選ばない(両方選ばなくてもよい)。このような組合せを列挙する'(U)),_何通り).
277デフォルトの名無しさん:2010/07/07(水) 16:09:47
http://pc12.2ch.net/test/read.cgi/tech/1276810079/603
# [1] 授業単元: プログラミング演習
# [2] 問題文(含コード&リンク):
# 10人の成績を入力し、その順位を成績と共に表示したい。以下の考えに基づいたプログラムを作成せよ。
#
# 1. 2次元配列s[10][2]を用意する。
# 2. i=0〜9のfor文を用いて、s[i][0]に成績入力する。
# 3. s[0][0]とs[j][0], j=0〜9を比較し、s[0][0]より大きい数値の個数nを考える。
#   その個数+1が成績順位になるので、s[0][1]にn+1を代入する。
# 4. 同様の操作をs[i][0]にi=0〜9に対して行えば、その成績順位がs[i][1]として求められるので、
#   あとは成績と共に表示すればいい。
278デフォルトの名無しさん:2010/07/07(水) 22:33:59
>277
% Prolog これは既出。
http://nojiriko.asia/prolog/c137_421.html
279デフォルトの名無しさん:2010/07/08(木) 00:52:11
>>243
使用言語:J

load 'misc'
f=:monad define
a=.prompt '非負の整数を入力してください: '
smoutput a,' を逆から読むと ',(|.a),' です.'
)

f ''
非負の整数を入力してください: 1234
1234 を逆から読むと 4321 です.
280デフォルトの名無しさん:2010/07/08(木) 01:22:17
>>244
使用言語:J

load 'misc'
f=:monad define
s=.0
n=.1
smoutput '整数を入力してください'
while. 0<a=.".prompt '整数',(":n),' : ' do.
n=.n+1
s=.s+ *:a
end.
smoutput '二乗値の合計は ',(":s),' です.'
)

f ''
整数を入力してください
整数1 : 3
整数2 : 5
整数3 : -1
二乗値の合計は 34 です.
281デフォルトの名無しさん:2010/07/08(木) 01:32:42
>>245
使用言語:J

load 'misc'
f=:monad define
m=.".prompt '何行ですか: '
n=.".prompt '何列ですか: '
smoutput (8!:2)10|(i.m)+/>:i.n
)

f ''
何行ですか: 7
何列ですか: 12
123456789012
234567890123
345678901234
456789012345
567890123456
678901234567
789012345678
282デフォルトの名無しさん:2010/07/08(木) 01:40:50
>>262
使用言語:J

smoutput@(8!:2)\>:i.5
1
12
123
1234
12345
283デフォルトの名無しさん:2010/07/08(木) 05:05:31
http://pc12.2ch.net/test/read.cgi/tech/1276810079/618
# 【質問テンプレ】
# [1] 授業単元:プログラミング演習
# [2] 問題文(含コード&リンク):
# 円形テンプレートマッチングのプログラムを作成せよ。
#
# 白い楕円が複数書いてあるBMP画像を読み込み(適当にペイントで作成)画像左下からラスタ走査し、円形テンプレートマッチングをするプログラムを作成せよ。
# 円形テンプレートはサイズA〜Bまで変化させ、一致率(円形テンプレートの円周上に一致する白画素と一致している数/円形テンプレート円周のプロット数、円形テンプレート内の黒画素に一致している黒画素数/円形テンプレート内の黒画素数)
# 上位5つを色を変えて描画せよ。
#
# また、一致率上位5つの半径、一致率、座標(画像の左下をx=0、y=0とする)をdos窓上に標示せよ。
#

284デフォルトの名無しさん:2010/07/08(木) 05:08:09
http://pc12.2ch.net/test/read.cgi/tech/1276810079/619
# [1] 授業単元:Cプログラミング演習
# [2] 問題文(含コード&リンク):
# 問題1. 10進数1234を2進数で表示するプログラムを作成せよ。
# 問題2. 変数の下位16ビット中の1のビット数を数える関数 int bit_count(int x) を作成せよ
#

285デフォルトの名無しさん:2010/07/08(木) 05:11:58
http://pc12.2ch.net/test/read.cgi/tech/1276810079/630
# [1] 授業単元:Cプログラミング
# [2] 問題文(含コード&リンク):
#
# 概要:数値を1つ(2〜9の数字)入力し、その個数分の"*"を1辺とする
# 完成図(*=★、空白=☆):
#
# 3を入力した場合
# ★★★
# ☆☆★
# ★★★
#
# 9を入力した場合
# ★★★★★★★★★
# ☆☆☆☆☆☆☆☆★
# ★★★★★★★☆★
# ★☆☆☆☆☆★☆★
# ★☆★★★☆★☆★
# ★☆★☆☆☆★☆★
# ★☆★★★★★☆★
# ★☆☆☆☆☆☆☆★
# ★★★★★★★★★
286デフォルトの名無しさん:2010/07/08(木) 07:12:02
287デフォルトの名無しさん:2010/07/08(木) 07:31:47
>>284
使用言語:J

NB. p1
(8!:2)#:1234
10011010010


NB. p2
bit_count=:monad def '+/(16#2)#:y'
a=:1234
bit_count a
5
288デフォルトの名無しさん:2010/07/08(木) 10:35:47
289デフォルトの名無しさん:2010/07/08(木) 12:45:49
>>269
使用言語:J

NB. Q1
f=:monad def '-/ .* 2 2 $ y'

f 100 20 30 40
3400

NB. Q2
f=:dyad define
s=.x*y
r=.0
if. (5<:y) *. (y<10) do. r=.0.1
elseif. (10<:y) *. (y<20) do. r=.0.2
elseif. 20<:y do. r=.0.4
end.
s=.s-<.s*r
)
100 f 2
200
100 f 5
450
100 f 10
800
100 f 20
1200
290デフォルトの名無しさん:2010/07/08(木) 13:49:38
ttp://pc12.2ch.net/test/read.cgi/tech/1276810079/632
# [1] 授業単元:C・プログラミング
# [2] 問題文(含コード&リンク):
# 下記のGPA計算のプログラムを読み込んだ数値を入れる配列を指すポインタを用いて書き換えよ.ただし,配列は1次元配列を用い,また関数を使う必要はない.
# http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10794.txt
#

291デフォルトの名無しさん:2010/07/08(木) 23:27:41
>>285
使用言語:J

f=:monad define
if. 0=2|y do.
b=.(,|.)i.-:y
else.
b=.(}:,|.)i.-:>:y
end.
c=.0=2|<./~b
d=.y{0 0 1 1 1 2 3 3 3 4
((d$0 1)(;/&.><"1(,.~>:)i.d)}c){ucp'☆★'
)

f 2
★★
☆★
f 4
★★★★
☆☆☆★
★☆☆★
★★★★
f 5
★★★★★
☆☆☆☆★
★★★☆★
★☆☆☆★
★★★★★
292デフォルトの名無しさん:2010/07/09(金) 19:19:10
>>273
使用言語:J

comb=:dyad define
k=. i.>:d=.y-x
z=. (d$<i.0 0),<i.1 0
for. i.x do. z=. k ,.&.> ,&.>/\. >:&.> z end.
; z
)
f=:dyad define
a=. x comb y
(2 ~: +/ |: +/ 6 7 =/ a) # a
)

# 4 f 9
105
293デフォルトの名無しさん:2010/07/10(土) 02:25:47
使用言語:pascal
以下の条件(仕様)を満たすプログラムを作成し, そのプログラム(Pascalプログラムソースファイル)とともに その解説書を提出すること.
逆ポーランド記法で入力された論理式の充足可能性を判定し, その式の値をtrueにする変数値を,通常の表記とともに出力すること.
可能な演算は論理積(and), 論理和(or), 否定(not), の3種類として, それぞれ 'a','o','n' で表現すること.
使用可能な論理変数は x0, x1, ..., x9 の10種類とし, それぞれ '0','1',...,'9' で表現すること.
例) (x1∧x2)∨(¬x1∧x3) ⇒  12a1n3ao
使用できない文字が含まれる入力に対してエラーの旨を出力すること.
入力された論理式の充足可能性を判定, 式の値を true にする変数値を出力した後, 再度入力待ち状態になり, 空の文字列を入力するとプログラムが終了すること.

padcalの宿題スレで返答がないのでこちらに書かせていただきました。
解説も出来たらお願いします。
294デフォルトの名無しさん:2010/07/12(月) 18:55:29
>>245
使用言語:maxima

f(m, n) :=
for i thru m do (
for j thru n do printf(true, "~d", mod(i + j - 1, 10)),
newline()
);

(%i63) f(7,12);
123456789012
234567890123
345678901234
456789012345
567890123456
678901234567
789012345678
295デフォルトの名無しさん:2010/07/16(金) 01:38:24
# 問題文(含コード&リンク):http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10839.txt
コピーさせていただきました
ホームページ上からデータを追加、検索したりする問題です。
# OS:Linux
296デフォルトの名無しさん:2010/07/18(日) 10:04:24
http://pc12.2ch.net/test/read.cgi/tech/1279286575/42 # 1] 授業単元:く興味本位での自習 # [2] 問題文 # (繰り返し文を用いて) # 1〜10までの偶数を出力 # # 2 # 4 # 6 # 8 # 10 #
297デフォルトの名無しさん:2010/07/18(日) 12:52:47
>>296
使用言語:Scilab

-->2:2:10
ans =

2. 4. 6. 8. 10.
298デフォルトの名無しさん:2010/07/18(日) 12:58:29
>>296
使用言語:J

>:i.10
1 2 3 4 5 6 7 8 9 10
_2,\>:i.10
1 2
3 4
5 6
7 8
9 10
|:_2,\>:i.10
1 3 5 7 9
2 4 6 8 10
}.|:_2,\>:i.10
2 4 6 8 10
299デフォルトの名無しさん:2010/07/18(日) 19:05:48
prologの問題で5本ハノイの塔を考えているのですが、効率のいいアルゴリズムがわかりません。
協力お願いします。
#使用言語:prolog
#単元:演習問題
#a;b;c;d;eという5 本の棒があり、棒aに円盤1からnまでが存在している。
#棒aの1からnまでの円盤を棒eに移す。

#3本の時の例
move(N,A,B) :- display(N), display(' from '),
display(A), display(' to '),
display(B), nl.

hanoi(1,A,B,C) :- move(1,A,C).

hanoi(N,A,B,C) :- M is N-1, hanoi(M,A,C,B),
move(N,A,C),
hanoi(M,B,A,C).

こんな感じでやりました。(見にくくてすみません)
300デフォルトの名無しさん:2010/07/18(日) 19:26:52
↑の続きですが、試行回数を3本の時以下にする問題です。
301デフォルトの名無しさん:2010/07/19(月) 21:28:51
落雷による停電で不通になっていたPrologアーカイブ http://nojirio.asia/prolog/index.html 復旧しました。
302デフォルトの名無しさん:2010/07/19(月) 21:30:29
>>301 間違えました。 http://nojiriko.asia/prolog/index.html ですね。
303デフォルトの名無しさん:2010/07/20(火) 06:28:12
書き込み規制中に100題以上進んでしまいました。順にアップしていくつもりですが、追いつかないかもしれない。C/C++の課題は上のアーカイブにc13[7-8]_*.htmlのファイル名でコピーしてあります。中には解答を含んでいるものもありますが、四分の一くらいかな。
304デフォルトの名無しさん:2010/07/20(火) 06:36:38
Javaの宿題からの出題分は j69_*.html ですね。たとえば、http://nojiriko.asia/prolog/j69_264.html でindexに未登録のものでも参照できます。
305デフォルトの名無しさん:2010/07/23(金) 04:12:54
http://pc12.2ch.net/test/read.cgi/tech/1276810079/648
# [1] 授業単元:
# [2] 問題文(含コード&リンク):
# 2〜9の数字を入力その数字に応じて図形を表示させる関数を作る
# 正方形 三角形 六角形 菱形 星 渦巻き
# 星と渦巻き以外できたからこの2つについて知りたい
# 例 7を入力したとき 左:渦 右:星
#
# *******  *   *   *
#          *    * *  *
# *****  *     ***
# *    *  *  *******
# * ***  *     ***
# *       *   *  *  *
# *******  *   *   *
#

306デフォルトの名無しさん:2010/07/23(金) 04:19:04
http://pc12.2ch.net/test/read.cgi/tech/1276810079/655
# [1] 授業単元:C言語
# [2] 問題文(含コード&リンク):
#
# 以下の仕様に従って,分数の四則演算を行うプログラムを作成せよ。
# [仕様1] 以下のような構造体を定義し,分数のデータ構造に利用すること。
# struct fraction{
# int parent; /* 分母(denominator) */
# int child; /* 分子(numerator) */
# };
# [仕様2] 以下の実行結果となるようなプログラムを作成せよ。
# プログラムの実行結果↓
# 1つ目の分数を入力して下さい。
# 3/4 ←キーボードより入力
# 2つ目の分数を入力して下さい。
# 1/4 ←キーボードより入力
# 演算方法(1.加算,2.減算,3.乗算,4.除算)を入力して下さい。
# 2 ←キーボードより入力
# 3/4 - 1/4 = 1/2
# 計算結果は約分をして表示
#

307デフォルトの名無しさん:2010/07/23(金) 04:22:05
http://pc11.2ch.net/test/read.cgi/db/1274791771/276
# 以下のようなテーブルがあります。
#
# itemテーブル
# item_id name color
# 1 商品1 3
# 2 商品2 12
# 3 商品3 7
#
# colorテーブル
# color_id name
# 1 赤
# 2 青
# 4 緑
# 8 黒
#
# item.colorの部分は、ビット演算の概念を使って
# 3なら赤+青
# 12なら緑+黒
# 7なら赤+青+緑
# の色を持っていることを意味します。

308デフォルトの名無しさん:2010/07/23(金) 04:23:44
>>307 のつづきです。

# これを結合の段階で、以下のように色名を取得することは可能なのでしょうか?
#
# 1 商品1 赤
# 1 商品1 青
# 2 商品2 緑
# 2 商品2 黒
# 3 商品3 赤
# 3 商品3 青
# 3 商品3 緑
#

309デフォルトの名無しさん:2010/07/23(金) 04:33:04
これはまだ7月9日分です。この後140題くらい出題されています。
310デフォルトの名無しさん:2010/07/23(金) 07:03:30
>>307
% Prolog

色名を取得する :-
    item(_item_id,_name,_color),
    色の割り当て(_color,_色名),
    write_formatted('%t %t %t\n',[_item_id,_name,_色名]),
    fail.
色名を取得する.

色の割り当て(_色番号,_色名) :-
    findall([_color_id,_name],color(_color_id,_name),L),
    sort(L,L1),
    reverse(L1,L2),
    色の割り当て(_色番号,L2,_色名).

色の割り当て(N,_,_) :- N =< 0,!,fail.
色の割り当て(N,[[C,_色名]|R1],_色名) :-
    1 is N // C.
色の割り当て(N,[[C,_]|R1],_色名) :-
    1 is N // C,
    M is N mod C,
    色の割り当て(M,R1,_色名).
色の割り当て(N,[[C,_]|R1],_色名) :-
    0 is N // C,
    M is N mod C,
    色の割り当て(M,R1,_色名).
311デフォルトの名無しさん:2010/07/23(金) 13:26:16
http://pc12.2ch.net/test/read.cgi/tech/1267796762/260
# 【 課題 】今月のカレンダ作成詳細は下に書きます
# 【 形態 】Javaアプリケーション(main()で開始)
# 【 期限 】7月14日日
# 【 Ver  】1.6.0_20
#
# 今月、7月のカレンダーを2次元配列に格納してください。
# 要素数は縦5横7の配列となります。(曜日は格納する必要がありません。)
# 週の先頭が日曜日はじまりで格納してください
# 配列のカレンダーを表示するコードを追加してください。
# 日にちを1つ入力するとその日が何曜日かを表示するコードに修正してください。
# よろしくお願いします

312デフォルトの名無しさん:2010/07/23(金) 13:39:21
>>311
% Prolog
'今月、7月のカレンダーを2次元配列に格納する'(LL) :-
    今日の日付と曜日番号(_日,_曜日番号),
    カレンダーの構造を作る(_31日定数平坦ならび,_35日平坦ならび,_5週間ならび,
    '全体の枠の中で1-31日の位置を確定する'(_日,_曜日番号,L0,_31日定数平坦ならび,L2,_35日平坦ならび),
    変数として残った両端部分は空白に(L0,L2),
    平坦化の逆変換(_5週間ならび,_35日平坦ならび).

今日の日付と曜日番号(_日,_曜日番号) :-
    _時刻 is time,
    localtime(_時刻,_年,_月,_日,_曜日番号,_累積日,_時,_分_秒).

カレンダーの構造を作る(_31日定数平坦ならび,_35日平坦ならび,_5週間ならび) :-
    findall(N,for(1,N,31),_31日定数平坦ならび),
    findall(_,for(1,N,35),_35日平坦ならび),
    findall(L,(for(1,_,5),length(L,7)),_5週間ならび).

'全体の枠の中で1-31日の位置を確定する'(_日,_曜日番号,L0,_31日定数平坦ならび,L2,_35日平坦ならび) :-
    append(L0,_31日定数平坦ならび,L2,_35日平坦ならび),
    append(U,[J|_],_35日平坦ならび),\+(var(J)),J=_日,
    length(U,Len),
    _曜日番号 is Len mod 7,!.

変数として残った両端部分は空白に(L0,L2) :- all(L0,' '),all(L2,' ').

平坦化の逆変換(L1,L2) :- flat(L1,L2).
313デフォルトの名無しさん:2010/07/23(金) 13:43:32
>>296
% Prolog 解答例その一

'1〜10までの偶数を出力' :-
    for(1,N,10),
    偶数(N),
    write_formatted('%t\n',[N]),
    fail.
'1〜10までの偶数を出力'.
314デフォルトの名無しさん:2010/07/23(金) 13:45:36
>>296
% Prolog その二

'1〜10までの偶数を出力' :-
    '1〜10までの偶数(非決定性)'(1,N),
    write_formatted('%t\n',[N]),
    fail.
'1〜10までの偶数'.

'1〜10までの偶数(非決定性)'(N,_) :- N > 10,!,fail.
'1〜10までの偶数(非決定性)'(N,N) :- 偶数(N).
'1〜10までの偶数(非決定性)'(N1,N) :-
    N2 is N1 + 1,
    '1〜10までの偶数(非決定性)'(N2,N).
315デフォルトの名無しさん:2010/07/23(金) 13:49:38
>>296
% Prolog その三

'1〜10までの偶数を出力' :-
    '1〜10までの偶数を出力'(1).

'1〜10までの偶数を出力'(N) :- N > 10,!.
'1〜10までの偶数を出力'(N) :-
    偶数(N),
    write_formatted('%t\n',[N]),
    N2 is N + 1,
    '1〜10までの偶数を出力'(N2).
'1〜10までの偶数を出力'(N) :-
    奇数(N),
    N2 is N + 1,
    '1〜10までの偶数を出力'(N2).
316デフォルトの名無しさん:2010/07/23(金) 13:50:58
>>296
% Prolog その四

'1〜10までの偶数を出力' :-
    '1〜10までの偶数ならび'(1,L),
    concat_atom(L,'\n',S),
    write_formatted('%t\n',[S]).

'1〜10までの偶数ならび'(N,[]) :- N > 10,!.
'1〜10までの偶数ならび'(N,[N|R]) :-
    偶数(N),
    N2 is N + 1,
    '1〜10までの偶数ならび'(N2,R).
'1〜10までの偶数ならび'(N,R) :-
    奇数(N),
    N2 is N + 1,
    '1〜10までの偶数ならび'(N2,R).
317デフォルトの名無しさん:2010/07/23(金) 13:52:28
>>296
% Prolog その五

'1〜10までの偶数を出力' :-
    '1〜10までの偶数を出力'(1).

'1〜10までの偶数を出力'(N) :- N > 10,!.
'1〜10までの偶数を出力'(N) :-
    偶数(N),
    write_formatted('%t\n',[N]),
    N2 is N + 1,
    '1〜10までの偶数を出力'(N2).
'1〜10までの偶数を出力'(N) :-
    奇数(N),
    N2 is N + 1,
    '1〜10までの偶数を出力'(N2).
318デフォルトの名無しさん:2010/07/23(金) 13:56:07
>>296
% Prolog これは上記5個の '1〜10までの偶数を出力'/0 述語から呼び出されている定義です。

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

'1〜10までの偶数を出力' :-
    findall(N,(for(1,N,10),偶数(N)),L),
    concat_atom(L,'\n',S),
    write_formatted('%t\n',[S]).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

偶数(N) :- 0 is N mod 2.

奇数(N) :- 1 is N mod 2.
319デフォルトの名無しさん:2010/07/23(金) 14:04:39
>>313->>318 Prologのプログラミングではほとんどの場合数個のプログラムパターンが選択可能だ。この点Pythonなどとはかなり性質のことなったプログラム言語だといえよう。
320デフォルトの名無しさん:2010/07/23(金) 18:22:30
http://pc12.2ch.net/test/read.cgi/tech/1276810079/678
# [1] 授業単元:C言語
# [2] 問題文(含コード&リンク):
# 以下の機能を持つプログラムを作ること。
#
# -1から100の数字の中から素数を抽出する (配列に直接数字を指定することは不
# 可)
# -抽出した素数を大きい順(降順)にソートする
# -ソートした素数を1行につき5個表示する(6個目以降は次の行に表示する)
#
# 但し、以下の4つの機能を使ったプログラムにすること。
# -サブ関数
# -配列
# -if文
# -for文
#
# 以下の点に関して工夫をした場合は加点の対象とする
#
# -素数の計算時間の低減
# -見つけた素数の数のカウント
# -ソートのアルゴリズム高速化
# -実行時間の表示
321デフォルトの名無しさん:2010/07/23(金) 18:23:58
http://pc12.2ch.net/test/read.cgi/tech/1276810079/684
# [1] 授業単元:C言語入門
# [2] 問題文(含コード&リンク):
# 二つのint型整数の小さい方の値を返す関数
#  int i_minof(int x, int y){ /* ... */}
# を作成せよ。
#

322デフォルトの名無しさん:2010/07/23(金) 18:24:47
http://pc12.2ch.net/test/read.cgi/tech/1276810079/685
# [1] 授業単元:C言語入門
# [2] 問題文(含コード&リンク):
# 下に示すように、整数値を読み込んで、その値を0までカウントダウン
# しながら表示するプログラムを作成せよ。なお、負の値を読み込んだ時は
# 何も表示しない(改行も表示せず終了する)ようにせよ。
# =====
# 整数を入力してください:9
# 9 8 7 6 5 4 3 2 1 0
# =====
323デフォルトの名無しさん:2010/07/23(金) 18:30:15
http://pc12.2ch.net/test/read.cgi/tech/1267796762/262
# 【 課題 】自動販売機プログラム(レイアウトは自由)
# 【 形態 】 Servlet/JSP
# 【 GUI  】制限なし
# 【 期限 】7/13(最長7/16)
# 【 Ver  】1.6.0_15
# 【 補足 】
# 1. 商品は10種類、購入商品は選択可能。
# 2. 商品の価格は150円が3種類、130円が2種類、100円が5種類とする。
# 3. 使用できる硬貨は、500円、100円、50円、10円とし、紙幣は1000円のみ使用可能
とする。硬貨投入後に投入した硬貨の返却が出来る。
# 4. お釣り用の硬貨は初期値でそれぞれ10枚ずつ設定されている。
# 5. 500円硬貨が0になった場合に、100円硬貨が5枚以上存在した場合には100円硬貨を
返却する。また、100円硬貨以下についても、代替できるものは他の硬貨を用いて返却を
可能とする。
# 6. お釣りが返却できない硬貨投入時には、お釣りが無くなった旨を表示、購入不可
とする。
# 7. 商品は初期値でそれぞれ10個ずつ在庫があるものとする。
# 8. 商品の在庫が無くなった場合には、商品の在庫が無くなった旨を表示し、購入不
可とする。

324デフォルトの名無しさん:2010/07/23(金) 20:26:49
http://pc12.2ch.net/test/read.cgi/tech/1276810079/694
# [1] 授業単元:プログラミング演習
# [2] 問題文(含コード&リンク):
# バイナリ形式で保存されたWindows Bitmap形式の画像ファイルを読み込み、3つの色成分(Blue, Green, Red)に分離し、
# それぞれを異なるファイルに保存するプログラムを実装しなさい。
# プログラム中でやることは以下のことである。
# 1.ヘッダ部分を適切に読み込む
# 2.読み込んだヘッダ部分(ファイルヘッダ、情報ヘッダ)を用いて、適切なバイト数(画素数×1画素あたりのバイト数)を読んでくる。
# 3.分離したい色成分以外を0に書き換え、ヘッダ部分と色情報をファイルに書き込む。
# ただし、以下のような構造体を使用する。
# http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10800.txt
#

325デフォルトの名無しさん:2010/07/23(金) 20:29:42
http://pc12.2ch.net/test/read.cgi/tech/1276810079/696
# 【質問テンプレ】
# [1] 授業単元:Visual C++ でのプログラミング演習
# [2] 問題文(含コード&リンク):課題4.3.bをお願いします。http://ime.nu/www.dotup.org/uploda/www.dotup.org1020755.jpg
# 2.71 < (1 + 1/N) ^ N < 2.72 を満たす最小の整数Nを求める
#

326デフォルトの名無しさん:2010/07/23(金) 20:37:16
http://pc12.2ch.net/test/read.cgi/tech/1276810079/756
# [1] 授業単元: ソフトウェア信頼性
# [2] 問題文(含コード&リンク):
# 問題文+自分で作った部分は以下のファイルに
# http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10810.txt
#
# //単語の集合からなるファイルを読み込んで、辞書順に並べ替えて出力するプログラムを作成しなさい。
# //(*) ファイルは一行に一単語であり、すなわち単語間は改行コードで区切られる。


327デフォルトの名無しさん:2010/07/23(金) 20:44:30
int 型の配列に読み込んだ全要素を逆順に並べ替える
# プログラムを作成せよ
#
# vx[ 0] : 58
# vx[ 1] : 32
# vx[ 2] : 17
# vx[ 3] : 46
# vx[ 4] : 22
# vx[ 5] : 73
# vx[ 6] : 69
# vx[ 0] = 69
# vx[ 1] = 73
# vx[ 2] = 22
# vx[ 3] = 46
# vx[ 4] = 17
# vx[ 5] = 32
# vx[ 6] = 58
328デフォルトの名無しさん:2010/07/23(金) 20:45:56
http://pc12.2ch.net/test/read.cgi/tech/1276810079/754
#
# http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10809.txt
# 2 問題2
# 下に示すように,要素数が5 でint 型の配列に、5 人の学生の身長を読み込んで、その平均
# 身長を求めるプログラムを作成せよ。
#
# 身長を入力してください
# 1 番: 178
# 2 番: 175
# 3 番: 165
# 4 番: 179
# 5 番: 172
# 平均身長: 173.8

329デフォルトの名無しさん:2010/07/23(金) 20:46:55
http://pc12.2ch.net/test/read.cgi/tech/1276810079/754
#
# http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10809.txt
# 問題3
# 下に示すように,5 人の学生の体重を読み込んで、最も重い人と最も軽い人の体重を表示す
# るプログラムを作成せよ.なお、体重はdouble 型で表すものとする。
#
# 体重を入力してください
# 1 番: 52.5
# 2 番: 64.0
# 3 番: 58.3
# 4 番: 67.4
# 5 番: 62.0
# 最も重い人の体重: 67.4
# 最も軽い人の体重: 52.5

330デフォルトの名無しさん:2010/07/23(金) 20:49:11
http://pc12.2ch.net/test/read.cgi/tech/1276810079/758
# [1] 授業単元:プログラミング実習
# [2] 問題文(含コード&リンク):53!を正確に計算して出力するjavaプログラムを作成せよ。
# ここでは1桁分の数を記憶するオブジェクトを多数作りそれらの協調で計算を進めること。
#

331デフォルトの名無しさん:2010/07/23(金) 20:50:23
http://pc12.2ch.net/test/read.cgi/tech/1276810079/778
# 【質問テンプレ】
# [1] 授業単元:画像処理プログラミング
# [2] 問題文(含コード&リンク):http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10814.zip
# 画像を8×8 画素のブロックに分割します。各ブロック毎に平均値を求めます。
# ※average という関数を作ってブロック内の平均値を求めても良いでしょう。
# ブロック内の画素すべての輝度値を平均値で置き換えます。どのような画像が得られますか?
# 8×8画素のブロックサイズでモザイク処理を行うプログラムと、モザイク処理後の画像を提出しなさい。
#

332デフォルトの名無しさん:2010/07/23(金) 20:52:40
http://pc12.2ch.net/test/read.cgi/tech/1276810079/781
# [1] 授業単元:プログラミングC
# [2] 問題文(含コード&リンク):http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10816.txt
# いっぱいあります。
#
#
# 2.10
# 三角形の二編の長さb,cとその侠角の∠A(ラジアン)を入力すると残り1辺aの長さを余弦定理で求めて表示するプログラムを作成せよ。
# a^2 = b^2 + c^2 - 2*b*c*cosα

333デフォルトの名無しさん:2010/07/23(金) 20:54:24
ttp://pc12.2ch.net/test/read.cgi/tech/1276810079/781
# [1] 授業単元:プログラミングC
# [2] 問題文(含コード&リンク):http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10816.txt
# いっぱいあります。
#
# 3.1
# 気温と湿度を入力すると、不快指数の値とその値で不快に感じる人の割合を表示するプログラムを作成せよ。
#  (不快指数)=0.81×気温+0.01×湿度×(0.99×気温‐14.3)+46.3
# 不快指数の値によって次の割合の人が不快に感じるといわれている。
#     77未満→約9%
#  77以上85未満→約65%
#     85以上→約93%

334デフォルトの名無しさん:2010/07/23(金) 20:55:31
http://pc12.2ch.net/test/read.cgi/tech/1276810079/781
# [1] 授業単元:プログラミングC
# [2] 問題文(含コード&リンク):http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10816.txt
# いっぱいあります。
#
# 3.2
# 身長と体重を入力すると、次の判定方法で肥満度を判定するプログラムを作成せよ。
#  標準体重(kg)=(身長(cm)‐100)×0.9
#  肥満度(%)=(体重‐標準体重)÷標準体重×100
#     肥満度20%以上→ふとりすげ
#    10%以上20%未満→ふとりぎみ
#    -10%以上10%未満→標準
#   -20%以上-10%未満→やせぎみ
#        -20%未満→やせすぎ
335デフォルトの名無しさん:2010/07/23(金) 20:56:42
http://pc12.2ch.net/test/read.cgi/tech/1276810079/781
# [1] 授業単元:プログラミングC
# [2] 問題文(含コード&リンク):http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10816.txt
# いっぱいあります。
#
# 4.1
# 入力された値が偶数だったら「even」、奇数だったら「odd」と出力する処理を10回繰り返すプログラムをwhile文、for文を使ってそれぞれ作成せよ。
336デフォルトの名無しさん:2010/07/23(金) 20:58:22
http://pc12.2ch.net/test/read.cgi/tech/1276810079/781
# [1] 授業単元:プログラミングC
# [2] 問題文(含コード&リンク):http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10816.txt
# いっぱいあります。
#
# 4.3
# 自然数nを入力し、1からnまでの自然数の二乗の和(1^2+2^2+…+n^2)を求めるプログラムを作成せよ。
337デフォルトの名無しさん:2010/07/23(金) 20:59:29
http://pc12.2ch.net/test/read.cgi/tech/1276810079/781
# [1] 授業単元:プログラミングC
# [2] 問題文(含コード&リンク):http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10816.txt
# いっぱいあります。
#
# 4.7
# 自然数nを乳力すると、nの約数をすべて表示するプログラムを作成せよ。
# (n以下の自然数について約数かどうかチェックする)

338デフォルトの名無しさん:2010/07/24(土) 04:05:21
http://pc12.2ch.net/test/read.cgi/tech/1267796762/367
# 組織のある部門にある能力を持つ人間を追加したり削除したりすることで,その組織全体もしくは部分的な部門の能力を計算するシステムを構築せよ.
# このシステムによって,組織内のニーズにあった人員配置を行なう支援をできると期待できる.
# 基本的にこのシステムは以下の機能を最低限有しなければならない.
#
# 1. 登録すべき部門や副部門を指定する.
# 2. 人物の名前(文字列),資格数(整数),勤務経験年数(整数),年齢を入力する.
# 3. もし,既に十分な人数がシステムに登録済の場合,そのデータと,前段階で入力された資格数,勤務経験年数,年齢に基づき,この人物の能力の値(high, middle or low)をシステムが予測し表示する.
# 4. システム(プログラム)を停止した際,現在,保持しているデータを保存できる.
# 5. システム(プログラム)を起動した際,既存のデータがあれば,それを読み込める.

#
# 単純化のため,能力は人物,組織どちらも金額(円)で表現されているとする.
# 人物も単純化のため,その氏名で区別することとし,同一氏名の人物は組織に追加できなくてもよい.
# 組織の中にある部門は階層的な構造となっており,その階層の深さは均一でない.
# 例えば「/秘書課/」という部門は組織の直下に位置するが,「/営業部/関東営業部/」,「/開発部/半導体課/」,「/研究部/先端科学課/タイムマシン開発グループ/」等2もしは3階層の場合もある.
# 尚,階層の深さ制限は無いものとする.
# ある部門の下に人物と副部門が同時に配置される場合もある.
# 例えば,営業部部長の田中さんは「/営業部/田中」と表現できるが,関東営業部に属する山田さんは,「/営業部/関東営業部/山田」となる.
# 尚,本システムでは日本語名は扱えなくてもよい.
339デフォルトの名無しさん:2010/07/24(土) 05:48:26
http://pc12.2ch.net/test/read.cgi/tech/1279286575/398
# [1] 授業単元:OS
# [2] 問題文(含コード&リンク):サーバクライアント通信をFIFOで作る
# – 一つのサーバプロセスが,
# • FIFOを作る.
# • データを待つ.
# • SIGINTを受信したら,FIFOを削除してから終了する.
# – 複数のクライアントプロセスが,サーバにリクエストを送る.
# – 文字列を送るクライアントプロセスが複数(forkすればおk).
# – サーバプロセスは単に表示する
#

340デフォルトの名無しさん:2010/07/24(土) 05:51:03
http://pc12.2ch.net/test/read.cgi/tech/1279286575/393
# [2] 問題文(含コード&リンク):
# ある差分方程式を、初期値から順々に予測していくプログラムを作ったのですが、
# それぞれの本当の値と予測した値の差を誤差としたとき、その誤差をフーリエ変換することによって、
# 発生する誤差に周期が存在するかを確認するプログラムを作りたいです。
# 条件としては、もともとファイル(ex. log.data)に誤差の値を入れておいて、それをプログラム内で参照するようなものが望ましいです。
# 簡単にたとえるなら誤差データ(log.data)が以下のような場合に
# 2.0
# 0.0
# 1.0
# -2.0
# 2.0
# 0.0
# 1.0
# -2.0
# 2.0
# 0.0
# 1.0
# -2.0
# フーリエ変換した結果をgnuplotなどで表示した際に周期が4のところにスペクトルが出るようなものを作りたいです。
341デフォルトの名無しさん:2010/07/24(土) 05:55:19
http://pc12.2ch.net/test/read.cgi/tech/1276810079/784
# [1] 授業単元:プログラミング演習III
# [2] 問題文(含コード&リンク):
# 以下の機能を含む整数版秀丸エディタ用のDLLを作成せよ。
# ・返り値がint型で、パラメータ(整数)を渡すと、「整数*5」の結果を返す。
# ・返り値がchar型で、パラメータ(文字列)を渡すと、文字列の先頭にHello!!を付け
た「Hello!!+文字列」の結果を返す。
342デフォルトの名無しさん:2010/07/24(土) 05:56:36
http://pc12.2ch.net/test/read.cgi/tech/1276810079/786
# コンピュータ基礎1
# OS windows7 32bit
# gcc2.9.5
# 言語 c
# 期限 なし
# 課題でいくつかc言語の課題が出て、本当に簡単なのは何とか解いたのですが2つほど分からないものがあったので
# よろしければ教えていただきたいです。
#
# ?キーボードから1つの実数値xを入力し、絶対値を表示するプログラムを作りなさい
#
# ?キーボードからテストの得点m(0以上100以下)を入力し
# (1) m<60 の場合は「不合格」
# (2) 60≦m<80 の場合は「普通」
# (3) 80≦m の場合は「優秀」
# と表示するプログラムを作りなさい。
343デフォルトの名無しさん:2010/07/24(土) 05:58:21
http://pc12.2ch.net/test/read.cgi/tech/1276810079/786
# コンピュータ基礎1
# OS windows7 32bit
# gcc2.9.5
# 言語 c
# 期限 なし
# 課題でいくつかc言語の課題が出て、本当に簡単なのは何とか解いたのですが2つほど分からないものがあったので
# よろしければ教えていただきたいです。
#
# キーボードから1つの実数値xを入力し、絶対値を表示するプログラムを作りなさい
#

344デフォルトの名無しさん:2010/07/24(土) 06:02:08
http://pc12.2ch.net/test/read.cgi/tech/1276810079/788
# [1] 授業単元:プログラミング演習I
# [2] 問題文(含コード&リンク):
# 課題
# (1000以下の完全数)正整数kが等式
#    k=(kの約数の内、k以外のものの総和)
# を満たす時、kは完全数であるという。たとえば、6の約数は 1,2,3,6の4個であり、6=1+2+3であるため、6は完全数である。1000以下の完全数をすべて出力するプログラムを作れ。
#

345デフォルトの名無しさん:2010/07/24(土) 06:03:12
http://pc12.2ch.net/test/read.cgi/tech/1276810079/790
# 以下の入力をして、これを二次元配列に代入していく方法がわかりません。
# 当方scanf+Enterによる単純な入力しかしたことがありません。
# 空白を認識して代入先を変える方法?と考えて手が止まりました。
#
# /*以下入力*/
# 3 /*変数int nへ代入する。今から3*3行列を入力するという意味*/
# 3 5 7
# 2 5 8
# 6 8 1
# /*入力ここまで*/
#
# for(i=0;i<n;i++){
# for(j=0;j<n;j++){
# printf("%d ", a[i][j]);
# }printf("\n");
# }printf("\n");
# の結果は上記の
# 3 5 7
# 2 5 8
# 6 8 1
# を表示するように二次元配列aに代入する。
346デフォルトの名無しさん:2010/07/24(土) 06:04:58
http://pc12.2ch.net/test/read.cgi/tech/1276810079/801
# 【質問テンプレ】
# [1] 授業単元: 計算機プログラミング
# [2] 問題文(含コード&リンク): http://ime.nu/kansai2channeler.hp.infoseek.co. jp/cgi-bin/joyful/img/10819.txt
#
# 次の仕様を満たす信号発生プログラムを作成せよ。結果の表示は,信号波形
# 毎に2 例程度(例えば,基本周波数1 kHz と1 MHz,など)を示すこと。
#
# 1:正弦波・三角波・正弦波を全波整流した波形 を選択して出力できる。
# 2: 基本周波数と振幅値(最大振幅と最小振幅)をキーボードから入力する。
# (周波数は1 Hz〜100 MHz の範囲で設定できること)
# 3: 出力(信号波形データ)をファイルに保存する。
# (1 列目:時間,2 列目:振幅値)
#
# ※サンプリング(標本化)定理を満たすこと。
# 2fm < fs (fm:信号が持つ最大周波数,fs:サンプリング周波数)
347デフォルトの名無しさん:2010/07/24(土) 06:06:14
http://pc12.2ch.net/test/read.cgi/tech/1276810079/802
# [1] 授業単元:オペレーティングシステムプログラミング演習
# [2] 問題文 http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10820.txt
#
# コマンドの引数xxxxで指定したファイルが更新されたら直ちに
# “Modified xxxxfile on Day Month date hh:mm:ss yyyy”
# というメッセージを表示するファイル更新を監視する常駐プログラムを作成せよ。
# 常駐プログラムは、kill pid コマンドが入力されるまで、動き続けるように作成すること。
#
# プログラムの作成は、サンプルプログラムを参考にして、ファイルのiノード情報の
# 最終更新日時を定期的(例えば、sleep で1秒間隔)にチェックし、最終更新日時が
# 書き換えられたらメッセージを表示し、プログラム自身では終了しない無限ループする
# プログラムを作成することになる。
# 常駐プログラムの実行方法の1つは、バックグランドで起動する。
# 直ちに、ps コマンドでプログラムが動作中であることを確認する。
# その後、touchコマンドを投入して自分自身のファイルのタイムスタンプを更新し、
# メッセージが出れば動作していることになる。
# このtouchコマンドの投入を繰り返すことによって、動作を継続していることも確認する。

348デフォルトの名無しさん:2010/07/24(土) 06:19:23
>>342
% Prolog
'キーボードからテストの得点m(0以上100以下)を入力し(1) m<60 の場合は「不合格」(2) 60≦m<80 の場合は「普通」 (3) 80≦m の場合は「優秀」 と表示する' :-
    'キーボードからテストの得点m(0以上100以下)を入力し'(_得点m),
    '(1) m<60 の場合は「不合格」(2) 60≦m<80 の場合は「普通」 (3) 80≦mの場合は「優秀」'(_得点m,_判定),
    表示する(_得点m,_判定).

'キーボードからテストの得点m(0以上100以下)を入力し'(_得点m) :-
    write('テストの得点を入力してください : '),
    get_line(Line),
    '得点m(0以上100以下)を入力し、'(Line,_得点m).

'得点m(0以上100以下)を入力し、'(Line,_得点m) :-
    atom_to_term(Line,X,_),
    integer(X),
    X >= 0,X =< 100,!.
実数値xを入力し、(Line,_得点m) :-
    write_formatted('入力された値%tは得点として妥当なものではありません\n',[Line]),
    'キーボードからテストの得点m(0以上100以下)を入力し'(_得点m).

'(1) m<60 の場合は「不合格」(2) 60≦m<80 の場合は「普通」 (3) 80≦m の場合は「優秀」'(_得点m,不合格) :- _得点m < 60,!.
'(1) m<60 の場合は「不合格」(2) 60≦m<80 の場合は「普通」 (3) 80≦m の場合は「優秀」'(_得点m,普通) :- 60 =< _得点m,_得点m < 80,!.
'(1) m<60 の場合は「不合格」(2) 60≦m<80 の場合は「普通」 (3) 80≦m の場合は「優秀」'(_得点m,優秀) :- _得点m >= 80,!.

表示する(_得点m,_判定) :-
    write_formatted('得点%tの判定は %t です\n',[_得点m,_判定]).
349デフォルトの名無しさん:2010/07/24(土) 06:21:10
>>343
% Prolog

キーボードから1つの実数値xを入力し、(_x) :-
    write('実数値を入力してください : '),
    get_line(Line),
    実数値xを入力し、(Line,_x).

実数値xを入力し、(Line,_x) :- atom_to_term(Line,_x,_),real(_x),!.
実数値xを入力し、(Line,_x) :-
    write_formatted('入力された値%tは実数値ではありません\n',[Line]),
    キーボードから1つの実数値xを入力し、(_x).

絶対値を(_x,_xの絶対値) :-
    _x >= 0.0,
    _x = _xの絶対値,!.
絶対値を(_x,_xの絶対値) :-
    _x =< 0.0,
    _xの絶対値 is _x * (-1).

表示する(_x,_xの絶対値) :-
    write_formatted('|%t| = %t\n',[_x,_xの絶対値]).

350デフォルトの名無しさん:2010/07/24(土) 06:39:36
http://pc12.2ch.net/test/read.cgi/tech/1260922392/47
# 1個の自然数nを適当決めて、nチームが参加する
# リーグ戦の全試合日程を表示するプログラムを書きなさい

351デフォルトの名無しさん:2010/07/24(土) 06:43:35
>>325
% Prolog

'2.71 < (1 + 1/N) ^ N < 2.72 を満たす最小の整数Nを求める'(N) :-
    for(1,N,maxint),((1 + 1/N) ^ N) > 2.71,!.
352デフォルトの名無しさん:2010/07/24(土) 06:52:07
>>320
% Prolog

'1から100の数字の中から素数を抽出する (配列に直接数字を指定することは不可)-抽出した素数を大きい順(降順)にソートする-ソートした素数を1行につき5個表示する(6個目以降は次の行に表示する)' :-
    '1から100の数字の中から素数を抽出する'(L1),
    '抽出した素数を大きい順(降順)にソートする'(L1,L2),
    'ソートした素数を1行につき5個表示する'(L2).

'1から100の数字の中から素数を抽出する'(L1) :- findall(M,for(2,M,N),L),'エラトステネスの篩'(L,L1),!.

'抽出した素数を大きい順(降順)にソートする'(L1,L2) :- sort(L1,L3),reverse(L3,L2).

'ソートした素数を1行につき5個表示する'(L) :-
    '5個切り取り表示'(L,R),
    length(R,Len),
    Len < 5,
    '最終行は5個に満たないかもしれない(R),!.

'5個切り取り表示'(R,R) :- length(R,Len),Len < 5,!.
'5個切り取り表示'(L,R) :-
    'N個組'(5,L,X,R),
    concat_atom(X,' ',S1),
    write_formatted('%t\n',[S1]).

'N個組'(N,L,X,R) :-
    length(X,N),
    append(L0,X,R,L),
    length(L0,Len1),
    0 is Len1 mod N.

最終行は5個に満たないかもしれない(R) :- concat_atom(R,' ',S),write_formatted('%t\n',[S]).
353デフォルトの名無しさん:2010/07/24(土) 09:25:50
http://pc12.2ch.net/test/read.cgi/tech/1276810079/811
# [1] C言語プログラミング演習
# [2] 問題文(含コード&リンク):http://ime.nu/www.dotup.org/uploda/www.dotup.org1025743.jpg
#
# 100未満の素数を表示するプログラムを作りなさい。
# 0から99までの配列を用意し、10までの素数の倍数を
# 素数でないとしていく。以下、実行例。
# 2の倍数を消去 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94 96 98

# 3の倍数を消去 3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 6669 72 75 78 81 84 87 90 93 96 99
# 5の倍数を消去 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95
# 7の倍数を消去 7 14 21 28 35 42 49 56 63 70 77 84 91 98

354デフォルトの名無しさん:2010/07/24(土) 09:29:12
http://pc12.2ch.net/test/read.cgi/tech/1276810079/819
#
# 整数を各要素の値とする、2つの2次元ベクトルが与えられたときに、それらの内積を計算する関数innerProduct()を使って、この2つのベクトルが直行しているかどうかを判定するプログラムを作成せよ。
#
# 2つの2次元ベクトル U(ux,uy)とv(vx,vy) の内積は,
# ux × uy + vx + vy
# で計算でき、2つのベクトルが作る角度は、
# 内積が正なら90°より小さく 内積が0なら 90° 内積が負なら90°より大きい
# この考え方は3次元のベクトルでも同じである。上記のプログラムを、3次元のベクトルにも対応したものにすぐに修正できるようにするには、マクロを使うことが有効である。
# どのようにすればよいかを考えよ。
# 2次元の場合
# % ./innerProduct
# input u[0]: 2 input u[1]: 6 input v[0]: 9input v[1]: -1
# u=[ 2 6 ], v=[ 9 -1 ]
# inner product is 12
# The angle of the vectors is less than 90 degree.
# %
# 3次元の場合
# % ./innerProduct
# input u[0]:input u[1]: 1input u[2]: 2input v[0]: 6input v[1]: 3input v[2]:-2
# u=[ 0 1 2 ], v=[ 6 3 -2 ]
# inner product is -1
# The angle of the vectors is greater than 90 degree.
# %

355デフォルトの名無しさん:2010/07/24(土) 09:32:09
http://pc12.2ch.net/test/read.cgi/tech/1276810079/815
# [1] C言語プログラミング演習
# [2] 問題文
#
# name(名前: char型配列), height(身長: float型変数), bloodType(血液型: char型変数)をメンバに持つ構造体を宣言し, 128名分が記憶可能になるようその構造体の配列を定義せよ.また,その配列に対して値を入力し,
# さらに表示できるようにせよ.構造体のメンバ値を表示するには、ひとつの構造体の各メンバの値を表示する関数を作成すること。
#
#
# % ./bodyData
# 1人目のデータ: 立命太郎 175.5 A
# 2人目のデータ: 野路花子 169.0 B
# 3人目のデータ: 衣笠一郎 180.4 O
# 4人目のデータ: 0 0 0 ← 0 0 0 と入力すると終わる.
# 名前 身長 血液型
# 立命太郎 175.5 A
# 野路花子 169.0 B
# 衣笠一郎 180.4 O
# %
#
# ヒント: 各人の名前、身長、血液型のデータを1行で入力するためには、参考12.1に示されたfgets()関数で、これらを1度に取り込み、最初の空白までを名前とみなし、次の空白までを身長とみなし、
# 次に改行までを血液型をみなせばよい。これらを別々の文字列として、必要に応じて整数や浮動小数点数に変換し、構造体のメンバに設定すること。
#
# ヒント: ひとつの構造体の各メンバの値を表示する関数に構造体を引渡すことを繰り返えせばよい。
356デフォルトの名無しさん:2010/07/24(土) 09:34:03
http://pc12.2ch.net/test/read.cgi/tech/1276810079/820
# [1] C言語プログラミング演習
# [2] 問題文(含コード&リンク
# 標準入力から正の整数値を読み込み,0が入力されたらそれらの整数を小さい順に表示するプログラムを作成せよ.
#
# 以下のような処理の流れでプログラムを作成すること。
#
# 数字を読み込むごとに, それまでに入力された数値が格納された配列の最後の要素から, 先頭に向かって順に大小の比較を行う. これにより、読み込んだ数字の方が入るべき位置がわかる.
# 読み込んだ数字が入るべき箇所を空けるために、 既に記憶されている配列の要素のうち、 この数字よりも大きな数字をひとつ後ろにずらす。 空いた箇所に読み込んだ数字を代入する.
# 次に入力される数字の処理へ移る.
#
# % ./ordering
# 正整数: 17
# 正整数: 3
# 正整数: 9
# 正整数: 4
# 正整数: 0
# 入力された整数は小さい順に 0, 3, 4, 9, 17 です.

357デフォルトの名無しさん:2010/07/24(土) 09:36:22
http://pc12.2ch.net/test/read.cgi/tech/1276810079/821
# [1] C言語プログラミング演習
# [2] 問題文(含コード&リンク
# 文字列yを文字列xの最後に連結する関数stringcat(char [], char [])を作成せよ.この関数を用いて、入力された2つの文字列を連結するプログラムを作成せよ。
#
# 注意: stringcat()を呼び出すときは,連結後の文字列がxの配列長を超えないように注意すること.
#
#
# % ./catenate
# 文字列x (20字まで)? linux
# 文字列y (20字まで)? kadai
# 連結後のx: linuxkadai ←全部で20字以内なので連結可能
# 20字を超える場合は連結不可能とする
358デフォルトの名無しさん:2010/07/24(土) 09:37:46
http://pc12.2ch.net/test/read.cgi/tech/1276810079/822
# [1] C言語プログラミング演習
# [2] 問題文(含コード&リンク
# 文字列xに文字列yが含まれるかどうかを判定する関数str_comp(char [], char [])を作成せよ.
# この関数を用いて、入力されたひとつめの文字列にふたつめの文字列が含まれているかを判定するプログラムを作成せよ。
#
#
# % ./compare
# 文字列x (64字まで)? kadaigakitui
# 文字列y (64字まで)? dai
# "kadaigakitui"に"dai"は含まれます.
#
# % ./compare
# 文字列x (64字まで)? kadaigakitui
# 文字列y (64字まで)? ycx
# "kadaigakitui"に"ycx"は含まれません.
359デフォルトの名無しさん:2010/07/24(土) 09:39:12
http://pc12.2ch.net/test/read.cgi/tech/1276810079/837
# [1] 授業単元:プログラミング
# [2] 問題文
# 二つの任意の正の整数の乗算(*)を、シフト演算の組合わせと除算(/)と加算(+)のみで解くプログラムを作成しなさい。
#
# ヒント:例えば、123 x 13は以下のように計算できる。
#
# 123 x 13 = 123 x (2^3 + 2^2 + 1)
# = 123 x 2^3 + 123 x 2^2 + 123
#
360デフォルトの名無しさん:2010/07/24(土) 09:40:21
http://pc12.2ch.net/test/read.cgi/tech/1276810079/851
# 実数xを入力し、xの平方根を計算するプログラムを作りなさい。平方根は次のアルゴリズムで計算されるものとする。 動作例(1回実行) x = 2 2.000000の平方根は1.414207
# (1) a = 0.0、b = xとし、c = ( a + b ) / 2.0を計算する。
# (2) c2 < x ならばa = c、そうでなければb = cとし、計算を繰り返す。
# (3) b – aが収束値0.00001以下になったときのcを平方根とする。
# プログラムヒント:実数の型はfloatもしくはdoubleを用いること。整数を入力するにはatoi関数を使ったが、実数を入力するにはatof関数を使う。
# これお願いします。
#

361デフォルトの名無しさん:2010/07/24(土) 09:41:41
http://pc12.2ch.net/test/read.cgi/tech/1267796762/288
# 【 課題 】入力したテキストファイルを行毎にUTF-8の文字コードに変換してファイルに出力するプログラムを作成せよ
# 【 形態 】Javaアプリケーション(main()で開始)
# 【 GUI  】制限なし
# 【 期限 】7/16
# 【 Ver  】 1.6.0_20
# 【 補足 】
# あいうえお
# アイウエオ
#
# という2行のファイルを入力させた場合
#
# E38182E38184E38186E38188E3818A
# E382A2E382A4E382A6E382A8E382AA
#
# というファイルを出力させたいです。よろしくお願いします。
362デフォルトの名無しさん:2010/07/24(土) 09:47:26
http://pc12.2ch.net/test/read.cgi/tech/1276810079/833
# 【質問テンプレ】
# [1] 授業単元:プログラミング
# [2] 問題文(含コード&リンク):
# リストへの要素の追加を行うプログラムで、以下のプログラムを完成させよ。
# http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10828.txt
#
# リストの先頭要素
# リストの初期化
# 空のリストにデータを追加
# リストの内容を表示
# リストの先頭にデータを一つ追加
# リストの内容を表示
# リストの途中にデータを一つ追加
# リストの内容を表示
# リストの最後にデータを一つ追加
# リストの内容を表示
# データの削除
# リストの印刷
# リストの各要素を解放

363デフォルトの名無しさん:2010/07/24(土) 09:48:49
http://pc12.2ch.net/test/read.cgi/tech/1276810079/840
# [1] 授業単元:プログラミング演習I
# [2] 問題文(含コード&リンク):
# 課題
# (1000以下の完全数)正整数kが等式
#    k=(kの約数の内、k以外のものの総和)
# を満たす時、kは完全数であるという。たとえば、6の約数は 1,2,3,6の4個であり、6=1+2+3であるため、6は完全数である。1000以下の完全数をすべて出力するJavaプログラムを作れ。
#

364デフォルトの名無しさん:2010/07/24(土) 09:49:59
http://pc12.2ch.net/test/read.cgi/tech/1276810079/856
# C(英文解析プログラム)
#
# 1.標準入力から単語を読み込み、単語を登録する。("EOR"という単語が入力されるまで繰り返す)
# 2.その後、標準入力から指定された単語に対して、その単語が登録されているか否かを出力する。
#
# /*****要実装******/の部分を実装して上の動作をするプログラムに完成させてください。
#
# http://ime.nu/codepad.org/npgTugA0
#

365デフォルトの名無しさん:2010/07/24(土) 10:07:52
>>363
% Prolog (その一)

'1000以下の完全数をすべて出力する' :-
    for(1,N,1000),
    完全数(N),
    write_formatted('%t\n',[N]),
    N = 1000,!.
'1000以下の完全数をすべて出力する'.
366デフォルトの名無しさん:2010/07/24(土) 10:10:29
>>363
% Prolog (その二)

完全数(N) :-
    '1以外の最初の約数は'(N,N1),
    NX is N // N1,
    N2 is N1 + 1,
    S1 is N1 + NX + 1,
    完全数(N2,S1,N),!.

完全数(N1,N,N) :- (N // N1) < N1,!.
完全数(N1,S1,N) :- (N // N1) >= N1,
    0 is N mod N1,
    Y is N // N1,
    S2 is S1 + N1 + Y,
    N2 is N1 + 1,
    完全数(N2,S2,N).
完全数(N1,S,N) :- (N // N1) >= N1,
    \+(0 is N mod N1),
    N2 is N1 + 1,
    完全数(N2,S,N).

'1以外の最初の約数は'(N,N1) :-
    N > 1,
    for(2,N1,N // 2 + 1),
    0 is N mod N1,!.
367デフォルトの名無しさん:2010/07/24(土) 10:12:51
http://pc12.2ch.net/test/read.cgi/tech/1276810079/869
# お手上げなので助けてください。
#
# [1] 授業単元:応用プログラミング
# [2] 問題文(含コード&リンク): http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10833.txt
#
# 問題1
# 入力画像(2値画像)中の、対象領域(ある値を持つピクセルの集合)の境界線を求めるプログラムを作成せよ。
# 求めた境界線は、入力画像をコピーした画像に描き、画像として保存せよ。
# 色をつけて境界線を描くこと。
#

368デフォルトの名無しさん:2010/07/24(土) 10:14:11
http://pc12.2ch.net/test/read.cgi/tech/1276810079/869
# お手上げなので助けてください。
#
# [1] 授業単元:応用プログラミング
# [2] 問題文(含コード&リンク): http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10833.txt
#
# 問題2
# 入力画像(2値画像)中の、対象領域(ある値を持つピクセルの集合)に対してラベリング処理(8連結)を行い、
# 各集合(連結成分)に番号を付けるプログラムを作成せよ。
# 連結成分の番号は、入力画像をコピーした画像に描き、画像として保存せよ。
# 色をつけて番号を描くこと。
369デフォルトの名無しさん:2010/07/24(土) 10:15:40
http://pc12.2ch.net/test/read.cgi/tech/1276810079/869
# お手上げなので助けてください。
#
# [1] 授業単元:応用プログラミング
# [2] 問題文(含コード&リンク): http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10833.txt
#
# 問題3
# 連結成分ごとに特徴パラメータ(面積、重心、周囲長、円形度、フラクタル次元)の値を調べる機能を付け加え、
# ある特徴パラメータ値をもつ連結成分だけを抜き出す(または消す)プログラムを作成せよ。
# 処理結果は、画像として保存せよ。
# また、特徴パラメータのいずれかをキーとして、連結成分の情報をソート(面積が大きい順、重心が原点に近い順、
# 周囲長が長い順、円形度が大きい順、フラクタル次元が大きい順)し、情報(番号、面積、重心、周囲長、
# 円形度、フラクタル次元)をファイル保存する機能を追加せよ。
#
370デフォルトの名無しさん:2010/07/24(土) 10:17:14
http://pc12.2ch.net/test/read.cgi/tech/1276810079/870
# プロギラミング技術は苦手なので教えてください。
# 演習5-1
#
# テキストファイルの各行の最後には,復帰・改行を示すASCIIコードが付加されて
# いる.即ち,ファイルのもつ行数は復帰・改行の数をカウントすることによって
# 計算できる.
#
# 上記性質を利用して,テキストファイルの行数を計算するプログラムを開発せよ.
# 但し,復帰・改行に対応するASCIIコードは10である.
#
# テキストファイルの読み込み方法は講義資料でも解説したように,./a.out < hoge.txtとすればよい.
#

371デフォルトの名無しさん:2010/07/24(土) 10:19:13
http://pc12.2ch.net/test/read.cgi/tech/1276810079/872
# 【質問テンプレ】
# [1] 授業単元:情報処理
# [2] 問題文(含コード&リンク):
# http://ime.nu/files.uploadr.net/0cc81c1342/1.txt
#
# 整数nを入力し、図1のようなパターンを表示するプログラムをfor文で作成しなさい。
# プログラムヒント:まず行と空白とアスタリスクの変数をそれぞれi、j、kとする。
# そしてパターンの変化を表すグラフを右図に作成する。
# 作成したグラフからj とkの一般式を求める。得られた一般式をfor文の終了条件に用いる。
#
# [図1]
# n = 4 n = 5
# * *
# *** ***
# ***** *****
# ******* *******
#  *********

372デフォルトの名無しさん:2010/07/24(土) 10:20:18
http://pc12.2ch.net/test/read.cgi/tech/1276810079/878
# n個の文字列を読み込んだあと,その文字列を反転させるプログラムを作成せよ.ここで"反転"とは,例えば,"IKUNO"という文字列を入力した場合,出力を "ONUKI"と出力するものである.
#
# 【実行例】
#
# nを入力せよ:2
# 1個目の文字列を入力せよ:nagata
# 反転した文字列は:atagan
# 2個目の文字列を入力せよ:ikuno
# 反転した文字列は:onuki
#

373デフォルトの名無しさん:2010/07/24(土) 10:21:38
http://pc12.2ch.net/test/read.cgi/tech/1267796762/292
# お願いします…
# 【 課題 】 シフトJISコードが入っている int cをJAVAで使われてるユニコードに変換しなさい
#

374デフォルトの名無しさん:2010/07/24(土) 10:23:17
http://pc12.2ch.net/test/read.cgi/tech/1276810079/880
# [1] 授業単元: プログラミング
# [2] 問題文(含コード&リンク):
#
# 関数u(x,y)は、0<x<1,0<y<1の範囲のあらゆる点で方程式
#
# (∂^2)*u/(∂*x^2)+(∂^2)*u/(∂*y^2)=2(x^2+y^2)
#
#
# を満たし、境界上でu(0,y)=u(x,0),u(1,y)=y^2,u(x,1)=x^2である。
# この差分方程式を用いてu(x,y)を求め、キーボードから入力した
# 指定座標の値を表示するプログラムを作成せよ。
# 刻み幅は0.05とする(キーボードから入力する値はこの倍数とする)。
#
375デフォルトの名無しさん:2010/07/24(土) 10:24:22
http://pc12.2ch.net/test/read.cgi/tech/1276810079/881
# [1] 授業単元:プログラミング演習I
# [2] 問題文(含コード&リンク):
# 課題
# (1000以下の完全数)正整数kが等式
#    k=(kの約数の内、k以外のものの総和)
# を満たす時、kは完全数であるという。たとえば、6の約数は 1,2,3,6の4個であり、6=1+2+3であるため、6は完全数である。1000以下の完全数をすべて出力するJavaプログラムを作れ。
#

376デフォルトの名無しさん:2010/07/24(土) 10:25:25
http://pc12.2ch.net/test/read.cgi/tech/1276810079/887
# [1] 授業単元:プログラミング演習
# [2] 問題文(含コード&リンク):
# fgets() を使って50文字以下の文字列を入力し,文字列中の各
# 文字の出現回数を数えるプログラムを作成せよ。
# 実行例
# 文字列は? abcdef,abb(ccc110)
# a : 2
# b : 3
# c : 4
# d : 1
# e : 1
# f : 1
# , : 1
# ( : 1
# 1 : 2
# 0 : 1
# ) : 1
#

377デフォルトの名無しさん:2010/07/24(土) 10:26:59
>>376
% Prolog

'50文字以下の文字列を入力し,文字列中の各文字の出現回数を数える' :-
    get_chars(Chars),
    length(Chars,Len),
    Len =< 50,
    findsetof(C,meber(C,Line),L1),
    findall([Count,C],(member(C,L1),count(member(C,Chars),Count)),LL),
    append(_,[[Count,C]|R],LL),
    write_formatted('%t : %t\n',[C,Count]),
    R = [].
378デフォルトの名無しさん:2010/07/24(土) 10:30:07
http://pc12.2ch.net/test/read.cgi/tech/1276810079/890
# [2]課題:C言語による「High and Low」のゲーム作成
# http://ime.nu/www.dotup.org/uploda/www.dotup.org1028847.txt.html
# テキストファイルに詳細を書き留めました
#
# 【仕様の補足】
# ・1〜13までの各数値が4枚ずつ、計52枚のカードを使用
# ただし、ハートやスペードなどのマークの概念は問わない。
# ・必ず「シャッフルする」という手順が含まれてなければいけない。
# ・ユーザからの入力においてscanf関数を利用してはならない。
# ・掛金指定において条件に満たない入力がされた場合入力を反復させる。
#
# 【定数と変数について】
# ・定数:素材ソースプログラムで指定されたものを適切に利用すること
# ・変数:
# ・inputBuffer(文字型配列)キーボードからの入力行を格納する
# ・user_money(整数型)持金情報を格納する
# ・user_bet(整数型)掛金情報を格納する
# ・cards(整数型配列)カード情報を格納する
# ・current(整数型)現在のカード位置を格納する
# (cards[current]が現在のカードを意味する)
# ・user_choice(文字型)ユーザの予想を格納する
# (Highを示す"H"や"h"、Lowを示す"L"と"l"、それ以外はパス)
# ・上記以外の変数については必要に応じて自由な名前で用いること
379デフォルトの名無しさん:2010/07/24(土) 10:32:15
http://pc12.2ch.net/test/read.cgi/tech/1276810079/916
# [1] 授業単元:プログラミング
# [2] 問題文(含コード&リンク):県から国、及び国から県に換算する関数を作成し、

# main関数でキーボードから数値とその値が国であるか県であるかを入力し、県ならば国に、
# 国ならば県に換算した値を小数点以下1桁までで出力するプログラムを作成しなさい。
# 値を引数とする関数で計算させ(関数名は nation とする)、出力は main関数で行うこと。
#
# 関係は以下の通り
# 県(A):(B+2)*5 国(B):A/3+25
# <例>
# 数値を入力してください: 75
# 75 が「県」なら "A" を「国」なら "B" を入力してください: B
#
# 県 75.0 = 国 50.0
#
380デフォルトの名無しさん:2010/07/24(土) 10:35:42
>>379
% Prolog

'キーボードから数値とその値が国であるか県であるかを入力し、県ならば国に、国ならば県に換算した値を小数点以下1桁までで出力する' :-
    'キーボードから数値とその値が国であるか県であるかを入力し、'(N),
    '県ならば国に、国ならば県に換算した値を小数点以下1桁までで出力する'(N,L).

'キーボードから数値とその値が国であるか県であるかを入力し、'(N,_AまたはB) :-
    write('数値を入力してください: '),
    get_integer(N),
    write_formatted('%t が「県」なら "A" を「国」なら "B" を入力してください: ',[N]),
    get_split_line(['"',' '],[_AまたはB]),!.

'県ならば国に、国ならば県に換算した値を小数点以下1桁までで出力する'(N,'A') :-
    A is N * 1.0,
    B is A / 3 + 25,
    write_formatted('県 %t = 国 %t\n',[A,B]),!.
'県ならば国に、国ならば県に換算した値を小数点以下1桁までで出力する'(N,'B') :-
    B is N * 1.0,
    A is (B + 2) * 5,
    write_formatted('県 %t = 国 %t\n',[A,B]),!.

381デフォルトの名無しさん:2010/07/24(土) 10:37:23
http://pc12.2ch.net/test/read.cgi/tech/1276810079/918
# [1] C言語プログラミング演習
# [2] 問題文(含コード&リンク
# char型配列xに格納された文字列を1文字ごとに空白を空けて逆順に出力する関数reverse_array(char [])を作成せよ.変換後の文字列の長さがもとの文字列よりも長くなっているので、長さの検査が必要であることに注意せよ。
# この関数を用いて、入力された文字列を並び替え、その結果を印字するプログラムを作成せよ。
#
#
# % ./reverse
# 処理前の文字列 (64字まで)? kimatutest
# 関数reverse_array()を呼び出しました
# 処理後の文字列 "t s e t u t a m i k"
#
382デフォルトの名無しさん:2010/07/24(土) 10:40:04
>>381
% Prolog

文字列を1文字ごとに空白を空けて逆順に出力する(_文字列) :-
    文字列を1文字ごとに空白を空けて逆順に出力する(_文字列,_1文字ごとに空白
を空けた逆順文字列),
    write_formatted('%t',[_1文字ごとに空白を空けた逆順文字列]).

文字列を1文字ごとに空白を空けて逆順に出力する(_文字列,_1文字ごとに空白を空けた
逆順文字列) :-
    atom_chars(_文字列,Chars),
    concat_atom(Chars,' ',_1文字ごとに空白を空けた逆順文字列).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

文字列を1文字ごとに空白を空けて逆順に出力する(_文字列,_1文字ごとに空白を空けた
逆順文字列) :-
    atom_chars(_文字列,Chars),
    文字列を1文字ごとに空白を空けて逆順に出力する(Chars,Chars2),
    atom_chars(_1文字ごとに空白を空けた逆順文字列,Chars2).

文字列を1文字ごとに空白を空けて逆順に出力する([],[]).
文字列を1文字ごとに空白を空けて逆順に出力する([A],[A]).
文字列を1文字ごとに空白を空けて逆順に出力する([A|R1],[A,' '|R2]) :-
    文字列を1文字ごとに空白を空けて逆順に出力する(R1,R2).
383デフォルトの名無しさん:2010/07/24(土) 10:41:40
http://pc12.2ch.net/test/read.cgi/tech/1276810079/919
# [1] C言語プログラミング演習
# [2] 問題文(含コード&リンク
# char型配列xに格納された英単語からなる文字列が回文(逆から読んでも同じ)であるかをチェックする関数anagram(char [])を作成せよ.ただし,チェック対象の文字列はソースコードのmain()関数内で記述するものとする(キーボードから入力しない).
#
#
# % ./checkAnagaram
# 文字列 "spainyuusyou" は回文ではありません.
#
# % ./checkAnagaram
# 文字列 "Was it a cat I saw?" は回文です.
#
# ヒント: 回文のルールは以下の通り.
#
# (i)
# 前から読んでも後ろから読んでも同じアルファベットの並びとな る,
# (ii)
# 記号「?」,「.」,「,」,「-」,「 」(空白)は無視する,
# (iii)
# 大文字と小文字は区別をしない.
384デフォルトの名無しさん:2010/07/24(土) 10:43:00
>>383
% Prolog

回文(A) :- atom_chars(A,Chars),回文(Chars,[],X,X).

回文([],X,X,[]) :- !.
回文([A|R1],L1,X,R2) :- member(A,['?','.',',','-',' ']),回文(R1,L1,X,R2),!.
回文([A|R1],L1,X,[B|R2]) :- to_upper(A,B),回文(R1,[B|L1],X,R2),!.
385デフォルトの名無しさん:2010/07/24(土) 10:44:48
http://pc12.2ch.net/test/read.cgi/tech/1276810079/920
# [1] C言語プログラミング演習
# [2] 問題文(含コード&リンク
# ATM(Automated Teller Machine; 現金自動預け払い機)システムを実現するプログラムを考える。
#
# 氏名,口座番号,暗証番号,預金残高を要素とする構造体を宣言し, 512人分の口座が作成可能なようにせよ.また,初期値として次のように構造体の内容を設定せよ.
#
# 立命太郎の口座番号は1234で,預金残高を1,234,560円に設定する.
# 野路花子の口座番号は5678で,預金残高を987,600円に設定する.
# 衣笠一郎の口座番号は9012で,預金残高を538,600円に設定する.
# 暗証番号は口座番号に1111を足して10000で割った余りに設定する.
# ここで暗証番号は、口座番号を引数としてとり、それに1111を足して10000で
# 割った余りを計算する関数を作成して設定すること.
# 上記の方法で初期値を設定し、設定された3人の預金残高を画面へ出力する
# プログラムを作成せよ.ただし、ひとり分の預金残高を表示する関数を作成して、
# これを繰り返し使って3人の預金残高を出力すること.
#
# % ./initAccount
# 預金残高は次のとおりです.
# 立命太郎 (1234) 1234560 円
# 野路花子 (5678) 987600 円
# 衣笠一郎 (9012) 538600 円
# %

386デフォルトの名無しさん:2010/07/24(土) 10:46:19
>>385
% Prolog

預金口座の初期設定(_ファイル) :-
    w3c('http://pc12.2ch.net/test/read.cgi/tech/1276810079/920',Lines),
    append(_,[Line|R],Lines),
    split(Line,[の口座番号は,'で,貯金残高を,円に設定する.'],[_氏名,_口座番
号,_預金残高]),
    assertz(預金口座(_氏名,_口座番号,_預金残高)),
    _暗証番号 is (_口座番号 + 1111) mod 10000,
    assertz(預金口座暗証番号(_口座番号,_暗証番号)),
    R = [],!.
預金口座の初期設定(_).

設定された3人の預金残高を画面へ出力する :-
    findsetof(_口座番号,預金口座(_,_口座番号,_),_口座番号ならび),
    write('預金残高は次のとおりです.\n'),
    append(_,[_口座番号|R],_口座番号ならび),
    ひとり分の預金残高を表示する(_口座番号),
    R = [].

ひとり分の預金残高を表示する(_口座番号) :-
    預金口座(_氏名,_口座番号,_預金残高),
    write_formatted('%t (%t) %t 円\n',[_氏名,_口座番号,_預金残高]),!.
387デフォルトの名無しさん:2010/07/24(土) 10:48:44
http://pc12.2ch.net/test/read.cgi/tech/1276810079/922
# [2] 問題文(含コード&リンク
# <<920の課題を基に「引出し」の機能を追加せよ.具体的には,
# 口座番号の入力,暗証番号の入力と確認,支払額の入力,預金残高の更新をする
# プログラムを追加すればよい.機能の選択は,起動時できるようにすること.
#
# % ./withdraw
# [0]終了 [1]残高表示 [2]引出し: 2
# 口座番号を入力してください: 5000 ← 存在しない
# 暗証番号を入力してください: 0123
# 口座番号または暗証番号が間違っています.
# 口座番号を入力してください: 9012
# 暗証番号を入力してください: 5555 ← 間違っている
# 口座番号または暗証番号が間違っています.
# 口座番号を入力してください: 9012
# 暗証番号を入力してください: 0123
# 引出し額を入力してください: 1000000 ← 預金額より多い
# 預金額が不足しています.
# 口座番号を入力してください: 9012
# 暗証番号を入力してください: 0123
# 引出し額を入力してください: 20000
# ありがとうございました.残高は 518600 円です.
# [0]終了 [1]残高表示 [2]引出し: 2 ← 始めに戻る

388デフォルトの名無しさん:2010/07/24(土) 10:51:18
>>387
% Prolog (その一)

'「引出し」の機能を追加せよ.具体的には,口座番号の入力,暗証番号の入力と確認,支払額の入力,預金残高の更新をするプログラムを追加すればよい.'(_引き出し_または_口座残高表示) :-
    「引出し」または「口座残高表示」(_引き出し_または_口座残高表示).

「引出し」または「預金残高表示」(引き出し) :-
    repeat,
    口座番号の入力(_口座番号),
    暗証番号の入力と確認(_口座番号),
    支払い(_口座番号),!.

「引出し」または「預金残高表示」(預金残高表示) :-
    repeat,
    口座番号の入力(_口座番号),
    暗証番号の入力と確認(_口座番号),
    「預金残高表示」(_口座番号),!.

支払い(_口座番号,_預金残高1,_引出額) :-
    _引出額 > _預金残高1,
    write('口座残高が不足です\n御支払いできません\n'),!.

支払い(_口座番号,_預金残高1,_引出額) :-
    _引出額 =< _預金残高,
    支払いオペレーション,
    預金残高の更新(_口座番号,_引出額,_預金残高),
    預金残高を画面へ出力する(_口座番号),!.
389デフォルトの名無しさん:2010/07/24(土) 10:54:14
>>387
% Prolog (その二)

口座番号の入力(_口座番号) :-
    write('口座番号を入力してください : '),
    get_integer(_口座番号1),
    口座番号の入力(_口座番号1,_口座番号).

口座番号の入力(_口座番号,_口座番号) :-
    預金口座(_,_口座番号,_),!.
口座番号の入力(_口座番号1,_口座番号) :-
    write_formatted('口座番号%tは正しい口座番号ではありません \nもう一度、',[_口座番号1]),
    口座番号の入力(_口座番号).

暗証番号の入力と確認(_口座番号) :-
    rawmode,
    write('暗証番号を入力してください : '),
    findall(C,(for(1,N,4),get_char(C),put_char(*)),L),
    norawmode,
    number_chars(_暗証番号,L),
    _暗証番号 is (_口座番号 + 1111) mod 10000,!.
暗証番号の入力と確認(_口座番号) :-
    write('暗証番号が一致しませんでした\n'),
    fail.
390デフォルトの名無しさん:2010/07/24(土) 10:55:17
>>387
% Prolog (その三)

支払額の入力(_引出額) :-
    write('引出額を入力してください : '),
    get_integer(_引出額),

預金残高の更新(_口座番号,_引出額,_預金残高) :-
    retract(預金口座(_氏名,_口座番号,_預金残高1)),
    _預金残高 is _預金残高1 - _引出額,
    assertz(預金口座(_氏名,_口座番号,_預金残高)),!.

預金残高を画面へ出力する :-
    ひとり分の預金残高を表示する(_口座番号),!.

支払いオペレーション.
391デフォルトの名無しさん:2010/07/24(土) 10:56:58
http://pc12.2ch.net/test/read.cgi/tech/1276810079/936
# 問題
#
# 複数の文字列を読み込み,さらに,それらの文字列を繋ぎ合わせる順番を入力し結果を出力するプログラムを作成せよ.
#
# 【実行例】
#
# 何個の文字列を入力しますか?:4
# 入力文字列[1]:Computer
# 入力文字列[2]:Science
# 入力文字列[3]:Tarou
# 入力文字列[4]:Tanaka
#
# 繋ぎ合わせる順番:
# 2
# 4
# 3
# 1
#
# 結果:ScienceTanakaTarouComputer
#

392デフォルトの名無しさん:2010/07/24(土) 10:58:25
>>391
% Prolog

'複数の文字列を読み込み,さらに,それらの文字列を繋ぎ合わせる順番を入力し結果を出力する' :-
    催促付き整数入力('何個の文字列を入力しますか?: ',N),
    write_formatted('文字列を%t行連続して入力してください\n',[N]),
    findall(Line,(for(1,M,N),get_line(Line)),L1),
    write('入力した文字列を繋ぎ合わせる順番を入力してください\n'),
    findall(Nth,(for(1,M,N),get_integer(Nth)),L2),
    findall(A,(member(Nth,L2),list_nth(Nth,L1,A)),L3),
    concat_atom(L3,S),
    write_formatted('繋ぎ合わせた文字列は: %t\n',[S]).
393デフォルトの名無しさん:2010/07/24(土) 10:59:31
http://pc12.2ch.net/test/read.cgi/tech/1276810079/937
# この問題ができません。誰かお願いします。
#
# 入力したDNA塩基配列中にある塩基 t, c, a, gそれぞれの個数をカウントするプログラムを作成せよ.
# 【実行例】
#
# % ./a.out
# tataatccg ← 入力し,リターンを押して ^D
# Thymine (t) : 3
# Cytosine (c) : 2
# Adenine (a) : 3
# Guanine (g) : 1
# %

394デフォルトの名無しさん:2010/07/24(土) 11:00:49
>>393
% Prolog

'入力したDNA塩基配列中にある塩基 t, c, a, gそれぞれの個数をカウントする' :-
    get_chars(Chars),
    count(member(t,Chars),_t),
    count(member(c,Chars),_c),
    count(member(a,Chars),_a),
    count(member(g,Chars),_g),
    write_formatted('Thymine (t) : %t \nCytosine (c) : %t \nAdenine (a) :%t \nGuanine (g) : %t \n',[_t,_c,_a,_g]).
395デフォルトの名無しさん:2010/07/24(土) 11:07:29
http://pc12.2ch.net/test/read.cgi/tech/1276810079/943
# 入力したDNA塩基配列中に,atgという並びがいくつあるか調べるプログラムを作成せよ.但し,入力には t, c, a, g以外の文字も入っている.塩基以外の文字は無視すること.
# 【実行例】
#
# % ./a.out
# 1gattatgtga
# 11tgccgatatc
# 21gatatgattc
# (ここで ^D を押す)
# #ATG is 3
# %

396デフォルトの名無しさん:2010/07/24(土) 11:09:07
>>395
% Prolog

'入力したDNA塩基配列中に,atgという並びがいくつあるか調べるプログラムを作成せよ.但し,入力には t, c, a, g以外の文字も入っている.塩基以外の文字は無視すること':-
    get_chars(Chars),
    atgという並びがいくつあるか(Chars,_いくつ).

atgという並びがいくつあるか([],0).
atgという並びがいくつあるか([a|R1],_いくつ) :-
    atgという並び(R1,R2),
    atgという並びがいくつあるか(R2,_いくつの一),
    _いくつ is _いくつの一 + 1,!.
atgという並びがいくつあるか([_|R1],_いくつ) :-
    atgという並びがいくつあるか(R1,_いくつ).

atgという並び(R1,R2) :-
    append(_,[t|L1],[g|R2],R1),
    \+((member(A,[a,t,c,g]),member(A,L1))),!.
atgという並び(_,[]).
397デフォルトの名無しさん:2010/07/24(土) 11:10:36
http://pc12.2ch.net/test/read.cgi/tech/1276810079/959
# [1] 授業単元:C++実習
# [2] 問題文(含コード&リンク): 文字列*bufからIPアドレスを抽出し、int ip[4]にそれぞれ入れよ。(最初に抽出できたものだけで良い)
#

398デフォルトの名無しさん:2010/07/24(土) 11:12:40
http://pc12.2ch.net/test/read.cgi/tech/1276873238/295
# # 問題文(含コード&リンク):http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10839.txt
# コピーさせていただきました
# ホームページ上からデータを追加、検索したりする問題です。
# # OS:Linux
#
# [1]学籍番号(stnum char(14))、名前(name char(30))、国語(kokugo int)、数学(math int)、理科(science int)
# からなるテーブルseisekiをデータベース上に作る。
#
# [2]ホームページからデータを追加、検索できるようにする。
# 表示結果には、学籍番号、名前、国語、数学、理科、合計を表示させる
#
#

399デフォルトの名無しさん:2010/07/24(土) 11:15:41
>>397
% Prolog (その一)

学籍番号による検索(_学籍番号) :-
    seiseki(_学籍番号,_名前,_国語,_数学,_理科),
    write_formatted('%t,%t,%t,%t,%t\n',[_学籍番号,_名前,_国語,_数学,_理科] .

名前による検索(_名前) :-
    seiseki(_学籍番号,_名前,_国語,_数学,_理科),
    write_formatted('%t,%t,%t,%t,%t\n',[_学籍番号,_名前,_国語,_数学,_理科]).

国語の成績による検索(_国語,_国語成績) :-
    seiseki(_学籍番号,_名前,_国語,_数学,_理科),
    _国語成績.

数学の成績による検索(_数学,_数学成績) :-
    seiseki(_学籍番号,_名前,_数学,_数学,_理科),
    _数学成績.

理科の成績による検索(_理科,_理科成績) :-
    seiseki(_学籍番号,_名前,_理科,_数学,_理科),
    _理科成績.
400デフォルトの名無しさん:2010/07/24(土) 11:18:39
>>399 >>397ではなくて >>398でした
% Prolog (その二)

成績の追加(_学籍番号,_名前,_国語,_数学,_理科) :-
    学籍番号(_学籍番号),
    名前(_名前),
    国語(_国語),
    数学(_数学),
    理科(_理科),
    assertz(seiseki(_学籍番号,_名前,_国語,_数学,_理科)).

成績の変更(_学籍番号,_名前,_国語,_数学,_理科) :-
    学籍番号(_学籍番号),
    名前(_名前),
    国語(_国語),
    数学(_数学),
    理科(_理科),
    retract(seiseki(_学籍番号,_,_,_,_)),
    assertz(seiseki(_学籍番号,_名前,_国語,_数学,_理科)).

成績の削除(_学籍番号) :-
    retract(seiseki(_学籍番号,_,_,_,_)).

401デフォルトの名無しさん:2010/07/24(土) 11:19:53
>>398
% Prolog (その三)

学籍番号(_学籍番号) :-
    atom_length(_学籍番号,Len),
    Len =< 14,
    atom_chars(_学籍番号,Chars),
    すべてが数字(Chars),!.

すべてが数字([]) :- !.
すべてが数字([A|R]) :-
    member(A,['0','1','2','3','4','5','6','7','8','9']),
    すべてが数字(R).

名前(_名前) :-
    atom(_名前),
    atom_length(_名前,Len),
    Len =< 30,!.

国語(_国語) :- integer(_国語).

数学(_数学) :- integer(_数学).

理科(_理科) :- integer(_理科).
402デフォルトの名無しさん:2010/07/24(土) 11:22:21
http://pc12.2ch.net/test/read.cgi/tech/1267796762/302
# 【 課題 】10個の国旗を表示するプログラム(日本、アメリカ、イギリス、フランス、ジャマイカ、ベトナム、セネガル、スウェーデン、アイスランド、南アフリカ)
# 指定された国旗を画面に表示する。少なくても8種類以上。 国旗の指定にはマウスでメニューのボタンとかを指定して、選択させること。
# 国旗は図形として描くこと。画像を貼り付けたりしてはならない。
# 【 形態 】1. Javaアプリケーション(main()で開始)
# 【 GUI  】4. 制限なし
# 【 期限 】7月22日までに
# 【 Ver  】1.6.0
# 【 補足 】国旗はそこまで高い完成度は求められない?と思います。
403デフォルトの名無しさん:2010/07/24(土) 11:23:13
http://pc12.2ch.net/test/read.cgi/tech/1267796762/308
# 【 課題 】なんでもいいからjavaでつくれとのことで
#       http://ime.nu/lifescape.seesaa.net/article/104001220.html
#       みたいなみかか変換作りたいです
# 【 形態 】Applet
# 【 期限 】7月19日
# 【 Ver  】1.6.0_20-b02
# 【 補足 】いまさらみかかかと思うかもしれませんがよろしくお願いしやす

404デフォルトの名無しさん:2010/07/24(土) 11:25:06
http://pc12.2ch.net/test/read.cgi/tech/1267796762/311
# 【 課題 】1.ビンゴカードをPlayerの人数分作成できる。
# 2.1〜75の数字が書かれた玉をランダムに取り出せる。
#       3.カードにその数字があるかをチェックし、あれば数字の枠にマークすることができる。
#       4.リーチ、ビンゴ時に表示することができる。
#       以上の機能を備えたビンゴゲームシュミレーターを作成しなさい。
# 【 補足 】カードは1列目1〜15、2列目は16〜30……5列目で61〜75、というよう
な形が指定されています。
#       Freeの有無は指定なしです。
#       丸投げ申し訳ないです。長く複雑かもしれませんが、どうぞよろしくお願いします。
# 初心者故、できましたら軽い注釈を付けてくれると幸いです。
405デフォルトの名無しさん:2010/07/24(土) 11:27:34
>>403
% Prolog 何をするのかわからないな。

みかか定義 :-
     L = ['1' - 'ぬ','2' - 'ふ','3' - 'あ','4' - 'う','5' - 'え','6' - 'お','7' - 'や','8' - 'ゆ','9' - 'よ','0' - 'わ',(-) - (ほ),(^) - ('へ'),
'Q'-た,'W'-て,'E'-い,'R'-す,'T'-か,'Y'-ん,'U'-な,'I'-に,'O'-ら,'P'-せ,
('@')-゛,('[')-゜,'A'-ち,'S'-と,'D'-し,'F'-は,'G'-き,'H'-く,'J'-ま,'K'-の,
'L'-り,(';')-れ,(':')-け,(']')-む,'Z'-つ,'X'-さ,'C'-そ,'V'-ひ,'B'-こ,'N'-み,
'M'-も,(',')-ね,('.')-る,('/')-め],
    member(A-B,L),
    assertz(みかか(A,B)),fail;true.

みかか :-
    rawmode,
    repeat,
    get_char(A),
    みかか(A,B),
    putchar(B),
    A = '\n',
    norawmode.
406デフォルトの名無しさん:2010/07/24(土) 11:31:57
http://pc12.2ch.net/test/read.cgi/tech/1276810079/956
# [2] 問題文(含コード&リンク):http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10845.txt
#
# 問1)検索する文字列を入力し、その位置を返す ユーザ関数 を使ってプログラムを作成しなさい。
#
# 条件 プロトタイプ宣言 : char *MojiSearch(char *m, char *s)
# 引数 1 : 検索対象文字列
# 引数 2 : 検索文字列
# 戻り値 : あった場合 (一致した文字列の先頭アドレス)
# なかった場合 (NULL)
#       標準関数 : MojiSearch()内で strlen(),strncmp() のみ使用可能
#
#       char moji[] = "ABCDEFGHJABFGHSKL"; /*検索対象文字列*/
#
# 実行画面例
#
#  1) 検索文字列 ==> HS
#  検索位置 : HSKL
#
#  2) 検索文字列 ==> JN
#    検索位置 : 検索したい文字はありませんでした
407デフォルトの名無しさん:2010/07/24(土) 11:33:52
http://pc12.2ch.net/test/read.cgi/tech/1276810079/956
# 問2) 配列データの平均を求める ユーザ関数 を使ってプログラムを作成しなさい。
#    条件 プロトタイプ宣言 : double Average(int *p)
# 引数 : 数値が格納された配列の先頭アドレス
# 戻り値 : 平均
#    実行画面例
#     1) 整数[0] ==> 100
# 整数[1] ==> 80
# 整数[2] ==> 60
# 整数[3] ==> 75
# 整数[4] ==> 89
# 整数[5] ==> 62
# 整数[6] ==> 71
# 整数[7] ==> 50
# 整数[8] ==> 49
# 整数[9] ==> 90
#
# 平均 : 72.6
#
#     2) 整数[0] ==> 100
# 整数[1] ==> 80
# 整数[2] ==> 60
# 整数[3] ==> 75
# 整数[4] ==> 89
# 整数[5] ==> 64
# 整数[6] ==> -1
#
# 平均 : 78.0
408デフォルトの名無しさん:2010/07/24(土) 11:35:25
>>406
% Prolog

検索する文字列を入力し、その位置を返す(_検索対象文字列,_検索文字列,_位置,_検索副文字列) :-
    sub_atom(_検索対象文字列,A,B,C,_検索文字列),
    _位置 is A + 1,
    _残り長さ is B + C,
    sub_atom(_検索対象文字列,A,_残り長さ,_,_検索副文字列),!.
検索する文字列を入力し、その位置を返す(_,_,_,_) :-
    write('検索したい文字はありませんでした\n'),
    !,fail.
409デフォルトの名無しさん:2010/07/24(土) 11:36:32
>>407
% Prolog

入力されたデータの平均を求める :-
    findavg(M,(
          for(0,N,maxint),
          write_formatted('整数[%t] ==> ',[N]),
          get_integer(M),
          ( M = -1,!,fail;true)),
        _平均),
    write_formatted('平均 = %t\n',[_平均]).
410デフォルトの名無しさん:2010/07/24(土) 13:28:18
http://pc12.2ch.net/test/read.cgi/tech/1279286575/28
# [1] 授業単元:情報処理演習
# [2] 問題文(含コード&リンク):元金a円、利率r円で、何年預けると目標金額b円を超えるか。ただし金利は複利計算によって求めるものとする。
411デフォルトの名無しさん:2010/07/24(土) 13:36:37
http://pc12.2ch.net/test/read.cgi/tech/1279286575/55
# [1] 授業単元:プログラミング基礎I
# [2] 問題文(含コード&リンク):
#
# nを読み込み,n個のint型配列を動的に確保,n個の配列はn人の勇者とする.以下仕様に従ったプログラムを作成せよ.
#
# ?それぞれの勇者にヒットポイントを与える.
# ?敵のヒットポイントを与える.
# ?乱数を発生し,誰の攻撃かを決定する.
# ?攻撃をする際に,会心の一撃,普通の攻撃,ミスを乱数で決定する.
# ?相手に与えるダメージを乱数で決定する.
# ?敵の攻撃の場合,何人にどれだけ攻撃をするかを乱数で決定する.
# ?敵のヒットポイントが無くなるか,勇者が全滅したら終了とする.
#

412デフォルトの名無しさん:2010/07/24(土) 13:37:50
http://pc12.2ch.net/test/read.cgi/tech/1279286575/56
# n 個のものの中から r 個のものを取り出すときの組合せの数 nCr を求める関数 CCO(int n, int r) を再帰型で作成しなさい.
# ただし, x, y の入力と結果の出力は main関数で行わせること.
413デフォルトの名無しさん:2010/07/24(土) 13:38:58
http://pc12.2ch.net/test/read.cgi/tech/1279286575/74
# 【質問テンプレ】
# [1] 授業単元:情報処理課題
# [2] 問題文(含コード&リンク):英語の文章で構成されるテキストファイルに対して、その中に含まれる総文字数と異なる文字ごとの出現回数とを数え上げよ。
# [3.3] 言語:C
# [4] 期限:2010年07月19日00:00まで
# [5] その他の制限:Xcodeを使用しています。読み込むファイルは"/Users/user/Desktop/data.txt"で。
#
# 似たようなプログラムを作った時は「数列を入力し総文字数と数字ごとに出現回数とを数え上げグラフで表示」というような課題で
# 数字だったので0〜9までを表示することが簡単に出来ましたがアルファベットなのでa-zをどう表示したものか
# またstrlenだと半角空白も数えてしまうので総"文字"数とずれてくるのではないかと悩んでいます。
# よろしくお願いします。
414デフォルトの名無しさん:2010/07/24(土) 14:18:27
http://pc11.2ch.net/test/read.cgi/db/1274791771/283
# MYSQL5で
# テーブルA
# create table A( id int , name_id int, word varchar(128) , primary key ( id ), index ( name_id ) )
# テーブルB
# create table B( id int, cid1 int, cid2 int , cid3 int , primary key ( id )
# テーブルC
# create table C( id int, name varchar(128) , primary key ( id ) , unique ( name ) )
# こんな感じのテーブルを作成しました。テーブルAのname_idはテーブルBのidと、テーブルCのidはテーブルBのcid1〜cid3と関連します。
# テーブルAのname_id,wordとテーブルBのcd1〜cd3をテーブルCのnameで置き換えた値で取り出したいのですが、どう書けばいいでしょうか?
415デフォルトの名無しさん:2010/07/24(土) 14:19:39
>>413
% Prolog

'テーブルAのname_id,wordとテーブルBのcd1〜cd3をテーブルCのnameで置き換えた値で取り出す'(_name_id,_word,_name_1,_name_2,_name_3) :-
    'A'(_,_name_id,_word),
    'B'(_name_id,_cid1,_cid2,_cid3),
    'C'(_cid1,_name_1),
    'C'(_cid2,_name_2),
    'C'(_cid3,_name_3).
416デフォルトの名無しさん:2010/07/24(土) 14:23:02
>>414 の間違いでした
% Prolog

'テーブルAのname_id,wordとテーブルBのcd1〜cd3をテーブルCのnameで置き換えた値で取り出す'(_name_id,_word,_name_1,_name_2,_name_3) :-
    'A'(_,_name_id,_word),
    'B'(_name_id,_cid1,_cid2,_cid3),
    'C'(_cid1,_name_1),
    'C'(_cid2,_name_2),
    'C'(_cid3,_name_3).
417デフォルトの名無しさん:2010/07/24(土) 14:23:53
>>413
% Prolog

英語の文章で構成されるテキストファイルに対して、その中に含まれる総文字数と異なる文字ごとの出現回数とを数え上げる(_総文字数,_文字ごとの出現度数ならび) :-
    get_chars('/Users/user/Desktop/data.txt',Chars),
    length(Chars,_総文字数),
    findsetof(C,member(C,Chars),L1),
    findall([C,_出現度数],(member(C,L1),count(member(C,Chars),_出現度数)),_文字ごとの出現度数ならび).

findsetof(A,B,L) :-
    findall(A,B,C),
    setof(A,member(A,C),L).
418デフォルトの名無しさん:2010/07/24(土) 14:28:34
http://pc12.2ch.net/test/read.cgi/tech/1274998754/225
# 今迷路を作成しているのですが
# 前、右、左から1つ方向を選んで、
# 1歩進むたびに宝物、通路、落とし穴を表示させたいんです。
# 途中からですが・・・
# int ret = 0;
# char *message;
# switch (c) {
# case '1':
# message = "左に進む";
# break;
# case '2':
# message = "右に進む";
# break;
# case '3':
# message = "前進する";
# break;
# default:
# message = "進め!";
# ret = 1;
# }
# printf("%s\n", message);
# }
# printf("%s\n", message);
# return ret;
# }
# ここに進行方向にあるものを表示させたいときってどうしたらいいんでしょうか?
419デフォルトの名無しさん:2010/07/24(土) 14:31:44
http://pc12.2ch.net/test/read.cgi/tech/1279286575/98
# [1] 授業単元: C言語A
# [2] 問題文
# http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10872.txt
# [3.1] OS:Windows
# [3.2] VC 6.0
# [3.3] 言語:C
# [4] 期限:7月24日
# [5] 制限:特にありません
# まずA〜Fのアルファベットを出力させる方法がわかりませんでした。よろしければそちらについて詳しく教えてください
#
# 文字列当てゲームを作成せよ。
# ・A〜Fの中から4つの文字をランダムで選択し、文字列にする。
#  この際、選ばれる4つの文字はすべて異なるものとする。
#  ユーザーは4つの文字の並びを入力して、選定された文字列を当てる。
# ・ユーザーの入力した文字列と選定された文字列を比較して、同じ文字が同じ場所にある場合は「Hit」というヒントを与える。
#  また、同じ文字が異なる場所にある場合は「Blow」というヒントを与える。
#  すなわち、選ばれた文字列がCFBA、これに大してユーザーがCBAEという数値を入力した場合、1Hit2Blowというヒントが表示されるようにする。
# ・ユーザーは10回まで、入力するチャンスが与えられる。
420デフォルトの名無しさん:2010/07/24(土) 14:33:29
http://pc12.2ch.net/test/read.cgi/tech/1279286575/123
# [1] 授業単元:プログラミング基礎I
# [2] 問題文(含コード&リンク):
# 与えられた負でない整数nに対して、
# を求める関数を関数の再帰呼び出しを使って作成せよ。
# 一般的なアルゴリズムは以下のようになる。
#
# % ./factorial
# 負でない整数を入力して下さい: 4
# 24
# % ./factorial
# 負でない整数を入力して下さい: 0
# 1
# %

421デフォルトの名無しさん:2010/07/24(土) 14:34:17
http://pc12.2ch.net/test/read.cgi/tech/1279286575/128
# [1] 授業単元:プログラミング基礎I
# [2] 問題文(含コード&リンク):
#
# 文字列xに文字列yが含まれるかどうかを判定する関数str_compWithPointer(char *,char *)を作成せよ.この関数を用いて、入力されたひとつめの文字列にふたつめの文字列が含まれているかを判定するプログラムを作成せよ。
#
#
# % ./compare
# 文字列x (64字まで)? Ritsumeikan-University
# 文字列y (64字まで)? Univ
# "Ritsumeikan-University"に"Univ"は含まれます.
#
# % ./compare
# 文字列x (64字まで)? Ritsumeikan-University
# 文字列y (64字まで)? city
# "Ritsumeikan-University"に"city"は含まれません.
422デフォルトの名無しさん:2010/07/24(土) 14:35:38
http://pc12.2ch.net/test/read.cgi/tech/1279286575/129
# [1] 授業単元:プログラミング基礎I
# [2] 問題文(含コード&リンク):
# 標準入力から正の整数値を読み込み,0が入力されたらそれらの整数を小さい順に表示するプログラムを作成せよ.
#
# 以下のような処理の流れでプログラムを作成すること。
#
# 数字を読み込むごとに, それまでに入力された数値が格納された配列の最後の要素から, 先頭に向かって順に大小の比較を行う. これにより、読み込んだ数字の方が入るべき位置がわかる.
# 読み込んだ数字が入るべき箇所を空けるために、 既に記憶されている配列の要素のうち、 この数字よりも大きな数字をひとつ後ろにずらす。 空いた箇所に読み込んだ数字を代入する.
# 次に入力される数字の処理へ移る.
#
# % ./ordering
# 正整数: 17
# 正整数: 3
# 正整数: 9
# 正整数: 4
# 正整数: 0
# 入力された整数は小さい順に 0, 3, 4, 9, 17 です.
423デフォルトの名無しさん:2010/07/24(土) 14:36:37
http://pc12.2ch.net/test/read.cgi/tech/1279286575/130
# [1] 授業単元:プログラミング基礎I
# [2] 問題文(含コード&リンク):
# 文字列xに文字列yが含まれるかどうかを判定する関数str_comp(char [], char [])を作成せよ.この関数を用いて、入力されたひとつめの文字列にふたつめの文字列が含まれているかを判定するプログラムを作成せよ。
#
#
# % ./compare
# 文字列x (64字まで)? Ritsumeikan-University
# 文字列y (64字まで)? Univ
# "Ritsumeikan-University"に"Univ"は含まれます.
#
# % ./compare
# 文字列x (64字まで)? Ritsumeikan-University
# 文字列y (64字まで)? city
# "Ritsumeikan-University"に"city"は含まれません.
424デフォルトの名無しさん:2010/07/24(土) 14:37:48
http://pc12.2ch.net/test/read.cgi/tech/1279286575/131
# 複数の文字列を読み込み,さらに,それらの文字列を繋ぎ合わせる順番を入力し結果を出力するプログラムを作成せよ.
#
# 【実行例】
#
# 何個の文字列を入力しますか?:4
# 入力文字列[1]:AAA
# 入力文字列[2]:BBB
# 入力文字列[3]:CCC
# 入力文字列[4]:DDD
#
# 繋ぎ合わせる順番:
# 2
# 4
# 3
# 1
#
# 結果:BBBDDDCCCAAA

425デフォルトの名無しさん:2010/07/24(土) 14:38:47
http://pc12.2ch.net/test/read.cgi/tech/1279286575/132
# [1] 授業単元:プログラミング基礎I
# [2] 問題文(含コード&リンク):
# char型配列xに格納された文字列を1文字ごとに空白を空けて逆順に出力する関数reverse_array(char [])を作成せよ.変換後の文字列の長さがもとの文字列よりも長くなっているので、長さの検査が必要であることに注意せよ。
# この関数を用いて、入力された文字列を並び替え、その結果を印字するプログラムを作成せよ。
#
#
# % ./reverse
# 処理前の文字列 (64字まで)? Ritsumeikan
# 関数reverse_array()を呼び出しました
# 処理後の文字列 "n a k i e m u s t i R"
426デフォルトの名無しさん:2010/07/24(土) 14:39:46
>>383
使用言語:J

f=:(-:|.)@toupper@(-.&'?.,- ')

f 'spainyuusyou'
0
f 'Was it a cat I saw?'
1
427デフォルトの名無しさん:2010/07/24(土) 14:40:59
http://pc12.2ch.net/test/read.cgi/tech/1279286575/133
# [1] 授業単元:C++プログラミング
# [2] 問題文(含コード&リンク): 航空会社が持っている小型航空機(座席数:24)のフライトに座席を割り当てるシステムをプログラミングせよ。
# この航空機の座席は中央に通路を挟み左右にそれぞれ2座席ずつの列が計6列ある。
# 座席は 1A, 1B, 1C, 1D, ..., 6A, 6B, 6C, 6D で表示され、 1, 2列目が喫煙区画で、 A, D が窓側、 B, C が通路側を示している。
#
# プログラムはまず最初に次の選択メニューを表示する。
#
# 喫煙席を希望する方は 1 をタイプしてください。
# 禁煙席を希望する方は 2 をタイプしてください。
#
# 喫煙/禁煙の選択が終わると、 窓側か通路側かの選択を求める。
#
# 窓側を希望する方は 1 をタイプしてくださ。
# 通路側を希望する方は 2 をタイプしてください。
#
# 希望に沿える席がすべて予約済みで割り当てられない場合には、窓側又は通路側の希望については無視して割り当てる。
# ただし, 「窓側(あるいは通路側)はすでに満席のため通路側(窓側)で予約します」というメッセージを出力し、
# 以下のように座席番号と喫煙席/禁煙席の区分が書かれた搭乗券を(この課題では画面上に)出力する。
#
# --------
# 2A 禁煙
# --------

428デフォルトの名無しさん:2010/07/24(土) 14:42:25
http://pc12.2ch.net/test/read.cgi/tech/1279286575/135
# 入力したDNA塩基配列中にある塩基 t, c, a, gそれぞれの個数をカウントするプログラムを作成せよ.
#
# 【実行例】
# % ./a.out
# tataatccg ← 入力し,リターンを押して ^D
# Thymine (t) : 3
# Cytosine (c) : 2
# Adenine (a) : 3
# Guanine (g) : 1
# %

429デフォルトの名無しさん:2010/07/24(土) 14:43:21
http://pc12.2ch.net/test/read.cgi/tech/1279286575/136
#
# それから、禁煙区画(あるいは喫煙区画)が窓側又は通路側ともに満席のときには喫煙区画(禁煙区画)でも良いかどうか乗客に尋ねなければならない。
# 乗客がOKすれば(窓側/通路側の希望はできるだけ尊重した上で)空いている座席を割り当て搭乗券を出力し、しなければ「3時間後に次のフライトがあります。」というメッセージを出力して終了する。
430デフォルトの名無しさん:2010/07/24(土) 14:46:30
>>350
使用言語:J

g=:monad def :'1,.(|."0 1(2&+))i.<:y'
h=:monad def :',<"1|:({.,:|.@{:)(--:#y)[\y'
f=:monad def :'1|.h"1 g y'

f 6
+---+---+---+
|1 2|3 6|4 5|
+---+---+---+
|1 3|4 2|5 6|
+---+---+---+
|1 4|5 3|6 2|
+---+---+---+
|1 5|6 4|2 3|
+---+---+---+
|1 6|2 5|3 4|
+---+---+---+
431デフォルトの名無しさん:2010/07/24(土) 16:12:49
http://pc12.2ch.net/test/read.cgi/tech/1279286575/408
# [2] 問題文(含コード&リンク):自動座席予約システムの作成せよ。
# その航空会社が持っている小型航空機(座席数:24)のフライトに座席を割り当てるシステムをプログラミングしなければならない。
# この航空機の座席は中央に通路を挟み左右にそれぞれ2座席ずつの列が計6列ある。
# 座席は 1A, 1B, 1C, 1D, ..., 6A, 6B, 6C, 6D で表示され, 1, 2列目が喫煙区画で,A, D が窓側, B, C が通路側を示している。
# このプログラムはまず最初に次の選択メニューを表示する。
#
# 喫煙席を希望する方は ● をタイプしてください.
#
# 禁煙席を希望する方は × をタイプしてください.
#
# 喫煙/禁煙の選択が終わると, 窓側か通路側かの選択を求める。
#
# 窓側を希望する方は ! をタイプしてください.
# 通路側を希望する方は # をタイプしてください.
# もし希望に沿える席がすべて予約済みで割り当てられないときには, 窓側/通路側の希望については無視して割り当てる。
# ただし, 「窓側(あるいは通路側)はすでに満席のため通路側(窓側)で予約します」というメッセージを出力し, 以下の
# ように座席番号と喫煙席/禁煙席の区分が書かれた搭乗券を(この課題では画面上に)出力する。
# --------
# 4A 禁煙
# --------
# また, 禁煙区画(あるいは喫煙区画)が窓側/通路側ともに満席のときには喫煙区画(禁煙区画)でも良いかどうか乗客に尋ねなければならない。
# 乗客がOKすれば(窓側/通路側の希望はできるだけ尊重した上で)空いている座席を割り当て搭乗券を出力し, OKしなければ
# 「3時間後に次のフライトがあります.」というメッセージを出力して終了する。
432デフォルトの名無しさん:2010/07/24(土) 16:17:31
http://pc12.2ch.net/test/read.cgi/tech/1279286575/141
# [1] 授業単元:プログラミング基礎I
# [2] 問題文(含コード&リンク):
# 発展課題 13..3
# 発展課題13.2を基に,「振込み」の機能を実現せよ.
# 具体的には,利用者の口座番号・暗証番号・振込額の指定と確認,振込先の口座番号の指定と確認,両者の預金残高の更新をするプログラムを作成せよ.
# なお,以下の例では省略するが,口座番号や暗証番号を間違った場合のチェックや,預金額が不足する場合のチェックもすること.
# % ./transfer
# [0]終了 [1]残高表示 [2]引出し [3]振込み: 3
# 口座番号を入力してください: 9012
# 暗証番号を入力してください: 0123
# 振込先の口座番号を入力してください: 1000
# 口座番号をご確認ください. ← 存在しない
# 口座番号を入力してください: 9012
# 暗証番号を入力してください: 0123
# 振込先の口座番号を入力してください: 5678
# 振込み額を入力してください: 30000
# 野路花子 様に 30000 円振り込みました.
# ありがとうございました.残高は 508600 円です.
# [0]終了 [1]残高表示 [2]引出し [3]振込み: ← 始めに戻る
#
# 振り込まれた先の口座の金額が増えていることを、デバッガで確認せよ。この例では
、「野路花子」の残高は 1017600 円のはずである。
433デフォルトの名無しさん:2010/07/24(土) 16:20:05
http://pc12.2ch.net/test/read.cgi/tech/1279286575/149
# [1] 授業単元:プログラミング基礎I
# [2] 問題文(含コード&リンク):
# ../test/read.cgi/tech/1279286575/141 を基に 口座を表現した構造体を struct accountとする。以下の関数を作成し、発展課題 13.3と同じ機能をもつプログラムを作成せよ。
#
# 指定された口座番号に対応する口座情報を探索する関数
# struct account *search_account(int id)
#
# 指定された口座番号に相当する講座がないとき、この関数は NULL を返すものとする。
#
# 口座内容を印字する関数
# void print_account(struct account *account)
#
# 振込み元の講座から振込先の口座へ指定された金額だけ振り込む関数
# int transfer(struct account *from, struct account *to, int amount)
#
# この関数は成功した場合1を、失敗した場合は負の整数を返すものとする.
#
# これらの関数の中では printf() や fgets() などの入出力関数は用いないようにせよ。

434デフォルトの名無しさん:2010/07/24(土) 16:41:09
http://pc12.2ch.net/test/read.cgi/tech/1279286575/153
# [1] 授業単元:プログラミング基礎I
# [2] 問題文(含コード&リンク):
# name(名前: char型配列), height(身長: float型変数), bloodType(血液型: char型変数)をメンバに持つ構造体を宣言し, 128名分が記憶可能になるようその構造体の配列を定義せよ.また,その配列に対して値を入力し,
# さらに表示できるようにせよ.構造体のメンバ値を表示するには、ひとつの構造体の各メンバの値を表示する関数を作成すること。
# % ./bodyData
# 1人目のデータ: 立命太郎 175.5 A
# 2人目のデータ: 野路花子 169.0 B
# 3人目のデータ: 衣笠一郎 180.4 O
# 4人目のデータ: 0 0 0 ← 0 0 0 と入力すると終わる.
# 名前 身長 血液型
# 立命太郎 175.5 A
# 野路花子 169.0 B
# 衣笠一郎 180.4 O
# %
# ヒント: 各人の名前、身長、血液型のデータを1行で入力するためには、参考12.1に示されたfgets()関数で、これらを1度に取り込み、最初の空白までを名前とみなし、次の空白までを身長とみなし、次に改行までを血液型をみなせばよい。これらを別々の文字列として、
# 必要に応じて整数や浮動小数点数に変換し、構造体のメンバに設定すること。
#
# ヒント: ひとつの構造体の各メンバの値を表示する関数に構造体を引渡すことを繰り返えせばよい。
435デフォルトの名無しさん:2010/07/24(土) 16:42:21
http://pc12.2ch.net/test/read.cgi/tech/1279286575/154
# [1] 授業単元:プログラミング基礎I
# [2] 問題文(含コード&リンク):
# ../test/read.cgi/tech/1279286575/153を基にデータを身長の高い順に出力するよう変更せよ.
# % ./orderByHeight
# … ← 入力は前課題と同じなので省略.
# 名前 身長 血液型
# 衣笠一郎 180.4 O
# 立命太郎 175.5 A
# 野路花子 169.0 B
# %
#


436デフォルトの名無しさん:2010/07/24(土) 16:43:55
http://pc12.2ch.net/test/read.cgi/tech/1279286575/156
# [1] 授業単元:プログラミング基礎I
# [2] 問題文(含コード&リンク):
# 入力したDNA塩基配列中に,atgという並びがいくつあるか調べるプログラムを作成せよ.但し,入力には t, c, a, g以外の文字も入っている.塩基以外の文字は無視すること.
#
# 【実行例】
# % ./a.out
# 1gattatgtga
# 11tgccgatatc
# 21gatatgattc
# (ここで ^D を押す)
# #ATG is 3
# %

437デフォルトの名無しさん:2010/07/24(土) 16:45:00
http://pc12.2ch.net/test/read.cgi/tech/1279286575/157
# [1] 授業単元:プログラミング基礎I
# [2] 問題文(含コード&リンク):
# 入力したDNA塩基配列中にある塩基 t, c, a, gそれぞれの個数をカウントするプログラムを作成せよ.
#
# 【実行例】
# % ./a.out
# tataatccg ← 入力し,リターンを押して ^D
# Thymine (t) : 3
# Cytosine (c) : 2
# Adenine (a) : 3
# Guanine (g) : 1
# %

438デフォルトの名無しさん:2010/07/24(土) 16:46:14
http://pc12.2ch.net/test/read.cgi/tech/1279286575/166
# [1] 授業単元:プログラミング基礎I
# [2] 問題文(含コード&リンク):
# 配列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}となるようにせよ.
#

439デフォルトの名無しさん:2010/07/24(土) 16:47:30
http://pc12.2ch.net/test/read.cgi/tech/1279286575/174
# [1] 授業単元:C++基礎
# [2] 問題文(含コード&リンク):
# 基底クラスとして Shape、その派生クラスとして Rectangle (正方形)を定義し、
# 正四角形の辺の長さの合計と面積を計算する。
#

440デフォルトの名無しさん:2010/07/24(土) 16:49:39
ttp://pc12.2ch.net/test/read.cgi/tech/1279286575/188
# 1] 授業単元:プログラミング基礎I
# [2] 問題文(含コード&リンク):
# n個の実数(double型)を配列に読み込んだ後,配列を指すポインタを用いて,最大値と最小値を探索するプログラムを作成せよ.また,入力した値の平均値もポインタ変数を用いて計算せよ.
#
441デフォルトの名無しさん:2010/07/24(土) 16:50:50
http://pc12.2ch.net/test/read.cgi/tech/1279286575/193
# [1] 授業単元:アルゴリズム
# [2] 問題文(含コード&リンク):
# 文字列sの中の文字の順番を逆にコピーした文字列dを作るc言語の関数str_revcopy(d,s)を書け。
# 関数の返す値はコピーをした先のdとする。
# ただし文字列sを逆順にコピーするのに十分な記憶領域があらかじめ確保されていて、その先頭がdで指されていると仮定する。
# さらに、dとsの記憶領域には重なりがないとする。例えば
# str_revcopy(d,"ABCDE")は文字列"EDCBA"を返し、
# str_revcopy(d,"This is a pen")は文字列".nep a si sihT"を返し、
# str_revcopy(d,"")は文字列""を返す。
#

442デフォルトの名無しさん:2010/07/24(土) 16:52:26
http://pc12.2ch.net/test/read.cgi/tech/1267796762/328
# 【 課題 】受験人数( 1〜9人)をキー入力し、その人数個々にランダムな得点(0〜50点)を付与し、
#       採点一覧表をグラフに表示する。
#       なお、受験者は「受験者A」、「受験者B」・・・「受験者I」とする。
#        一番上のタイトルには採点結果一覧表と表示されていています。
#       点数表示はアスタリスクで、10点ずつのところが*になってます。
# もう訳がわからなくて焦っています。よろしくお願いします。
443デフォルトの名無しさん:2010/07/24(土) 16:55:03
http://pc12.2ch.net/test/read.cgi/tech/1267796762/331
# 【 課題 】ババ抜きプログラム
# ・52枚+ジョーカーを4人に均等に配り分ける。ジョーカーはランダムで誰かに入るようにする。
#       ・コンソール上においてキーボードで動かせるPlayerと、プログラムにより
#        自動で動くA,B,Cの対戦相手を用意。
#       ・手札に同じ数字が揃えば、2枚とも捨てる。
#       ・順番はI,A,B,Cとし、A,B,Cがカードを引く時はランダムに引くこととする。
#       ・Playerの手持ちは、各数字で表し、A,B,Cの残り手持ちは記号等で何枚あるか表示できる。
#        例)Playerの手持ち:A,2,7,10,Q
#        例)Aの手持ち:*****(5)
#       ・ A,B,Cは自分の手札から引かれる前に自動的にシャッフルする。
#       ・Playerの手札はシャッフルするかしないかを選択できる。
#        例)1,シャッフルする 2,シャッフルしない:(キーボードからの入力
#       ・一人でも上がればゲームを終了とし、勝利者と、最初に捨てられたカードの枚数、
#        4人がカードを引いた合計数を表示する。
#
#       *Playerが引く時の例
#        例)左から?番目を引く:(キーボードからの入力)
444デフォルトの名無しさん:2010/07/24(土) 16:58:10
http://pc12.2ch.net/test/read.cgi/tech/1279286575/199
# [1] 授業単元:C++基礎
# [2] 問題文(含コード&リンク):
# n個の実数(double型)を配列に読み込んだ後,配列を指すポインタを用いて,最大値と最小値を探索するプログラムを作成せよ.
# また,入力した値の平均値もポインタ変数を用いて計算せよ

445デフォルトの名無しさん:2010/07/24(土) 16:59:02
http://pc12.2ch.net/test/read.cgi/tech/1279286575/200
# [1] 授業単元:プログラミング基礎I
# [2] 問題文(含コード&リンク):
# 配列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}となるようにせよ.

446デフォルトの名無しさん:2010/07/24(土) 17:00:19
http://pc12.2ch.net/test/read.cgi/tech/1279286575/205
# 1] 授業単元: C言語プログラミング
# [2] 問題文(含コード&リンク):
# 一行ごとにテキストファイル名が無限に書いてあるテキストファイルがある。
# このファイルを読みだして書いてあるファイル名のファイル内容をすべて表示するプログラムを作れ
# 一行ごとに書いてあるファイルの最後は改行で終わっているものとする。
#

447デフォルトの名無しさん:2010/07/24(土) 17:45:30
http://pc12.2ch.net/test/read.cgi/tech/1279286575/221
# 1] 授業単元: C言語プログラミング
# [2] 問題コード
# 秒数を与えると,それが何時間何分何秒にあたるかを計算する関数 void calctime(int sec, int *hp, int *mp, int *sp); を作れ.たとえば calctime(3725, &h, &m, &s); として呼び出すと h = 1, m = 2, s = 5 となる.但し,1時間2分5秒は3725秒である.
#

448デフォルトの名無しさん:2010/07/24(土) 17:46:53
http://pc12.2ch.net/test/read.cgi/tech/1279286575/225
# 1] 授業単元: C言語プログラミング
# [2] 問題コード
#
# 三角形の3頂点の座標,(x1,y1),(x2,y2),(x3,y3)を読み込んで 3つの内角の角度θ1,θ2,θ3をdeg単位(°)で計算し,印字するプログラムを作成せよ.
# 但し,double型変数 θ1,θ2,θ3へのポインタ変数とdouble型変数 x1,y1,x2,y2,x3,y3を引数とする関数を作成し,main関数では同関数を呼び出すようにせよ
449デフォルトの名無しさん:2010/07/24(土) 17:47:57
http://pc12.2ch.net/test/read.cgi/tech/1279286575/226
# それから、禁煙区画(あるいは喫煙区画)が窓側又は通路側ともに満席のときには喫煙区画(禁煙区画)でも良いかどうか乗客に尋ねなければならない。
# 乗客がOKすれば(窓側/通路側の希望はできるだけ尊重した上で)空いている座席を割り当て搭乗券を出力し、しなければ「3時間後に次のフライトがあります。」というメッセージを出力して終了する。
#
450デフォルトの名無しさん:2010/07/24(土) 17:49:05
http://pc12.2ch.net/test/read.cgi/tech/1279286575/231
# 1] 授業単元: C言語プログラミング
# [2] 問題コード
#
# 人数nを読み込んだ後,n個のfloat型配列を動的に確保し,配列に身長のデータを読み込んでいき,
# 入力された身長を10cmごとにわけたヒストグラムを生成するプログラムを作成せよ.
# 但し,nの読み込みとn個の動的メモリ確保はmain関数内で行い,身長の読み込み及び,印字する部分は関数として作成せよ.
#

451デフォルトの名無しさん:2010/07/24(土) 17:50:22
言語プログラミング
# [2] 問題コード
# nを読み込み,n個のint型配列を動的に確保,n個の配列はn人の勇者とする.以下仕様に従ったプログラムを作成せよ.
#
# •それぞれの勇者にヒットポイントを与える.
# •敵のヒットポイントを与える.
# •乱数を発生し,誰の攻撃かを決定する.
# •攻撃をする際に,会心の一撃,普通の攻撃,ミスを乱数で決定する.
# •相手に与えるダメージを乱数で決定する.
# •敵の攻撃の場合,何人にどれだけ攻撃をするかを乱数で決定する.
# •敵のヒットポイントが無くなるか,勇者が全滅したら終了とする
#
#

452デフォルトの名無しさん:2010/07/24(土) 17:52:23
http://pc12.2ch.net/test/read.cgi/tech/1279286575/251
# [1] 授業単元: C言語プログラミング
# [2] 問題コード
# nを読み込み,n個のint型配列を動的に確保し, n回サイコロを振った結果をその配列に格納せよ.
# その後,偶数が出た回数と奇数が出た回数,1から6までの出た目の確率を表示せよ.但し,nの読み込みとn個の動的メモリ確保はmain関数内で行い,サイコロの配列読み込み部分と計算の部分,表示の部分はそれぞれ関数として作成せよ.
#
453デフォルトの名無しさん:2010/07/24(土) 17:53:32
http://pc12.2ch.net/test/read.cgi/tech/1279286575/258
# [1] 授業単元: 情報処理(C言語)
# [2] 問題文:1+2+3+4+5+6…というように足していき、
# その累計がはじめて一万を超える時の値を求めるプログラムを作成せよ。
#

454デフォルトの名無しさん:2010/07/24(土) 17:55:01
http://pc12.2ch.net/test/read.cgi/tech/1267796762/346
# 明日までの宿題なんですがどうしても、できそうにありません
# 丸投げしますのでお願いします
# 【 課題 】
# 電車の券売機シュミレーションプログラム
# Mainクラスで投入金額を入力する
# Machineクラス購入可能切符の中から購入する切符を選択させる
# Ticketクラスで入金額による購入可能切符を出力
# Safeクラスでおつり金種枚数計算(1000円・500円・100円・50円・10円は初期設定で100枚ずつ用意しておく)
# おつりの枚数を初期値より減らす
# Mainで最後にお釣り金額&各枚数
# 購入金額切符を出力して終了
# Main以外のクラスはすべてパッケージ化する
#

455デフォルトの名無しさん:2010/07/24(土) 17:57:26
http://pc12.2ch.net/test/read.cgi/tech/1276810079/953
#
# [1] 授業単元: 解析入門
#
# [2] 問題文(含コード&リンク):
# オイラー法、2次のルンゲクッタ法をそれぞれ用いて、以下の1階常微分方程式の初期値問題を解き、
# 解析解と同じグラフに表示せよ。
# (横軸x/縦軸y)
#
# dy(x) / dx = y (0 <= x <= 3) 初期条件:y(0)=1
# (1)Delta x = 0.1
# (2)Delta x = 0.3
#
456デフォルトの名無しさん:2010/07/24(土) 17:58:31
http://pc12.2ch.net/test/read.cgi/tech/1279286575/273
# [1] 授業単元:プログラミング?
# [2] 問題文(含コード&リンク):以下に示す2つのプログラムを作成せよ
#               1)文字配列の文字列の順序を逆にする関数toReverseを作成せよ。
#                 また、関数toReverseを用いて入力した文字列の順序を逆にした
#                 文字列を表示するプログラムを作成せよ。
#                 void toReverse(char[]); とする
#                 実行例:abcde
# edcba
#
# 2)文字配列の文字列に含まれる小文字を大文字にする関数toUpperを作成し、
#                  入力した文字列の小文字を大文字に変換して表示するプログラムを作成せよ。
#                 実行例:This is a pen.
# THIS IS A PEN.
#
457デフォルトの名無しさん:2010/07/24(土) 18:00:34
>>448
使用言語:J

calctime=: 24 60 60 & #:

calctime 3725
1 2 5
458デフォルトの名無しさん:2010/07/24(土) 18:00:45
http://pc12.2ch.net/test/read.cgi/tech/1279286575/285
# C言語で以下の機能をもつプログラムを作りなさい
# ?12ヶ月分の平均気温が入力できる
# ?入力された月ごとの気温の小数点以下は四捨五入し、その数だけ横に*を並べていくことで気温の推移を視覚化できる
# ?年間平均気温、最高気温、最低気温を計算し、出力できる
#
# C言語自体さっぱりわかりません どなたかよろしくお願いします。
#

459デフォルトの名無しさん:2010/07/24(土) 18:02:07
http://pc12.2ch.net/test/read.cgi/tech/1279286575/314
# [1] 授業単元: 情報処理(C言語)
# [2] 問題文:幅wと高さhを入力し、次のような長方形を
# 表示するプログラムを作成せよ。
# w=7
# h=5
# *******
# *_____*
# *_____*
# *_____*
# *******
# _はスペースです。この掲示板だとずれるのでこのように表記しました。
# 条件として、この処理には繰り返し処理を用いてつくること。
#

460デフォルトの名無しさん:2010/07/24(土) 18:03:15
http://pc12.2ch.net/test/read.cgi/tech/1279286575/318
# 1] 授業単元: C言語プログラミング
# [2] 問題コード
# キーボードから入力した文字列をファイルに書き出すプログラムを作成せよ.
#
# 【実行例】
#
# % ./a.out
# Ikuno
# Soichiro
# Hello World!
# ^D
#
# % cat hoge.txt
# Ikuno
# Soichiro
# Hello World!
#

461デフォルトの名無しさん:2010/07/24(土) 18:04:21
http://pc12.2ch.net/test/read.cgi/tech/1279286575/324
# [1] 授業単元: 情報処理(C言語)
# [2] 問題文:入力した整数を因数分解してその値を全て表示するプログラムを作成せよ。
# ただし、入力した整数が2未満の場合は「2以上の整数を入力してください。」と表示させること。
# 例:整数値42を入力→表示2 3 7
#   整数値340を入力→表示2 2 5 17

462デフォルトの名無しさん:2010/07/24(土) 18:05:26
http://pc12.2ch.net/test/read.cgi/tech/1267796762/353
# 【 課題 】
# 1. アルファベット(a〜z)までの出現個数を数える。なお,大文字は小文字に変えて,数える。もし,出現個数が0個の場合は,出力しない。
#
# 2. 1つの単語を入力すると,1文字目の大文字に,それ以外を小文字に変換して,出力する。 例 kyoto→Kyoto 複数行の入力できるようにして,!記号を入れると,入力が終わるようにする。
#
# 3. 各単語の1文字目を大文字に,2文字目以降を小文字に変換する。 例 Once upon a time ・・・ → Once Upon A Time ・・・
#

463デフォルトの名無しさん:2010/07/24(土) 18:06:28
http://pc12.2ch.net/test/read.cgi/tech/1279286575/333
# [1] 授業単元: 情報基礎
# [2] 問題文(含コード&リンク): http://ime.nu/codepad.org/FIMXj8NN
#     文字列中の文字の出現数を数えて表示するプログラム(count-char.c)*上のリンク*を完成しなさい
#     ただしすべての文字の出現回数を表示すること。
#

464デフォルトの名無しさん:2010/07/24(土) 18:08:20
http://pc12.2ch.net/test/read.cgi/tech/1279286575/334
# [1] 授業単元: 情報(C++)
# [2] 問題文:2つの値 x と y の差を(非負の整数として)返す関数形式マクロ diff(x, y) を定義し, main関数で
# 4つの整数 a, b, c, d をキーボードから読み込み, diff(a, b) * diff(c, d) を出力するようなプログラムを作成せよ。
# また, 出力結果が正しいことを確認するため, 関数として diff2(x, y) も作成し,結果が同じになることを同じソースコード内で確認できるようにしなさい。
465デフォルトの名無しさん:2010/07/24(土) 18:09:12
http://pc12.2ch.net/test/read.cgi/tech/1279286575/348
# [1] 授業単元: 情報処理(C言語)
# [2] 問題文:関数y=-X二乗+2X+5におけるXとYの対応表を出力するプログラムを作成せよ。
# ただし(-2<= X <=4)の範囲でXの値が整数の出力すること。
# 縦方向、横方向2パターン作成せよ。
#
# 縦方向の表示結果の例
# X | Y
# ---+---
# -2 |-3
# -1 | 2
# 0 | 5
# 1 | 6
# 2 | 5
# 3 | 2
# 4 |-3
#
# 横方向の表示結果の例
# X| -2 -1 0 1 2 3 4
# --+---------------------
# Y| -3 2 5 6 5 2 -3
#
466デフォルトの名無しさん:2010/07/24(土) 18:10:16
http://pc12.2ch.net/test/read.cgi/tech/1279286575/358
# [1] 授業単元:プログラミング
# [2] 問題文(含コード&リンク):入力ファイルと出力ファイル名をコマンドラインから入力してコピーするプログラムを作成せよ。
#

467デフォルトの名無しさん:2010/07/24(土) 18:11:23
>>466
% Prolog

program :-
    入力ファイルと出力ファイル名をコマンドラインから入力してコピーする.

入力ファイルと出力ファイル名をコマンドラインから入力してコピーする :-
    user_parameters([_入力ファイル,_出力ファイル]),
    open(_入力ファイル,read,Input,[type(binary)]),
    open(_出力ファイル,write,Output,[type(binary)]),
    コピーする(Input,Output),
    close(Output),
    close(Input).

コピーする(Input,Output) :- 終了(Input),!.
コピーする(Input,Output) :-
    get_byte(Input,C),
    put_byte(Output,C),
    コピーする(Input,Output).

終了(Stream) :- at_end_of_stream(Stream).
468デフォルトの名無しさん:2010/07/24(土) 18:14:23
http://pc12.2ch.net/test/read.cgi/tech/1279286575/400
# [1] 授業単元:プログラミング
# [2] 問題文(含コード&リンク):モンテカルロシミュレータにより円周率の計算をするプログラムを作成せよ
#

469デフォルトの名無しさん:2010/07/24(土) 20:17:40
http://pc12.2ch.net/test/read.cgi/tech/1267796762/367
# 組織のある部門にある能力を持つ人間を追加したり削除したりすることで,その組織全体もしくは部分的な部門の能力を計算するシステムを構築せよ.
# このシステムによって,組織内のニーズにあった人員配置を行なう支援をできると期待できる.
# 基本的にこのシステムは以下の機能を最低限有しなければならない.
#
# 1. 登録すべき部門や副部門を指定する.
# 2. 人物の名前(文字列),資格数(整数),勤務経験年数(整数),年齢を入力する.
# 3. もし,既に十分な人数がシステムに登録済の場合,そのデータと,前段階で入力された資格数,勤務経験年数,年齢に基づき,この人物の能力の値(high, middle or low)をシステムが予測し表示する.
# 4. システム(プログラム)を停止した際,現在,保持しているデータを保存できる.
# 5. システム(プログラム)を起動した際,既存のデータがあれば,それを読み込める.
#
# 単純化のため,能力は人物,組織どちらも金額(円)で表現されているとする.
# 人物も単純化のため,その氏名で区別することとし,同一氏名の人物は組織に追加できなくてもよい.
# 組織の中にある部門は階層的な構造となっており,その階層の深さは均一でない.
# 例えば「/秘書課/」という部門は組織の直下に位置するが,「/営業部/関東営業部/」,「/開発部/半導体課/」,「/研究部/先端科学課/タイムマシン開発グループ/」等2もしは3階層の場合もある.
尚,階層の深さ制限は無いものとする.
# ある部門の下に人物と副部門が同時に配置される場合もある.
# 例えば,営業部部長の田中さんは「/営業部/田中」と表現できるが,関東営業部に属
する山田さんは,「/営業部/関東営業部/山田」となる.
# 尚,本システムでは日本語名は扱えなくてもよい.
470デフォルトの名無しさん:2010/07/24(土) 20:21:46
http://pc12.2ch.net/test/read.cgi/tech/1267796762/374
# 【 課題 】 コマンドラインからファイル名を受け取り、拡張子が txt の場合は内容を表示し、
# txt でない場合はファイル情報を表示しなさい。また、コマンドラインからファイル名が与えられなかった場合には
# FileChooser を使ってファイル名を自由に取得できるようにしなさい。
# 【 補足 】.txtという拡張子の時でもFileChooserが動いてしまうので、
# それをどうにか直したいのですが、うまくいきません。
# 以下がソースです。
# http://ime.nu/www.geocities.jp/lang_lang_true/ss.txt
#

471デフォルトの名無しさん:2010/07/24(土) 20:27:07
http://pc12.2ch.net/test/read.cgi/tech/1279286575/408
# [2] 問題文(含コード&リンク):自動座席予約システムの作成せよ。
# その航空会社が持っている小型航空機(座席数:24)のフライトに座席を割り当てるシステムをプログラミングしなければならない。
# この航空機の座席は中央に通路を挟み左右にそれぞれ2座席ずつの列が計6列ある。
# 座席は 1A, 1B, 1C, 1D, ..., 6A, 6B, 6C, 6D で表示され, 1, 2列目が喫煙区画で,A, D が窓側, B, C が通路側を示している。
# このプログラムはまず最初に次の選択メニューを表示する。
# 喫煙席を希望する方は ● をタイプしてください.
# 禁煙席を希望する方は × をタイプしてください.
# 喫煙/禁煙の選択が終わると, 窓側か通路側かの選択を求める。
# 窓側を希望する方は ! をタイプしてください.
# 通路側を希望する方は # をタイプしてください.
# もし希望に沿える席がすべて予約済みで割り当てられないときには, 窓側/通路側の希望については無視して割り当てる。
# ただし, 「窓側(あるいは通路側)はすでに満席のため通路側(窓側)で予約します」というメッセージを出力し, 以下の
# ように座席番号と喫煙席/禁煙席の区分が書かれた搭乗券を(この課題では画面上に)出力する。
# --------
# 4A 禁煙
# --------
# また, 禁煙区画(あるいは喫煙区画)が窓側/通路側ともに満席のときには喫煙区画(禁煙区画)でも良いかどうか乗客に尋ねなければならない。
# 乗客がOKすれば(窓側/通路側の希望はできるだけ尊重した上で)空いている座席を割り当て搭乗券を出力し, OKしなければ
# 「3時間後に次のフライトがあります.」というメッセージを出力して終了する。
472デフォルトの名無しさん:2010/07/25(日) 04:54:49
http://pc12.2ch.net/test/read.cgi/tech/1279286575/433
# [1] 授業単元:ビジュアルプログラミング
# [2] 問題文:
# -0.0001<x<10.0000、0.0<y<10.0000の範囲で
# ランダムに(x,y)の値を1000個発生させ.
# 散布図のグラフで表示するプログラムを作成せよ
# ヒント:WIN32API関数群についてよく調べること
#

473デフォルトの名無しさん:2010/07/25(日) 04:58:15
http://pc11.2ch.net/test/read.cgi/db/1274791771/311
#
# テーブルAとテーブルBがあり、
# テーブルAには、1〜1000万までの連番を格納しています。連番はキーです。
# テーブルBの方には、その連番の開始値と連番数が格納されています。
#
# 開始値 | 連番数
# ---------------
#   1001 | 100   ←1001から1100までの意味
#   5001 | 100   ←5001から5100までの意味
#   9001 | 100   ←9001から9100までの意味
#
# テーブルBで指定されている連番に一致するレコードを
# テーブルAから取得するにはどのように書けばよいでしょうか。
# 上記の例だと300件取得する形になりますが、
# テーブルBにも1万件程度のレコードがあります。
474デフォルトの名無しさん:2010/07/25(日) 17:34:14
>>459
使用言語:J

f=:dyad define
c=.'*'
c,.(c,(((x, y)-2)$'_'),c),.c
)

4 f 7
*******
*_____*
*_____*
*******
475デフォルトの名無しさん:2010/07/29(木) 14:46:30
Drschemeでの課題です。
「フィボナッチ数列を返すfibsを作りなさい。ただし引数として項の値の上限limitを与えるものとする。
たとえば項の上限を100とすると
(fibs 100)→(1 1 2 3 5 8 13 21 34 55 89)」

(define (fibs limit)
(fibs2 1 1 limit))
(define (fibs2 a b limit)
(空欄  (fibs(?) b (+ a b) limit)

ここまでは先生が教えてくれました。
他にもやりかたがあるらしいのですが、
これが一番処理が早いそうです。
空欄の所を埋めればできると先生が言ってました。
たぶんfilter関数を使うんじゃないかなと思ってます。
あともしかしたら(?)の部分は先生の間違いじゃないかなと思ってます。
どなたかお願いします。
476デフォルトの名無しさん:2010/08/14(土) 20:35:35
Prologの解答アーカイブであるhttp://nojiriko.asia/prolog/サイトのIPアドレスが
変更になっています。今後アクセスは219.165.50.177ではなく上記ドメイン表記で
お願いします。
またこのサイトそのものではありませんが、ほぼ完全にコピーされた
anonymous ftpサイトを用意しました。ftp://nojiriko.asia/prolog/以下で
アクセスできるはずです。
ところで、私は先月から、コピーしての出題、Prologによる解答ともに停止しています。
これは、大量に出題、解答しようとすると、どうしてもアクセス規制がかかって
しまって、どう工夫しても結果として連続投稿になったりして動きが取れなくなった
からです。
しばらくは、上記のアーカイブサイトでの解答の追加や、機能別索引の整備を
進めたいと思っています。
477デフォルトの名無しさん:2010/09/07(火) 20:39:13
478デフォルトの名無しさん:2010/09/07(火) 21:13:29
>>477
明日までにお願いします。
479デフォルトの名無しさん:2010/09/07(火) 21:21:28
マジレスしてるひとがいてわろす
480デフォルトの名無しさん:2010/09/22(水) 04:03:17
http://hibari.2ch.net/test/read.cgi/tech/1284632294/276
#  [1] 授業単元:ネットワーク演習
#  [2] 問題文(含コード&リンク):
#  インターフェース"eth1"からipv6マルチキャストパケットを受信し、そのパケットをipv6ユニキャストパケット(アドレスは適当でよい)
#  に変換してインターフェース"eth3"から送信せよ
#
481デフォルトの名無しさん:2010/09/22(水) 06:03:25
http://hibari.2ch.net/test/read.cgi/db/1274791771/443
#  ひとつのテーブルで各レコードは他のレコードと1:Nの親子関係にあります
#  コード  親コード データ
#  1     1     A
#  2     1     B
#  3     2     C
#  4     3     D
#  5     1     E
#  6     2     F
#
#  まあこんな感じで1以外は全部親を1つ持ち親はひとつ以上の子を持ちます(子が無い親も居ますが)
#  これである親の子レコード以下を下記のような感じで全部抽出したいのでが
#  SQLだけで出来ますでしょうか
#
#  コード=2のときの抽出結果
#  コード データ 世代
#  3    C    1
#  4    D    2
#  6    F    1
#
#  世代は2から何世代下にいるかです、子なら1孫なら2…ということです
#
#  また無理ならこうゆうことを可能にするデータ構造を教えてください
#  DBはFireBird1.5を想定していますがフリーのDBなら何でも良いです
#
482デフォルトの名無しさん:2010/09/22(水) 06:20:46
>>479 全部本気w
483デフォルトの名無しさん:2010/09/22(水) 06:22:12
>>481
% Prolog

ある親の子孫を世代番号付きですべて調べる(_親番号,_コード,_データ,_世代) :-
    子孫(_親番号,_コード,_データ,_世代).

子孫(_親,_子,_データ,1) :- テーブル(_子,_親,_データ).
子孫(A,B,_データ,_世代) :-
    テーブル(C,A,_),
    子孫(C,B,_データ,_世代の二),
    _世代 is _世代の二 + 1.

484デフォルトの名無しさん:2010/10/01(金) 18:32:05
http://hibari.2ch.net/test/read.cgi/tech/1284632294/479
# [1] 授業単元: プログラミング基礎
# [2] 問題文(含コード&リンク):
# 適正なおつりを出すプログラムを作成しなさい
# 例として次のようにすること
# 金額を入力してください。
# 12345
# 一万円:1枚
# 五千円:0枚
#  千円:2枚
# 五百円:0枚
#  百円:3枚
# 五十円:0枚
#  十円:4枚
#  五円:1枚
#  一円:0枚
#
485デフォルトの名無しさん:2010/10/01(金) 18:40:36
486デフォルトの名無しさん:2010/10/02(土) 13:50:54
>>484
使用言語:J

a=:10000 5000 1000 500 100 50 10 5 1
b=:,;._1',一万,五千, 千,五百, 百,五十, 十, 五, 一'
f=:}:@;@(((}:@>@{.,({.@>@}.)#:{:@>@{.);}.@>@{:)^:(#@>@}.))
g=:3 :'(b,"1''円:''),.(":,.f y;a),"1''枚'''

g 12345
一万円:1枚
五千円:0枚
 千円:2枚
五百円:0枚
 百円:3枚
五十円:0枚
 十円:4枚
 五円:1枚
 一円:0枚
487デフォルトの名無しさん:2010/10/06(水) 07:06:14
http://hibari.2ch.net/test/read.cgi/tech/1284632294/586
# [1] 授業単元: 画像処理
# [2] 問題文(含コード&リンク):
# N×Nのbitmap画像を
# AB
# CD
# のように4等分し、
# DC
# BA
# と並び替えるプログラム
#

488デフォルトの名無しさん:2010/10/06(水) 07:16:44
>>487 変なオマケが付いていた。
http://hibari.2ch.net/test/read.cgi/tech/1284632294/586
# [1] 授業単元: 画像処理
# [2] 問題文(含コード&リンク):
# N×Nのbitmap画像を
# AB
# CD
# のように4等分し、
# DC
# BA
# と並び替えるプログラム
#
# [5] その他の制限: 並び替え前後どちらも1次元配列、左下原点(in[0])でお願いします。
489デフォルトの名無しさん:2010/10/06(水) 16:18:42
>>488
% Prolog ならびの要素は画素であるとした。

左下を原点として一次元のならびで表現された画像の区画変換(N,_原画像,_並び替えた画像) :-
    Len1 is N // 2,
    findall([_区画番号,_行単位の区画],member_L(1,_区画番号,Len1,_行単位の区画,_原画像),LL),
    区画要素のみ取り出す(4,LL,LL4),
    区画要素のみ取り出す(3,LL,LL3),
    区画要素のみ取り出す(1,LL,LL1),
    区画要素のみ取り出す(2,LL,LL2),
    一次元ならびの写像(LL4,LL3,Y),
    一時元ならびの写像(LL1,LL2,Z),
    append(Y,Z,_並び替えた画像).

一次元ならびの写像([],[],[]) :- !.
一次元ならびの写像([L1|R1],[L2|R2],[L3|R3]) :- append(L1,L2,L3),一次元ならびの写像(R1,R2,R3).

区画の要素のみ取り出す(_初期区画番号,LL,X) :- findall(L,member([_初期区画番号,L],LL),X).

member_L(M,M,N,Lx,L) :-
    length(Lx,N),
    append(Lx,R,L).
member_L(4,M,N,Lx,L) :-
    length(L1,N),
    append(L1,R,L),
    member_L(1,M,N,Lx,R),!.
member_L(M1,M,N,Lx,L) :-
    length(L1,N),
    append(L1,R,L),
    M2 is M + 1,
    member_L(M2,M,N,Lx,R).
490デフォルトの名無しさん:2010/10/06(水) 16:21:13
>>489 訂正

一時元ならびの写像(LL1,LL2,Z), -> 一次元ならびの写像(LL1,LL2,Z),
491デフォルトの名無しさん:2010/10/06(水) 18:08:45
>>488
使用言語:J
変換部分だけ。

f=:monad def',/;"1|."1 a<\"1>|.(a=.--:{.$y)<\y'

]a=:i.2 2
0 1
2 3
f a
3 2
1 0
]b=:i.4 4
0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15
f b
10 11 8 9
14 15 12 13
2 3 0 1
6 7 4 5
492デフォルトの名無しさん:2010/10/06(水) 22:37:20
>>484
使用言語:maxima

f(x):=(k:[10000,5000,1000,500,100,50,10,5,1],
for i in k do (printf(true,"~5dyen:~dmai~%",i,fix(x/i),x:mod(x,i))));

(%i69) f(12345);
10000yen:1mai
5000yen:0mai
1000yen:2mai
500yen:0mai
100yen:3mai
50yen:0mai
10yen:4mai
5yen:1mai
1yen:0mai
493デフォルトの名無しさん:2010/10/07(木) 00:21:20
http://hibari.2ch.net/test/read.cgi/tech/1284632294/593
#  [1] 授業単元:プログラミング技術
#  [2] 問題文(含コード&リンク):http://ime.nu/rose.u-aizu.ac.jp/onlinejudge/ProblemSet/description.jsp?id=0109&lang=jp
#
# Smart Calculator
# 式を入力すると、その値を計算して出力し終了するプログラムを作成してください。
# 式は数値、演算記号、かっこからなり、=で終わります。
# 演算記号は+,-,*,/ の4つで、それぞれ、加算、減算、乗算、除算を表します。
# 四則演算の優先順位は通常の計算と同じとします。すなわち乗算・除算は加算・減算よりも優先され、 同じ優先順位なら左から計算が行われます。
# 0での割り算は発生しないものとします。
# 演算はすべて整数で行い、小数点以下切捨てとします。
# 入力される式の長さは100文字以内とします。
# Input
# 複数のデータセットが与えられます。最初にデータセットの数nが与えられます。続いてn行の数式が与えられます。
# Output
# 各データセットについて、計算結果を出力してください。
# Sample Input
# 2
# 4-2*3=
# 4*(8+4+3)=
#
# Output for the Sample Input
# -2
# 60
494デフォルトの名無しさん:2010/10/09(土) 19:49:28
>>484
使用言語:Io

f:=method(x,
list(10000,5000,1000,500,100,50,10,5,1)map(v,
writeln(v,"yen:",(x/v)floor,"mai")
x=x%v
)
)

Io> f(12345)
10000yen:1mai
5000yen:0mai
1000yen:2mai
500yen:0mai
100yen:3mai
50yen:0mai
10yen:4mai
5yen:1mai
1yen:0mai
495デフォルトの名無しさん:2010/10/10(日) 07:07:49
http://hibari.2ch.net/test/read.cgi/tech/1284632294/642
# [1] 授業単元:プログラミング実習
# [2] 問題文(含コード&リンク):以下の式が成り立つように英字に数字をあてはめよ。
# ただし同じ英字には同じ数字が当てはまる。
# send
# +)more
# ------
# money
#
496デフォルトの名無しさん:2010/10/13(水) 09:40:35
http://hibari.2ch.net/test/read.cgi/tech/1284632294/944
# [1] 授業単元:基礎プログラミング
# [2] 問題文(含コード&リンク)
# 下記の様に、料理名の入力や材料名をキーボードより入力して、人数分の料理のレシピを計算して表示するプログラムを作成しなさい.
# 今日の料理名は何ですか:(料理名)
# 
材料名は何ですか:( 材料)

# ( 材料) は一人当たり何グラム必要ですか:(分量)
# 
何人分の料理を作りますか:(人数)
# 
==レシピ==
# 今日は、(料理名)を作りましょう。
# 
「(料理名)を(人数)人分作るには,(改行)
# 
( 材料) が ( 分量×人数 ) グラム必要です」

# *()内の料理名や材料には自分の好きな名前を考えてください。
* 人数、分量はキーボードから入力した値を使用してください。

# printf 関数内で%sや%dを使用して、文字列(料理名・材料名)や整数値(人数・分量)を表示すること。
#

497デフォルトの名無しさん:2010/10/13(水) 18:46:29
498デフォルトの名無しさん:2010/10/13(水) 19:33:29
>>495
% Prolog その一

'以下の式(send+more=money)が成り立つように英字に数字をあてはめよ。ただし同じ英字には同じ数字が当ては
まる。'(_数1,_数2,_数3) :-
    abolish(アルファベット数値対応/2),
    アルファベットを得る([send,more,money],_アルファベット),
    アルファベット対応数値候補表の定義(_アルファベット),
    語彙に対応する数を得る(send,_数1),
    語彙に対応する数を得る(more,_数2),
    語彙に対応する数を得る(money,_数3),
    _数3 is _数1 + _数2.

アルファベット対応数値候補表の定義(_アルファベット) :-
    append(_,[_文字|R],_アルファベット),
    for(0,N,9),
    assertz(アルファベット数値対応(_文字,N)),
    R = [],!.

語彙に対応する数を得る(_語彙,_数) :-
    atom_chars(_語彙,_文字ならび),
    アルファベットを基礎に数のならびを得る(_文字列ならび,_数ならび),
    数字ならびから10進数を得る(_数ならび,_,_数).

アルファベットを基礎に数のならびを得る([],[]) :- !.
アルファベットを基礎に数のならびを得る([A|R1],[N|R2]) :-
    アルファベット数値対応(A,N),
    アルファベットを基礎に数のならびを得る(R1,R2).
499デフォルトの名無しさん:2010/10/13(水) 19:35:08
>>495
% Prolog その二

数字ならびから10進数を得る([N],0,N) :- !.
数字ならびから10進数を得る([M|R],J,N) :-
    数字ならびから10進数を得る(R,J1,N1),
    J is J1 + 1,
    N is M * truncate(10 ^ J1) + N1.

アルファベットを得る(_語彙ならび,_アルファベット) :-
    concat_atom(_語彙ならび,S),
    atom_hcars(S,Chars),
    setof(_文字,member(_文字,Chars),_アルファベット).
500デフォルトの名無しさん:2010/10/14(木) 08:34:25
http://hibari.2ch.net/test/read.cgi/tech/1286978599/22
# 口頭で説明されたものを書くので分かりづらかったらごめんなさい
# 【質問テンプレ】
# [1] 授業単元:プログラミング?
# [2] 問題文(含コード&リンク):
# 5種類の通貨(a,b,c,d,e)が存在する
# 最初に幾らかのお金を渡されるそのお金はa,b,c,d,e以外にも
# aとしてもbとしても使えるものbとしてもdとしても使えるものなどがある
# そのお金を持って商品を買うが商品には特定の通貨しか使えない
# ただし、a,bどちらでも払える商品やb,dどちらでも払える商品もある
# それらの商品の合計が渡されるのでソレを手持ちのお金で変えるかどうかを答えよ
# 合計は配列p[15]として辞書順で与えられる(例えばaで払えるものp[0]bとcで払えるものはp[7])
# ex)p={3,2,0,0,0,0,2,0,0,0,0,0,0,0,0}
# だとa=3,ab=2,bc=2なので
# 手持ちが{5,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0}
# a=5,b=2ならはらえる
#

501デフォルトの名無しさん:2010/10/14(木) 08:37:04
>>500
Haskellの人、やーい
502デフォルトの名無しさん:2010/10/15(金) 07:41:37
http://hibari.2ch.net/test/read.cgi/tech/1286978599/73
# [1] 授業単元:C言語基礎実習
# [2] 問題文(含コード&リンク):0未満の数が入力されるまで
# 入力を求め、その入力した回数と入力した数値の合計値を表示するプログラムを作成しなさい。
# なお、0未満の数は回数と合計値に含めないものとする。
#
503デフォルトの名無しさん:2010/10/15(金) 08:08:21
504デフォルトの名無しさん:2010/10/15(金) 09:00:55
http://hibari.2ch.net/test/read.cgi/tech/1286978599/79
# [1] 授業単元:C言語基礎実習
# [2] 問題文(含コード&リンク):入力された数値を逆順に表示せよ。
# なお、この動作は0未満の値が入力されるまで 繰り返すものとする。
#
505デフォルトの名無しさん:2010/10/15(金) 09:55:52
>>502
% Prolog

'0未満の数が入力されるまで入力を求め、その入力した回数と入力した数値の合計値を表示する' :-
    '0未満の数が入力されるまで入力を求め、その入力した回数と入力した数値の合計値を表示する'(_入力した回数,_合計値),
     write_formatted('入力した回数 = %t, 合計値 = %t\n',[_入力した回数,_合計値]),!.

'0未満の数が入力されるまで入力を求め、その入力した回数と入力した数値の合計値を表示する'(_入力した回数,_合計値) :-
    数の入力(I),
    '0未満の数が入力されるまで入力を求め、その入力した回数と入力した数値の合計値を表示する'(I,_入力した回数,_合計値).

'0未満の数が入力されるまで入力を求め、その入力した回数と入力した数値の合計値を表示する'(J,0,0) :- J< 0,!.
'0未満の数が入力されるまで入力を求め、その入力した回数と入力した数値の合計値を表示する'(J,_回数,_合計値) :-
    数の入力(I),
    '0未満の数が入力されるまで入力を求め、その入力した回数と入力した数値の合計値を表示する'(I,_回数_1,_合計値_1),
    _回数 is _回数_1 + 1,
    _合計値 is _合計値_1 + J.

数の入力(I) :-
    write('数を入力してください(終了するには0未満の数を入力) : '),
    get_line(Line),
    数の入力診断(Line,I),!.
数の入力(I) :- 数の入力(I).

数の入力診断(Line,I) :- atom_to_term(Line,I,_),number(I),!.
数の入力診断(Line,I) :-
    write_formatted('入力された %t から適切な数が得られませんでした\n再入力をお願いします\n',[Line]),
    fail.
506デフォルトの名無しさん:2010/10/15(金) 10:05:50
>>504
% Prolog

'入力された数値を逆順に表示せよ。なお、この動作は0未満の値が入力されるまで 繰り返すものとする。' :-
    数の入力(_数値),
    number_chars(_数値,_数値文字ならび),
    reverse(_数値文字ならび,_逆順にされた数値文字ならび),
    concat_atom(_逆順にされた数値文字ならび,_逆順にした数値表現),
    write_formatted('逆順にされた数値表現は %t\n',[_逆順にした数値表現]),!.

数の入力(I) :-
    write('数を入力してください(終了するには0未満の数を入力) : '),
    get_line(Line),
    数の入力診断(Line,I),!.
数の入力(I) :- 数の入力(I).

数の入力診断(Line,I) :- atom_to_term(Line,I,_),number(I),!.
数の入力診断(Line,I) :-
    write_formatted('入力された %t から適切な数が得られませんでした\n再入力をお願いします\n',[Line]),
    fail.
507デフォルトの名無しさん:2010/10/17(日) 05:51:52
http://hibari.2ch.net/test/read.cgi/tech/1286978599/151
# 次のような宿題が出たのですが、まったく分かりません。
# ぜひ教えてください。お願いします。
#
# • void concat(struct node *p, struct node *q)
# ノード*p以降のリストの後に,ノード*q以降のリストを連結
# する関数
#
# • int length(struct node *p)
# ノード*p以降のリストの長さを返す関数
#
508デフォルトの名無しさん:2010/10/19(火) 14:49:38
http://hibari.2ch.net/test/read.cgi/tech/1286978599/296
# [1] 授業単元:
# [2] 問題文(含コード&リンク):
# 下のプログラム(簡単なスタックマシン)を次のように改造せよ
# 1,Enterが入力されても何もしない
# 2,演算子 +.-,*,/.%,^のいずれかが入力されたら
# スタックに2つ以上数値が積まれているか確認する
# 2-1,積まれていなかった場合は"EROOR"を表示
# 2-2,積まれていた場合は、スタックから2つのデータをポップして
# 指定の演算を行い、その結果をプッシュする
# 3,プロンプトを表示して次の入力まで待機
# 問題のプログラムは↓の 10949.cです
# http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm

509デフォルトの名無しさん:2010/10/19(火) 18:16:08
http://hibari.2ch.net/test/read.cgi/tech/1268979408/572
# ●正規表現の使用環境 php5
# ●検索か置換か? 置換
# ●説明 tableタグ内の改行(<br />)を全て削除したい
#
# ●対象データ
# <table border="1" cellpadding="5" cellspacing="0" class="xx" id="xx"><br />
# <tbody><br />
# <tr><br />
# <td><br />
# </td><br />
# </tr><br />
# </tbody><br />
# </table>
#
# ●希望する結果
# <table border="1" cellpadding="5" cellspacing="0" class="xx" id="xx">
# <tbody>
# <tr>
# <td>
# </td>
# </tr>
# </tbody>
# </table>
510デフォルトの名無しさん:2010/10/19(火) 18:30:25
>>509
% Prolog

'tableタグ内の改行タグを全て削除したい'(_ファイル) :-
    get_chars(_ファイル,Chars),
    'tableタグ内の改行タグを全て削除したい'(Chars,L),
    put_chars(_ファイル,L).

'tableタグ内の改行タグを全て削除したい'([],[]) :- !.
'tableタグ内の改行タグを全て削除したい'(L1,L2) :-
    append(L0,[<,t,a,b,l,e,>|R],L1),
    append(L2,[<,/,t,a,b,l,e,>|R2],R),
    '改行タグの削除'(L2,L3),
    'tableタグ内の改行タグを全て削除したい'(R2,L4),
    append(L0,[<,t,a,b,l,e,>|L3],L4,L2),!.
'tableタグ内の改行タグを全て削除したい'(L,L).

'改行タグの削除'([],[<,/,t,a,b,l,e,>]) :- !.
'改行タグの削除'([<,b,r,' ',/,>|R1],R2) :-
    '改行タグの削除'(R1,R2),!.
'改行タグの削除'([A|R1],[A|R2]) :-
    '改行タグの削除'(R1,R2),!.
511デフォルトの名無しさん:2010/10/19(火) 18:51:08
>>510
それは正規表現を使っていないのでダメでしょう
512デフォルトの名無しさん:2010/10/19(火) 19:46:25
>>508
% Prolog (その一)

簡単なスタックマシン(Stack1,Stack2) :-
        rawmode,
        write('?- '),
        get_char(_文字),
        評価(_文字,Stack1,Stack3),
        簡単なスタックマシン(Stack3,Stack2).

評価('\n',Stack1,Stack2) :-
        get_char(_文字),
        評価(_文字,Stack1,Stack2),!.
評価(_文字,Stack1,Stack2) :-
        append(_,[_文字|_],['+','-','*','/','%','^']),
        式評価(_文字,Stack1,Stack2,U),

評価(_文字,Stack1,Stack2) :-
        \+(append(_,[_文字|_],['+','-','*','/','%','^'])),
        数値の切り取り(_文字,L,_次の文字),
        number_chars(_数値,L),
        push(_数値,Stack1,Stack3),
        評価(_次の文字,Stack3,Stack2).
513デフォルトの名無しさん:2010/10/19(火) 19:47:50
>>508
% Prolog (その二)

式評価('%',Stack1,Stack4,U) :- 式評価(mod,Stack1,Stack4,U),!.
式評価(_文字,Stack1,Stack2,U) :-
        pop(_値2,Stack1,Stack3),
        pop(_値1,Stack3,Stack4),
        _式 =.. [_文字,_値1,_値2],
        U is _式,
        write_formatted('%t\n',[U]),
        push(U,Stack4,Stack2),!.
式評価(_文字,Stack1,Stack2,_) :-
        write('ERROR\n'),
        get_char(_文字),
        評価(_文字,Stack1,Stack2).

数値の切り取り('\n',[],'\n') :- !.
数値の切り取り(_次の文字,[],_次の文字) :-
        \+(member(_次の文字,['0','1','2','3','4','5','6','7','8','9','.'])),!.
数値の切り取り(_文字,[_文字|R],_次の文字) :-
        get_char(_文字2),
        数値の切り取り(_文字2,R,_次の文字).

push(A,Stack,[A|Stack]).

pop(A,[A|Stack],Stack).
514デフォルトの名無しさん:2010/10/22(金) 03:16:23
# 100、200、250、300、350、500、
# 550、600、700、1,000、1,200、
# 1,500、2,500、3,000円の商品を
# 売っている店がある。
# x円でお釣りが最も少なくなるよう買うには
# どう買えば良いか?
#
# 例: 手持ち8,520円の場合
# 3,000円の商品を2個=6,000円
# 2,500円の商品を1個=2,500円
# と買えば合計8,500円、釣り20円
515デフォルトの名無しさん:2010/10/22(金) 05:46:47
516デフォルトの名無しさん:2010/10/30(土) 04:44:53
http://hibari.2ch.net/test/read.cgi/tech/1286978599/863
# [1] 授業単元:自然言語処理
# [2] 問題文(含コード&リンク):
# ttp://nlp.dse.ibaraki.ac.jp/~shinnou/lecture/nl/rep1.pdf
# 課題2のみです。
# 課題2 次の図はループのない有向グラフである。辺の向きは記載されていないが、左から右である。
# V9 ! V12 とV13 ! V3 に注意すること。
# V0 をStart ノード、V6 をEnd ノードとして、V0 からV6 に至るパスのうちで、重みの和が
# 最大となるようなパスをViterbi アルゴリズムにより求めるプログラムをC あるいはJava
# で作成せよ。
# ただしグラフは、入力する形でなくても、プログラムの中で予め配列などで作成しておく形
# でもよい。
# > kadai2.exe
# 重みが最大のパスは
# V0 --> V* --> V* ・・・・--> V6
517デフォルトの名無しさん:2010/10/30(土) 04:46:25
# [つづき]
# 重みの和は***
# 有向グラフ('V0','V1',1).
# 有向グラフ('V1','V2',2).
# 有向グラフ('V2','V3',5).
# 有向グラフ('V3','V4',8).
# 有向グラフ('V4','V5',2).
# 有向グラフ('V5','V6',1).
# 有向グラフ('V7','V6',2).
# 有向グラフ('V8','V7',1).
# 有向グラフ('V9','V8',5).
# 有向グラフ('V10','V9',2).
# 有向グラフ('V10','V11',6).
# 有向グラフ('V11','V12',5).
# 有向グラフ('V12','V13',1).
# 有向グラフ('V0','V10',3).
# 有向グラフ('V1','V11',1).
# 有向グラフ('V2','V12',4).
# 有向グラフ('V8','V5',6).
# 有向グラフ('V9','V12',7).
# 有向グラフ('V9','V13',1).
# 有向グラフ('V11','V9',3).
# 有向グラフ('V12','V3',8).
# 有向グラフ('V12','V5',2).
# 有向グラフ('V13','V8',3).
# 有向グラフ('V13','V3',1).
#
518デフォルトの名無しさん:2010/11/07(日) 18:33:28
http://hibari.2ch.net/test/read.cgi/tech/1272006124/158
# <問題>
# ノートを7冊ずつ配ると28冊余り,10冊ずつ配ると最後の一人にわたすノートは
# 他の半分にも達しませんでした。ノートの数と人数を求めなさい。 <開成中入試問題>
#

519デフォルトの名無しさん:2010/11/14(日) 17:54:37
http://hibari.2ch.net/test/read.cgi/tech/1288531658/780
# よろしくお願いいたします。
# [1] 授業単元:C++言語入門
# [2] 問題文(含コード&リンク):
#
# ネットワークのルートアドレスとネットマスク、そしてチェックしたいIPアドレスを
# 渡して、チェックしたいIPアドレスがそのネットワークに含まれているかどうかを
# チェックする関数int checkIPAddress(unsigned int root,unsigned int mask,unsigned
# int address)を以下のように書いた。空欄をうめよ。
# ただし、あるIPアドレスがネットワークに含まれているかどうかチェックするには、
# ネットワークのルートアドレス(root)と、チェックしたいIPアドレス(address)の
# ネットワークIDを比較してその値が同じであったら、そのネットワークに含まれていると
# 判定します。IPアドレス中のネットワーク部は、ネットマスクのビットパターンが1である部分と
# 考えます。IPアドレスからネットワークIPを取り出すには、IPアドレスをネットマスクの
# ビットごとのANDを取り出します。詳細はインターネットの検索エンジンで「ネットマスク」
# をキーワードに調べてください。
#
# int checkIPAddress(unsigned int root,unsigned int mask,unsigned int address)
# {
# return(root 空欄? 空欄?)==(root 空欄? 空欄?)
# }
#
520デフォルトの名無しさん:2010/11/27(土) 02:30:19
http://hibari.2ch.net/test/read.cgi/tech/1289913298/468
#   [1] 授業単元:C/C++の宿題片付けます 143代目
#   [2] 問題文(含コード&リンク): ニュートン法により実数の平方根を求める関数を作成せよ。(引数double, 戻り値double)
#
521デフォルトの名無しさん:2010/11/30(火) 07:32:52
>>520
% Prolog

'ニュートン法を用いて実数の平方根を求める'(_実数,_平方根) :-
    'ニュートン法を用いて実数の平方根を求める'(0,5,_実数,1.0,_平方根),!.

'ニュートン法を用いて実数の平方根を求める'(Max,Max,_実数,X,X) :- !.
'ニュートン法を用いて実数の平方根を求める'(N,Max,_実数,X1,X) :-
    Y is X1 * X1 - _実数,
    Y2 is 2 * X1,
    X2 is X1 - Y / Y2,
    N2 is N + 1,
    'ニュートン法を用いて実数の平方根を求める'(N2,Max,_実数,X2,X).
522デフォルトの名無しさん:2010/11/30(火) 07:47:22
>>519
% Prolog

'ノートを7冊ずつ配ると28冊余り,10冊ずつ配ると最後の一人にわたすノートは他の半分にも達しませんでした。ノートの数と人数を求めなさい。'(_ノートの数,_人数) :-
        '10冊ずつ配るとひとり少ない人数分だけは完全にあるということです',
        これを_10冊を完全に配ることのできる人数とすると,
        '一旦最後ひとり分(7個)も取り崩して',
        '28冊に加えてからこれを(10-7)個ずつ確実に渡すことのできる人数が_10冊を完全に配ることのできる人数ということになります'(_10冊を完全に配ることのできる人数),
        余りが最後の人が受け取る冊数になり、これは10冊の半分未満でないといけません,
        人数はそれに1を加えたものであり(_10冊を完全に配ることのできる人数,_人数),
        本の冊数は(_人数,_本の冊数).

'28冊に加えてからこれを(10-7)個ずつ確実に渡すことのできる人数が_10冊を完全に配ることのできる人数ということになります'(_10冊を完全に配ることのできる人数) :-
        _10冊を完全に配ることのできる人数 is (28 + 7) // (10 - 7).

余りが最後の人が受け取る冊数になり、これは10冊の半分未満でないといけません :-
        _最後の人が受け取る冊数 is (28 + 7) mod (10 - 7),
        _最後の人が受け取る冊数 < 10 // 2.

人数はそれに1を加えたものであり(_10冊を完全に配ることのできる人数,_人数) :-
        _人数 is _10冊を完全に配ることのできる人数 + 1.

本の冊数は(_人数,_本の冊数) :-
        _本の冊数 is 7 * _人数 + 28.

'10冊ずつ配るとひとり少ない人数分だけは完全にあるということです' :- true.
これを_10冊を完全に配ることのできる人数とすると :- true.
'一旦最後ひとり分(7個)も取り崩して' :- true.
523522:2010/11/30(火) 07:50:09
リンク >>518 の間違いでした。
524デフォルトの名無しさん:2010/11/30(火) 07:54:46
>>522 定義洩れ
余りが最後の人が受け取る冊数になり、これは10冊の半分未満でないといけません :- true.
525お題:2010/12/14(火) 16:08:37
echoサーバを作れ
526デフォルトの名無しさん:2010/12/19(日) 06:12:51
http://ja.wikipedia.org/wiki/Guarded_Horn_Clauses
# 以下の指示に従い、エラストテネスのふるいを使い素数生成を行うプログラムを書きなさい。
#
# エラストテネスの篩を実行すると、整数生成と篩の2つのプロセスが生成される。
# 整数生成は指定最大値までの自然数のストリームを生成し、篩はそれをふるいにかけ
# 素数のストリームを素数ストリームに返す。
# 整数生成と篩とはそれぞれ並行して動き、整数生成で生成された自然数のストリームは
# 引数の変数を介して順次篩に渡される。
# プロセス間の同期は、ストリームの各要素が具体化されるまで待つ、という形で自然に表現される。
#
# 整数生成、篩の各プログラムはそれぞれ以下のようになる。
# 整数生成は、自然数のストリームを順次生成し指定最大値を超えたら終了する。
# 篩は、2,3,5,7,..などの各素数の倍数をストリームから取り除く"ふるい"を順に
# 生成しながら、求まった素数を順次ストリームの要素として返す。
# 各"ふるい"は変数を介して直列につながれていくため、自然数のストリームから素数のみの
# ストリームを求めることができる。
#
# 注意.. 漢字の"篩"とかなの"ふるい"を使い分けている。
527デフォルトの名無しさん:2011/01/14(金) 11:24:45
http://hibari.2ch.net/test/read.cgi/tech/1294061094/358
# [1] 授業単元:プログラミングC++入門
# [2] 問題文:問1・以下のクラスを作り、オブジェクトを生成して、全てのメンバ関数を実行せよ。ただし、体力は整数形の変則とする。
# クラス名ねずみ メンバ変数 名前 種族 体力 メンバ関数 コンストラクタ 自己紹介 体力を上げる 体力を下げる 体力の値を返す
# 問2・問1で作ったクラスから、以下のような派生クラスを作り、そのオブジェクトを生成して、派生クラスが持つ全てのメンバ関数を実行せよ。
# ただし、職業はコンストラクタにより、ディズニーキャラクターとせよ。また、自己紹介は名前の他に職業も紹介させよ。
# それから、踊ったら体力が回復するようにせよ。体力の増減量は決めていい。
# 問3・上記の派生クラスおよび期底クラスにおいて、体力の上限を設け、その上限に達した場合、IF文を使ってそれ以上値が増加しないようにせよ。
# また同様に、体力が負の値にならないようにせよ。そして体力がゼロならば踊れないようにせよ。
# 問4・問3で改良したオブジェクトに対して、WHILE文やFOR文を使って、体力がゼロになって踊れなくなるまで繰り返し躍らせよ。
# 問5・今までの問で作ってきたクラスのオブジェクトを、配列を使って2つ生成せよ。そして、それぞれに異なる名前を与え、全てのメンバ関数を実行せよ。
528デフォルトの名無しさん:2011/01/24(月) 12:07:59
>>526 F#
open System.Threading
type Msg = int * AsyncReplyChannel<bool>

let sift =
  MailboxProcessor.Start (fun inbox ->
    let rec loop (filters : MailboxProcessor<Msg> list) = async {
        let! n = inbox.Receive()
        if filters |> List.forall (fun f -> f.PostAndReply(fun r -> (n, r))) then
          printfn "素数発見 : %d" n
          let filter = MailboxProcessor<Msg>.Start (fun inbox ->
            let rec loop'() = async {
              let! (m, r) = inbox.Receive()
              m % n <> 0 |> r.Reply
              return! loop'() }
            loop'())
          return! loop (filter::filters)
        else
          return! loop filters }
    loop [])

let gen maximum =
  Async.Start(async {
    printfn "2 〜 %d の素数探索開始" maximum
    seq {2 .. maximum} |> Seq.iter (fun n ->
      sift.Post(n); Thread.Sleep(200))
    printfn "素数探索終了" })

gen 100
System.Console.ReadKey() |> ignore
529デフォルトの名無しさん:2011/01/27(木) 23:15:22
ttp://www.itmedia.co.jp/enterprise/articles/0908/01/news001_2.html
#
# [問題]
# 始点、終点の座標と、途中にある円の中心座標、半径が与えられる。
# 始点から終点に移動するとき、円周の線をまたがなければならない回数の最小回数を求めよ。
# ただし、円同士の円周・始点・終点は接触しないものとする。
#
530デフォルトの名無しさん:2011/01/28(金) 11:25:25
>>525
echoサーバ(Port) :-
        socket(internet,stream,Socket),
        socket_bind(Socket,Port),
        socket_listen(Socket),
        socket_accept(Socket,Host:Port2,NewSocket),
        open(NewSocket,read,Instream),
        open(NewSocket,write,Outstream),
        get_char(Instream,Char),
        echo(Instream,Outstream,Char),
        close(Outstream),
        close(Instream),
        socket_shutdown(Socket),
        socket_shutdown(NewSocket).

echo(_,_,end_of_file) :- !.
echo(Instream,Outstream,Char) :-
        put_char(Outstream,Char),
        flush_output(Outstream),
        get_char(Instream,Char2),
        echo(Instream,Outstream,Char2).
531デフォルトの名無しさん:2011/01/31(月) 17:19:57
>>529 F# リンク先の回答を移植しただけ
let leastBorders xs ys rs xy1 xy2 =
  let checkInside (x1, y1, r) (x2, y2) =
    pown (x1 - x2) 2 + pown (y1 - y2) 2 <= r * r
  Array.zip3 xs ys rs |> Array.sumBy (fun xyr ->
    if [xy1; xy2] |> List.map (checkInside xyr) |> List.reduce (<>) then 1 else 0)
532デフォルトの名無しさん:2011/02/24(木) 22:38:54.50
>>525
#! /usr/bin/awk -f
#echo server
BEGIN {
echoC = "/inet/tcp/10000/0/0"
while((echoC |& getline) > 0) {
print "受理日時: "strftime("%Y年%m月%d日 %H:%M:%S") ": " $0
print "受理: " $0 |& echoC
close(echoC)
}
}
533532:2011/02/24(木) 22:40:00.23
gawkでしか動かんのでシバンがまずかった。
以下のように訂正。
#! /usr/bin/gawk -f
534デフォルトの名無しさん:2011/03/26(土) 23:42:54.23
テキストボックスに
A222BあああA555BえええAおおおB55A454B
と入っていたとします。
この文字列の
AとBとその間の文字を1セットにして、AとBの間の文字に5が入っていたときだけ、AとBを削除する

このようなロジックをつくっていただけないでしょうか?
535デフォルトの名無しさん:2011/03/27(日) 01:27:45.06
正規表現が使えると超ラク
正規表現の例は置いておくからテキストボックスからテキスト拾ってきてうんぬんとかは自分でどうにかしろ

Ruby 1.9.2
# coding: windows-31J

s="A222BあああA555BえええAおおおB55A454B"
s.gsub!(/(A5+B)|(B5+A)/, "")
puts s
536デフォルトの名無しさん:2011/03/27(日) 06:06:22.97
>>534
% Prolog

'AとBとその間の文字を1セットにして、AとBの間の文字に5が入っていたときだけ、AとB
を削除する'(_文字列,_置換文字列) :-
    atom_chars(_文字列,Chars),
    文字ならびの置換(Chars,Chars2),
    atom_chars(_置換文字列,Chars2).

文字ならびの置換([],[]) :- !.
文字ならびの置換(['A'|R1],L) :-
    最初に現れるBの間に5が存在する(R1,L0,R2),
    文字ならびの置換(R2,L2),
    append(L0,L2,L).
文字列ならびの置換([_文字|R1],[_文字|R2]) :-
    文字ならびの置換(R1,R2).

最初に現れるBの間に5が存在する(R1,L0,L2) :-
    append(L0,['B'|L2],R1),!,
    \+(append(_,['A'|_],L0)),
    append(_,['5'|_],L0),!.
537デフォルトの名無しさん:2011/03/27(日) 06:08:55.06
% Prolog 行途中で改行されてしまったので書きなおし。

'AとBとその間の文字を1セットにして、AとBの間の文字に5が入っていたときだけ、AとBを削除する'(_文字列,_置換文字列) :-
    atom_chars(_文字列,Chars),
    文字ならびの置換(Chars,Chars2),
    atom_chars(_置換文字列,Chars2).

文字ならびの置換([],[]) :- !.
文字ならびの置換(['A'|R1],L) :-
    最初に現れるBの間に5が存在する(R1,L0,R2),
    文字ならびの置換(R2,L2),
    append(L0,L2,L).
文字列ならびの置換([_文字|R1],[_文字|R2]) :-
    文字ならびの置換(R1,R2).
538537:2011/03/27(日) 06:52:31.59
% ごめんなさい。適切でない部分があった。
% Prolog

'AとBとその間の文字を1セットにして、AとBの間の文字に5が入っていたときだけ、AとBを削除する'(_文字列,_置換文字列) :-
    atom_chars(_文字列,Chars),
    '間に5を含むAとBを削除する'(Chars,Chars2),
    atom_chars(_置換文字列,Chars2).

'間に5を含むAとBを削除する'([],[]) :- !.
'間に5を含むAとBを削除する'(['A'|R1],L) :-
    最初に現れるBの間に5が存在する(R1,L0,R2),
    '間に5を含むAとBを削除する'(R2,L2),
    append(L0,L2,L),!.
'間に5を含むAとBを削除する'([_文字|R1],[_文字|R2]) :-
    '間に5を含むAとBを削除する'(R1,R2).

最初に現れるBの間に5が存在する(R1,L0,L2) :-
    append(L0,['B'|L2],R1),!,
    \+(append(_,['A'|_],L0)),
    append(_,['5'|_],L0),!.
539538:2011/03/27(日) 07:31:13.78
あと、
_置換文字列 を _削除された文字列
に直してください。
540デフォルトの名無しさん:2011/03/29(火) 14:59:16.06
vb.netの勉強をしています。独学です。

[問題]
2値化した画像の輪郭追跡処理をする。

できたら、
(1)getpixel等を使った、時間はかかるが初心者でも理解しやすいもの
(2)処理がはやくなるように工夫したもの
の2種類作っていただけるとありがたいです。
541デフォルトの名無しさん:2011/04/08(金) 17:49:29.73
javaプログラムの質問儲けつけていただけるでしょうか?
542デフォルトの名無しさん:2011/04/08(金) 23:56:31.52
受け付けますがjavaで回答が付くとは限りません
あなたに適したスレはおそらくこちら

★★Java質問・相談スレッド144★★
http://hibari.2ch.net/test/read.cgi/tech/1300950228/
543デフォルトの名無しさん:2011/04/09(土) 00:50:47.04
>>542

ありがとうございます。

そちらの方で質問しても回答を期待できますか?
無理してJavaプログラミングの講座を取ったのですが行くなり苦戦しています。
544デフォルトの名無しさん:2011/04/09(土) 09:27:01.02
>>543
「JAVAの宿題片付けます」というようなスレが
あったのですが、今は新スレが作られていない
ようですね。新学期が始まるとまた作られると
思いますが。
このスレは例えばJAVAの宿題スレから問題を
貰ってきて、別の言語で解答を出し合い、
言語表現の違いを楽しむためのスレです。
545デフォルトの名無しさん:2011/04/09(土) 13:53:25.28
横入りですが、できましたらJavaで以下をお願いします。

【課題】キーボードから入力された1〜9までを九九にし、
答えを1行に3個ずつ表示する。半角数字以外が入力された場合、
任意のエラーメッセージを表示させること。
【形態】public class Kuku1{で始める
【期限】4月11日
【Ver 】jdk1.6.0_24
【注】変数、if,for,whileまで学習。

単なる九九の計算のプログラムはできるのですが、例えば、3と入力して
3の段の答えだけを表示するやり方、エラーを表示させるやり方、
3つずつというのが全くわかりません。

よろしくお願いします。
546デフォルトの名無しさん:2011/04/09(土) 14:02:43.86
ここは質問スレではないよ?
547デフォルトの名無しさん:2011/06/16(木) 04:43:33.80
いや質問スレでしょ

548デフォルトの名無しさん:2011/06/22(水) 18:24:10.69
ボールが描画領域内で壁に反射しながら2 次元平面内で
等速直線運動するプログラムをJavaを用いて作成せよ.

お願いします。
549デフォルトの名無しさん:2011/06/22(水) 19:08:30.99
色んな言語なのにjava指定ってのが多いな。。。
javaで宿題スレって無いのか?
550デフォルトの名無しさん:2011/06/23(木) 02:33:40.74
javaで画像を配列で読み込み、3×3で打ち込んだマスク、フィルタ処理をしてくれるプログラムを作りたいのですが
フィルター部分はできたのですが、画像を配列に読み込み書き出す方法が分かりません。
どなたかプログラムしてくれませんか?
551デフォルトの名無しさん:2011/06/23(木) 19:16:15.89
>>545
% Prolog

'キーボードから入力された1〜9までを九九にし、答えを1行に3個ずつ表示する' :-
    'キーボードから入力された1〜9までを'(_1〜9までの数),
    append(_,[[N1,N2,N3]|R],[[1,2,3],[4,5,6],[7,8,9]]),
    M1 is N1 * _1〜9までの数,
    M2 is N2 * _1〜9までの数,
    M3 is N3 * _1〜9までの数,
    writef('%t %t %t\n',[M1,M2,M3]),
    R = [].

'キーボードから入力された1〜9までを'(_1〜9までの数) :-
    get_line(Line),
    'キーボードからの入力診断'(Line,_1〜9までの数),!.
'キーボードから入力された1〜9までを'(_1〜9までの数) :-
    'キーボードから入力された1〜9までを'(_1〜9までの数).

'キーボードからの入力診断'(Line,_1〜9までの数) :-
    atom_to_term(Line,_1〜9までの数,_),
    integer(_1〜9までの数),
    _1〜9までの数 >= 1,
    _1〜9までの数 =< 9,!.
'キーボードからの入力診断'(Line,_1〜9までの数) :-
    writef('入力された %t からは1〜9までの数が得られません。再入力をお願いします\n',[Line]),
    fail.

552デフォルトの名無しさん:2011/06/23(木) 21:06:15.20
>>549
ざっと見渡した限り、通常の質問スレはあるが
宿題スレや丸投げ系のスレは無さそうだな
553デフォルトの名無しさん:2011/06/25(土) 16:33:55.70
>>549
このスレたったころはJava用の宿題スレあったからね〜
スレ落ちしてから誰も立ててないだけでしょ
554デフォルトの名無しさん:2011/08/08(月) 05:55:15.47
http://hibari.2ch.net/test/read.cgi/tech/1312201995/143
# [1] 授業単元:情報処理
# [2] 問題文(含コード&リンク):数値(1~100)を入力し、入力された数の
# 平均、標準偏差、最大値、最小値を求めるプログラムを作りなさい。
#
#
# 不完全な仕様であることを明確に指摘しながら、かつ、問題分が求めている
# テータから適切なデータ構造と手順を選択していくことを示すことができるであろうか。
#
555デフォルトの名無しさん:2011/10/13(木) 10:13:59.94
Z80アセンブラで7セグメントLEDに表示できる
簡易電卓をlinux作成したいのですが全くわかりません。
どなたかよろしければプログラムを作成しては
いただけませんでしょうか?
よろしくお願いします。
556デフォルトの名無しさん:2011/10/13(木) 10:17:48.83
>>555の続きなのですが
RAM EQU 8000H
ROM EQU 0000H

ORG RAM

LED_1: BLOCK 1
LED_2: BLOCK 1
LED_3: BLOCK 1
LED_4: BLOCK 1
XL: BLOCK 1
XH: BLOCK 1
といったような書き方をしたいのですが、
是非宜しくお願いします。

557デフォルトの名無しさん:2011/10/13(木) 20:02:24.19
それだけじゃ入出力のさせ方がわからないよ
558デフォルトの名無しさん:2011/10/14(金) 00:18:23.46
>>557さん
説明不足ですいません。

PIO_INIT:
PUSH AF
LD A,0CFH
OUT (PIO_AC),A
LD A,000H
OUT (PIO_AC),A
LD A,007H
OUT (PIO_AC),A
LD A,0CFH
OUT (PIO_BC),A
LD A,00FH
OUT (PIO_BC),A
LD A,007H
OUT (PIO_BC),A
LD A,000H
LD (LED_1),A
LD (LED_2),A
LD (LED_3),A
LD (LED_4),A
POP AF
RET
といった感じなのですが・・・。
559デフォルトの名無しさん:2011/10/14(金) 00:32:01.18
どのI/Oアドレスが読み/書きでそれぞれどういう働きをするのか
書いてもらわんとわからんよ
ビット単位で細かく指定されてる場合も多いし
560デフォルトの名無しさん:2011/10/14(金) 02:11:03.50
>>558
聞きたいのはZ80の文法ではなく、使っている教材の仕様だからね
外観的にはLEDが4つくらいあるだろう事はわかったけど
561デフォルトの名無しさん:2011/10/14(金) 03:05:41.42
すいません。仕様について失念しまして
朝学校で確かめてきます。
     D7 D6 D5 D4 D3 D2 D1 D0
DS群   ▼ ▼ ▲ ▲ ▼ ▲ ▲ ▼
▼は上下できるスイッチで
WRやCLKはボタンで操作するやつです
562デフォルトの名無しさん:2011/10/14(金) 03:17:31.73
>>560さん
558=561です。
マイクロプロセッサは
TMPZ84C015Aということまで
自分の持っている資料でわかりました。
563デフォルトの名無しさん:2011/10/14(金) 18:54:09.36
>>555ですが
とりあえずプログラムを書いてみたのですが、
LEDに0000が表示されるだけで計算できません。
ttp://uproda.2ch-library.com/lib440220.txt.shtml
にうpしたので、どなたかご指摘いただけませんでしょうか。
よろしくお願いします。
564デフォルトの名無しさん:2011/10/14(金) 19:21:39.38
>>563ですが
>>560さんからご指摘をうけた
教材の仕様なのですが、
細かい仕様がわからないため
http://iup.2ch-library.com/i/i0447253-1318586664.jpg
をうpしました。
DLキーはどちらも1です
よろしくお願いします
565デフォルトの名無しさん:2011/10/14(金) 19:46:41.25
仕様分からないんじゃ誰にもやりようないじゃん・・・
566デフォルトの名無しさん:2011/10/14(金) 20:33:26.93
>>564です
マイクロプロセッサは
TMPZ84C015AでZ80CPUを核としてCTC、シリアルI/Oポート(SIO)
パラレルI/Oポート(PIO)、CGC、WDTを内蔵してて
PIOは2組の独立した8bitポートで、
教材のPIOのI/Oアドレスは
ポートA;データレジスタ(01CH)
ポートA;コントロールレジスタ(01DH)
ポートB;データレジスタ(01EH)
ポートA;コントロールレジスタ(01FH)
として設定されてます

567デフォルトの名無しさん:2011/10/14(金) 20:43:59.96
そのI/Oポートをどう操作すれば入出力ができるのかが重要なんですが
それを割愛されると手を出せませんよ

さらっと目を通しましたが、CALL〜RETの中にPOPが紛れ込んでますがそれは大丈夫なんですか?
568デフォルトの名無しさん:2011/10/14(金) 20:48:12.13

RAMは256kbitまたは32byteの読み書き
できるメモリ容量
データバス8本
ポート
・8ビットパラレルポート×2
・シリアルポート×1

569デフォルトの名無しさん:2011/10/14(金) 21:19:15.19
>>567さん
目を通していただきありがとうございます。
コンパイルは一応通るので、
どこが悪いのかわからなくて・・。
ttp://uproda.2ch-library.com/lib440285.txt.shtml
に以前の入出力についてやったことを書きました。
DLキーは1です。
どなたかよろしければプログラムを作成しては
いただけませんでしょうか?
よろしくお願いします。

570デフォルトの名無しさん:2011/10/15(土) 02:46:06.58
571デフォルトの名無しさん:2011/10/17(月) 10:42:31.88
ttp://uproda.2ch-library.com/lib441387.txt.shtmlを
Z80アセンブラで7セグメントLEDに表示できる
簡易電卓をlinux作成したいのですが全くわかりません
ttp://uproda.2ch-library.com/lib441388.txt.shtml
もご参考によろしくお願いします。
572デフォルトの名無しさん:2011/10/18(火) 03:11:02.34
>>571
どうやら I/O は
 ・PIOポートA ⇒ 7Seg LED (4連 = 16bit分)
 ・PIOポートB ⇒ キー(トグルSW?) (4キー * 4連 = 16bit分)
って事っぽいね。入出力共に、I/O 1回で 4bit みたいだから、完成までには少なくとも

 1. 4bit (LED 1つ分) 出力するサブルーチンを作成
 2. 1. を4回繰り返して 16bit (全 LED 分) 出力するサブルーチンを作成
 3. キーから 4bit (キー1連分) 読み込むサブルーチンを作成し、2. を使って出力テスト
 4. 3. を4回繰り返して 16bit (全キー分) 読み込むサブルーチンを作成し、2. を使って出力テスト
 5. 足し算実装
 6. 引き算実装
 7. 掛け算実装
 8. 割り算実装

位のステップは踏むと思うんだけど、どこまで出来てんの?
ちなみに、>555と同一人物?
573572:2011/10/18(火) 17:06:20.95
2. のサブルーチンは、ベタに書くなら、きっとこんな感じなんだろうね。
ttp://ideone.com/0MBs5
4. がこんな感じ。
ttp://ideone.com/Ze2EN
で、これだけだと激烈に使いづらいので、16bit入出力ルーチンなんかもきっと書くんだろうね。
ttp://ideone.com/tZGIi
ttp://ideone.com/liM6n

おっと、俺は教材を見たことが無ければ、そもそも
574デフォルトの名無しさん:2011/10/18(火) 17:08:23.28
そもそもZ80のアセンブラ自体組んだことが無いから、
動かなくたって知らんよ。
575デフォルトの名無しさん:2011/10/24(月) 22:14:16.69
学校で宿題が出ました、助けて下さい><
実行すると下記のような動作をするバッチファイルスクリプトを作成したいです。
よろしくお願いいたします。

実行するバッチファイルが現在存在するディレクトリにある全てのテキストファイルを書き換えるバッチを作成しなさい。
テキストファイルの中に、pass = "C:\Users\users\Documents\workspace\test.txt"というような
パスを変数に代入する記述があった場合
そのパスの部分を、pass = "現在のバッチファイルの存在するディレクトリ\test.txt"
という風にディレクトリ名だけを(ファイル名は書き換えない)書き換えるバッチを作成しなさい。
576デフォルトの名無しさん:2011/10/29(土) 23:55:49.97
集合で、条件を満たす部分集合の数を数える計算をC言語かwxmaximaでやりたいと思ってます。

例えば3個の要素からなる集合{a,b,c}でa,b,cは0〜24の任意の数をとるとします。
また一方で{0+i,3+i}(i<=24,i++)のものをredと定義します。
そして、{a,b,c}の中で部分集合{a,b}{b,c}{c,a}がすべてredであるような{a,b,c}の数はいくつあるか計算する方法を教えてください。
577デフォルトの名無しさん:2011/10/30(日) 04:00:48.12
>>576
Haskellで、その問題をそのまま書いてみたけど、空リスト(空集合)が返ってきたぞ


[[a,b,c]| a <- [0..24], b <- [0..24], c <- [0..24], isRed a b, isRed b c, isRed c a]

isRed i i' | i <= 24 && i' == (i+3) = True
isRed _ _ = False
578デフォルトの名無しさん:2011/10/30(日) 04:27:55.17
単純に考えても、{a,b}, {b,c}でa < b < cが確定するのに、それを満たしつつc < aを満たすのは不可能。

(c < a?) < b < c
579デフォルトの名無しさん:2011/12/04(日) 11:12:03.99
P型記述子によるフーリエ変換をするプログラムがまったくできずに困っています
どなたか教えていただけないでしょうか
580デフォルトの名無しさん:2011/12/05(月) 18:30:04.17
>>575
全然関係ないがPathな
581デフォルトの名無しさん:2011/12/05(月) 18:30:30.32
って一ヶ月以上前かよ
582営利利用に関するLR審議中@詳細は自治スレへ:2012/03/30(金) 10:58:57.35
http://toro.2ch.net/test/read.cgi/tech/1332279659/
あたりから問題もらったらいい。Prologはともかく、関数型言語などの
プログラム例を見たい。
584デフォルトの名無しさん:2012/04/14(土) 12:51:17.95
http://toro.2ch.net/test/read.cgi/tech/1332279659/39
>タンピンリャンペーコーを判別せよ
をF#で。
http://ideone.com/r2HEf
585デフォルトの名無しさん:2012/05/23(水) 06:59:12.42
>>584
麻雀やらないので、役は今ひとつ理解できないのだが、大体こんな感じ。
http://nojiriko.asia/prolog/ironnagengo5_40.html
586デフォルトの名無しさん:2012/06/14(木) 23:26:40.21
問題
円Cの半径r、中心の座標(x,y)が与えられたとき
円の面積の第1象限の部分、第2象限の部分、第3象限の部分、第4象限の部分を求めよ。
587デフォルトの名無しさん:2012/06/15(金) 02:43:22.47
588587:2012/06/15(金) 06:46:49.90
>>587 は条件が抜けてたぽorz
589587:2012/06/15(金) 08:48:34.17
590デフォルトの名無しさん:2012/06/15(金) 08:53:39.56
>>586
% Prolog
モンテカルロ法で http://nojiriko.asia/prolog/ironnagengo5_586.html
591デフォルトの名無しさん:2012/06/18(月) 01:49:34.73
問題
どの桁の数字も右隣の桁の数字よりも大きい2桁以上の10進数をすべて求めよ。

76
3210
951
592デフォルトの名無しさん:2012/06/18(月) 06:46:11.52
593デフォルトの名無しさん:2012/06/18(月) 07:05:24.36
>>591 F#
[for i in 9L .. -1L .. 0L -> [i]]
|> Seq.unfold
    (List.collect (fun (x::xs) -> [for i in 9L .. -1L .. x + 1L -> i::x::xs])
     >> function [] -> None | r -> Some(r, r))
|> Seq.concat |> Seq.map (Seq.reduce (fun x y -> x * 10L + y))
|> Seq.iter (printfn "%d")
594デフォルトの名無しさん:2012/06/18(月) 13:17:15.06
595デフォルトの名無しさん:2012/06/18(月) 23:31:43.84
JAVAの課題です。KEYをつかった集計方法教えてください。
【 課題 】DB上に給与の支給テーブルがあります。
      支店・部・課・社員番号・基本給・役職手当・残業時間
      これらの情報をDBから読み込んだJYOUHOUDATA.javaから、
      各支店ごとの部、課の合計、支店合計
      総合計を求めなさい。最後に全ての合計を印字する事。
      集計項目は基本給・役職手当・残業手当・総支給額の4項目とする。
【 形態 】1. Javaアプリケーション(main()で開始すること)
【Ver 】java version "1.7.0_02"
【 補足 】残業手当 =(基本給+役職手当)/160*1.2
      総支給額 = 基本給+役職手当+残業手当 で計算します。
よろしくお願いします。
596デフォルトの名無しさん:2012/06/19(火) 23:38:24.34
>>595
データ用意するのが面倒だけど
こんな感じじゃね?

select 支店,部,sum((基本給+役職手当)*(1.0+1.2*残業時間/160)) from 給与の支給 group by 支店,部
597デフォルトの名無しさん:2012/06/21(木) 22:20:55.86
>>591
maxima

for i in rest(powerset({0,1,2,3,4,5,6,7,8,9})) do
(a:sreverse(simplode(i,"")),if slength(a)>1 then print(a));
598デフォルトの名無しさん:2012/06/22(金) 00:20:27.35
>>591
Io

for(i,1,1023,a:="";for(j,0,9,a=if(i at(j)==1,j,"").. a);if(a size>1,a println))

1から2^10-1の10bitを0から9に対応させて1が立っているものを連結して2桁以上を出力。
599デフォルトの名無しさん:2012/06/22(金) 18:13:42.05
>>591
SWI-Prolog

d0(''). d0(0). d1(''). d1(1). d2(''). d2(2). d3(''). d3(3).
d4(''). d4(4). d5(''). d5(5). d6(''). d6(6). d7(''). d7(7).
d8(''). d8(8). d9(''). d9(9).
q591:-d0(A0),d1(A1),d2(A2),d3(A3),d4(A4),d5(A5),d6(A6),d7(A7),d8(A8),d9(A9),
concat_atom([A9,A8,A7,A6,A5,A4,A3,A2,A1,A0],'',X),
name(X,Y),length(Y,Z),Z>1,writeln(X),fail.
600デフォルトの名無しさん:2012/06/22(金) 20:19:56.06
#include <stdio.h>
#include <math.h>
int main (int argc, const char * argv[]) {

double a, b, c, x1, x2;
printf("ax^2+bx+c=0 の係数a,b,cは?");
scanf("%lf%lf%lf",&a,&b,&c);
if (a=0)
{printf("aには0を代入できません");}
if ((b*b-4*a*c) > 0)
{x1=(-b + sqrt(b*b-4*a*c))/(2*a);
x2=(-b - sqrt(b*b-4*a*c))/(2*a);
printf("x1=%lf\n",x1);
printf("x2=%lf\n",x2);}
if ((b*b-4*a*c) == 0)
{x1=(-b+sqrt(b*b-4*a*c))/(2*a);
printf("x1=%lf\n",x1);}
if ((b*b-4*a*c) < 0)
{x1=(-b/(2*a));
x2=(sqrt(b*b-4*a*c)/(2*a);
printf("x1=%lf+%lf",x1,x2);
printf("x2=%lf-%lf",x1,x2);
return 0;
}
どこがいけないのかなあ(泣)
もう初心者のぼくにはむりぽ
601デフォルトの名無しさん:2012/06/22(金) 20:57:37.37
>>600 HSP

a_buf="1.0" : input a_buf
b_buf="0.0" : input b_buf
c_buf="0.0" : input c_buf
button "計算", *calc
stop

*calc
a=double(a_buf)
b=double(b_buf)
c=double(c_buf)

if absf(a)=0.0 : mes "aには0を代入できません" : stop

d=b*b-4.0*a*c
if d>0.0 {
mes strf("x1=%f x2=%f", (-b+sqrt(d))/(2.0*a), (-b-sqrt(d))/(2.0*a))
} else : if d<0.0 {
mes strf("x1=%f%+fi x2=%f%+fi", -b/(2.0*a), sqrt(-d)/(2.0*a), -b/(2.0*a), -sqrt(-d)/(2.0*a))
} else {
mes strf("x1=%f", -b/(2.0*a))
}
stop
602デフォルトの名無しさん:2012/06/22(金) 21:12:25.61
問題
辺の長さがa,b,c,dの四角形の面積の最大値を求めよ。
603デフォルトの名無しさん:2012/06/22(金) 22:00:42.08
>>602
#module
#defcfunc calc double a, double b, double c, double d, \
local s, local e, local w, local p1, local p2, local s1, local s2

s=absf(a-b)
if s<absf(c-d) : s=absf(c-d)
e=a+b
if e>d+c : e=d+c
repeat 100
w=e-s
p1=s+0.1*w
p2=s+0.9*w
s1=heron(a,b,p1)+heron(c,d,p1)
s2=heron(a,b,p2)+heron(c,d,p2)
if s1>s2 : e=p2 : else : s=p1
loop
return s1

#defcfunc heron double a, double b, double c, local s
s=(a+b+c)*0.5
return sqrt(s*(s-a)*(s-b)*(s-c))

#global

mes calc(1,1,1,1)
604デフォルトの名無しさん:2012/06/22(金) 22:22:37.98
>>603 は対角線の長さxに対して四角形の面積yは
十分なだらかで且つピークとなる箇所が一箇所だけだろうという思い込みでできてます

正しいかどうか分かりません
605デフォルトの名無しさん:2012/06/23(土) 07:31:32.51
>>591
J

(#~9&<),/:~x:".(#:i.2^10)#'9876543210'
606デフォルトの名無しさん:2012/06/23(土) 09:07:13.41
>>591 Prolog (>>592と全く同じ内容ですが、短い素敵なコードが並んだので直接貼ります)

どの桁の数字も右隣の桁の数字よりも大きい2桁以上の10進数をすべて求める(_どの桁の数字も右隣の桁の数字よりも大きい2桁以上の10進数) :-
    どの桁の数字も右隣の桁の数字よりも大きい(['9','8','7','6','5','4','3','2','1','0'],_どの桁の数字も右隣の桁の数字よりも大きい数字ならび),
    '2桁以上の10進数'(_どの桁の数字も右隣の桁の数字よりも大きい数字ならび,_どの桁の数字も右隣の桁の数字よりも大きい2桁以上の10進数).

どの桁の数字も右隣の桁の数字よりも大きい([A],[A]) :- !.
どの桁の数字も右隣の桁の数字よりも大きい([A|R1],[A|R2]) :-
    どの桁の数字も右隣の桁の数字よりも大きい(R1,R2).
どの桁の数字も右隣の桁の数字よりも大きい([_|R1],R2) :-
    どの桁の数字も右隣の桁の数字よりも大きい(R1,R2).

'2桁以上の10進数'([A,B|R],_2桁以上の10進数) :-
    number_chars(_2桁以上の10進数,[A,B|R]).
607デフォルトの名無しさん:2012/06/23(土) 13:04:34.04
>>602
J

f=:%:@(*/)@:-~-:@(+/)

f 5 3 4 5
17.4123
f 2 2 2 2
4
f 2 3 3 2
6
608デフォルトの名無しさん:2012/06/23(土) 17:45:20.80
>>602 F#
let maxSquareArea a b c d =
    let abcd = [a; b; c; d]
    let s = List.sum abcd / 2.
    abcd |> List.map ((-) s) |> List.reduce (*) |> sqrt

> maxSquareArea 5. 3. 4. 5.;;
val it : float = 17.41228015
> maxSquareArea 2. 2. 2. 2.;;
val it : float = 4.0
> maxSquareArea 2. 3. 3. 2.;;
val it : float = 6.0
609デフォルトの名無しさん:2012/06/23(土) 20:49:25.53
>>602
maxima

f(a,b,c,d):=(w:(a+b+c+d)/2,sqrt((a-w)*(b-w)*(c-w)*(d-w)));
610デフォルトの名無しさん:2012/06/23(土) 21:58:11.67
>>602
R

f <- function(x){sqrt(prod(x - sum(x) / 2))}

> f(c(5,3,4,5))
[1] 17.41228
> f(c(2,2,2,2))
[1] 4
> f(c(2,3,3,2))
[1] 6
611デフォルトの名無しさん:2012/06/23(土) 23:44:13.82
問題
与えられた文字列の奇数番目を大文字に偶数番目を小文字にせよ。

Hello => HeLlO
end => EnD
612デフォルトの名無しさん:2012/06/24(日) 01:48:14.57
>>611 HSP

#module
#defcfunc solve str buf_, local buf, local moji
buf=buf_
repeat strlen(buf)
moji=peek(buf, cnt)
if cnt\2 {
if 'A'<=moji and moji<='Z' : poke buf, cnt, moji-'A'+'a'
} else {
if 'a'<=moji and moji<='z' : poke buf, cnt, moji-'a'+'A'
}
loop
return buf
#global

mes solve("Hello")
mes solve("end")
613デフォルトの名無しさん:2012/06/24(日) 06:41:02.61
>>611
% Prolog

'与えられた文字列の奇数番目を大文字に偶数番目を小文字にせよ。'(_与えられた文字列,_奇数番目を大文字に偶数番目を小文字にした文字列) :-
    findall(_変換した文字,(
          sub_atom(_文字列,_0起点位置,1,_,_文字),
          奇数番目を大文字に偶数番目を小文字に(_0起点位置,_文字,_変換した文字)),
        _奇数番目を大文字に偶数番目を小文字にした文字ならび),
    atom_chars(_奇数番目を大文字に偶数番目を小文字にした文字列,_奇数番目を大文字に偶数番目を小文字にした文字ならび).

奇数番目を大文字に偶数番目を小文字に(_0起点位置,_文字,_小文字) :-
    奇数番目を(_0起点位置),
    小文字に(_文字,_小文字).
奇数番目を大文字に偶数番目を小文字に(_0起点位置,_文字,_大文字) :-
    偶数番目を(_0起点位置),
    大文字に(_文字,_大文字).

奇数番目を(_0起点位置) :-
    1 is (_0起点位置 + 1) mod 2.

偶数番目を(_0起点位置) :-
    0 is (_0起点位置 + 1) mod 2.

小文字に(_文字,_小文字) :-
    to_lower(_文字,_小文字).

大文字に(_文字,_大文字) :-
    to_upper(_文字,_大文字).
614デフォルトの名無しさん:2012/06/24(日) 07:59:00.58
>>611
J

f=:3 :'((#y)$0 1)}(toupper,:tolower)y'

f 'Hello'
HeLlO
f 'end'
EnD
615デフォルトの名無しさん:2012/06/24(日) 08:47:27.49
>>611
Haskell

import Data.Char

f = zipWith ($) (cycle [toUpper, toLower])

main = do
  print $ f "Hello"
  print $ f "end"
616デフォルトの名無しさん:2012/06/24(日) 09:24:22.78
>>611
Maxima

f(s):=(w:charlist(supcase(s)),
for i:2 thru slength(s) step 2 do w[i]:sdowncase(w[i]),simplode(w,""));

(%i33) f("Hello");
(%o33) HeLlO
(%i34) f("end");
(%o34) EnD
617デフォルトの名無しさん:2012/06/24(日) 13:10:59.12
>>611
Io

f:=method(s,w:="";s foreach(i,v,w=w .. if(i%2==0,v&223,v|32)asCharacter))

Io> f("Hello")
==> HeLlO
Io> f("end")
==> EnD
618デフォルトの名無しさん:2012/06/24(日) 16:21:34.28
>>611
D

enum f = (string s) => zip(cycle([0, 1]), s).map!(x => (x[0])? x[1].toLower: x[1].toUpper);
f("Hello").writeln;
f("end").writeln;
619デフォルトの名無しさん:2012/06/24(日) 16:59:08.08
>>611
Gauche

(use gauche.sequence)

(define (f s)
(list->string (map-with-index (^(n x) (if (even? n) (char-upcase x) (char-downcase x))) s)))

(print (f "Hello"))
(print (f "end"))
620デフォルトの名無しさん:2012/06/24(日) 18:10:55.92
>>611 F#
open System
let f = String.mapi (function i when i % 2 = 0 -> Char.ToUpper | _ -> Char.ToLower)

> f "Hello";;
val it : string = "HeLlO"
> f "end";;
val it : string = "EnD"
621デフォルトの名無しさん:2012/06/24(日) 20:42:24.17
>>602 C言語
なんでこれで解けるんだ???

#include<stdio.h>
#include<math.h>

double calc_area(double a, double b, double c, double d)
{
double s=(a+b+c+d)/2;
return sqrt((s-a)*(s-b)*(s-c)*(s-d));
}

int main(void)
{
printf("%f\n", calc_area(5,3,4,5));
printf("%f\n", calc_area(2,2,2,2));
printf("%f\n", calc_area(2,3,3,2));

return 0;
}
622デフォルトの名無しさん:2012/06/24(日) 21:03:50.38
>>621
問題文をそのままぐぐってみろ

http://www2.ocn.ne.jp/~mizuryu/kadai5/kadai241a.htm

こういうのがたくさん出てくるだろ?
623デフォルトの名無しさん:2012/06/25(月) 05:32:55.77
問題
東京スカイツリーのてっぺんから硬式野球ボールを落としたら地表での時速は?
624デフォルトの名無しさん:2012/06/25(月) 07:03:46.13
>>623
「自由落下」でぐぐるとこんなのが出て来た
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1063770510
625デフォルトの名無しさん:2012/06/25(月) 07:10:34.06
626デフォルトの名無しさん:2012/06/25(月) 07:11:48.28
落下距離 h
634m
[重力加速度 g
9.80665m/s2]
経過時間 t
11.371016480755 秒
その時の落下速度 v
111.511578771 m/s
=
401.44168357558 km/h
627デフォルトの名無しさん:2012/06/25(月) 07:44:09.28
>>623 C言語
空気抵抗に関する係数 μ をいい加減に決定
本当は野球ボールの形状および空気の粘性係数によって要変更

#include<stdio.h>

double solve(double h, double g, double m, double myu, double delta)
{
double y=0.0, v=0.0, t=0.0;

while(y<h)
{
v+=(g-myu*v*v/m)*delta;
y+=v*delta;
}
return v;
}

int main(void)
{
double h=634, g=9.8, m=0.145, myu=0.005, delta=0.001;

printf("%.3f km/h\n", solve(h, g, m, myu, delta)*60*60/1000);

return 0;
}

> 60.690 km/h
628デフォルトの名無しさん:2012/06/25(月) 08:24:24.08
>>627
投手が投げるボールが 初速140km/h のとき 終速132km/h 程度ということから
μ 0.00045 くらい

> 200.313 km/h
629デフォルトの名無しさん:2012/06/25(月) 18:26:15.99
問題
長針と短針の間の角度がX度のとき、可能性のある時刻をすべて挙げよ。
630デフォルトの名無しさん:2012/06/25(月) 20:39:14.02
631デフォルトの名無しさん:2012/06/25(月) 20:39:54.25
>>630 は C言語
632デフォルトの名無しさん:2012/06/26(火) 18:06:48.98
http://toro.2ch.net/test/read.cgi/tech/1339338438/364
# [1] 授業単元:
# [2] 問題文(含コード&リンク):
# ∀m; n ∈ Z に対して次の(14) - (16) 式が成り立つことを
# 区分求積法によって確認するためのプログラムを作成せよ.
# S1 :=∫ −sin nx sinmx dx = mn (14)
# S2 :=∫ −cos nx cosmx dx = mn (15)
# S3 :=∫ −sin nx cosmx dx = 0 (16)
# ただしmn はクロネッカーのデルタ
#    1 (m = n)
# mn ={
#    0 (m ̸= n) (17)
# である.
#
633デフォルトの名無しさん:2012/06/26(火) 19:04:05.43
問題
13桁のISBNコードを検査せよ。

9784062772211 => OK
9784150315684 => NG
634デフォルトの名無しさん:2012/06/26(火) 19:28:13.24
>>633 HSP
#module
#defcfunc ISBN13_is_ok str isbn_, local isbn, local sum, local moji, local ret
isbn=isbn_
if strlen(isbn)!13 : return 0
ret=1
repeat 13
moji=peek(isbn, cnt)-'0'
if moji<0 or 9<moji : ret=0 : break
sum+=moji*((cnt\2)*2+1)
loop
if sum\10 : ret=0
return ret
#global

result_msg="NG", "OK"
mes result_msg.ISBN13_is_ok("9784062772211")
mes result_msg.ISBN13_is_ok("9784150315684")
635デフォルトの名無しさん:2012/06/26(火) 20:14:50.86
>>632
問題の読み方が分からん
x について 0〜2π で積分したら -π か 0 かのいずれかになってしまう
636デフォルトの名無しさん:2012/06/26(火) 22:14:22.74
633>>
Maxima

f(s):=is(mod(lsum(i,i,map(eval_string,charlist(s))*[1,3,1,3,1,3,1,3,1,3,1,3,1]),10)=0);

(%i63) f("9781234567897");
(%o63) true
(%i64) f("9784150315684");
(%o64) false
637デフォルトの名無しさん:2012/06/27(水) 16:54:08.94
>>629
% Prolog

'長針と短針の間の角度がX度のとき、可能性のある時刻をすべて挙げよ'(_X度,_時,_分,秒) :-
    between(0,11,N),
    可能性のある時刻(N,_X度,_可能性のある時刻),
    '時・分・秒に分解'(_可能性のある時刻,_時,_分,_秒).

可能性のある時刻(N,_X度,_角度差までの接近時刻) :-
    角度差までの接近時刻(N,_X度,_角度差までの接近時刻).
可能性のある時刻(N,_X度,_角度差までの接近時刻) :-
    長針が短針を追い越し角度差を付ける時刻(N,_X度,_角度差をつける時刻).

角度差までの接近時刻(N,_X度,_角度差までの接近時刻) :-
    _X度 < (30 * N),
    _追い付き時間 is _X度 / 330 + N,
    _角度差までの接近時刻 is N + _追い付き時間.

長針が短針を追い越し角度差を付ける時刻(N,_X度,_角度差をつける時刻) :-
    _追い付き時間 is (30 * N + _X度) / 330,
    _追い付き時間 < 1.0,
    _角度差をつける時刻 is N + _追い付き時間.

'時・分・秒に分解'(_時刻_時,_時,_分,_秒) :-
    _時 is truncate(_時刻_時) // 3600,
    _余り秒 is truncate(_時刻_時) mod 3600,
    _分 is _余り秒 // 60,
    _秒 is _余り秒 mod 60.
638629:2012/06/27(水) 16:56:19.01
% Prolog
% 一行目の一番最後の引数のアンダースコアが落ちてしまった。ただ、秒となっている。
% 訂正。

'長針と短針の間の角度がX度のとき、可能性のある時刻をすべて挙げよ'(_X度,_時,_分,_秒) :-
    between(0,11,N),
    可能性のある時刻(N,_X度,_可能性のある時刻),
    '時・分・秒に分解'(_可能性のある時刻,_時,_分,_秒).
639デフォルトの名無しさん:2012/06/28(木) 00:27:59.15
>>633
Gauche

(define (f s)
(let* ((xs (map digit->integer (string->list s #\-) ""))
(ns (drop-right xs 1))
(cd (last xs))
(r (fold (^(a b) (+ b (* (car a) (cadr a)))) 0 (zip ns (circular-list 1 3)))))
(= (- 10 (mod r 10)) cd)))

(print (f "9784062772211")) ; #t
(print (f "9784150315684")) ; #f
640デフォルトの名無しさん:2012/06/28(木) 22:06:17.12
delphiで四則演算ができる電卓を作成してください。
ボタン0〜9
+、=、*、−、c、ac、/、
が最低限、ほかになにか機能がついてるとうれしいです。
641デフォルトの名無しさん:2012/06/28(木) 23:49:50.25
>>639

よけいなの入ってたので修正
(let* ((xs (map digit->integer (string->list s)))
642デフォルトの名無しさん:2012/07/03(火) 11:40:23.74
問題
数字がひとつ不明な13桁のISBNコードを復元せよ。
例(不明な所を?とする)
9784062?72211 => 9784062772211
978415031?684 => 9784150310684
643デフォルトの名無しさん:2012/07/03(火) 12:16:59.04
>>642 HSP
#module
#defcfunc solve str isbn_, local isbn, local sum, local x
isbn=isbn_
repeat 13
moji=peek(isbn, cnt)
if moji='?' {
x=cnt
} else {
sum+=((cnt\2)*2+1)*(moji-'0')
}
loop

if x\2 {
poke isbn, x, (sum*3)\10+'0'
} else {
poke isbn, x, (sum*9)\10+'0'
}
return isbn
#global


mes solve("9784062?72211")
mes solve("978415031?684")
644デフォルトの名無しさん:2012/07/03(火) 17:20:59.80
645デフォルトの名無しさん:2012/07/04(水) 07:15:32.03
>>642
Maxima

f(s):=is(mod(lsum(i,i,map(eval_string,charlist(s))*[1,3,1,3,1,3,1,3,1,3,1,3,1]),10)=0);
g(s):=for i:0 thru 9 do if f(a:ssubst(string(i),"?",s)) then return(a);

(%i35) g("9784062?72211");
(%o35) 9784062772211
(%i36) g("978415031?684");
(%o36) 9784150310684
646デフォルトの名無しさん:2012/07/04(水) 17:16:51.27
問題
与えられた文字列を先頭と末尾から削除していき二文字以下にせよ。

world => r
konokodokonokodokonokokonoko => od
647デフォルトの名無しさん:2012/07/04(水) 17:32:12.46
>>646 HSP

#module
#defcfunc solve str msg_, local msg, local len
msg=msg_
len=strlen(msg)
return strmid(msg, (len-1)/2, len-(len-1)/2*2)
#global

mes solve("world")
mes solve("konokodokonokodokonokokonoko")
648デフォルトの名無しさん:2012/07/04(水) 18:29:22.93
>>646
% Prolog

与えられた文字列を先頭と末尾から削除していき二文字以下にする(_文字列_1,_文字列) :-
    sub_atom(_文字列_1,1,_文字列の文字数,1,_文字列_2),
    _文字列の文字数 > 2,
    与えられた文字列を先頭と末尾から削除していき二文字以下にする(_文字列_2,_文字列).
与えられた文字列を先頭と末尾から削除していき二文字以下にする(_文字列,_文字列).
649デフォルトの名無しさん:2012/07/04(水) 18:40:38.73
>>646
% Prolog プログラマが指定して削除していくのではなく、処理系がそんなことしてることになるかも、という話。

与えられた文字列を先頭と末尾から削除していき二文字以下にする(_与えられた文字列,_二文字以下の文字列) :-
    sub_atom(_与えられた文字列,N,_文字列の文字数,N,_二文字以下の文字列),
    _文字列の文字数 =< 2.
650デフォルトの名無しさん:2012/07/04(水) 18:53:26.65
>>646 HSP
再帰

#module
#defcfunc solve str msg_, local msg, local len
msg=msg_
len=strlen(msg)
if len<=2 : return msg
return solve(strmid(msg, 1, len-2))
#global

mes solve("world")
mes solve("konokodokonokodokonokokonoko")
651デフォルトの名無しさん:2012/07/05(木) 00:21:19.95
>>646
-- Haskell

f s = if (length s) < 3 then s else f $ (tail . init) s

main = do
print $ f "world"
print $ f "konokodokonokodokonokokonoko"
652デフォルトの名無しさん:2012/07/05(木) 12:29:12.38
問題
整数nが与えられたとき、1からnの数すべてを1桁に分解して集計せよ。

n=15のとき
1+2+3+4+5+6+7+8+9+(1+0)+(1+1)+(1+2)+(1+3)+(1+4)+(1+5) = 66
653デフォルトの名無しさん:2012/07/05(木) 14:38:19.88
>>652
% Prolog
% こういうことは、絶対にやってはいけません。そういう作品。


'整数nが与えられたとき、1からnの数すべてを1桁に分解して集計せよ。'(_n,_集計値) :-
    一桁ずつ四項に分解した加算文字列ならび(_n,_一桁ずつ四項に分解した加算文字列ならび),
    atomic_list_concat(_一桁ずつ四項に分解した加算式文字列ならび,'+',_評価式文字列),
    atom_to_term(_評価式文字列,_評価式,_),
    _集計値 is _評価式.


一桁ずつ四項に分解した加算文字列ならび(_n,_一桁ずつ四項に分解した加算文字列ならび) :-
    findall(_一桁ずつ四項に分解した加算式文字列,(
          between(1,_n,_整数),
          number_chars(_整数,_一桁ずつ四項に分解した数字ならび),
          atomic_list_concat(_一桁ずつ四項に分解した数字ならび,'+',_一桁ずつ四項に分解した加算式文字列)),
       _一桁ずつ四項に分解した加算式文字列ならび).
654デフォルトの名無しさん:2012/07/05(木) 14:42:23.30
>>652
% Prolog すみません。一ヶ所間違えた。書き直し。


'整数nが与えられたとき、1からnの数すべてを1桁に分解して集計せよ。'(_n,_集計値) :-
    一桁ずつ四項に分解した加算文字列ならび(_n,_一桁ずつ四項に分解した加算文字列ならび),
    atomic_list_concat(_一桁ずつ四項に分解した加算式文字列ならび,'+',_評価式文字列),
    atom_to_term(_評価式文字列,_評価式,_),
    _集計値 is _評価式.


一桁ずつ四項に分解した加算文字列ならび(_n,_一桁ずつ四項に分解した加算式文字列ならび) :-
    findall(_一桁ずつ四項に分解した加算式文字列,(
          between(1,_n,_整数),
          number_chars(_整数,_一桁ずつ四項に分解した数字ならび),
          atomic_list_concat(_一桁ずつ四項に分解した数字ならび,'+',_一桁ずつ四項に分解した加算式文字列)),
       _一桁ずつ四項に分解した加算式文字列ならび).
655653, 654:2012/07/05(木) 14:56:38.53
>>652
% Prolog さらに二ヶ所間違っていた。申し訳ないからリンクで。

http://nojiriko.asia/prolog/ironnagengo5_652.html


普通の回答は

http://nojiriko.asia/prolog/ironnagengo5_652_1.html
656デフォルトの名無しさん:2012/07/05(木) 17:54:27.76
>>652 HSP
#module
#defcfunc calc int x_, local x, local ret
x=x_
repeat
ret+=x\10
x/=10
if x=0 : break
loop
return ret

#defcfunc solve int n, local sum
repeat n, 1
sum+=calc(cnt)
loop
return sum
#global

mes solve(15)
657デフォルトの名無しさん:2012/07/05(木) 22:21:55.44
>>655
質問者じゃないけど俺は感動した!これがPrologのコードというものなのか.
多分かなりの腕の方なんだろうけど,いつもPrologでどういう問題の
プログラム書いてるの?汎用言語として使っているのか,ルールベースの
かなり特化した問題についてだけ使っているのか知りたい.興味本位だけど.
しかし >>655 さんなら問題の種類によらずPrologで書けそうですねうらやましい
658デフォルトの名無しさん:2012/07/06(金) 00:46:16.13
>>633>>642
Haskell

import Data.Char

replace s t r
| s == [] = []
| head s == t = r : replace (tail s) t r
| otherwise = head s : replace (tail s) t r

check s = cd == last ns
where ns = map digitToInt s
cd = 10 - (sum $ map (\x -> fst x * snd x) $ zip (cycle [1, 3]) $ init ns) `mod` 10

comp s = head $ filter check $ map (\x -> replace s '?' x) ['0'..'9']

main = do
print $ check "9784062772211"
print $ check "9784150315684"
print $ comp "9784062?72211"
print $ comp "978415031?684"
659デフォルトの名無しさん:2012/07/06(金) 00:54:51.88
>>652
Haskell

import Data.Char

f n = sum $ map sum $ map (map digitToInt) $ map show [0 .. n]

main = print $ f 15
660デフォルトの名無しさん:2012/07/06(金) 01:03:27.33
>>659の修正
map多すぎわろた

import Data.Char

f n = sum $ map (sum . (map digitToInt) . show) [0 .. n]

main = print $ f 15
661デフォルトの名無しさん:2012/07/06(金) 08:10:18.75
>>652
% Prolog 数値演算を排し、すべて匿名変数のリストの要素数で集計するプログラム。Prologでは
% 遊びとして使われるテクニックだが、私は実務でも結構使う。リストの割り算が定義済みであることが前提。

http://nojiriko.asia/prolog/ironnagengo5_652_2_2.html

>>657
23年くらい前にCOBOLで書かれていたシステムをPrologに置き換えて、以後現在までこの
言語だけ使用しています。COBOLで中途半端にしかできなかった、冗長なプログラム表現を
Prologで露悪的なまでに実現して見せているのが私のスタイル。
Prologが究極のモジュラープログラミングであることを感じていただけたら、嬉しい。
662デフォルトの名無しさん:2012/07/06(金) 20:11:14.41
>>652
Haskellで別解

f n = sum [sum [read [c]| c <- show x]| x <- [1..n]]
main = print $ f 15
663デフォルトの名無しさん:2012/07/06(金) 23:44:19.36
>652
Pythonで参加してもいいですか?

n = int(raw_input('n='))
print sum( sum(ord(e)-ord('0') for e in str(i) ) for i in xrange(1, n+1) )
664デフォルトの名無しさん:2012/07/07(土) 00:22:43.39
>>661
ご回答いただきありがとうございました.
やはり実務で,しかも汎用的に使っていらっしゃるんですね.
Prologは何度か挑戦しましたが全く歯が立たなかったので
Prolog脳からの問題の見かたには非常に興味があります.
多分他の言語を使うのとは全く違う考えかたで取りかかられる
のだと思いますが,アプローチの方向が異なることが問題解決
の新たな可能性につながるのではないかと想像します.
多分COBOLコードの書き直しもその一例なんでしょうね.
665デフォルトの名無しさん:2012/07/07(土) 10:47:49.74
>652 Scalaでワンライナー

scala> for(in <- io.Source.stdin.getLines)println((1 to in.toInt).map(_.toString./:(0)(_ + _.toString.toInt)).sum)
15
66
666デフォルトの名無しさん:2012/07/07(土) 11:07:42.45
2段ともfoldLeftで回した方が入力値が大きい際、heap的に優しいでしょうかね
本気で気にする場合にはIteratorで遅延評価するべきでしょうが

scala> for(in <- io.Source.stdin.getLines)println((1 to in.toInt)./:(0)(_ + _.toString./:(0)(_ + _.toString.toInt)))
15
66
667デフォルトの名無しさん:2012/07/07(土) 12:30:27.03
(defun calc (n)
  (loop for i to n
     sum (loop for j = i then (floor (/ j 10))
            until (zerop j)
            sum (mod j 10))))

99までは正しいバージョン
(defun calc2 (n)
  (/ (+ (expt (+ n 41) 2)
        (* 9 (expt (- (mod (1+ n) 10) 5) 2))
        -1825)
     20))
668デフォルトの名無しさん:2012/07/07(土) 19:11:50.36
最適化スレは此処でいいのかな?
だれがコレの最適化を頼む。俺じゃこれぐらいしかできない。
A=データ、re=regular expression
A[0]に配列のindexの最後が入ってる、C[0]は開始index、tは最後
array A,C;
int i,k,t,p;
  k=0;C[0]=0;t=0;
  for(i=1;i<=A[0];i++){
    if(C[0]){
      while((k+1)<i){
        A[k+=1]=C[C[0]++];
        if(C[0]>t){C[0]=0;t=0;break;};
      }
    }
    p=1;
    while(match(substr(A[i],p),re)){
      p+=RSTART-1;
      if((k+1)<i){
        A[k+=1]=substr(A[i],p,RLENGTH);
      }else{
        C[t+=1]=substr(A[i],p,RLENGTH);
        if(!C[0])C[0]=1;
      }
      p+=RLENGTH;
   };
  };
  A[0]=k;
  if(C[0]){while(C[0]<= t )A[A[0]+=1]=C[C[0]++];}
669デフォルトの名無しさん:2012/07/08(日) 10:06:10.25
>>663
Python 大歓迎。
670デフォルトの名無しさん:2012/07/08(日) 11:55:08.93
>669
ありがとう。
671デフォルトの名無しさん:2012/07/09(月) 09:58:06.44
>>652
C#

Func<int, int> f = (n) => (from i in Enumerable.Range(1, n)
select (from c in i.ToString().ToCharArray() select c - 48).Sum()
).Sum();
Console.Write(f(15));
672デフォルトの名無しさん:2012/07/09(月) 23:33:08.74
問題
「"Hello, world!"を標準出力に出力するJavaプログラムのソースコード」を
標準出力に出力するプログラムをいろんな言語でかけ。
673デフォルトの名無しさん:2012/07/10(火) 00:19:14.71
>672
Python

何の捻りもないけど。。

print 'public class Hello {'
print ' public static void main(String[] args) {'
print ' System.out.println("Hello, World!");'
print ' }'
print '}'
674デフォルトの名無しさん:2012/07/10(火) 08:09:40.46
>>652
octave

function z=f(n)
z=sum(sprintf("%d",1:n)-48);
end

> f(1234567)
ans = 32556016
> f(12345678)
error: memory exhausted or requested size too large for range of Octave's index type -- trying to return to prompt
675デフォルトの名無しさん:2012/07/10(火) 08:32:09.89
>>672
print "\"Hello, world!\"を標準出力に出力するJavaプログラムのソースコード";
676デフォルトの名無しさん:2012/07/10(火) 15:15:10.25
問題
n番目のフィボナッチ数を求める関数f(n)を再帰的に定義した場合に
この関数を呼び出す回数を求めよ。

n=10のときの関数fの呼び出し回数=109
n=30のときの関数fの呼び出し回数=1664079
677デフォルトの名無しさん:2012/07/10(火) 15:46:08.91
scala> :paste
def fn(n: Int) = {
var x = 0
def f(n: Int): Int = n match {
case n if n < 2 => { x += 1; n }
case n => { x += 1; f(n - 1) + f(n - 2) }
}
f(n - 1)
x
}

// Exiting paste mode, now interpreting.

scala> fn(10)
res0: Int = 109

scala> fn(30)
res1: Int = 1664079
678デフォルトの名無しさん:2012/07/10(火) 15:49:04.37
こたえを無理矢理合わせたけど
問題がおかしくないか?
679デフォルトの名無しさん:2012/07/10(火) 15:49:34.63
C#
int n = 0;
Func<int, int> f = null;
f = i => { n++; return (i == 1 || i == 2) ? 1 : f(i - 1) + f(i - 2); };
Console.WriteLine(f(30));
Console.WriteLine(n);
680デフォルトの名無しさん:2012/07/10(火) 15:56:50.79
呼び出し回数は f(n)*2-1だよ
681デフォルトの名無しさん:2012/07/10(火) 16:14:28.41
>>676 HSP
#module
#defcfunc fib int n, var count
count++
if n<2 : return n
return fib(n-1, count)+fib(n-2, count)

#defcfunc fib_count int n, local count, local dummy
dummy=fib(n, count)
return count
#global

mes fib_count(10) ; 177
mes fib_count(10-1) ; 109
mes fib_count(30) ; 2692537
mes fib_count(30-1) ; 1664079
682デフォルトの名無しさん:2012/07/10(火) 16:40:41.94
f(2) を f(1)+f(0)にするか1にするかだね
683デフォルトの名無しさん:2012/07/10(火) 16:44:52.37
scala> def f(xs: Seq[Int], n:Int = 0): Int = xs match {
case Nil => n
case xs => f(xs.filter(2<)./:(List.empty[Int])((xs, x) => x - 1 :: x - 2 :: xs), n + xs.size)
}

scala> f(10 :: Nil)
res0: Int = 109

scala> f(30 :: Nil)
res1: Int = 1664079
684デフォルトの名無しさん:2012/07/10(火) 18:05:56.68
>>679
(defun g (n)
  (if (< n 3)
      1
      (+ (h (decf n)) (h (decf n)) 1)))

(g 10) => 109
(g 30) => 1664079
685デフォルトの名無しさん:2012/07/10(火) 19:12:01.50
>>684
C#
Func<int, int> f = i => (i < 3) ? 1 : 1 + f(i - 1) + f(i - 2);
Console.WriteLine(f(30));
686デフォルトの名無しさん:2012/07/10(火) 19:42:22.03
>>676
% Prolog

'n番目のフィボナッチ数を求める述語を再帰的に定義した場合にこの述語を呼び出す回数を求め'(_n番目,_フィボナッチ数,_呼び出す回数) :-
    '帰納を使い、フィボナッチ数を得る'(_n番目,_フィボナッチ数,1,_呼び出す回数).

'帰納を使い、フィボナッチ数を得る'(0,0,S,S).
'帰納を使い、フィボナッチ数を得る'(1,0,S,S).
'帰納を使い、フィボナッチ数を得る'(2,1,S,S).
'帰納を使い、フィボナッチ数を得る'(N,X,S_1,S) :-
    N > 2,
    N_1 is N - 1,
    N_2 is N - 2,
    S_2 is S_1 + 2,
    '帰納を使い、フィボナッチ数を得る'(N_1,X_1,S_2,S_3),
    '帰納を使い、フィボナッチ数を得る'(N_2,X_2,S_3,S),
    X is X_1 + X_2,!.
687686:2012/07/10(火) 19:45:12.22
% Prolog トップの述語名が '・・・回数を求め' ではマズいですね。'・・・求める' に変更してください。

'n番目のフィボナッチ数を求める述語を再帰的に定義した場合にこの述語を呼び出す回数を求める'(_n番目,_フィボナッチ数,_呼び出す回数) :-
    '帰納を使い、フィボナッチ数を得る'(_n番目,_フィボナッチ数,1,_呼び出す回数).
688デフォルトの名無しさん:2012/07/10(火) 19:55:39.31
>>685
修正
Func<int, int> f = null; f = i => (i < 3) ? 1 : 1 + f(i - 1) + f(i - 2);
689デフォルトの名無しさん:2012/07/10(火) 20:03:07.29
フィボナッチ数そのものは求めずに
再帰回数だけ計算すれば良いの?
690デフォルトの名無しさん:2012/07/10(火) 20:18:19.33
>676
Python
無理矢理にも程がある。

def fibo_count(n):
  global s
  s += 1
  if n < 3: return n
  return fibo_count(n-1) + fibo_count(n-2)

def fibo(n):
  if n < 2: return n
  return fibo(n-1) + fibo(n-2)

print fibo(10) # 55
s = 0
fibo_count(10) # 109
print s
print fibo(10) * 2 - 1 # 109

print fibo(30) # 832040
s = 0
fibo_count(30) # 1664079
print s
print fibo(30) * 2 - 1 # 1664079
691デフォルトの名無しさん:2012/07/10(火) 20:36:24.94
>>676  Haskell

import Control.Monad.State
import Control.Applicative

fib n = runState (f n) 0
  where
    f m = modify (+ 1) >>
          if m < 3 then return 1 else (+) <$> f (m - 1) <*> f (m - 2)

main = do
  print $ fib 10  -- (55,109)
  print $ fib 30  -- (832040,1664079)



あと次のように再帰定義した場合には
再帰回数は 2*n-1 (n > 0) になるはず

fibs = 0 : 1 : zipWith (+) fibs (tail fibs)
fib n = fibs !! n
692デフォルトの名無しさん:2012/07/11(水) 00:31:00.04
>>676 OCaml

let rec f n = match n with
  | _ when n < 3 -> 1
  | _ -> f (n-1) + f (n-2) + 1;;

let main =
  Printf.printf "%d\n" (f 10);
  Printf.printf "%d\n" (f 50);
693デフォルトの名無しさん:2012/07/11(水) 04:13:59.15
問題

左端からn桁目の数のn乗を合計したものが元の数に等しい4桁以下の数をすべて求めよ。

89 => 8^1 + 9^2 = 89 OK
123 => 1^1 + 2^2 + 3^3 = 14 NG
694デフォルトの名無しさん:2012/07/11(水) 04:56:06.49
>>693
% Prolog

'左端からn桁目の数のn乗を合計したものが元の数に等しい4桁以下の数をすべて求める'(_4桁以下の数) :-
    between(0,9999,_4桁以下の数),
    number_codes(_4桁以下の数,Codes),),
    findsum(_左端からn桁目の数のn乗,(
          append(L0,[_左端からn桁目のcode|_],Codes),
          length([_|L0],_n),
          _左端からn桁目の数のn乗 is truncate((_左端からn桁目のcode-48) ^ _n),
        _4桁以下の数).

findsum(_選択項,_項,_合計値) :-
    findall(_選択項,_項,_値ならび),
    sum(_値ならび,_合計値).

sum([],0).
sum([N|R],S) :-
    sum(R,S_1),
    S is S_1 + N.
695694:2012/07/11(水) 05:13:26.17
% Prolog >>694 二ヶ所訂正。すみません。

'左端からn桁目の数のn乗を合計したものが元の数に等しい4桁以下の数をすべて求める'(_4桁以下の数) :-
    between(0,9999,_4桁以下の数),
    number_codes(_4桁以下の数,Codes),
    findsum(_左端からn桁目の数のn乗,(
          append(L0,[_左端からn桁目のcode|_],Codes),
          length([_|L0],_n),
          _左端からn桁目の数のn乗 is truncate((_左端からn桁目のcode-48) ^ _n)),
        _4桁以下の数).

findsum(_選択項,_項,_合計値) :-
    findall(_選択項,_項,_値ならび),
    sum(_値ならび,_合計値).

sum([],0).
sum([N|R],S) :-
    sum(R,S_1),
    S is S_1 + N.
696デフォルトの名無しさん:2012/07/11(水) 05:31:01.05
>>693
% Prolog

'左端からn桁目の数のn乗を合計したものが元の数に等しい4桁以下の数をすべて求める'(_4桁以下の数) :-
    between(0,9999,_4桁以下の数),
    '4要素以下の数ならび'(_4桁以下の数,[],_4要素以下の数ならび),
    '左端からn桁目の数のn乗を合計したものが元の数に等しい'(_4要素以下の数ならび,_4桁以下の数).

'4要素以下の数ならび'(0,L,L) :- !.
'4要素以下の数ならび'(N,L_1,L) :-
    M is N mod 10,
    N_1 is N // 10,
    '4要素以下の数ならび'(N_1,[M|L_1],L).

'左端からn桁目の数のn乗を合計したものが'([N_1],N_1).
'左端からn桁目の数のn乗を合計したものが'([N_1,N_2],S) :-
    S is N_1 + N_2 * N_2.
'左端からn桁目の数のn乗を合計したものが'([N_1,N_2,N_3],S) :-
    S is N_1 + N_2 * N_2 + N_3 * N_3 * N_3.
'左端からn桁目の数のn乗を合計したものが'([N_1,N_2,N_3,N_4],S) :-
    S is N_1 + N_2 * N_2 + N_3 * N_3 * N_3 + N_4 * N_4 * N_4 * N_4.
697デフォルトの名無しさん:2012/07/11(水) 05:50:47.83
>693
Python

for t in xrange(10000):
  if t == sum( int(str(t)[i])**(i+1) for i in xrange(len(str(t))) ):
    print t
698デフォルトの名無しさん:2012/07/11(水) 08:16:16.44
Haskell

import Data.Char
xs = [n | n <- [0..9999], (sum $ zipWith ((^) . digitToInt) (show n) [1..]) == n]
699デフォルトの名無しさん:2012/07/11(水) 08:55:50.48
>>693
#module
#include "hspmath.as"
#deffunc check int n, local buf, local x
buf=str(n)
repeat strlen(buf)
x+=pow(peek(buf, cnt)-'0', cnt+1)
loop
return n=x
#global

repeat 10000
check cnt
if stat : mes cnt
loop
700デフォルトの名無しさん:2012/07/11(水) 08:56:45.42
>>699 は HSP
701デフォルトの名無しさん:2012/07/11(水) 10:05:44.63
>>691 ふつくしい...
> fibs = 0 : 1 : zipWith (+) fibs (tail fibs)

702デフォルトの名無しさん:2012/07/11(水) 11:01:47.62
>701 遅延評価のおかげで循環数列が綺麗かつ少ない計算量でできて良いですね

scala> lazy val fib: Stream[Int] = Stream.cons(0, Stream.cons(1, fib.zip(fib.tail).map(p => p._1 + p._2)))
703デフォルトの名無しさん:2012/07/11(水) 12:24:43.31
>>693
1^1 + 2^2 + 3^3 = 14 ??
704デフォルトの名無しさん:2012/07/11(水) 12:39:44.82
>>693 >>703
すみません。例が間違っていました。

> >>693
> 1^1 + 2^2 + 3^3 = 14 ??

123 => > 1^1 + 2^2 + 3^3 = 32 NG
でした。
705デフォルトの名無しさん:2012/07/11(水) 13:01:17.68
>>693
C#
foreach (var n in Enumerable.Range(0, 9999))
if (n == (from i in n.ToString().ToCharArray().Select(c => c - 48)
.Select((val, index) => new { val, index })
select Math.Pow(i.val, (i.index + 1))
).Sum())
Console.WriteLine(n);
706デフォルトの名無しさん:2012/07/11(水) 14:23:35.25
>>693

scala> def f(n: Int) = for {
x <- 0 to n;
if x == x.toString.zip(1 to n.toString.length).map{t => math.pow(t._1 - '0', t._2)}.sum
} yield x

scala> f(9999)
res0: scala.collection.immutable.IndexedSeq[Int] =
Vector(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 89, 135, 175, 518, 598, 1306, 1676, 2427)
707デフォルトの名無しさん:2012/07/11(水) 18:19:29.30
問題
明日が何曜日なのか表示せよ。
708デフォルトの名無しさん:2012/07/11(水) 18:51:34.94
>>707 HSP

wday_name="日","月","火","水","木","金","土"
mes strf("明日は %s曜日", wday_name((gettime(2)+1)\7))
709デフォルトの名無しさん:2012/07/11(水) 18:57:30.66
>>707 C#
Console.WriteLine ( DateTime.Today.AddDays(1).ToString("明日は dddd"));
明日は 木曜日
710デフォルトの名無しさん:2012/07/11(水) 19:12:29.19
# [1] 授業単元: Visual C# ソフトウェア開発
# [2] 問題文(含コード&リンク):
#指定した親フォルダ下のbin、objフォルダ内のDebug、Rleaseフォルダを全て削除するプログラムを作成
711デフォルトの名無しさん:2012/07/11(水) 19:42:21.64
>707
Python

# -*- coding: utf-8 -*-
import datetime
w = [u'月', u'火', u'水', u'木', u'金', u'土', u'日']
print u'明日は' + w[(datetime.date.today() + datetime.timedelta(days=1)).weekday() % 7] + u'曜日'
712デフォルトの名無しさん:2012/07/11(水) 20:43:50.18
>>707
Haskell

import Data.Time.Calendar
import Data.Time.Clock
import Data.Time.Format
import System.Locale

main = getCurrentTime >>= putStrLn . formatTime defaultTimeLocale "%a" . addDays 1 . utctDay
713デフォルトの名無しさん:2012/07/11(水) 21:24:14.39
>>693
; Common Lisp
(loop for i to 9999
   when (= i
           (loop for c across (write-to-string i)
              and n upfrom 1
              sum (expt (digit-char-p c) n)))
   collect i)
714デフォルトの名無しさん:2012/07/11(水) 21:42:05.62
>>693
J

f=:3 :'+/(^1+i.@#)"."0":y'
(#~(=f)"0)i.10000
0 1 2 3 4 5 6 7 8 9 89 135 175 518 598 1306 1676 2427
715デフォルトの名無しさん:2012/07/11(水) 22:21:35.21
>>707
scala> :paste

import java.util.Calendar
val cal = Calendar.getInstance
cal.add(Calendar.DAY_OF_YEAR, 1)
println("明日は" + new java.text.SimpleDateFormat("E").format(cal.getTime) + "曜日")

明日は木曜日
716デフォルトの名無しさん:2012/07/11(水) 23:11:10.35
Jサッパリだ :3ってなにさ。
717デフォルトの名無しさん:2012/07/11(水) 23:21:31.34
>>707
REBOL

>> print pick system/locale/days now/weekday + 1
Thursday
718デフォルトの名無しさん:2012/07/12(木) 00:34:05.90
>>693
Gauche

(define (f)
  (let1 g (lambda (n)
        (let1 l ((.$ (map$ digit->integer) string->list number->string) n)
               (= (apply + (map (^x (apply expt x)) (zip l (iota 5 1)))) n)))
    (filter g (iota 10000))))

(print (f))
719デフォルトの名無しさん:2012/07/12(木) 00:41:23.14
>>707
Gauche

(use srfi-19)

(print (vector-ref #(Sun Mon Tue Wed Thu Fri Sat) (date-week-day (current-date))))
720デフォルトの名無しさん:2012/07/12(木) 01:10:12.71
>>719

修正
(print (vector-ref #(Sun Mon Tue Wed Thu Fri Sat) (mod (+ (date-week-day (current-date)) 1) 7)))
721デフォルトの名無しさん:2012/07/12(木) 08:53:17.51
>>710
% Prolog

'指定した親フォルダ下のbin、objフォルダ内のDebug、Rleaseフォルダを全て削除する'(_指定した親フォルダ) :-
    append(_,[_フォルダ_1|R],[bin,obj]),
    member(_フォルダ_2,['Debug','Rlease']),
    atomic_list_concat(['rm -R ',_指定した親フォルダ,/,_フォルダ_1,/,_フォルダ_2],S),
    shell(S),
    R = [].
722デフォルトの名無しさん:2012/07/12(木) 09:26:20.22
>>710
Z Shell

#!/usr/bin/zsh
# NOTE: Rleaseは要求仕様に依るものでReleaseのTYPOではない。
if [ $# -eq 1 ]; then
rm -rf $1/**/{bin,obj}/**/{Debug,Rlease}/
fi
723デフォルトの名無しさん:2012/07/12(木) 09:35:49.85
>>707
% Prolog SWI-Prologで明日をズバリ入手する方法があるのか調査中。

明日が何曜日なのか表示する :-
    date(date(_今日の年,_今日の月,_今日の日)),
    翌日(_今日の年,_今日の月,_今日の日,_翌日の年,_翌日の月,_翌日の日),
    day_of_the_week(date(_翌日の年,_翌日の月,_翌日の日),_曜日番号),
    nth0(_曜日番号,[日曜,月曜,火曜,水曜,木曜,金曜,土曜],_曜日),
    writef('%t',[_曜日]).

翌日(_今日の年,12,31,_翌日の年,1,1) :-
    _翌日の年 is _今日の年 + 1,!.
翌日(_年,_今日の月,_今日の日,_年,_翌日の月,1) :-
    月末日(_年,_今日の月,_今日の日),
    _翌日の月 is _今日の月 + 1,!.
翌日(_年,_月,_今日の日,_年,_月,_翌日の日) :-
    _翌日の日 is _今日の日 + 1.

月末日(_,2,29) :- !.
月末日(_年,2,28) :- \+(うるう年(_年)),!.
月末日(_,_今日の月,31) :- !.
月末日(_,_今日の月,30) :- member(_今日の月,[4,6,9,11]),!.

うるう年(_年) :- 0 is _年 mod 400,!.
うるう年(_年) :- 0 is _年 mod 100,!,fail.
うるう年(_年) :- 0 is _年 mod 4.
724721:2012/07/12(木) 11:00:30.42
>>710
% Prolog ごめんなさい。間違っていました。

'指定した親フォルダ下のbin、objフォルダ内のDebug、Rleaseフォルダを全て削除する'(_指定した親フォルダ) :-
    append(_,[_フォルダ_1|R],[bin,obj]),
    append(_,[_フォルダ_2|R_2],['Debug','Rlease']),
    atomic_list_concat(['rm -R ',_指定した親フォルダ,/,_フォルダ_1,/,_フォルダ_2],S),
    shell(S),
R_2 = [],
    R = [].


% でした。>>721だと obj/Rlease が対象になる前に終了してしまいます。
725デフォルトの名無しさん:2012/07/12(木) 11:37:30.24
>>707
% Prolog 「明日は何曜日」は今日は何曜日の次の曜日と考えたら
% よいではないかという助言をいただきました。確かに・・

明日が何曜日なのか表示する :-
    date(_今日),
    day_of_the_week(_今日,_今日の曜日番号),
    _明日の曜日番号 is (_今日の曜日番号 + 1) mod 7,
    nth0(_明日の曜日番号,[日曜,月曜,火曜,水曜,木曜,金曜,土曜],_曜日),
    writef('%t',[_曜日]).
726デフォルトの名無しさん:2012/07/12(木) 12:01:23.00
>>717 >>707 間違えました。訂正します。
REBOL

>> print pick system/locale/days (mod now/weekday 7) + 1
Friday
727デフォルトの名無しさん:2012/07/12(木) 12:03:49.88
>>707
octave

> disp(strftime("%A",localtime(time+86400)))
Friday
728デフォルトの名無しさん:2012/07/12(木) 13:08:25.17
>>724
もし bin/Rlease や obj/Debug という*ファイル*があったら消えてしまいますね
729デフォルトの名無しさん:2012/07/12(木) 13:58:36.23
>710
Python

import os

def func(rootdir):
  for (root, dirs, files) in os.walk(rootdir, topdown=False):
    for d in dirs:
      path = os.path.normpath(os.path.join(root, d))
      os.rmdir(path)
      print path + ' ... deleted.'
    for f in files:
      path = os.path.normpath(os.path.join(root, f))
      os.remove(path)
      print path + ' ... deleted.'

root = raw_input('input the root directory: ')
func(root + '/bin/')
func(root + '/obj/Debug/')
func(root + '/obj/Rlease/')
730729:2012/07/12(木) 14:01:12.07
失礼。

func(root + '/bin/Debug/')
func(root + '/bin/Rlease/')
func(root + '/obj/Debug/')
func(root + '/obj/Rlease/')

ですね。
731デフォルトの名無しさん:2012/07/12(木) 14:02:32.18
>>728 >>710
% Prolog 確かに。削除が失敗することも想定すると>>724はダメで、

'指定した親フォルダ下のbin、objフォルダ内のDebug、Rleaseフォルダを全て削除する'(_指定した親フォルダ) :-
    '指定した親フォルダ下のbin、objフォルダ内の'(_フォルダ_1),
    'Debug、Rleaseフォルダを'(_フォルダ_2),
    '全て削除する'(_指定した親フォルダ,_フォルダ_1,_フォルダ_2).
'指定した親フォルダ下のbin、objフォルダ内のDebug、Rleaseフォルダを全て削除する'(_).

'指定した親フォルダ下のbin、objフォルダ内の'(_フォルダ_1) :-
    member(_フォルダ_1,[bin,obj]).

'Debug、Rleaseフォルダを'(_フォルダ_2) :-
    member(_フォルダ_2,['Debug','Rlease']).

'全て削除する'(_指定した親フォルダ,_フォルダ_1,_フォルダ_2) :-
    atomic_list_concat([_指定した親フォルダ,/,_フォルダ_1,/,_フォルダ_2],_フォルダ),
    \+(exists_file(_フォルダ)),
    atomic_list_concat(['rm -R ',_フォルダ],S),
    shell(S),
    fail.
732デフォルトの名無しさん:2012/07/12(木) 15:06:25.42
問題
文字列が与えられたとき、この文字列を出力するBrainf*ckプログラムを生成せよ。
733デフォルトの名無しさん:2012/07/12(木) 16:08:06.03
>>710
Haskell

import System.Directory
import System.Environment

main = do
  roots <- getArgs
  mapM_ (\dir -> removeDirectoryRecursive dir `catch` print)
    [x ++ "/" ++ y ++ "/" ++ z | x <- roots, y <- ["bin", "obj"], z <- ["Debug", "Rlease"]]
734デフォルトの名無しさん:2012/07/12(木) 16:12:07.15
735デフォルトの名無しさん:2012/07/12(木) 17:01:21.29
問題

三本のまっすぐな棒の長さ a, b, c (1<= a,b,c <=1000 の整数)が与えられたとき
三本の棒で作ることの出来る三角形の最大面積を求めよ(計算誤差は 0.001以下とする)
棒は切断したり曲げたりすることは出来ない
また棒の太さは十分細く無視できるものとする
736デフォルトの名無しさん:2012/07/12(木) 17:05:19.67
>>732
% Prolog

'文字列が与えられたとき、この文字列を出力するBrainf*ckプログラムを生成する'(_文字列) :-
    atom_length(_文字列,_文字列の長さ),
    文字列をセルに書き込む(_文字列),
    セルの文字列を出力する(_文字列の長さ).

文字列をセルに書き込む(_文字列) :-
    write(>),
    sub_atom(_文字列,_,1,R,_文字),
    一文字セルに書く(_文字),write(>),
    R = 0,!.

セルの文字列を出力する(_文字列の長さ) :-
    ポインターを戻す(_文字列の長さ),
    セルから文字を順に取り出し出力する(_文字列の長さ).

一文字セルに書く(_文字) :-
    char_code(_文字,_文字コード),
    between(1,_文字コード,N),write(+),N = _文字コード.

ポインターを戻す(_文字列の長さ) :-
    between(1,N,_文字列の長さ),write(<),N = _文字列の長さ.

セルから文字を順に取り出し出力する(_文字列の長さ) :-
    between(1,N,_文字列の長さ),
    write('.>'),
    N = _文字列の長さ.
737デフォルトの名無しさん:2012/07/12(木) 17:42:44.68
>>735
意味がよくわからない。それだと、ヘロンの公式を適用するだけのように思うが。
738デフォルトの名無しさん:2012/07/12(木) 17:44:42.36
>>732
Scala

scala> def encode_bf(s: String) = s.flatMap("+" * _.toInt + ">") + "<" * s.length + ".>" * s.length

scala> :paste
object BrainfuckDecorder extends util.parsing.combinator.JavaTokenParsers {
val memory = Array.fill(4096)(0)
var pointer = 0
var counter = 0
def read: Int = memory(pointer)
def write(x: Int) = memory(pointer) = x
def exec(in: String) = parseAll(exprs, in)
def exprs = rep(incPtr | decPtr | incMem | decMem | output | input)
def incPtr = ">" ^^ { case ">" => {pointer += 1; counter += 1} }
def decPtr = "<" ^^ { case "<" => {pointer -= 1; counter += 1} }
def incMem = "+" ^^ { case "+" => write(read + 1) }
def decMem = "-" ^^ { case "-" => write(read - 1) }
def output = "." ^^ { case "." => print(read.toChar) }
def input = "," ^^ { case "," => {print(">"); write(readChar); println} }
}

scala> BrainfuckDecorder.exec(encode_bf("hoge\n"))
hoge
739デフォルトの名無しさん:2012/07/12(木) 18:45:22.09
与えられた長さと、三角形になりうる範囲の長さ(短く使う)の組み合わせで
面積計算して最大だせばいいのかな?
短く使うときは辺の長さは整数とは限らないのかな?
740デフォルトの名無しさん:2012/07/12(木) 18:49:35.81
>>735 HSP
#module
#deffunc swap var a, var b, local t
t=a
a=b
b=t
return

#defcfunc calc int a_, int b_ , int c_, local a, local b, local c, local s, local area
a=a_
b=b_
c=c_
if a<b : swap a, b
if a<c : swap a, c
if b<c : swap b, c
if a*a>b*b+c*c {
area=0.5*b*c
} else {
s=0.5*(a+b+c)
area=sqrt(s*(s-a)*(s-b)*(s-c))
}
return area
#global

mes calc(30,40,49) ; 599.489314
mes calc(30,40,50) ; 600.000000
mes calc(30,40,51) ; 600.000000
mes calc(1,1,10) ; 0.500000
741デフォルトの名無しさん:2012/07/12(木) 19:03:45.81
>>732
Io

f:=method(s,
a:=0;w:="";
s foreach(v,b:=v-a;w=w ..(if(b>0,"+","-")repeated(b abs)..".");a=a+b);
w)

Io> f("ACB")
==> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.++.-.
742デフォルトの名無しさん:2012/07/12(木) 19:06:39.65
>732
Python

import sys
write = sys.stdout.write
s = raw_input()
cur = 0
dif = 0
for e in s:
  code = ord(e)
  dif = code - cur
  cur = code
  for _ in xrange(abs(dif)):
    write('-' if dif < 0 else '+')
  write('.')
743デフォルトの名無しさん:2012/07/12(木) 19:22:50.70
>735
Python

a, b, c = sorted(map(int, raw_input().split()))
if a + b <= c:
  print -1
else:
  s = (a + b + c) / 2.
  S = (s * (s-a) * (s-b) * (s-c)) ** .5
  print S
744737:2012/07/12(木) 21:14:17.17
>>735
すみません。わかりました。私が考えたように単純な話ではなかった。
745デフォルトの名無しさん:2012/07/12(木) 22:39:33.27
問題
1が連続しない2進数を1から小さい順に1000個求めよ。

10 => OK
110 => NG
10101 =>OK
11011 =>NG
746デフォルトの名無しさん:2012/07/12(木) 22:51:33.54
>>745 HSP
buf=""
repeat 1000,1
buf+=str(cnt\2)
mes buf
loop
747デフォルトの名無しさん:2012/07/12(木) 22:52:25.18
>>746 は間違い
748デフォルトの名無しさん:2012/07/12(木) 23:28:59.47
>>745
Haskell

import Data.List

b 0 = "0"
b 1 = "1"
b n = b x ++ b y where (x,y) = n `divMod` 2

main = print $ take 1000 $ filter (not . isInfixOf "11") $ map b [1..]
749デフォルトの名無しさん:2012/07/12(木) 23:36:20.48
>>745
C#
public static IEnumerable<string> bin()
{
for (int i = 0; ; ++i) yield return Convert.ToString(i, 2);
}

static void Main() {
Regex regex = new Regex("1{2,}");
foreach (var s in (from s in bin() where !regex.IsMatch(s) select s).Take(1000))
Console.WriteLine(s);
}
750デフォルトの名無しさん:2012/07/12(木) 23:39:08.08
1からだった i=0を1に
751デフォルトの名無しさん:2012/07/12(木) 23:39:32.32
752デフォルトの名無しさん:2012/07/12(木) 23:47:56.87
>>751 これも間違い orz
753デフォルトの名無しさん:2012/07/13(金) 00:01:04.20
>>745 HSP
#module
#defcfunc num2bin int x_, local x, local buf
x=x_
buf=""
repeat
if x=0 : break
buf=strf("%d%s", x&1, buf)
x>>=1
loop
return buf
#global
result.0="1"
repeat -1, 2
buf=num2bin(cnt)
if instr(buf, 0, "11")<0 {
result.length(result)=buf
if length(result)>=1000 : break
}
loop

buf=""
repeat 1000
buf+=result.cnt+"\n"
loop

mesbox buf, ginfo_sx, ginfo_sy
754デフォルトの名無しさん:2012/07/13(金) 00:32:00.79
>>710
この問題の元の答え教えてもらえませんか?
もしくはC#で書ける人いたらお願いします
755デフォルトの名無しさん:2012/07/13(金) 00:46:57.50
>>754
4フォルダに
System.IO.Directory.Deleteで trueつければいいんじゃねーの? 
756デフォルトの名無しさん:2012/07/13(金) 00:57:39.67
>>732
Gauche

(define (gen s)
  (list->string (apply append (map (^x (append (take (circular-list #\+) (char->integer x)) '(#\. #\>))) (string->list s)))))
757デフォルトの名無しさん:2012/07/13(金) 01:02:03.34
>754
普段C#なんて殆ど書かないし、仕様を履き違えてるかもしれないし、バグがあるかもしれないけど、どうぞ。
使うのは自己責任で。ディレクトリを削除するツールなので念押ししておきます。

using System;
using System.IO;

public class Labo_1276873238_710 {
    private void doIt() {
        Console.Write("input your root directory: ");
        string root = Console.In.ReadLine();
        Directory.Delete(root + @"\bin\Debug\", true);
        Directory.Delete(root + @"\bin\Release\", true);
        Directory.Delete(root + @"\obj\Debug\", true);
        Directory.Delete(root + @"\obj\Release\", true);
    }

    static void Main(string[] args) {
        new Labo_1276873238_710().doIt();
    }
}
758デフォルトの名無しさん:2012/07/13(金) 01:12:02.22
>745
Python

l = ['1', '0'] * 500
for i in xrange(1000):
  s = ''.join(l)[0:i+1]
  print int(s, 2)
759デフォルトの名無しさん:2012/07/13(金) 01:17:54.80
>>745
Gauche

(use srfi-13)
(use srfi-43)

(define (f)
  (letrec ((itr (lambda (n vs)
      (if (= (vector-length vs) 1000) vs
        (if (string-scan (format "~b" n) "11") (itr (+ n 1) vs)
          (itr (+ n 1) (vector-append vs (vector n))))))))
    (itr 0 (make-vector 0))))

(print (f))
760デフォルトの名無しさん:2012/07/13(金) 01:20:06.49
1000個も出力する前に
まずプログラムの出力が"100"を含むかどうか
チェックしろと言いたい
761デフォルトの名無しさん:2012/07/13(金) 03:36:28.12
>>745
% Prolog

'1が連続しない2進数を1から小さい順に1000個求めよ。' :-
    '1が連続しない2進数を1から小さい順に1000個求めよ。'([1],1).

'1が連続しない2進数を1から小さい順に1000個求めよ。'([1|L],_度数) :-
    atomic_list_concat([0,b|[1|L]],S),
    atom_to_term(S,X,_),
    writef('%t: %t=%t\n',[_度数,X,S]),
    _度数 = 1000,!.
'1が連続しない2進数を1から小さい順に1000個求めよ。'([1|L],_度数_1) :-
    _度数_2 is _度数_1 + 1,
    '1が連続しない2進数を1から小さい順に1000個求めよ。'([0|[1|L]],_度数_2).
'1が連続しない2進数を1から小さい順に1000個求めよ。'([0|L],_度数) :-
    member(N,[1,0]),
    '1が連続しない2進数を1から小さい順に1000個求めよ。'([N|[0|L]],_度数).
762デフォルトの名無しさん:2012/07/13(金) 08:50:35.54
>>745
% Prolog

'1が連続しない2進数を1から小さい順に1000個求めよ。'(_1000個の数ならび) :-
    findall(_10進数,(
          '1が連続しない2進数を1から小さい順に'([1],1,_度数,_ビットならび),
          (  _度数 > 1000,!,fail;
            'ビットならびを10進数に変換'(_ビットならび,_10進数))),
        _1000個の数ならび).

'1が連続しない2進数を1から小さい順に'([1|L],_度数,_度数,[1|L]).
'1が連続しない2進数を1から小さい順に'([1|L],_度数_1,_度数,_ビットならび) :-
    _度数_2 is _度数_1 + 1,
    '1が連続しない2進数を1から小さい順に'([0,1|L],_度数_2,_度数,_ビットならび).
'1が連続しない2進数を1から小さい順に'([0|L],_度数_1,_度数,_ビットならび) :-
    member(N,[1,0]),
    '1が連続しない2進数を1から小さい順に'([N,0|L],_度数_1,_度数,_ビットならび).

'ビットならびを10進数に変換'(L,_10進数) :-
    atomic_list_concat([0,b|L],_二進数表示),
    atom_to_term(_二進数表示,_10進数,_).
763762:2012/07/13(金) 09:18:07.48
>>745
% Prolog 最初の述語の終止条件は以下が適切でした。

'1が連続しない2進数を1から小さい順に1000個求めよ。'(_1000個の数ならび) :-
    findall(_10進数,(
          '1が連続しない2進数を1から小さい順に'([1],1,_度数,_ビットならび),
          (  _度数 = 1000,! ;
            'ビットならびを10進数に変換'(_ビットならび,_10進数))),
        _1000個の数ならび).


%
%   findall(X,(
%         read(X),
%         ( X=end_of_file,!,fail; true )),
%      L).
%
% のような場合はLの中にend_of_fileを蒐集したくないから、failを入れます。上の場合は、
% 1000番目を含めたいから、 _度数 = 1000,!,true; でよい。(trueは省略可)
764デフォルトの名無しさん:2012/07/13(金) 09:20:10.44
>>763
すみません。訂正。repeatを落としました。

%
%   findall(X,(
%         repeat,
%         read(X),
%         ( X=end_of_file,!,fail; true )),
%      L).
765デフォルトの名無しさん:2012/07/13(金) 09:42:33.31
誠に恐縮です。

>>763 - >>764 はなかったことにしてください !!!

正しく実行されるためには、二箇所に 'ビットならびを10進数に変換' を書く必要がありました。
これを入れないと1000番目の要素だけ数値ではなく変数になってしまいます。

'1が連続しない2進数を1から小さい順に1000個求めよ。'(_1000個の数ならび) :-
    findall(_10進数,(
          '1が連続しない2進数を1から小さい順に'([1],1,_度数,_ビットならび),
          (  _度数 = 1000,!,'ビットならびを10進数に変換'(_ビットならび,_10進数);
            'ビットならびを10進数に変換'(_ビットならび,_10進数))),
        _1000個の数ならび).
766758:2012/07/13(金) 09:58:01.95
>745修正

cnt = 0
n = 1
while 1:
  b = format(n, 'b')
  if not '11' in b:
    cnt += 1
    print b
  if cnt == 1000:
    break
  n += 1
767デフォルトの名無しさん:2012/07/13(金) 11:36:08.66
>>757
ありがとうございます
768デフォルトの名無しさん:2012/07/13(金) 18:10:13.97
問題
ある数xの立方根を求めよ。

x=4のとき1.587401
769デフォルトの名無しさん:2012/07/13(金) 18:20:28.84
>>768 HSP

#module
#include "hspmath.as"
#defcfunc calc double x
return pow(x, 1.0/3)
#global
mes calc(4)
770デフォルトの名無しさん:2012/07/13(金) 18:43:19.82
>768
Python

n = float(raw_input('n='))
print n ** (1./3)
771デフォルトの名無しさん:2012/07/13(金) 18:59:50.21
【 課題 】迷路の最短経路を与えるプログラムを考えよ.
壁は#, 通路は.で表されている.
また迷路の外側は全て壁(即ち#)となっている.
スタート地点はS, ゴール地点はGである.
スタートからゴールまでの道のりを表わせ.
上へ移動する場合にはu, 同様に下はd, 右はr, 左はlとせよ.
最短経路が複数ある場合は, それらのうちどれかひとつを出力せよ。

例1)
#######
#..S..#
#.....#
#..G..#
#######
答え)
dd

例2)
#######
#.....#
#.G.#.#
#..#..#
#.#.S.#
#.....#
#######
答え)
ldlluuru
772771:2012/07/13(金) 19:04:32.72
たぶん1レスに収まらないと思うので、必要に応じてideoneを使ってください。
ttp://ideone.com/
自分の言語がないときは、"Text"を選ぶとプレーンテキストとして表示されるようです。
773デフォルトの名無しさん:2012/07/13(金) 19:46:58.84
774デフォルトの名無しさん:2012/07/13(金) 22:12:17.47
>>735

Gauche

(define (f a b c)
  (if (and (< a (+ b c)) (< b (+ a c)) (< c (+ a b)))
    (let ((s (/ (+ a b c) 2)))
      (sqrt (* s (- s a) (- s b) (- s c))))
    -1))

>>759
- (itr 0 (make-vector 0))))
+ (itr 1 (make-vector 0))))
なぜいつも問題文が読めないのか
775デフォルトの名無しさん:2012/07/13(金) 22:13:49.59
>>768

Gauche

(define (f n) (expt n (/ 1 3)))
776デフォルトの名無しさん:2012/07/14(土) 02:10:56.70
>>771
C#
http://ideone.com/uJYEx
距離で.を置換後、Gから逆にたどったけどあってんのかな?
777デフォルトの名無しさん:2012/07/14(土) 02:22:25.58
778デフォルトの名無しさん:2012/07/14(土) 05:35:15.41
>776
########
#......#
#.G....#
#......#
#....S.#
#......#
########

このときは5文字が正解なんですが, 7文字出力してますね.
779デフォルトの名無しさん:2012/07/14(土) 07:21:24.60
>>771 % Prolog

出発点(2,4).
終着点(4,4).

迷路の定義(L) :-
    nth0(Y,L,S),
    sub_atom(S,X,1,_,A),
    \+(A = '#'),
    assertz(道(Y,X)),
    fail;true.

最短経路(_最短経路) :-
    出発点(Y0,X0),
    findmin([_通過距離,_経路],(
          道に迷う([[Y0,X0]],Y0,X0,_方向ならび),
          length(_方向ならび,_通過距離),
          atom_chars(_経路,_方向ならび)),
        [_,_最短経路]).

道に迷う(_,Y,X,[]) :- 終着点(Y,X).
道に迷う(L,Y_1,X_1,[_方向|R]) :-
    隣接点を得る(L,Y_1,X_1,Y_2,X_2,_方向),
    道に迷う(L_2,Y_2,X_2,R).

隣接点を得る(L,Y_1,X_1,Y_2,X_2,_方向) :-
    member([_方向,A,B],[[r,1,0],[l,-1,0],[d,0,1],[u,0,-1]]),
    Y_2 is Y_1 + B, X_2 is X_1 + A,
    道(Y_2,X_2),
    \+(member([Y_2,X_2],L_1)).
780779:2012/07/14(土) 08:20:54.47
>>771
% Prolog

述語 道に迷う/3 と 隣接点を得る/6 に一ヶ所ずつ誤りがあった。
下サイトに修正したものを載せます。
http://nojiriko.asia/prolog/ironnagengo5_771.html
781デフォルトの名無しさん:2012/07/14(土) 09:33:49.72
>>778
ありがとー
http://ideone.com/evnF5
782デフォルトの名無しさん:2012/07/14(土) 10:51:37.63
>>745
Perl
use feature qw(say);

my @list = (1);
foreach(1..1000){
    say @list;
    my $p = $#list;
    while(1){
        if ($p < 0){
            unshift(@list, 1);
            last;
        }
        if ($list[$p] ^= 1){
            $list[--$p] or last;
            $list[$_] = 0 foreach($p..$#list);
        }
        --$p;
    }
}
783デフォルトの名無しさん:2012/07/14(土) 10:54:16.60
784デフォルトの名無しさん:2012/07/14(土) 13:58:28.01
32bit IEEE754 単精度浮動小数点数の内部表現を2進数で表示するプログラムを作成せよ.

単精度浮動小数点数はIEEE 754形式では
(-1) ** 符号部 * (1 + 仮数部) * 2 ** (指数部 - 127)
で表現します.
符号部が上位1bit, 指数部が次の8bit, 仮数部が残りです.

例)
1
0011 1111 1000 0000 0000 0000 0000 0000

1.5
0011 1111 1100 0000 0000 0000 0000 0000

5.23
0100 0000 1010 0111 0101 1100 0010 1001

-1.25
1011 1111 1010 0000 0000 0000 0000 0000

-3.888
1100 0000 0111 1000 1101 0100 1111 1110

-100.0099
1100 0010 1100 1000 0000 0101 0001 0010
785デフォルトの名無しさん:2012/07/14(土) 16:50:59.68
>>784 HSP
#module
#defcfunc int2bin int value, local buf
buf=""
repeat 32
buf+=strf("%c", '0'+((value>>(31-cnt))&1))
if (cnt\4)=3 : buf+=" "
loop
return buf

#defcfunc solve str num_str, local value, local x, local buf, local sign
value=double(num_str)
dupptr x, varptr(value), 8, vartype("int")
if x.1 & $80000000 : sign=1
flp_d=((x.1 & $7ff00000)>>20)-$3ff
flp_f=((flp_d+$7f) & $ff)<<23
if flp_d<-$7f : flp_f=0
if flp_d>$7f : flp_f=$ff<<23
y=(sign<<31)|flp_f|((x.1<<3)&$007ffff8)|((x.0>>29)&$00000007)
return int2bin(y)
#global

mes solve("1")
mes solve("1.5")
mes solve("5.23")
mes solve("-1.25")
mes solve("-3.888")
mes solve("-100.0099")
mes solve("0")
786デフォルトの名無しさん:2012/07/14(土) 20:06:29.35
>>745
; Common Lisp
(loop for binary upfrom #2r1
      until (= (length list) 1000)
      unless (search "11" (format nil "~b" binary))
      collect binary into list
      finally (return list))
787デフォルトの名無しさん:2012/07/14(土) 20:18:21.45
>>784
Perl
use feature qw(say);

sub ieee754_32bit {
    my ($n) = @_;

    my $s = ($n < 0 ? 1 : 0);
    $n = abs($n);

    my $e = 0;
    if ($n == 0){
        $n = 1;
        $e = -127;
    }
    while($n >= 2){
        $n /= 2;
        $e++;
    }
    while($n < 1){
        $n *= 2;
        --$e;
    }

    my $d = ($s << 31) | ((127 + $e) << 23) | int(($n - 1) * (1 << 23) + 0.5);
    return unpack('B*', pack('N', $d));
}

foreach(1, 1.5, 5.23, -1.25, -3.888, -100.0099){
    say $_;
    say join(' ', ieee754_32bit($_) =~ /([01]{4})/g);
}
788デフォルトの名無しさん:2012/07/14(土) 21:37:48.56
>>784
; Common Lisp
(defun ieee754 (x)
  (format t "~39,'0,' ,4:b"
          (multiple-value-bind (signif expon sign)
              (integer-decode-float (float x))
            (+ (if (plusp sign) 0 (expt 2 31))
               (* (+ expon 150) (expt 2 23))
               (- signif (expt 2 23))))))
789デフォルトの名無しさん:2012/07/14(土) 21:50:54.84
>>787
丸めを訂正してみる。
    my $f = ($n - 1) * (1 << 23);
    my $r = ((($f - int($f) == 0.5) and ((int($f) & 1) == 0)) ? 0 : 0.5);
    my $d = ($s << 31) | ((127 + $e) << 23) | int($f + $r);
790デフォルトの名無しさん:2012/07/15(日) 22:40:41.78
>>784
Gauche


(use util.list)
(use binary.io)
(use gauche.uvector)

(define (f x)
  (let ((v (make-u32vector 1))) (put-f32le! v 0 x)
    (string-join (map list->string (slices (string->list (format "~32,'0b" (ref v 0))) 4)))))
791デフォルトの名無しさん:2012/07/16(月) 16:23:58.58
>>784
C#
Action<float> f = x => BitConverter.GetBytes(x).Reverse().ToList().ForEach( b=>Console.Write( Convert.ToString(b,2).PadLeft(8,'0')));

f(-100.0099F);
792デフォルトの名無しさん:2012/07/19(木) 19:25:24.25
アルゴリズムの概要の問題で、コードは不要です。
2点が与えられたときその2点を結ぶ単純な経路(同じ頂点を通らない経路)
が2つ以上存在するかを判定するアルゴリズムと計算量を述べよ。

深さ優先探索で|V|+|E| とかでしょうか?
793デフォルトの名無しさん:2012/07/20(金) 00:04:15.69
>>792
1.全ての経路情報について グラフ G0、頂点 V0 とする
2.指定された2点間を接続する最小木について グラフG1,、頂点 V1 とする
3.G0 について V1 以外の頂点を可能な限りクラスタリングしてグラフ G2、頂点 V2 とする
4.G2 に閉路があれば、経路が2つ以上存在する
794デフォルトの名無しさん:2012/07/20(金) 22:20:56.42
正の整数mとn(1<=n<=9)を入力し, m桁の1以上n以下の数字を組み合わせてできる全ての数列を出力するプログラムを作れ.

mが3でnが2の場合の例:
111
112
121
122
211
212
221
222
795デフォルトの名無しさん:2012/07/20(金) 22:32:05.19
>>794 HSP

#module
#deffunc hoge int m, int n, int d, var result
if d>=m : mes result : return
repeat n
poke result, d, cnt+'1'
hoge m, n, d+1, result
loop
return

#deffunc solve int m, int n, local result
sdim result, m+1
hoge m, n, 0, result
return
#global

solve 3, 2
796デフォルトの名無しさん:2012/07/21(土) 05:40:52.31
797デフォルトの名無しさん:2012/07/21(土) 08:54:43.15
問題
長方形ABCDの二辺ABとBCが与えられたとき(AB>BC)
L=AE=BF=CF=DE=EFとなるLを求めよ。
A■■■■■■■■■■■■■B
■■□□□□□□□□□□□■■
■□■□□□□□□□□□■□■
■□□■□□□□□□□■□□■
■□□□E■■■■■F□□□■
■□□■□□□□□□□■□□■
■□■□□□□□□□□□■□■
■■□□□□□□□□□□□■■
D■■■■■■■■■■■■■C

AB=11、BC=8のとき、L=5
798デフォルトの名無しさん:2012/07/21(土) 09:07:48.54
>>797 HSP

#module
#defcfunc calc double AB, double BC
return (-AB+sqrt(4.0*AB*AB+3.0*BC*BC))/3.0
#global

mes calc(11, 8)
799デフォルトの名無しさん:2012/07/21(土) 10:06:19.44
F#で

>>771
http://ideone.com/ZLxkM

>>794
let f m n =
    let rec series result = function
        | 0 -> result
        | m -> series [for r in result do for x in 1 .. n -> r + string x] (m - 1)
    series [""] m
800デフォルトの名無しさん:2012/07/21(土) 10:46:00.24
>>797 F#
let f AB BC = sqrt (4./9. * AB ** 2. + 1./3. * BC ** 2.) - 1./3. * AB
801デフォルトの名無しさん:2012/07/21(土) 13:18:27.80
>>794
Gauche

(define (p xs n)
  (if (= n 0) '(())
    (apply append (map (^x (map (pa$ cons x) (p xs (- n 1)))) xs))))

(define (f m n)
  (p (iota n 1) m))

(print (f 3 2))
802デフォルトの名無しさん:2012/07/21(土) 13:39:40.59
>>794
J

f=:4 :'1":1+#.inv i.y^x'
3 f 2
111
112
121
122
211
212
221
222
803デフォルトの名無しさん:2012/07/21(土) 14:13:36.40
>>794 HSP
#include "sqlele.hsp"
#module
#defcfunc solve int m, int n, local src, local dest, local ret
sql_open ":memory:"
sql_q "CREATE TABLE base (s TEXT)"
repeat n,1
sql_q strf("INSERT INTO base (s) VALUES('%d')", cnt)
loop

repeat m
if cnt=0 {
dest=strf("%c.s", 'A'+cnt)
src=strf("base %c", 'A'+cnt)
} else {
dest+=strf("||%c.s", 'A'+cnt)
src+=strf(",base %c", 'A'+cnt)
}
loop

sql_q strf("SELECT %s result FROM %s", dest, src)
ret=""
repeat stat
ret+=strf("%s\n", sql_v("result"))
sql_next
loop
sql_close
return ret
#global

buf=solve(3, 2)
mesbox buf, ginfo_sx, ginfo_sy
804デフォルトの名無しさん:2012/07/21(土) 14:59:20.59
>>802 >>794
J
間違えました。802はn=2のときしかうまくいきませんでした。
f=:4 :'1":1+y#.inv i.y^x'
4 f 3
1111
1112
1113
1121
(略)
3323
3331
3332
3333
805デフォルトの名無しさん:2012/07/21(土) 17:15:40.12
>>797
% Prolog

'長方形ABCDの二辺ABとBCが与えられたとき(AB>BC)L=AE=BF=CF=DE=EFとなるLを求めよ。'(AB,BC,L) :-
  between(0,100000,N),
  L is AB * N / 100000,
  L^2 >= 0.25 * (BC^2 + (AB - L)^2),!.
806デフォルトの名無しさん:2012/07/21(土) 18:04:32.54
Σlog(k) = n log n ってどういう風に証明するんでしたっけ?
807デフォルトの名無しさん:2012/07/21(土) 20:43:33.21
イコールっていってもオーダーのことですけど 
808デフォルトの名無しさん:2012/07/25(水) 19:55:06.21
2次元パッキング問題
敷き詰める矩形は後述の52種のうちから選択し90度回転を認め、各一回だけ使用できる
解は厳密解でなくてもよいが、計算時間は一分以内を目安とせよ

問題.1 50x50 の領域になるべく隙間なく矩形を並べたとき、隙間の総面積を出力せよ。またそのときの並べ方を出力せよ。

問題.2 200x100 の領域になるべく隙間なく矩形を並べたとき、隙間の総面積を出力せよ。またそのときの並べ方を出力せよ。

52種の矩形表記順は 名前 矩形幅 矩形高さ の順である
http://www1.axfc.net/uploader/Sc/so/365046.txt
809808:2012/07/25(水) 20:09:30.84
補足
矩形が領域外にはみ出さないようにすること
矩形同士が重ならないようにすること
810デフォルトの名無しさん:2012/07/26(木) 11:31:46.35
>>732
>,[>,]<[<]+++++++++++++++++++++++++++++++++++++++++++>[[-<.>]++++++++++++++++++++++++++++++++++++++++++++++.++++++++++++++++.------------------->]
811デフォルトの名無しさん:2012/07/28(土) 01:05:50.59
>>768
ニワン語
dt(x.pow(1/3))
812デフォルトの名無しさん:2012/08/01(水) 10:23:40.35
# http://toro.2ch.net/test/read.cgi/tech/1342966104/302
# [1] 授業単元: C言語実習
# [2] 問題文(含コード&リンク):
# 「分母と分子にある同じ数字を消す」という間違った約分を行うと、
# 正しく約分した値と同じになる分数が存在する。
# (例えば「187/748」は、普通に約分すると1/4に、分母と分子で重複している7と8を消すと1/4となる)
# このような分数は無限に存在するので、下のような条件を付ける。
#
# (1)分母と分子で同じ数字があればそのペアは必ず消す
# (2)消されるペアは、分母と分子に1文字ずつしか入っていない。つまり消すペアは一意に決まり、
# また、同じ数字で複数のペアが存在することもない
# (3)最終的に分母分子がそれぞれ1桁でできた、1未満の既約分数となる
# (4)数字の0(ゼロ)は使わない
# (5)負の分数は考えない
#
# この条件で、上記の間違った約分を行った結果が、正しく約分した値と同じになる分数は
# 何通りあるか。
#
813デフォルトの名無しさん:2012/08/01(水) 18:24:37.57
814デフォルトの名無しさん:2012/08/04(土) 12:57:57.54
815デフォルトの名無しさん:2012/08/05(日) 19:02:11.50
>>732 F#
各文字について、前の文字との差分をとるか次のポインタに進めるか、
より短く表現できる方を使っていく

let toBF (input : string) =
    let diff x y =
        let c, s = if x - y < 128uy then x - y, "-" else y - x, "+"
        String.replicate (int c) s + "."
    let bytes = System.Text.Encoding.UTF8.GetBytes input
    let prevs = bytes |> Seq.append [0uy] |> Seq.pairwise |> Seq.map ((<||) diff)
    let zeros = bytes |> Seq.map (diff 0uy >> (+) ">")
    Seq.zip prevs zeros |> Seq.map (fun (prev, zero) -> [prev; zero] |> Seq.minBy String.length)
    |> String.concat ""
816デフォルトの名無しさん:2012/08/09(木) 18:30:04.22
すいません…テキストの問題なのですが何回やってもわかりません
どなたか教えていただけませんか?

最初に「文字列を入力してください.」と表示して文字列を読みこみ、
次に「確認のため、もう一度入力してください.」と表示して
再び文字列を読み込み、二つの文字列が同じなら「OK」と表示して終了し、
違っている場合は「文字列の照合に失敗しました.
もう一度入力してください」と表示して、照合に成功するまで聞き続けるプログラムをex07-3-02.rbで保存して実行してください.
817デフォルトの名無しさん:2012/08/09(木) 18:57:09.32
るびーはわからん
818デフォルトの名無しさん:2012/08/09(木) 19:07:48.63
>816
Rubyなんて久しぶりに書いたわ.
ソースコードはUTF-8で保存してください.

# vim:set fileencoding=utf-8:
while 1
  puts '文字列を入力してください.'
  s1 = gets
  puts '確認のため, もう一度入力してください.'
  s2 = gets
  if s1 == s2
    puts 'OK'
    break
  else
    puts '文字列の照合に失敗しました. もう一度入力してください.'
  end
end
819デフォルトの名無しさん:2012/08/09(木) 19:18:13.12
>>818
できましたあああああマジありがとうございます!!!
820デフォルトの名無しさん:2012/08/09(木) 22:14:29.79
# 【質問テンプレ】
# [1] 授業単元: 計算量理論
# [2] 問題文:
Merkle-Hellmanの公開鍵暗号系をJava言語で実装せよ.

ヒント: Javaには,大きな整数を表すためにBigInteger という
クラスが用意されている.そのクラスに,大きな整数間
の算術演算を行うためのインスタンス・メソッドが用意
されている.


C言語でプログラムを書きたい場合は,
多倍長計算用のライブラリ(GMP)のインストールが必要.
インストールする際,下記のサイトを参考にするように.
http://homepage2.nifty.com/m_kamada/math/gmp_ja.htm


よろしくおねがいします><
821デフォルトの名無しさん:2012/08/09(木) 23:00:14.27
>820
Javaの宿題スレに行ってください.
822デフォルトの名無しさん:2012/08/10(金) 03:33:19.67
>>821
本来のこのスレの使い方は、最初にJavaスレで課題が解決されて、
その後、このスレにコピーさせてもらって出題。
みんなで、いろんな言語で回答し合って楽しむというもの。
823デフォルトの名無しさん:2012/08/10(金) 03:34:24.33
>>822
ごめん、「Javaの宿題」スレですね。
824821:2012/08/10(金) 11:05:30.65
>822
???
だからJavaの宿題スレに誘導したんだけど.
825デフォルトの名無しさん:2012/08/10(金) 14:32:39.06
誰かこれ教えてください…

問題1
最初に「文字列を入力してください.」と表示して文字列を読みこみ、
次に「数字を入力してください.」と表示して数字を読み込み、
入力文字列を入力した数字の回数分だけ一行ずつ表示するプログラムを
ex07-3-03.rbで保存して実行してください.

問題2
問題1で作成したプログラムは、数字の読み込みについてバグがある
可能性があります(数字でないものが入力されたとき、
どうなるでしょうか?).もしバグがある場合、
それを修正したプログラムをex07-3-04.rbで保存して実行してください.
826デフォルトの名無しさん:2012/08/10(金) 15:06:34.49
int num;
Console.Write("文字列を入力してください.");
var inputText = Console.ReadLine();
Console.Write("数字を入力してください.");
var inputNum = Console.ReadLine();
if (int.TryParse(inputNum, out num))
for (int i = 0; i < num; i++)
Console.WriteLine(inputText);
827デフォルトの名無しさん:2012/08/10(金) 15:17:21.67
>825
# vim:set fileencoding=utf-8:
puts '文字列を入力してください.'
s = gets
puts '数字を入力してください.'
n = gets.to_i
n.times {
  print s
}

# vim:set fileencoding=utf-8:
puts '文字列を入力してください.'
s = gets
s1 = ''
while s1 !=~ /\d+/
  puts '数字を入力してください.'
  s1 = gets
  begin
    n = Integer(s1)
    n.times {
      print s
    }
    break
  rescue
  end
end
828デフォルトの名無しさん:2012/08/10(金) 15:58:23.07
>>826
>>827
ありがとうございました
829デフォルトの名無しさん:2012/08/10(金) 17:17:31.77
問題
数独の解答が9行9列の文字列で与えられたとき正しいかどうか判定せよ。
830デフォルトの名無しさん:2012/08/11(土) 03:22:14.98
誰か助けて

問題1
はじめに変数に適当な数の文字列による配列をあらかじめ設定しておき、入力された数字を受け取ったら、そのスロットの文字列を表示するプログラムをex08-02.rbで保存して実行してください.

問題2
問題1のプログラムは、nilのスロットが指定されると、そのままnilを返します.このときには「そのスロットには文字列はありません.」と表示されるように、書き換えて、ex08-03.rbで保存して実行してください.

問題3
はじめに文字列の値を設定した配列変数の各スロットについて、その文字列の文字数を表示するプログラムをex08-04.rbで保存して実行してください.たとえばstrings=[’dog’,’cat’,’mouse’]の場合、以下のように出力させます.
dogは3文字
catは3文字
mouseは5文字

問題4
はじめに文字列の値を設定した配列変数の各スロットの内容を3回ずつ表示するプログラムをex08-05.rbで保存して実行してください.
831デフォルトの名無しさん:2012/08/11(土) 03:23:39.01
問題5
以下のように入力したいだけの文字列を入力するよう求めて、Enterが押されたらそれを入力した順につなげて1行に出力するプログラムをex08-07.rbで保存して実行してください.
文字列を入力してください
dog[Enter]
文字列を入力してください
cat[Enter]
文字列を入力してください
elephant[Enter]
文字列を入力してください
[Enter]
あなたの入力した文字列は
dog,cat,elephant
です.

問題6
問題5のプログラムを、文字列を入力とは逆順に出力するように書き換えたプログラムをex08-08.rbで保存して実行してください.

問題7
問題5のプログラムを、3文字の文字列のみを出力するように書き換えたプログラムをex08-09.rbで保存して実行してください.
832デフォルトの名無しさん:2012/08/11(土) 10:35:42.25
>>829 F#
let checkSudoku (numberTable : string[][]) =
    let valid = List.sort >> (=) ([1 .. 9] |> List.map string)
    [ [ for y in 0 .. 8 -> [ for x in 0 .. 8 -> y, x ] ]
      [ for x in 0 .. 8 -> [ for y in 0 .. 8 -> y, x ] ]
      [ for i in 0 .. 3 .. 8 do for j in 0 .. 3 .. 8 -> [ for y in 0 .. 2 do for x in 0 .. 2 -> y + i, x + j ] ] ]
    |> List.concat |> List.forall (List.map (fun (y, x) -> numberTable.[y].[x]) >> valid)
833デフォルトの名無しさん:2012/08/11(土) 15:18:13.61
>>829 HSP

#module
#defcfunc check array map, local x, local y, local f, local t
dim f, 9, 3
for y, 0, 9
for x, 0, 9
t=1<<map(x, y)
f(y, 0)|=t
f(x, 1)|=t
f((y/3)*3+(x/3), 2)|=t
next
next
for y, 0, 3
for x, 0, 9
if f(x, y)!$3fe : return 0
next
next
return 1
#global

dim map, 9, 9
map(0,0)=4,1,5,6,3,8,9,7,2
map(0,1)=3,6,2,4,7,9,1,8,5
map(0,2)=7,8,9,2,1,5,3,6,4
map(0,3)=9,2,6,3,4,1,7,5,8
map(0,4)=1,3,8,7,5,6,4,2,9
map(0,5)=5,7,4,9,8,2,6,3,1
map(0,6)=2,5,7,1,6,4,8,9,3
map(0,7)=8,4,3,5,9,7,2,1,6
map(0,8)=6,9,1,8,2,3,5,4,7
mes check(map)
834デフォルトの名無しさん:2012/08/12(日) 07:18:34.92
大学生の課題やらされててワロタwwwwwww
OS壊すコードいれとけよwwwwwwwwwww
835デフォルトの名無しさん:2012/08/12(日) 07:22:59.75
回答はF#やHSPだしスレチ質問者のレベルじゃRubyに翻訳もできんよ
836デフォルトの名無しさん:2012/08/12(日) 08:58:30.65
このスレの趣旨を分かってない人がチョット前からいるみたいだな
837デフォルトの名無しさん:2012/08/12(日) 15:55:21.86
>>830-831 F# nilはoptionで代用
open System
let slot = [|Some "dog"; Some "cat"; None; Some "mouse"|]
let get nil = Console.ReadLine >> int >> Array.get slot >> (fun x -> defaultArg x nil)
let io f =
    Seq.unfold (fun _ -> printfn "文字列を入力してください"; match Console.ReadLine() with "" -> None | x -> Some(x, ()))
    >> f >> printfn "あなたの入力した文字列は\n%s\nです."
let 問題1 = get "nil" >> printfn "%s"
let 問題2 = get "そのスロットには文字列はありません" >> printfn "%s"
let 問題3() = slot |> Seq.choose id |> Seq.iter (fun x -> printfn "%sは%d文字" x x.Length)
let 問題4() = for _ in 1 .. 3 do slot |> Seq.choose id |> Seq.iter (printfn "%s")
let 問題5 = String.concat "," |> io
let 問題6 = Seq.toList >> List.rev >> String.concat "," |> io
let 問題7 = Seq.map (fun (x : string) -> x.[.. min 3 x.Length - 1]) >> String.concat "," |> io
838デフォルトの名無しさん:2012/08/12(日) 18:34:17.72
839838:2012/08/12(日) 22:23:36.05
840デフォルトの名無しさん:2012/08/13(月) 13:36:46.10
rubyで入力した自然数nの階乗n!を表示するプログラムが何でか知らんができない
誰か暇なときでいいんで教えて
841デフォルトの名無しさん:2012/08/13(月) 14:04:23.49
>840
ここはそういうスレじゃないんです.
842デフォルトの名無しさん:2012/08/13(月) 14:23:54.83
>>840
% Prolog

'自然数nの階乗n!を表示する'(_n,X) :-
    '自然数nの階乗n!を表示する'(1,_n,1,X).

'自然数nの階乗n!を表示する'(_n,_n,Y,X) :-
    X is _n * Y.
'自然数nの階乗n!を表示する'(_m,_n,Y_1,X) :-
    _m < _n,
    Y_2 is _m * Y_1,
    _m_2 is _m + 1,
    '自然数nの階乗n!を表示する'(_m_2,_n,Y_2,X).
843デフォルトの名無しさん:2012/08/13(月) 14:29:00.97
>>840
% Prolog 一部変更

'自然数nの階乗n!を表示する'(_n,_自然数nの階乗) :-
    '自然数nの階乗n!を表示する'(1,_n,1,_自然数nの階乗).

'自然数nの階乗n!を表示する'(_n,_n,Y,_自然数nの階乗) :-
    _自然数nの階乗 is _n * Y.
'自然数nの階乗n!を表示する'(_m,_n,Y_1,_自然数nの階乗) :-
    _m < _n,
    Y_2 is _m * Y_1,
    _m_2 is _m + 1,
    '自然数nの階乗n!を表示する'(_m_2,_n,Y_2,_自然数nの階乗).


% _自然数nの階乗n! とできないのが辛い所
844デフォルトの名無しさん:2012/08/13(月) 14:34:29.81
>>840
% すみません。課題の読み違えを直します。
% Prolog

'自然数nの階乗n!を表示する'(_n) :-
    '自然数nの階乗n!を表示する'(1,_n,1,_自然数nの階乗).

'自然数nの階乗n!を表示する'(_n,_n,Y,_自然数nの階乗) :-
    _自然数nの階乗 is _n * Y,
    writef('自然数%tの階乗は %t です\n',[_n,_自然数nの階乗]).
'自然数nの階乗n!を表示する'(_m,_n,Y_1,_自然数nの階乗) :-
    _m < _n,
    Y_2 is _m * Y_1,
    _m_2 is _m + 1,
    '自然数nの階乗n!を表示する'(_m_2,_n,Y_2,_自然数nの階乗).
845デフォルトの名無しさん:2012/08/13(月) 15:37:49.79
>>841
質問スレチだった?
846デフォルトの名無しさん:2012/08/13(月) 15:44:40.15
書いてある言語に固執しないというだけ
847デフォルトの名無しさん:2012/08/13(月) 15:50:31.13
>>845
スレチでもこちらは歓迎。勝手に好きな言語で解答を書くスレです。
ただ、Rubyと指定してRuby解が戻ってくるかは疑問。
848デフォルトの名無しさん:2012/08/13(月) 18:04:36.23
849デフォルトの名無しさん:2012/08/13(月) 23:24:15.23
問題
自然数nの二重階乗を求めよ。

0!! = 1
5!! = 15
15!! = 2027025
850デフォルトの名無しさん:2012/08/13(月) 23:39:23.12
>>849 HSP

#module
#defcfunc calc int n
if n<=1 : return 1
return n*calc(n-2)
#global

mes "0!! = "+calc(0)
mes "5!! = "+calc(5)
mes "15!! = "+calc(15)
851デフォルトの名無しさん:2012/08/14(火) 00:00:05.42
852デフォルトの名無しさん:2012/08/14(火) 00:50:01.32
>849 Python

n = int(raw_input('n='))
res = 1
for i in xrange(n, 0, -2):
  res *= i
print res
853デフォルトの名無しさん:2012/08/14(火) 01:21:13.92
>>849
R

> f <- function(n)ifelse(n<1,1,prod(seq(n,1,-2)))
> f(0)
[1] 1
> f(5)
[1] 15
> f(15)
[1] 2027025
854デフォルトの名無しさん:2012/08/14(火) 07:27:23.32
>>849
Octave

function z=f(n)
z=prod(n:-2:1)
end
855デフォルトの名無しさん:2012/08/14(火) 08:27:07.35
856デフォルトの名無しさん:2012/08/15(水) 23:54:36.69
857デフォルトの名無しさん:2012/08/16(木) 08:30:24.96
>>856
これはすごい
858デフォルトの名無しさん:2012/08/18(土) 12:01:03.17
>>840,849 F#
let multiFactorial d n =
    Seq.initInfinite (fun i -> bigint(n - i * d)) |> Seq.takeWhile ((<) 0I) |> Seq.fold (*) 1I
let factorial = multiFactorial 1
let doubleFactorial = multiFactorial 2
859デフォルトの名無しさん:2012/08/21(火) 01:37:16.98
問題
整数nが与えられたとき、nより大きい最小の偶数を求めよ。

n=2 のとき 4
n=-6 のとき -4
860デフォルトの名無しさん:2012/08/21(火) 01:48:25.67
>>859
Z80

or 1
inc a
861デフォルトの名無しさん
>>859
#module
#defcfunc calc int n
return n+2-(n&1)
#global
mes calc(2)
mes calc(-6)