いろんな言語で宿題 第四編at TECH
いろんな言語で宿題 第四編 - 暇つぶし2ch23:デフォルトの名無しさん
10/03/12 17:55:32
前スレにかこうとしてできなかったもの
スレリンク(tech板:790番)
使用言語:J
bubbleSort=:(([ (<. , >.) {.@]) , }.@])/^:_
insertionSort=:((>: # ]) , [ , < #])/
quickSort=:(($:@(<#[) ; (=#[) ,&< $:@(>#[)) ({~ ?@#)) ^: (1<#)
siftDown=: 4 : 0
's e'=. x
z=.y
c=.s
while. e > c=.1+2*s=.c do.
if. e > 1+c do. if. c <&({&z) c+1 do. c=.c+1 end. end.
if. s <&({&z) c do. z=. z {`(|.@[)`]}~ c,s else. break. end.
end.
z
)
heapSort =: 3 : 0
if. 1>: c=. # y do. y return. end.
z=. (] siftDown ~c,~[)&.>/ (<y),~]&.>i.1+<.-:c-2
> (](] siftDown {`(|.@[)`]}~) 0,[)&.>/ z,~]&.>1+i.c-1
)
rt=:6!:2
a=:?~1000
10 rt 'bubbleSort a' NB.1000個のデータでソートを10回行いその平均値を秒で返す
4.91614
10 rt 'heapSort a'
0.337704
10 rt 'quickSort a'
0.0169458
10 rt 'insertionSort a'
0.0110285

24:デフォルトの名無しさん
10/03/13 05:21:03
>>20
使用言語:J

