このディレクトリの索引

% 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1339338438/253 # # [1] 授業単元:応用情報処理I # [2] 問題文: 正規分布を計算して結果をグラフとして出力するプログラムを作成しなさい # f(_x,_y) :- _x_1 is 2 * pi * (_x / 100.0) - pi, _y is truncate(1.0 / ( (2.0 * pi) ^ 2 * exp(-1 * (_x_1 * _x_1 / 2.0))) * 100.0). '正規分布を計算して結果をグラフとして出力するプログラムを作成しなさい' :- 表にグラフを描く(LL1), 転置(LL1,LL2), グラフ表示(LL2). 表にグラフを描く(LL1) :- findall(L,( for(0,_x,100), length(L,101), f(_x,_y), append(L0,[*|R],L), length(L0,_y)), LL1). グラフ表示([]). グラフ表示([L|R]) :- 変数要素を空白に変換(L), atom_chars(A,L), writef('%t\n',[A]), グラフ表示(R). 変数要素を空白に変換([]). 変数要素を空白に変換([' '|R]) :- 変数要素を空白に変換(R). 変数要素を空白に変換([_|R]) :- 変数要素を空白に変換(R). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1289913298/184 # # [1] 授業単元:プログラミング # [2] 問題文(含コード&リンク):平均値:μ,分散:σ^2の分布がn個与えられているとする。 # この分布が何であろうと、nの数が多きなるにつれてこの分布の合計は平均:nμ,分散:nσ^2の正規分布に近づくとされる。 # 要素数n個をもつx個の乱数系列を発生させるプログラムを作れ。 # 乱数を発生させる(_x個,_要素数,_平均・分散ならび,_乱数系列ならび) :- length(Ln,_x個), 乱数を発生させる(Ln,_要素数,_平均・分散ならび,_乱数系列ならび) :- 乱数を発生させる([],_,_,[]) :- !. 乱数を発生させる([_|R1],_要素数,[[_平均,_分散]|R3],[_乱数ならび|R4]) :- 標準正規分布(1,_要素数,1.0,_平均,_分散,_標準正規分布ならび), findall(_乱数,( append(_,[V|_],_標準正規分布ならび), _乱数 is truncate(V * 1000000000) mod 10000), _乱数ならび), 乱数を発生させる(R1,_要素数,R3,R4). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 標準正規分布(_母集合,_台の最小値,_台の最大値,_刻み,_標準正規分布ならび) :- 相加平均(_母集合,_平均), 分散(_母集合,_分散), 標準正規分布(_台の最小値,_台の最大値,_刻み,_平均,_分散,_標準正規分布ならび). 標準正規分布(X,_台の最大値,_刻み,_平均,_分散,[]) :- X > _台の最大値,!. 標準正規分布(X,_台の最大値,_刻み,_平均,_分散,[[X,Y]|R]) :- 標準正規分布確率密度(X,_平均,_分散,Y), X2 is X + _刻み, 標準正規分布(X2,_台の最大値,_刻み,_平均,_分散,R). 標準正規分布確率密度(X,_平均,_分散,_確率密度) :- U is -1 * (((X - _平均) ^ 2) / (2 * _分散)), _確率密度 is exp(U) / sqrt(2 * pi * _分散). % 以下のサイトは # 出典:: http://pc12.2ch.net/test/read.cgi/tech/1274827528/863 # # [1]授業単元:プログラミング演習 # [2]問題文(含コード&リンク):http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10697.txt # [3] # [3.1]OS:windows7 pro 64bit # [3.2] 環境:visualstudio 2010 express c++、ver10,0です # [3.3] 言語はCです # [4]18日が期限です # [5]その他制限:実行例が見やすいように一の位を揃えてください # 自分は三教科の点数を表示するところまではなんとか書けましたが、一の位が揃えられてないです。 # できれば自分のソースに付け足す形でお願いできればうれしいです # # 自分は多元的配列まで習いました # # よろしくお願いします。 # # # [2]問題文:10人の三教科(国語・数学・英語)の点数を二次配列に格納し終えたのち、 # 実行例のように"n人目 国語の点数 数学の点数 英語の点数"を表示するプログラムを書け #  点数は1~100の乱数によって与えること。 # また、二次的配列に格納された3教科の点数を各人ごとに合計し、合計点として1次元配列に格納する。 #  格納し終えたのち、1次的配列の先頭から合計点を表示する。 #  一次元配列に格納された合計点を降順にソートし、一次元配列の先頭から合計点を表示する。 #  ソートの方法として、バブルソースを使用する # # # <<実行例>> (seed=97の場合) # 国語 数学 英語 # 1人目: 75 55 84 # 2人目: 3 58 90 # 3人目: 100 60 61 # 4人目: 19 39 67 # 5人目: 90 99 15 # 6人目: 5 58 59 # 7人目: 20 15 47 # 8人目: 46 12 94 # 9人目: 22 93 27 # 10人目: 90 90 35 # # # 合計点(ソート前): 214 151 221 125 204 122 82 152 142 215 # 合計点(ソート後): 221 215 214 204 152 151 142 125 122 82 '10人の三教科(国語・数学・英語)の点数を二次配列に格納し終えたのち、実行例のように"n人目 国語の点数 数学の点数 英語の点数"を表示する' '10人の三教科(国語・数学・英語)の点数を二次配列に格納し'(_10人の三教科の点数を二次配列), 終えたのち, '実行例のように"n人目 国語の点数 数学の点数 英語の点数"を表示する'(_10人の三教科の点数を二次配列),!. '10人の三教科(国語・数学・英語)の点数を二次配列に格納し'(_10人の三教科の点数を二次配列) :- findall([_国語の点数,_数学の点数,_英語の点数],( 10人の, '点数は1~100の乱数によって与えること'(_国語の点数,_数学の点数,_英語の点数)), _10人の三教科の点数を二次配列). 10人の :- for(1,N,10). 10人の(N) :- for(1,N,10). 終えたのち. '点数は1~100の乱数によって与えること'(_国語の点数,_数学の点数,_英語の点数) :- 'n個の範囲(1~100)の正規分布ならびを得る'(3,[_国語の点数,_数学の点数,_英語の点数]). 'n個の範囲(1~100)の正規分布ならびを得る'(_n個,_正規分布ならび) :- findall(Y2,( for(1,_,_n個), U is (random mod 100000) / 100000, R is ( 2 * pi * (random mod 100000)) / 100000, S is (-2) * log(1-U), X is sqrt(S) * cos(R), Y is sqrt(S) * sin(R), Y2 is truncate(100 * (Y + pi) / (2 * pi)) + 1), _正規分布ならび),!. '実行例のように"n人目 国語の点数 数学の点数 英語の点数"を表示する'(_n人目,_10人の三教科の点数を二次配列) :- write(' 国語 数学 英語\n'), 10人の(_n人目), list_nth(_n人目,_10人の三教科の点数を二次配列,[_国語の点数,_数学の点数,_英語の点数]), write_formatted('%2d人目 %3d %3d %3d\n',[_n人目,_国語の点数,_数学の点数,_英語の点数]), _n人目 = 10,!. '10人の三教科(国語・数学・英語)の点数を二次配列に格納し終えたのち、実行例のように"n人目 国語の点数 数学の点数 英語の点数"を表示する' '10人の三教科(国語・数学・英語)の点数を二次配列に格納し'(_10人の三教科の点数を二次配列), 終えたのち, また、二次的配列に格納された3教科の点数を各人ごとに合計し、合計点として1次元配列に格納する(_10人の三教科の点数を二次配列,_合計点ならび), 一次元配列に格納された合計点を降順にソートし、一次元配列の先頭から合計点を表示する(_合計点ならび). また、二次的配列に格納された3教科の点数を各人ごとに合計し、合計点として1次元配列に格納する([],[]) :- !. また、二次的配列に格納された3教科の点数を各人ごとに合計し、合計点として1次元配列に格納する([[A,B,C]|R1],[S|R2]) :- S is A + B + C, また、二次的配列に格納された3教科の点数を各人ごとに合計し、合計点として1次元配列に格納する(R1,R2). 一次元配列に格納された合計点を降順にソートし、一次元配列の先頭から合計点を表示する(_合計点ならび) :- 降順バブルソート(_合計点ならび,_降順合計点ならび), 先頭から合計点を表示する(1,_降順合計点ならび). 先頭から合計点を表示する(_,[]) :- !. 先頭から合計点を表示する(N,[S|R]) :- write_formatted('%2d人目: %t点\n',[N,S]), N2 is N + 1, 先頭から合計点を表示する(N2,R). 降順バブルソート(L1,L2) :- 降順バブルソート(L1,[],L2). 降順バブルソート([],L,L) :- !. 降順バブルソート([A|R1],L1,L) :- 降順バブルソート(A,R1,R2,L1,L2),降順バブルソート(R2,L2,L). 降順バブルソート(A,[],[],L1,[A|L1]) :- !. 降順バブルソート(A,[B|R1],[A|R2],L1,L2) :- A @>= B,降順バブルソート(B,R1,R2,L1,L2). 降順バブルソート(A,[B|R1],[B|R2],L1,L2) :- A @< B,降順バブルソート(A,R1,R2,L1,L2),!. % 以下のサイトは # 出典:: http://pc12.2ch.net/test/read.cgi/tech/1248012902/357 # # 【課題】 # 整数値を値とする5行3列の大きさの2次元配列 a を定義し,0 から 9 までの整数乱数を代入して初期化する。 # 2次元配列 a をモニタ(標準出力)に表示する。 # # 【形態】1. Javaアプリケーション(main()で開始) # 【期限】10/16 # 【Ver】1.6.0_11 # 実行結果として # $ java Kadai # a[0,0] = 8 a[0,1] = 0 a[0,2] = 8 # a[1,0] = 9 a[1,1] = 0 a[1,2] = 3 # a[2,0] = 0 a[2,1] = 2 a[2,2] = 8 # a[3,0] = 0 a[3,1] = 6 a[3,2] = 1 # a[4,0] = 3 a[4,1] = 9 a[4,2] = 8 # # ただし、この例の配列要素の値は整数乱数であるので、場合ごとに異なった値が代入されている。 # だそうです。まったく意味がわかりません。お願いします t780(L) :- '要素数Nの0から9までの乱数ならびを得る'(15,_乱数ならび), 'N個組'(3,_乱数ならび,L), t780表示(L),!. t780表示(L) :- for(1,N,5), list_nth(N,L,L1), t780行表示(N,L1), write('\n'), N = 5,!. t780行表示(N,L) :- N1 is N - 1, for(1,M,3), list_nth(M,L1,V), M1 is M - 1, write_formatted(' a[%t,%t] = %t ',[N1,M1,V]), M = 3,!. 'N個組'(_,[],[]) :- !. 'N個組'(N,L,[U|R]) :- 先頭からN個(N,L,U,R1), 'N個組'(N,R1,R). 先頭からN個(_,[],[],[]) :- !. 先頭からN個(0,L,[],L) :- !. 先頭からN個(N,[A|R1],[A|R2],R) :- N1 is N - 1, 先頭からN個(N1,R1,R2,R). '要素数Nの0から9までの乱数ならびを得る'(N,_乱数ならび) :- St is random mod 25123, 乗算合同法によってM個の正規分布ならびを得る(N,St,_正規分布ならび), findall(Ran,(member(V,_正規分布ならび),Ran is truncate(1000 * V) mod 10),_乱数ならび). 乗算合同法によってM個の正規分布ならびを得る(M,_初期値,L) :- 乗算合同法による正規分布ならび(M,16087,_初期値,65535,L). 乗算合同法による正規分布ならび(0,A,N,_法,[]) :- !. 乗算合同法による正規分布ならび(M,A,N,_法,[X|R]) :- X is N / _法, 乗算合同法演算(A,N,_法,N2), M1 is M - 1, 乗算合同法による正規分布ならび(M1,A,N2,_法,R). 乗算合同法演算(A,N,_法,N2) :- N2 is (A * N) mod _法. % 以下のサイトは # 出典:: http://pc12.2ch.net/test/read.cgi/tech/1250204272/926 # # 以前回答いただいた課題の発展課題です。よろしくお願いします。 # 以前の回答は>>841にあります。以前の問題文は>>770を参照してください。 # ただし>>770の分類には全角英数が抜けています。 # [1] 授業単元:プログラミング演習2 # [2] 問題文(含コード&リンク): # 前回の課題の分類の結果「半角英数:XX字、半角カナ:XX字・・・」 # という結果が得られたとき、その結果のファイルを読み込み # 各分類からその結果の比率に合わせてランダムに文字列を出力する # プログラムを作成せよ。出力する文字数は解析に用いた文字の合計である。 # (例えば半角英数が全体の60%だった場合、出力される文字列の中にランダムに半角英数文字が60%の割合で含まれることになる) # 分類は以下の通りとする。 # 1.半角英数 # 2.半角カナ # 3.半角記号 # 4.全角英数 # 5.全角かな # 6.全角記号 # 7.漢字 サンプルの文字分類('半角英数',9234). サンプルの文字分類('全角漢字',1061). サンプルの文字分類('全角記号',210). サンプルの文字分類('全角カナ',687). サンプルの文字分類('全角かな',705). t778(_生成文字数,_発生文) :- findall([_分類,_文字数],サンプルの文字分類(_分類,_文字数),_文字分類ならび), t778_1(_文字分類ならび,_生成文字数,_発生文). t778_1(_文字分類ならび,_生成文字数,_発生文) :- テキスト文字総数(_文字分類ならび,_テキスト総文字数), 乗算合同法によってM個の正規分布ならびを得る(_生成文字数,_正規分布1), 乗算合同法によってM個の正規分布ならびを得る(_生成文字数,_正規分布2), 連続文字番号の割り当て(0,_文字分類ならび,_仮文字番号ならび), t778(_正規分布1,_正規分布2,_仮文字番号ならび,_発生文字コードならび), atom_codes(_発生文,_発生文字コードならび). t778_2([],[],_,_,[]) :- !. t778_2([V1|R1],[V2|R2],_テキスト総文字数,_仮文字番号ならび,[_生成文字コード|R3]) :- member([_分類,_仮文字番号下限,_仮文字番号上限],_仮文字番号ならび), _テキスト総文字数 * V1 >= _仮文字番号下限, _テキスト総文字数 * V1 =< _仮文字番号上限, 一文字生成する(_分類,V2,_生成文字コード), t778_2(R1,R2,_テキスト総文字数,_仮文字番号ならび,R3). 一文字生成する(_分類,V,_生成文字コード) :- sub_atom(_分類,0,2,_,全角), eucコード分類(_分類,C1,C2), _生成文字コード is truncate((((C2 - C1 + 2) // 2) * V) * 2 + C1. 一文字生成する(_分類,V,_生成文字コード) :- sub_atom(_分類,0,2,_,半角), eucコード分類(_分類,C1,C2), _生成文字コード is truncate(((C2 - C1 + 1) * V) + C1. テキスト文字総数(_文字分類ならび,_テキスト総文字数) :- findsum(_発生文字数,member([_,_発生文字数],_文字分類ならび),_テキスト総文字数). 連続文字番号の割り当て(_,[],[]) :- !. 連続文字番号の割り当て(N,[[_分類,S]|R1],[[分類,N,N1]|R2]) :- N2 is N + S, N1 is N + S - 1, 連続文字番号の割り当て(N2,R1,R2). eucコード分類(半角英数,0x30,0x39). eucコード分類(半角英数,0x51,0x5a). eucコード分類(半角英数,0x61,0x6a). eucコード分類(全角数字,0xa3b0,0xa3b9). eucコード分類(半角カナ,0x8ea1,0x8ed6). eucコード分類(全角カナ,0xa5a1,0xa5f6). eucコード分類(全角かな,0xa4a1,0xa4f3). eucコード分類(全角記号,0xa1a1,0xa2fe). eucコード分類(全角漢字,0xb0a1,0xfcee). 乗算合同法によってM個の正規分布ならびを得る(M,L) :- _初期値 is random mod 29571, 乗算合同法によってM個の正規分布ならびを得る(M,_初期値,L). 乗算合同法によってM個の正規分布ならびを得る(M,_初期値,L) :- 乗算合同法による正規分布ならび(M,16087,_初期値,65535,L). 乗算合同法による正規分布ならび(0,A,N,_法,[]) :- !. 乗算合同法による正規分布ならび(M,A,N,_法,[X|R]) :- X is N / _法, 乗算合同法演算(A,N,_法,N2), M1 is M - 1, 乗算合同法による正規分布ならび(M1,A,N2,_法,R). 乗算合同法演算(A,N,_法,N2) :- N2 is (A * N) mod _法. % 以下のサイトは # 出典:: http://pc12.2ch.net/test/read.cgi/tech/1250204272/443 # # [1] 授業単元:統計プログラミング # [2] 問題文(含コード&リンク): # 1.適当な方程式 y = a x + b を定め、n 個の x に対してランダムな誤差を # 持つ y のサンプルデータを生成するプログラムを作成せよ。 #  出力形式は、例えば改行で区切られた1行ごとにスペース区切りで x, y の値を # 標準出力に書き出す。 #  ランダムな誤差に関しては、適当な範囲内の乱数を単純に各々の値に # 適用すればよい。 #  (本来は正規分布に従った乱数を用いる方が望ましい) # 2.前問で作成したプログラムの出力から、最小二乗法により、逆に a, b を # 求めるプログラムを作成し、 #  求めた値に関して、前問のプログラムで設定した a, b に対する考察をせよ。 # 3.以上を二次方程式(y = a x^2 + b x + c)に対して繰り返し、 # a, b, c に関して考察せよ。 t695_1(_標本座標ならび) :- findall([_X座標,_Y座標],一次関数に誤差を生じさせる(40,-20,0.5,2,3,_X座標,_Y座標),_標本座標ならび). 一次関数に誤差を生じさせる(_標本数,_初期X座標,_サンプルX座標間隔,A,B,_X座標,_Y座標) :- 乱数値とYの決定(_標本数限界,_サンプルX座標間隔,_初期X座標,_X座標,R), _誤差係数 is (1 - (R - 0.5) ^ 2), _Y座標 is ( A * _X座標 + B ) * _誤差係数. 乱数値とYの決定(_標本数限界,_サンプルX座標間隔,_初期X座標,_X座標,_乱数値) :- A is time, B is A mod 65535, 乱数値とYの決定(1,_標本数限界,_サンプルX座標間隔,_初期X座標,_X座標,16087,B,65535,Y,_乱数値). 乱数値とYの決定(K,Max,_,_,_,_,_,_,_,_) :- K > Max,!,fail. 乱数値とYの決定(K,Max,_サンプルX座標間隔,_X座標,_X座標,A,N,_法,N,_乱数値) :- _乱数値 is N / _法. 乱数値とYの決定(K,Max,_サンプルX座標間隔,_X座標1,_X座標,A,N,_法,Y,_乱数値) :- 乗算合同法演算(A,N,_法,M), _X座標2 is _X座標 + _サンプルX座標間隔, K2 is K + 1, 乱数値とYの決定(K2,Max,_サンプルX座標間隔,_X座標2,_X座標,A,M,_法,Y,_乱数値). 乗算合同法演算(A,N,_法,M) :- M is (A * N) mod _法.