このディレクトリの索引

% 以下のサイトは ニュートン法によって平方根を求める(_c,_平方根) :- 平方根に最も近い大きい方の整数を探す(0,0,_c,_xn), 交点のx座標を求める(0,_c,_xn,10,_平方根),!. 平方根に最も近い大きい方の整数を探す(_xn_2,_xn,_c,_xn) :- _xn_2 * _xn_2 >= _c. 平方根に最も近い大きい方の整数を探す(N_1,_,_c,_xn) :- succ(N_1,N_2), 平方根に最も近い大きい方の整数を探す(N_2,N_1,_c,_xn). 交点のx座標を求める(_i,_c,_平方根,_n,_平方根) :- _i >= _n. 交点のx座標を求める(_i_1,_c,_xn_1,_n,_平方根) :- succ(_i_1,_i_2), _xn_2 is (_xn_1 + _c / _xn_1) / 2, 交点のx座標を求める(_i_2,_c,_xn_2,_n,_平方根). % 以下のサイトは '1+3+5=9=3*3はA1+A2+A3=B=n*nになりますよね。 Bの平方根がnであるとき、ある整数BからAnをすべて求める方法を教えてください。 ただしA1..Anは全て奇数の一意数であり昇順に並んでいます'(_式 = (B = _n * _n)) :- 'Bの平方根がnであるとき、ある整数BからAn'(_式 = (B = _n * _n)). 'Bの平方根がnであるとき、ある整数BからAnをすべて求める'(1=(1=1*1)) :- !. 'Bの平方根がnであるとき、ある整数BからAnをすべて求める'(1+3 = (4 = 2*2)) :- !. 'Bの平方根がnであるとき、ある整数BからAnをすべて求める'(1+3+5 = (9 = 3*3)) :- !. 'Bの平方根がnであるとき、ある整数BからAnをすべて求める'(_式_1+_A_n_1+_A_n = (B = _n*_n)) :- 'Bの平方根がnであるとき、ある整数BからAnをすべて求める'(_式_1,_A_n_1,B,_n,_A_n). 'Bの平方根がnであるとき、ある整数BからAnをすべて求める'(_式_1,_A_n_1,B,_n,_A_n) :- 'Bの平方根がnで、n_1はn引く1、B_1はn_1の二乗'(B,_n,B_1,_n_1), 'Bの平方根がnであるとき、ある整数BからAnをすべて求める'((_式_1+_A_n_1 = (B_1 = _n_1*_n_1)), _A_n is _A_n_1 + 2. 'Bの平方根がnで、n_1はn引く1、B_1はn_1の二乗'(B,_n,B_1,_n_1) :- _n is sqrt(B), _n_1 is _n - 1, B_1 is _n_1 * _n_1. % 以下のサイトは '1+3+5=9=3*3はA1+A2+A3=B=n*nになりますよね。 Bの平方根がnであるとき、ある整数BからAnをすべて求める方法を教えてください。 ただしA1..Anは全て奇数の一意数であり昇順に並んでいます'(B,_A1__An) :- 'Bの平方根はnである'(B,_n), '反転した1から始まる公差2の等差数列を求める'(_n,_反転した1から始まる公差2のn要素の等差数列), reverse(_反転した1から始まる公差2のn要素の等差数列,_A1__An). 'Bの平方根はnである'(B,_n) :- _n is sqrt(B), integer(_n). '反転した1から始まる公差2のn要素の等差数列を求める'(1,[1]) :- !. '反転した1から始まる公差2のn要素の等差数列を求める'(2,[3,1]) :- !. '反転した1から始まる公差2のn要素の等差数列を求める'(3,[5,3,1]) :- !. '反転した1から始まる公差2のn要素の等差数列を求める'(_n,[_m_2|[_m|R]]) :- '1を引く'(_n,_n_1), '反転した1から始まる公差2のn要素の等差数列を求める'(_n_1,[_m|R]), '2を足す'(_m,_m_2). '1を引く'(_n,_n_1) :- succ(_n_1,_n). '2を足す'(_m,_m_2) :- succ(_m,_m_1), succ(_m_1,_m_2). % 以下のサイトは '1+3+5=9=3*3はA1+A2+A3=B=n*nになりますよね Bの平方根がnであるとき、ある整数BからAnをすべて求める方法を教えてください ただしA1..Anは全て奇数の一意数であり昇順に並んでいます'(B,_A1__An) :- _n is sqrt(B), '1から始まる公差2のn要素の等差数列'(_n,_A1__An). '1から始まる公差2のn要素の等差数列'(_n,_1から始める公差2のn要素の等差数列) :- length(_1から始める公差2のn要素の等差数列,_n), _1から始める公差2のn要素の等差数列 = [1|_], '反転して公差-2にして等差数列を求める'(_1から始める公差2のn要素の等差数列). '反転して公差-2にして等差数列を求める'(L) :- reverse(L,L2), '等差数列'(L2,-2). % 以下のサイトは # 出題場所 :: http://toro.2ch.net/test/read.cgi/tech/1390525149/83 # お題:次の式をn=10について計算し、大きい順に式と値を表示する。 # logは自然対数、sqrtは平方根、!は階乗、^は累乗とする。 # 2^n # 2^log(n) # 4^n # n # n^2 # n! # n*log(n) # log(n!) # log(log(n)) # sqrt(log(n)) # # '次の式をn=10について計算し、大きい順に式と値を表示する。 logは自然対数、sqrtは平方根、!は階乗、^は累乗とする。 2^n,2^log(n),4^n,n,n^2,n!,n*log(n),log(n!),log(log(n)),sqrt(log(n))' :- _n = 10, _nの階乗 is 10*9*8*7*6*5*4*3*2*1, findall([X,A],( nth1(_nth1,[2^_n,2^log(_n),4^_n,_n,_n^2,_nの階乗,_n*log(_n),log(_nの階乗),log(log(_n)),sqrt(log(_n))],F), nth1(_nth1,[2^_n,2^log(_n),4^_n,_n,_n^2,'10!',_n*log(_n),log('10!'),log(log(_n)),sqrt(log(_n))],A), X is F), L1), '大きい順に式と値を表示する。'(L1). '大きい順に式と値を表示する。'(L1) :- sort(L1,L2), reverse(L2,L3), forall(member([X,F],L3),writef('%t=%t\n',[F,X])). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1349545643/769 # # 【お題】 # 1) 1〜100からランダムに抽出した整数10個を要素に持つ配列を作成し、 # 2) その平均値と、 # 3) 各要素の平均値からの差の二乗値の平均の平方根(標準偏差)を算出して、 # 4) 1)〜3)の結果を出力するコードをどう書く? # # 言語のベーサルな表現実装力が見てみたいので、 # 可能であれば import や require 等の # 機能追加をしない素の状態でのチャレンジが望ましい。 # # 出力例: # [77, 62, 26, 17, 88, 40, 14, 11, 4, 49] # 38.8 # 27.85964823898536 # # 正直、デフォでこれら機能を有する統計処理のLL達のアピールを期待したお題だけれど # ループ等でしか書けそうもない普通のLL勢もひねりを加えるなどして面白くして欲しい。 # # '1) 1〜100からランダムに抽出した整数10個を要素に持つ配列を作成し、 2) その平均値と、 3) 各要素の平均値からの差の二乗値の平均の平方根 標準偏差)を算出して、 4) 1)〜3)の結果を出力する' :- '1) 1〜100からランダムに抽出した整数10個を要素に持つ配列を作成し、'(_整数リスト), '2) その平均値と、'(_整数リスト,_平均値), '3) 各要素の平均値からの差の二乗値の平均の平方根(標準偏差)を算出して、 '(_整数リスト,_平均値,_標準偏差), '4) 1)〜3)の結果を出力する'(_整数リスト,_平均値,_標準偏差). '1) 1〜100からランダムに抽出した整数10個を要素に持つ配列を作成し、'(_整数リスト) :- findall(_ランダムに抽出した整数,( between(1,10,_), _ランダムに抽出した整数 is random(100) + 1), _整数リスト). '2) その平均値と、'(_整数リスト,_平均値) :- length(_整数リスト,_要素数), sum(_整数リスト,_合計), _平均値 is _合計 / _要素数. '3) 各要素の平均値からの差の二乗値の平均の平方根(標準偏差)を算出して、 '(_整数リスト,_平均値,_標準偏差) :- length(_整数リスト,_要素数), '各要素の平均値からの差の二乗値の合計'(_整数リスト,_平均値,_各要素の平均値からの差の二乗値の合計), 二乗値の平均の平方根(_要素数,_各要素の平均値からの差の二乗値の合計,_標準偏差). '各要素の平均値からの差の二乗値の合計'([],_,0). '各要素の平均値からの差の二乗値の合計'([_要素|R],_平均値,S_1) :- '各要素の平均値からの差の二乗値の合計'(R,_平均値,S_2), S_1 is (_平均値 - _要素) * (_平均値 - _要素) + S_2. 二乗値の平均の平方根(_要素数,_各要素の平均値からの差の二乗値の合計,_標準偏差) :- _二乗値の平均 is _各要素の平均値からの差の二乗値の合計 / _要素数, _標準偏差 is sqrt(_二乗値の平均). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1258320456/193 # # 2. 以下の手順に沿って二次方程式の解を計算するプログラム q2.py を作りなさい。ただし、実行結果は以下の黄色の囲みの部分の通りになるようにしなさい。なお、平方根の計算には math.sqrt() を使うことができます。 # #     (1) aを入力する #     (2) bを入力する #     (3) cを入力する #     (4) 判別式D=b*b-4*a*cを計算する。 #     (5) Dの値に応じて以下の処理を行う。 # (5-1) D<0 のとき "実数解はありません"と表示する # (5-2) D=0 のとき 重解を計算して表示する # (5-3) D>0 のとき 2つの解を計算して表示する # # # 実行例 # # $./q2.py二次方程式ax^2+bx+c=0の係数を入れてくださいa? 1b? 0c? 1実数解はありません$ ./q2.py二次方程式ax^2+bx+c=0の係数を入れてくださいa? 1b? 0c? -1解は 1.0 と -1.0 です # # # # # # '二次方程式の解を計算する' :- aを入力する(_a), bを入力する(_b), cを入力する(_c), '判別式D=b*b-4*a*cを計算する。'(_a,_b,_c,D), 'Dの値に応じて以下の処理を行う。'(D,_a,_b,_c). aを入力する(_b) :- write('ax^2 + bx + c = 0 の係数bを入力してください : '), get_integer(_b). aを入力する(_c) :- write('ax^2 + bx + c = 0 の係数cを入力してください : '), get_integer(_c). aを入力する(_a) :- write('ax^2 + bx + c = 0 の係数aを入力してください : '), get_integer(_a). '判別式D=b*b-4*a*cを計算する。'(_a,_b,_c,D) :- D is _b * _b - 4 * _a * _c. 'Dの値に応じて以下の処理を行う。'(D,_a,_b,_c) :- 'D<0 のとき "実数解はありません"と表示する'(D),!. 'Dの値に応じて以下の処理を行う。'(D,_a,_b,_c) :- 'D=0 のとき 重解を計算して表示する'(D,_a,_b,_c),!. 'Dの値に応じて以下の処理を行う。'(D,_a,_b,_c) :- 'D>0 のとき 2つの解を計算して表示する'(D,_a,_b,_c),!. 'D<0 のとき "実数解はありません"と表示する'(D) :- write('実数解はありません\n'). 'D=0 のとき 重解を計算して表示する'(D,_a,_b,_c) :- D=0, X is ((-1) * _b) / (2 * _a), write_formatted('X = %t\n',[X]),!. 'D>0 のとき 2つの解を計算して表示する'(D,_a,_b,_c) :- D > 0, 二次方程式の第一解(X_1), 二次方程式の第一解(X_2), write_formatted('X = %t または X = %t\n',[X_1,X_2]),!. 二次方程式の第一解(_a,_b,D,X) :- X is ((-1) * _b) + sqrt(D)) / (2 * _a),!. 二次方程式の第二解(_a,_b,D,X) :- X is ((-1) * _b) - sqrt(D)) / (2 * _a),!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1289913298/468 # # [1] 授業単元:C/C++の宿題片付けます 143代目 # [2] 問題文(含コード&リンク): ニュートン法により実数の平方根を求める関数を作成せよ。(引数double, 戻り値double) # 'ニュートン法を用いて実数の平方根を求める'(_実数,_平方根) :- 'ニュートン法を用いて実数の平方根を求める'(_実数,0.0,1.0,_平方根),!. 'ニュートン法を用いて実数の平方根を求める'(_実数,X0,X,X) :- 0.00001 > abs(X0 - X),!. 'ニュートン法を用いて実数の平方根を求める'(_実数,X0,X1,X) :- Y is X1 * X1 - _実数, Y2 is 2 * X1, X2 is X1 - Y / Y2, 'ニュートン法を用いて実数の平方根を求める'(_実数,X1,X2,X). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1289913298/314 # # [1] 授業単元:プログラミング演習 # [2] 問題文(含コード&リンク) # 2分法により2の平方根を計算して表示するプログラムを作れ。 # 解の存在範囲|xb-xa|が矛め決めた値より小さくなったら計算を停止(収束判定)するようにせよ。 # *注意 # (1)f(xa)とf(xb)の符号が反対であるか否かの判定法を考えよ。 # (2)f(xa)とf(xb)が共に同符号になるようなxa,xbが入力された場合に対処すること。 # 2の平方根を2分法により計算して表示する :- 2分法により平方根を計算して(0,2,2,2,_平方根), write_formatted('2分法によって得られた2の平方根は %t です。\n',[_平方根]). 2分法により平方根を計算して(A,B,C,_値,_平方根) :- 0.00000001 > abs(A-C),!. 2分法により平方根を計算して(A,B,C,_値,_平方根) :- _値 < B * B, D is (A + B) / 2, 2分法により平方根を計算して(A,D,B,_値,_平方根),!. 2分法により平方根を計算して(A,B,C,_値,_平方根) :- _値 > B * B, D is (B + C) / 2, 2分法により平方根を計算して(B,D,C,_値,_平方根),!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1284632294/947 # # [1] 授業単元:C言語基礎実習 # [2] 問題文(含コード&リンク): 入力された実数の平方根を"二分法"で求めて表示するプログラムを作成すること。 # 精度は小数点第六位まで。ただし、入力された値が1未満の場合は何もしないこと。 # # '入力された実数の平方根を"二分法"で求めて表示する。精度は小数点第六位まで。ただし、入力された値が1未満の場合は何もしないこと。' :- 実数を得る(_実数), _実数 > 1.0, 二分法による平方根の計算。精度は小数点第六位まで。(_実数,_平方根), write_formatted('%t の平方根は %t です\n',[_実数,_平方根]). 二分法による平方根の計算。精度は小数点第六位まで。(X,Y) :- S1 is X / 2, 精度は小数点第N位まで(6,V), 二分法による平方根の計算。精度は小数点第六位まで。(1,X,S1,V,Y). 二分法による平方根の計算。精度は小数点第六位まで。(N,X,S1,V,Y) :- Y is X / 2 + S1, V > abs(Y - S1),!. 二分法による平方根の計算。精度は小数点第六位まで。(N1,X,S1,V,Y) :- S2 is S / 2 + S1, N2 is N1 + 1, 二分法による平方根の計算。精度は小数点第六位まで。(N2,X,S2,V,Y). 精度は小数点第N位まで(N,V) :- V is 0.1 ^ N,!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1284632294/663 # # [1] 授業単元:プログラミング実習 # [2] 問題文(含コード&リンク):1から10の整数の平方根の値を表形式で # 表示するプログラムを作成せよ。 # 表はこんな感じです。 # # N 平方根 # --------- # 1 1.000 # 2 1.414 #   略 # 9 3.000 # 10 3.162 # '1から10の整数の平方根の値を表形式で表示する' :- write('N 平方根\n---------\n'), for(1,N,10), _平方根 is sqrt(N), 平方根表示(N,_平方根), N = 10,!. 平方根表示(10,_平方根) :- write_formatted('%2d %5.3f\n',[10,_平方根]),!. 平方根表示(N,_平方根) :- N < 10, write_formatted('%1d %5.3f\n',[N,_平方根]),!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1284632294/527 # # [1] 授業単元: プログラミング # [2] 問題文(含コード&リンク):ルートについて、ニュートンラプソン方で解き、 # 何回演算を繰り返せば値が収束するか確認する。複数の値を入れて、組み込み関数である # sqrt関数との比較をする。 # 'ルートについて、ニュートンラプソン方で解く'(_値,_収束するまでの繰り返し回数,_平方根) :- _s is (_値 + 1) / 2, 'ルートについて、ニュートンラプソン方で解く'(_値,_s,1,1,_収束するまでの繰り返し回数,_平方根). 'ルートについて、ニュートンラプソン方で解く'(X,_s,_s2,N,N,_s) :- _s = _s2,!. 'ルートについて、ニュートンラプソン方で解く'(X,_s,_s1,M,N,Root) :- _s2 is (X / _s + _s) / 2, M2 is M + 1, 'ルートについて、ニュートンラプソン方で解く'(X,_s2,_s,M2,N2,Root). % 以下のサイトは # 出典:: http://pc12.2ch.net/test/read.cgi/tech/1200175247/863 # # 【質問テンプレ】 # [1] 授業単元:プログラミング # [2] 問題文: # 二分法による平方根の計算。但し、求めたい平方根(自 # 然数)を入力できるようにした上で、プログラムの実行時 # の計算回数を計算・表示できるように、プログラムを作成 # すること。 # 二分法による平方根の計算(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 X / 2 + S1, N2 is N1 + 1, 二分法による平方根の計算(N2,X,S2,Y). % 以下のサイトは # 出典:: http://pc12.2ch.net/test/read.cgi/tech/1260532772/6 # # # 問題4 # 平面上の2点(x1,y1)、(x2,y2)を入力し、それら2点間の距離を算出するプログラムを作成せよ。Aの平方根はsqrt(A)という数学関数で算出される(Aは引数でdouble型)。 # 数学関数を使用する場合、というファイルから情報を得なければならないので、#includeの # 下の行に#includeという命令文を付け加えなければならない(2つのinclude文)。実行結果の例を以下に示す。 # ------------------------------------------------ # x1:0 # y1:0 # x2:1 # y2:1 # この2点間の距離は1.414214です。 '平面上の2点(x1,y1)、(x2,y2)を入力し、それら2点間の距離を算出する' :- '2点の座標を得る'([x1,y1,x2,y2],[X1,Y1,X2,Y2]), 平面上の2点間の距離(X1,Y1,X2,Y2,_2点間の距離), write_formatted('この2点間の距離は%tです。\n',[_2点間の距離]). '2点の座標を得る'([],[]) :- !. '2点の座標を得る'([A|R1],[V|R2]) :- concat_atom([A,' :'],S), write(S), get_line(Line), atom_to_term(Line,V,_), '2点の座標を得る'(R1,R2). 平面上の2点間の距離(X1,Y1,X2,Y2,_2点間の距離) :- _2点間の距離 is sqrt((X2-X1)^2 + (Y2-Y1)^2). % 以下のサイトは # 出典:: http://pc12.2ch.net/test/read.cgi/tech/1242876647/369 # # 次の各プログラムを作成 # # 1.線分の長さを求める #  -両端点の座標値(浮動小数点)を入力 #  -線分の長さを計算、表示 # # 2.三角形の面積を求める #  -3頂点の座標軸(浮動小数点)を入力 #  -面積を計算、表示 # # 2では1つの点を原点に移動させてあとはS=1/2|ad-bc|でお願いします # # 補足でこれがありました # ◆ 平方根を求める関数 # # double型の関数 sqrt() を使います.仮引数もdouble型です. # # 例えばdouble型の変数 len の平方根を求める場合には,次のように呼び出 # します. # # sqrt(len) # # 関数sqrt()を使用するソースプログラムをコンパイルするときには, # # gcc -lm ***.c # # のように,コンパイルオプション「-lm」が必要です. # # # # ・main関数の座標値読み込み部分を省略したものは以下の通りです 線分の長さ(X1,Y1,X2,Y2,_線分の長さ) :- _線分の長さ is sqrt((X2-X1)^2 + (Y2-Y1)^2). 三角形の面積(X1,Y1,X2,Y2,X3,Y3,_三角形の面積) :- 一角を原点へ移動(X1,Y1,X2,Y2,X3,Y3,0,0,X22,Y22,X33,Y33), _三角形の面積 is abs(X22 * Y33 - Y22 * X33) / 2. 一角を原点へ移動((X1,Y1,X2,Y2,X3,Y3,0,0,X22,Y22,X33,Y33) :- X22 is X2 - X1, Y22 is Y2 - Y1, X33 is X3 - X1, Y33 is Y3 - X1.