rank=: monad define
SIZE=.|.{(;(<: # y), 2)$ 2#}.- >: i. # y
MAT=. SIZE {. L:0 y
(#y) - {. I. 1e_10 < | ;(-/ . * L:0 MAT)
)

rank 4 5$0 0 0 0 0,0 0 2 0 0,0 1 0 1 1,0 4 3 4 0
3

25:デフォルトの名無しさん
10/03/13 06:31:04
>>20
使用言語:maxima

(%i22) a:matrix([0, 0, 0, 0, 0],[0, 0, 2, 0, 0],[0, 1, 0, 1, 1],[0, 4, 3, 4, 0]);
[ 0 0 0 0 0 ]
[ ]
[ 0 0 2 0 0 ]
[ ]
[ 0 1 0 1 1 ]
[ ]
[ 0 4 3 4 0 ]
(%i23) rank(a);
(%o23) 3

26:デフォルトの名無しさん
10/03/13 07:50:29
>>20
使用言語:R

> a <- matrix(c(0, 0, 0, 0, 0,0, 0, 2, 0, 0,0, 1, 0, 1, 1,0, 4, 3, 4, 0),4,5,byrow=T)
> a
[,1] [,2] [,3] [,4] [,5]
[1,] 0 0 0 0 0
[2,] 0 0 2 0 0
[3,] 0 1 0 1 1
[4,] 0 4 3 4 0
> qr(a)$rank
[1] 3

27:デフォルトの名無しさん
10/03/13 10:28:20
>>20
% Prolog

行列の階数(_行列,_階数) :-
ガウス行列に変形(_行列,_ガウス行列),
count((member(L,_ガウス行列),\+(all(L,0))),_階数).

% ガウス行列に変形/2 は URLリンク(nojiriko.asia) を参照してください。

28:デフォルトの名無しさん
10/03/14 07:50:53
>>21 (>>20)
% Prolog 下のようにしておいた方が無難なんだろうか。

行列の階数(_行列,_階数) :-
   ガウス行列に変形(_行列,_ガウス行列),
   count((member(L,_ガウス行列),\+('すべての要素が0か0.0'(L))),_階数).

'すべての要素が0か0.0'([]).
'すべての要素が0か0.0'([0|R]) :-
   'すべての要素が0か0.0'(R).
'すべての要素が0か0.0'([0.0|R]) :-
   'すべての要素が0か0.0'(R).

29:デフォルトの名無しさん
10/03/15 07:30:55
スレリンク(tech板:915番)
# [1] 授業単元:Unix プログラミング
# [2] 問題文(含コード&リンク): C++/CでUnixのls -R -lと同じ動作をするmyls.c (.cpp)を作成して下さい。
# ls:ディレクトリ内のファイルをリストアップ。-R:サブディレクトリも探査。-l:sys/stat.hを使いファイルの詳細を表示する。
#


30:デフォルトの名無しさん
10/03/15 07:37:31
スレリンク(tech板:907番)
# [1] 授業単元:スレリンク(tech板)
# [2] 問題文(含コード&リンク):
# 保存済みのメモ帳に書いてある10個の数字からランダムに5個読み取るプログラム。
#  [3.1] OS:わかりません
#  [3.2] コンパイラ名とバージョン: わかりません
#  [3.3] 言語:C++
# [4] 期限:201x年
# [5] その他の制限:fopen、fscanf、for、ifまで習いました。

31:デフォルトの名無しさん
10/03/15 10:54:35
>>30
% Prolog 「10個の」をどう反映させればよいか解らない・・・

保存済みのメモ帳に書いてある10個の数字からランダムに5個読み取る(_保存済みのメモ帳,L) :-
   get_chars(_保存済みのメモ帳,Chars),
   findall(N,(for(1,M,5),数字にヒットするまでランダムにならびを探す(Chars,N)),L).

数字にヒットするまでランダムにならびを探す(L,N) :-
   length(L,Len),Len > 0,
   repeat,
   M is (random mod Len) + 1,
   list_nth(M,L,A),
   member(A,['0','1','2','3','4','5','6','7','8','9']),!.


32:デフォルトの名無しさん
10/03/15 11:18:02
スレリンク(db板:631番)
# MYSQL使ってます。
# id キーワード
# 1 りんご
# 2 みかん
# 3 りんご
# のようにDBに登録されてるキーワードが多い順に例えばヒット件数トップ10のキーワードを
# 抜き出したいのですがどのように書いたらいいでしょうか?
# 件数少ないうちは今までにないキーワードがでたら全検索で数えるって繰り替えそうと思ったんですけど、
# 件数多くなったら効率的に書かないとまずいかなと思いまして。

33:デフォルトの名無しさん
10/03/15 11:55:21
>>30
使用言語:J
この問題文では、詳細がさっぱりわかりません。

data=:45 97 8 21 51 64 24 62 46 3
(5?10){data
3 45 97 46 21

34:デフォルトの名無しさん
10/03/15 17:20:56
>>33 (>>30)
# 数値を一行に一つずつ十行メモ帳に書き込みこれを保存する。
# このファイルを参照することによってこのうち5個の数値をランダムに取り出すプログラムを作りなさい。
% とするべきですね。

35:デフォルトの名無しさん
10/03/15 17:37:53
>>34
% Prolog

十行の数値が書かれたメモ帳を保存し、このファイルから5個の数値をランダムに取り出す(_保存済みのメモ帳,_5個の数値ならび) :-
   get_lines(_保存済みのメモ帳,Lines),
   findall(N,(for(1,M,5),ならびからランダムに数値を取り出す(Lines,N)),_5個の数値ならび).

ならびからランダムに数値を取り出す(L,N) :-
   length(L,Len),Len > 0,
   repeat,
   M is (random mod Len) + 1,
   list_nth(M,Lines,A),
   atom_to_term(A,N,_),
   number(N),!.

36:デフォルトの名無しさん
10/03/16 11:03:58
スレリンク(tech板:920番)
# [1] 授業単元:C言語演習
# [2] 問題文(含コード&リンク):
# 1.fgets関数を用いてpgmファイルの始めの2行(添付ファイルの場合, P2, 304,
# 322)をそれぞれ、変数header, width, heightに格納するプログラム
# 2.上記で記憶したheader, width, heightを別ファイルに書き出すプログラム
# 1.と2.をそれぞれ作成せよ。

37:デフォルトの名無しさん
10/03/16 15:28:29
>>36
% Prolog
pgmファイルヘッダ(_pgmファイル,_マジックナンバー,_画像の幅方向サイズ,_画像の高さサイズ,画像の最大階調レベル) :-
   open(_pgmファイル,read,Input,[type(binary)]),
   pgmヘッダの読み取り(Input,_マジックナンバー,_画像の幅方向サイズ,_画像の高さサイズ,画像の最大階調レベル),
   close(Input),!.

pgmファイルヘッダの読み取り(Input,_マジックナンバー,_画像の幅方向サイズ,_画像の高さサイズ,画像の最大階調レベル) :-
   マジックナンバー(Input,_マジックナンバー),
   画像の幅方向サイズ(Input,_画像の幅方向サイズ),
   画像の幅方向サイズ(Input,_画像の幅方向サイズ),
   画像の高さサイズ(Input,_画像の高さサイズ),!.

マジックナンバー(Input,_マジックナンバー) :-
   findall(Y,(repeat,get_byte(Input,X),('Whitespace'(X),!,fail;char_code(Y,X))),L),
   concat_atom(L,_マジックナンバー),!.

画像の幅方向サイズ(Input,_画像の幅方向サイズ) :-
   findall(X,(repeat,get_byte(Input,X),('Whitespace'(X),!,fail;true)),L),
   number_codes(_画像の幅方向サイズ,L),!.

画像の高さサイズ(Input,_画像の高さサイズ) :-
   findall(X,(repeat,get_byte(Input,X),('Whitespace'(X),!,fail;true)),L),
   number_codes(_画像の高さサイズ,L),!.

画像の最大階調レベル(Input,_画像の最大階調レベル) :-
   findall(X,(repeat,get_byte(Input,X),('Whitespace'(X),!,fail;true)),L),
   number_codes(_画像の最大階調レベル,L),!.

'Whitespace'(X) :- X < 48,X >57,!.

38:デフォルトの名無しさん
10/03/16 15:37:01
>>37 (>>36) 訂正
% Prolog 'Whitespace'/2の定義を間違えた。それから述語名を入れ替えます。
pgmファイルヘッダの読み取り(_pgmファイル,_マジックナンバー,_画像の幅方向サイズ,_画像の高さサイズ,画像の最大階調レベル) :-
   open(_pgmファイル,read,Input,[type(binary)]),
   pgmヘッダ(Input,_マジックナンバー,_画像の幅方向サイズ,_画像の高さサイズ,画像の最大階調レベル),
   close(Input),!.

pgmファイルヘッダ(Input,_マジックナンバー,_画像の幅方向サイズ,_画像の高さサイズ,画像の最大階調レベル) :-
   マジックナンバー(Input,_マジックナンバー),
   画像の幅方向サイズ(Input,_画像の幅方向サイズ),
   画像の幅方向サイズ(Input,_画像の幅方向サイズ),
   画像の高さサイズ(Input,_画像の高さサイズ),!.

マジックナンバー(Input,_マジックナンバー) :-
   findall(Y,(repeat,get_byte(Input,X),('Whitespace'(X),!,fail;char_code(Y,X))),L),
   concat_atom(L,_マジックナンバー),!.

画像の幅方向サイズ(Input,_画像の幅方向サイズ) :-
   findall(X,(repeat,get_byte(Input,X),('Whitespace'(X),!,fail;true)),L),
   number_codes(_画像の幅方向サイズ,L),!.

画像の高さサイズ(Input,_画像の高さサイズ) :-
   findall(X,(repeat,get_byte(Input,X),('Whitespace'(X),!,fail;true)),L),
   number_codes(_画像の高さサイズ,L),!.

画像の最大階調レベル(Input,_画像の最大階調レベル) :-
   findall(X,(repeat,get_byte(Input,X),('Whitespace'(X),!,fail;true)),L),
   number_codes(_画像の最大階調レベル,L),!.

'Whitespace'(X) :- X < 48.
'Whitespace'(X) :- X > 57.


39:デフォルトの名無しさん
10/03/16 16:26:48
スレリンク(tech板:921番)
# [1] 授業単元:Unix プログラミング
# [2] 問題文(含コード&リンク):時間昇降順で表示するwhoをC/C++で書きなさい。

40:デフォルトの名無しさん
10/03/17 08:37:27
>>39
% Prolog

時間昇降順で表示するwho(_昇降順) :-
   shs(who,L),
   時間昇降順で表示するwho(L,L1),
   wrln(L1).

時間昇降順で表示するwho(_昇降順,L,_時間昇降順who) :-
   findall([_時刻,_行],(member(L1,L),時刻を取り出す(_行,_時刻)),_時刻を先頭に付加したwho),
   昇降順に整列(_昇降順,_時刻を先頭に付加したwho,_時間昇降順who).

時刻を取り出す(_行,_時刻) :-
   split(_行,[' '],L1),
   append(L2,[_分秒|L3],L1),
   sub_atom(_分秒,_,1,_,':'),
   last(L2,_年月日),
   sub_atom(_年月日,_,1,_,'-'),
   concat_atom([B,' ',A],_時刻),!.

昇降順に整列(昇順,_時刻を先頭に付加したwho,_時間昇降順who) :-
   整列(_時刻を先頭に付加したwho,_整列した時刻を先頭に付加したwho),
   findall(_行,member([_,_行],_整列した時刻を先頭に付加したwho),_時間昇降順who).

昇降順に整列(降順,_時刻を先頭に付加したwho,_時間昇降順who) :-
   整列(_時刻を先頭に付加したwho,_整列した時刻を先頭に付加したwho),
   reverse(_整列した時刻を先頭に付加したwho,_整列しかつ反転した時刻を先頭に付加したwho),
   findall(_行,member([_,_行],_整列しかつ反転した時刻を先頭に付加したwho),_時間昇降順who).

41:デフォルトの名無しさん
10/03/17 10:42:58
>>32
% Prolog (その一)

キーワード数の上位10位までを表示 :-
   findall([M,N],カウンタカウンタ(M,N),L1),
   sort(L1,L2),
   reverse(L2,L3),
   上位10位まで(L3,L),
   キーワード数の上位10位までを表示(L).

キーワード数の上位10位までを表示([]) :- !.
キーワード数の上位10位までを表示([M|R]) :-
   キーワードカウンタ(_キーワード,M),
   キーワード表示(_キーワード),
   fail.
キーワード数の上位10位までを表示(R).

キーワード表示(_キーワード) :-
   キーワード(ID,_キーワード),
   write_formatted('%t,%t\n',[ID,_キーワード]).

上位10位まで([],_,[]) :- !.
上位10位まで(_,Count,[]) :- Count >= 10,!.
上位10位まで([[M,N]|R1],Count1,[M|R2]) :-
   Count2 is Count1 + N,
   上位10位まで(R1,Count2,R2).


42:デフォルトの名無しさん
10/03/17 10:43:55
>>32
% Prolog (その二)

キーワードカウンタを準備する :-
   abolish(キーワードカウンタ/2),
   キーワード(Id,_キーワード),
   キーワードカウンタ((+),_キーワード),
   fail.
キーワードカウンタを準備する.

キーワードカウンタ((+),_キーワード) :-
   retract(キーワードカウンタ(_キーワード,_現在のカウント)),
   _加算されたカウント is _現在のカウント + 1,
   カウンタカウンタの更新((-),_現在のカウント)
   カウンタカウンタの更新((+),_加算されたカウント),
   asserta(キーワードカウンタ(_キーワード,_加算されたカウント)),!.
キーワードカウンタ((+),キーワード) :-
   asserta(キーワードカウンタ(_キーワード,1)),
   カウンタカウンタの更新((+),1),!.

カウンタカウンタの更新((+),M) :-
   retract(カウンタカウンタ(M,N)),
   N2 is N + 1,
   asserta(カウンタカウンタ(M,N2)),!.
カウンタカウンタの更新((+),M) :- asserta(カウンタカウンタ(M,1)).
カウンタカウンタの更新((-),M) :-
   retract(カウンタカウンタ(M,N)),
   N1 is N - 1,
   asserta(カウンタカウンタ(M,N1)),!.


43:デフォルトの名無しさん
10/03/18 07:04:37
スレリンク(tech板:945番)
# Bairstow Samples  名無しさん - 2010/03/17(Wed) 19:00 No.10560 10560.zip
# [1] 授業単元: 数値解析
# [2] 問題文(含コード&リンク): n=10の多項式をベアストウ法(Bairstow’s Method)により解析するプログラムを書くこと。
# N=coefficients r,s= initial value
# 繰り返しの際にはじめのr,s,b,cと△r、△s、エラーの値をプリントする。一定の値に集中するまで続ける。
# (Convergence)一点に集まった値がでたら、次は二次公式をするために同様の作動を繰り返す。この時rとsは自動的に割り出されなければならない。ルーツが見つかるまで全てのプロセスを繰り返す。



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