このディレクトリの索引

% 以下のサイトは # 出典:: http://pc12.2ch.net/test/read.cgi/tech/1244449887/551 # # [1] 授業単元:プログラミング演習 # [2] 問題文(含コード&リンク): # cos(x)とx軸で囲まれる領域において、xがa〜bの区間の面積を台形積分で求めるプログラムを作成しなさい。 # なお、aとbは引数として与えるようにすること。 'cos(x)とx軸で囲まれる領域において、xがa〜bの区間の面積を台形積分で求める'(_開始X座標,_終了X座標,X) :- 分割数(_分割数), 刻み幅(_分割数,_開始X座標,_終了X座標,_刻み幅), Y座標ならびを得る(_分割数,_分割数,_開始X座標,_終了X座標,_Y座標ならび), 台形の総面積(_Y座標ならび,_刻み幅,X). 分割数(30). 台形の総面積([A,B],_刻み幅,X) :- X is (A+B) * _刻み幅 / 2,!. 台形の総面積([A,B|R],_刻み幅,X) :- Z is (A+B) * _刻み幅 / 2, 台形の総面積([B|R],_刻み幅,Y), X is Z + Y. Y座標ならびを得る(_分割数,_分割数,_開始X座標,_終了X座標,[A]) :- A is cos(_終了X座標),!. Y座標ならびを得る(N,_分割数,_開始X座標,_終了X座標,[A|R]) :- A is cos(((_終了X座標-_開始X座標) * N / _分割数 + _開始X座標)), Y座標ならびを得る(M,_分割数,_開始X座標,_終了X座標,R). 刻み幅(_分割数,_開始X座標,_終了X座標,_刻み幅) :- _刻み幅 is (_終了X座標-_開始X座標) / _分割数. % 以下のサイトは # 1. # um1toN(n)と呼び出すと(nは正の整数)、戻り値として 1 から n までの # が返ってくる関数sum1toNを作成せよ。(関数の部分のみ書くこと。) # 2. # の半径をキーボードから入力し、円周の長さと面積を求めて表示する プログラムを次のように作成した。 # 周の長さと面積を求める部分は関数 circleを使用している。この関数を書け。 # 周率は#defineで定義している PAI を使ってよい。 # # #include # #define PAI 3.14159 # 関数circleのプロトタイプ宣言 (省略) # int main(void ){ # double r, enshu, menseki; # printf("半径を入力 >>"); # scanf("%lf", &r); # circle(r, &enshu, &menseki); # printf("円周 = %f 面積 = %f\n" # , enshu, menseki); # return 0; # } # # │ │ # │    関数 circle │ # │ │ # 3. # 大きさ8のint型配列aに初期値として # 1 2 3 4 5 6 7 8 # を設定する。これを # 0 0 1 2 3 4 5 6 # のように要素を右に2つシフトして a[0],a[1]には 0 を入れ、 # その後配列の各要素を # a[0]=0 # a[1]=0 # a[2]=1 # a[3]=2 # a[4]=3 # a[5]=4 # a[6]=5 # a[7]=6 # # のように表示するプログラムを書け。 # # 4. # 文字列(最大80文字)をキーボードから読み込み、 # その文字列中で文字コードが最大の文字とその文字コードを # #   文字コード最大はY <89> # # (Yが最大の文字、89がその文字コードを意味する。) # のように表示するプログラムを次のように作成した。空欄を埋めてプログラム # を完成せよ。変数は宣言している分で足りるはずであるが、必要ならば追加してもよい。 # # #include # # # int main(void ){ # char ch[81], max; # int i; # gets(ch); # ┌──────────────┐ #   │ │ # │ │ # │ │ # └──────────────┘ # return 0; # } # % (1) sum1toN(1,1) :- !. sum1toN(N,X) :- M is N - 1,sum1toN(M,Y),X is N + Y. % (2) pi(3.14159). circle(_半径,_円周,_面積) :-   pi(PI),   _円周 is 2 * _半径 * PI,   _面積 is _半径 ^ 2 * PI. % (3) t357_3 :- 右にシフト(2,[1,2,3,4,5,6,7,8],_シフトされたならび), 表示(1,_シフトされたならび). 表示(_,[]) :- !. 表示(N,[A|R]) :- M is N - 1, write('a[%t]=%t',[M,C]), N2 is N + 1, 表示(N2,R). 右にシフト(0,X,X) :- !. 右にシフト(N,L,X) :- append(Y,[_],[0|L]), M is N - 1, 右にシフト(M,Y,X).    % (4) 最大の文字コード(_文字列,_最大の文字コード) :-   atom_codes(_文字列,[C|R]),   最大の文字コード(R,C,_最大の文字コード). 最大の文字コード([],X,X) :- !. 最大の文字コード([C|R],_現在の最大コード,_最大の文字コード) :-   C > _現在の最大コード,   最大の文字コード(R,C,_最大の文字コード),!. 最大の文字コード([C|R],_現在の最大コード,_最大の文字コード) :-   C =< _現在の最大コード,   最大の文字コード(R,_現在の最大コード,_最大の文字コード),!. % 以下のサイトは # 出典:: 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. % 以下のサイトは # 出典:: http://pc12.2ch.net/test/read.cgi/tech/1247438792/786 # # [1] 授業単元: プログラミング実習 # [2] 問題文(含コード&リンク):台形公式により関数y=x^2とx軸によって # 挟まれる部分のx=0〜x=8までの範囲の面積を求めよ。 # 分割は4で計算せよ。 :- dynamic(func/2). '台形公式により関数y=x^2とx軸によって 挟まれる部分のx=0〜x=8までの範囲の面積を求めよ。 分割は4で計算せよ。' :- assertz((func(X,F) :- F is X^2)), 台形公式による積分(4,0,8,S), writef('台形則による近似面積は %t です\n',[S]). 台形公式による積分(_分割数,X0,Xn,S) :- _分割数 > 1, 0 is _分割数 mod 2, Xn > X0, 台形則(_分割数,X0,Xn,S). 台形則(N,X0,Xn,X) :- _間隔 is (Xn-X0) / N, 台形則(1,_分割数,_間隔,X0,Xn,0.0,S), func(X0,F0), func(Xn,Fn), X is (F0 + Fn + S + S ) * _間隔 * 0.5. 台形則(N,_分割数,_,_,_,X,X) :- N > _分割数,!. 台形則(N,_分割数,_間隔,X0,Xn,Y,X) :- U is _間隔 * N + X0, func(U,F), Y2 is Y + F, N2 is N + 1, 台形則(N2,_分割数,_間隔,X0,Xn,Y2,X). % 以下のサイトは # 出典:: http://pc12.2ch.net/test/read.cgi/tech/1255709298/365 # # [1] 授業単元:プログラミング # [2] 問題文(含コード&リンク): http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10019.txt # # 区分積分法を用いて、 y=3x*x , (0 ≦ x ≦1)の面積を求めるプログラム f(X,Y) :- Y is 3 * X * X. 区分求積法(M,Sum) :- findsum(U,(for(0,N,M),V is N / M,f(V,W),U is 1.0 / M * W),Sum). % 以下のサイトは # 出典:: http://pc12.2ch.net/test/read.cgi/tech/1258158172/140 # # # 多重繰り返し文を使って,z=1-(x2+y2)とz=0平面とで 囲まれる領域の体積の近似値を求めよ. # # です。よろしくおねがいします。 # # 'z=1-(x2+y2)とz=0平面とで 囲まれる領域の体積の近似値'(_刻み数,_体積の近似値) :- _刻み is 1 / _刻み数, 刻んで断面積ならびを得る(_刻み,0.0,L), 台形の積み上げ(L,_刻み,_体積の近似値). 刻んで断面積ならびを得る(_刻み,P,[]) :- P > 1.0,!. 刻んで断面積ならびを得る(_刻み,P,[U1|R]) :- U1 is (sqrt((P-1.0) * (-1.0)) ^ 2) * pi, P2 is P + _刻み, 刻んで断面積ならびを得る(_刻み,P2,R). 台形の積み上げ([A,B],H,S) :- S is (A + B) / 2 * H,!. 台形の積み上げ([A,B|R],H,S) :- U is (A + B) / 2 * H, 台形の積み上げ([B|R],H,S1), S is S1 + U. % 以下のサイトは # 出典:: http://pc12.2ch.net/test/read.cgi/tech/1258320456/45 # # Polygonをスーパークラスとして,正三角形(Triangle),正四角形(Square)を表現するクラスをそれぞれ定義せよ. # # ・辺の長さのみを引数に与えてインスタンスを生成する # ・自身の面積を計算して結果を返すメソッドarea()を持つ # √3 = 1.73 としてよい # メインルーチンでは,実際にインスタンスを生成し,各インスタンスについて,インスタンス自身,周囲の長さ,面積の3項目を表示するようにせよ. # class 正多角形 has   :create(Class,Obj,_辺の長さ) :-     :new(Class,Obj),     Obj!辺の長さ := _辺の長さ; instance   attibute 辺の長さ,角; end. class 三角形 has nature 正多角形;   attribute 角 := 3; instance   :area(Obj,_面積) :-     Obj!辺の長さ * 1.73; end. class 四角形 has nature 正多角形;   attribute 角 := 4; instance   :area(Obj,_面積) :-     Obj!辺の長さ * Obj!辺の長さ; end. % 以下のサイトは # 出典:: http://pc12.2ch.net/test/read.cgi/tech/1258158172/858 # # ../test/read.cgi/tech/1258158172/857 # # [1] 授業単元: forとかwhileとか # [2] 問題文(含コード&リンク): # ycm2の面積を有する円の半径xを,2分法を用いて近似解を求める. # (a) 区間を10分割してどの区間に解があるかを求めるプログラムを作成しなさい. # (b) 解がある区間が見つかったら,さらにその区間を10分割してどの区間に解があるかを求めるという作業を5回繰り返すプログラムを作成しなさい. # # (補足)2分法 # 2分法とは,中間値の定理に根拠をおいて,数式的に解くことのできない方程式の解を求める方法である. # 下図に示すように,xの値を少しずつ変化させた場合に,隣り合う二つのf(x)の値の符号が異なる区間が存在すると,その方程式の解はその区間内に存在する. # 区間を少しずつ狭めていくことにより,その方程式の近似解を求めることができる.方程式の近時解法として代表的なものには2分法の他に,ニュートン法もある. # ycm2の面積を有する円の半径xを,2分法を用いて近似解を求める(Y,X) :- ycm2の面積を有する円の半径xを,2分法を用いて近似解を求める(Y,0,X,Y,X). ycm2の面積を有する円の半径xを,2分法を用いて近似解を求める(Y,P,X,A,X) :- abs((pi * X * X) - Y) < 0.01,!. ycm2の面積を有する円の半径xを,2分法を用いて近似解を求める(Y,P,Z,A,X) :- (pi * Z * Z) < Y, Z2 is (P + Z) / 2, ycm2の面積を有する円の半径xを,2分法を用いて近似解を求める(Y,P,Z2,Z,X),!. ycm2の面積を有する円の半径xを,2分法を用いて近似解を求める(Y,P,Z,A,X) :- Z2 is (A + Z) / 2, ycm2の面積を有する円の半径xを,2分法を用いて近似解を求める(Y,Z,Z2,A,X). % 以下のサイトは # 出典:: http://pc12.2ch.net/test/read.cgi/tech/1269438098/856 # # [1] 授業単元: プログラム演習 # [2] 問題文(含コード&リンク): 三角形の三つの辺の長さを引数とし、内角の大きさを返す関数を実装しなさい。 # さらに、その関数を用いて、三角形の三つの点の座標(x座標, y座標)を入力し、それらの点が作る三角形のすべての内角の角度を計算するプログラムを実装しなさい。 # 計算結果の角度の表示は必ずmain()関数の中で行われなければならないとする。 # 三角形の角度(_辺1,_辺2,_辺3,_辺1の対角の角度,_辺2の対角の角度,_辺3の対角の角度) :- 辺の対角(_辺1,_辺2,_辺3,_辺1の対角の角度), 辺の対角(_辺2,_辺1,_辺3,_辺2の対角の角度), 辺の対角(_辺3,_辺2,_辺1,_辺3の対角の角度). 三角形の面積(_辺1,_辺2,_辺3,_面積) :- S1 is (_辺1+_辺2+_辺3) / 2, _面積 is sqrt(S1 * (S1 - _辺1) * (S1 - _辺2) * (S1 - _辺3)). 三角形の高さ(_辺1,_辺1,_辺2,_辺3,_高さ) :- 三角形の面積(_辺1,_辺2,_辺3,_三角形の面積), _高さ is _三角形の面積 / _辺1 * 2. 辺の対角(_辺,_辺2,_辺3,_対角) :- 三角形の面積(_辺,_辺2,_辺3,_三角形の面積), _高さ is _三角形の面積 / _辺 * 2, _ラジアン角1 is acos(_高さ / _辺2), _ラジアン角2 is acos(_高さ / _辺3), 辺の対角(_辺,_辺2,_辺3,_高さ,_ラジアン角1,_ラジアン角2,_対角). 辺の対角(_辺,_辺2,_辺3,_高さ,_ラジアン角1,_ラジアン角2,_対角) :- (_辺2 ^ 2 - _高さ ^ 2) =< (_辺 ^ 2), (_辺3 ^ 2 - _高さ ^ 2) =< (_辺 ^ 2), _対角 is 180 * (_ラジアン角1 + _ラジアン角2) / pi. 辺の対角(_辺,_辺2,_辺3,_高さ,_ラジアン角1,_ラジアン角2,_対角) :- (_辺2 ^ 2 - _高さ ^ 2) > (_辺 ^ 2), _対角 is 180 * (_ラジアン角1 - _ラジアン角2) / pi. 辺の対角(_辺,_辺2,_辺3,_高さ,_ラジアン角1,_ラジアン角2,_対角) :- (_辺3 ^ 2 - _高さ ^ 2) > (_辺 ^ 2), _対角 is 180 * (_ラジアン角2 - _ラジアン角1) / pi. /* cos(_ラジアン角,_cos値) :- var(_ラジアン角), findall([C,E],(for(0,D,100) , E is (D * pi / 100) / 2, C is abs(_cos値 - cos(E))),L), min(L,[_,_ラジアン角]),!. cos(_ラジアン角,_cos値) :- \+(var(_ラジアン角)), _cos値 is cos(_ラジアン角),!. */ % 以下のサイトは # 出典:: http://pc12.2ch.net/test/read.cgi/tech/1274827528/110 # # [1] 授業単元:プログラミング演習 # [2] 問題文(含コード&リンク):(1)x^2*cosx の0〜π/2までの積分 (2)(logx)^2 # の1〜eまでの積分 # シンプソンの公式([],H,S1,S) :- S is S1 * H / 3,!. シンプソンの公式([A,B,C|R],H,S1,S) :- S2 is S1 + A + 4 * B + C, シンプソンの公式([C|R],H,S2,S). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% f(X,Y) :- Y is X^2 * cos(X). '等間隔シンプソン法を使ってx^2*cosx の0〜π/2までの積分'(_標本点数,_面積) :- 標本点数は3以上の奇数である(_標本点数), 刻みは(_標本点数,_刻み), 標本点ならびを得る(_標本点数,_刻み,_等間隔標本点データならび), シンプソンの公式(_等間隔標本点データならび,_刻み,0,_面積). 標本点数は3以上の奇数である(_標本点数) :- _標本点数 >= 3,1 is _標本点数 mod 2. 刻みは(_標本点数,_刻み) :- _刻み is (pai / 2 - 0) / (_標本点数 - 1). 標本点ならびを得る(_標本点数,_刻み,_等間隔標本点データならび) :- findall(Y,(for(1,M,_標本点数),X is 0 + (M - 1) * _刻み,f(X,Y)),_等間隔標本点データならび),!. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% f(X,Y) :- Y is log(X) ^ 2. '等間隔シンプソン法を使って(logx)^2の1〜eまでの積分'(_標本点数,_面積) :- 標本点数は3以上の奇数である(_標本点数), 刻みは(_標本点数,_刻み), 標本点ならびを得る(_標本点数,_刻み,_等間隔標本点データならび), シンプソンの公式(_等間隔標本点データならび,_刻み,0,_面積). 標本点数は3以上の奇数である(_標本点数) :- _標本点数 >= 3,1 is _標本点数 mod 2. 刻みは(_標本点数,_刻み) :- _刻み is (exp(1) - 1) / (_標本点数 - 1). 標本点ならびを得る(_標本点数,_刻み,_等間隔標本点データならび) :- findall(Y,(for(1,M,_標本点数),X is 1 + (M - 1) * _刻み,f(X,Y)),_等間隔標本点データならび),!. % 以下のサイトは # 出典:: http://pc12.2ch.net/test/read.cgi/tech/1260532772/87 # # [1] 授業単元:プログラミング演習 # [2] 問題文(含コード&リンク): # txtファイルからデータを読み込み、人口順に並べ替えて、都道府県名、人口、面積を1行に表示せよ。 # 表示は全部で5行になる。 # # txtファイルの内容 # Gunma # 2016027 # 6363.16 # Saitama # 7104222 # 3797.25 # Chiba # 6108809 # 5156.60 # Tokyo # 12790202 # 2187.58 # Kanagawa # 8899545 # 2415.84 # # txtファイルからデータを読み込み、人口順に並べ替えて、都道府県名、人口、面積を1行に表示せよ(_textファイル) :- '3行で一組の情報を読み取る'(_textファイル,L), append(_,[[_都道府県名,_人口,_面積]|R],L), write_formatted('%t,%t,%t\n',[_都道府県名,_人口,_面積]), R = []. '3行で一組の情報を読み取る'(_textファイル,L) :- get_lines(_textファイル,Lines), 'N個組'(3,Lines,L). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1291471791/347 # # [1] 授業単元:プログラミング # [2] 問題文(含コード&リンク): # # 東北地方の県のデータを打ち出すプログラムを作成しなさい。ただし、東北地方かどうかの判定をする部分は関数を使うこと。 # 県データの1行からなる構造体を受取る関数とする。該当すればYを戻り値として返すようにする。) # 判定をする際の県名の比較は、関数側に県名の二次元配列を持ち、標準関数strcmpを使う。string.h のinclude を忘れないように。 # strcmp(文字列1,文字列2) は文字列が一致すれば0を返す。 # # コード例示: http://ime.nu/minus-k.com/nejitsu/loader/up84923.jpg #  県データ: http://ime.nu/minus-k.com/nejitsu/loader/up84924.txt # # 東北地方の県のデータを人口密度の小さい順に打ち出す :- 東北地方の県のデータならび(_東北地方の県のデータならび), sort(_東北地方の県のデータならび,_人口密度を鍵に整列した東北地方の県のデータならび), write('人口密度,県名,面積,人口\n'), append(_,[[[_人口密度,_県名,_面積,_人口]|R],_人口密度を鍵に整列した東北地方の県のデータならび), write_formatted('%t,%t,%t,%t,%t\n',[_人口密度,_件名,_面積,_人口]), R = []. 東北地方の県のデータならび(_東北地方の県のデータならび) :- findall([_人口密度,_県名,_面積,_人口],( 県データ(_県名,_面積,_人口), 東北地方(_県名), 人口密度(_面積,_人口,_人口密度)), _東北地方の県のデータならび). 人口密度(_面積,_人口,_人口密度) :- _人口密度 is floor((_人口 / _面積) * 10 + 5) / 10. 東北地方('Aomori'). 東北地方('Iwate'). 東北地方('Akita'). 東北地方('Miyagi'). 東北地方('Yamagata'). 東方地方('Fukushima'). 県データ('Hokkaido',5683,83453). 県データ('Aomori',1476,9606). 県データ('Iwate',1416,15278). 県データ('Miyagi',2365,7285). 県データ('Akita',1189',11612). 県データ('Yamagata',1244,9323). 県データ('Fukushima',2127,13782). 県データ('Ibaraki',2985,6096). 県データ('Tochigi',2005,6408). 県データ('Gumma',2025,6363). 県データ('Saitama',6938,3797). 県データ('Chiba',5926,5156). 県データ('Tokyo',12059',2187). 県データ('Kanagawa',8490,2415). 県データ('Niigata',2476,12582). 県データ('Toyama',1121,4247). 県データ('Ishikawa',1181,4185). 県データ('Fukui',829',4189). 県データ('Yamanashi',888,4465). 県データ('Nagano',2214,13585). 県データ('Gifu',2108,10598). 県データ('Shizuoka',3767,7779). 県データ('Aichi',7043,5156). 県データ('Mie',185,576). 県データ('Shiga',1343,4017). 県データ('Kyoto',2644,4613). 県データ('Osaka',8805,1893). 県データ('Hyogo',5551,8392). 県データ('Nara',1443,3691). 県データ('Wakayama',1070,4726). 県データ('Tottori',613,3507). 県データ('Shimane',761,6707). 県データ('Okayama',1951,7112). 県データ('Hiroshima',2879',8477). 県データ('Yamaguchi',1528,6110). 県データ('Tokushima',824,4145). 県データ('Kagawa',1023,1876). 県データ('Ehime',1493,5676). 県データ('Kochi',814,7105). 県データ('Fukuoka',5016,4971). 県データ('Saga',877,2439). 県データ('Nagasaki',1517,4092). 県データ('Kumamoto',1859,7404). 県データ('Oita',1221,6338). 県データ('Miyazaki',1170,7734). 県データ('Kagoshima',1786,9187). 県データ('Okinawa',1318,2271). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1291471791/347 # # [1] 授業単元:プログラミング # [2] 問題文(含コード&リンク): # # 東北地方の県のデータを打ち出すプログラムを作成しなさい。ただし、東北地方かどうかの判定をする部分は関数を使うこと。 # # 県データの1行からなる構造体を受取る関数とする。該当すればYを戻り値として返すようにする。) # 判定をする際の県名の比較は、関数側に県名の二次元配列を持ち、標準関数strcmpを使う。string.h のinclude を忘れないように。 # strcmp(文字列1,文字列2) は文字列が一致すれば0を返す。 # # コード例示: http://ime.nu/minus-k.com/nejitsu/loader/up84923.jpg # 県データ: http://ime.nu/minus-k.com/nejitsu/loader/up84924.txt # # Hokkaido 5683 83453 # Aomori 1476 9606 # Iwate 1416 15278 # Miyagi 2365 7285 # Akita 1189 11612 # Yamagata 1244 9323 # Fukushima 2127 13782 # Ibaraki 2985 6096 # Tochigi 2005 6408 # Gumma 2025 6363 # Saitama 6938 3797 # Chiba 5926 5156 # Tokyo 12059 2187 # Kanagawa 8490 2415 # Niigata 2476 12582 # Toyama 1121 4247 # Ishikawa 1181 4185 # Fukui 829 4189 # Yamanashi 888 4465 # Nagano 2214 13585 # Gifu 2108 10598 # Shizuoka 3767 7779 # Aichi 7043 5156 # Mie 1857 5776 # Shiga 1343 4017 # Kyoto 2644 4613 # Osaka 8805 1893 # Hyogo 5551 8392 # Nara 1443 3691 # Wakayama 1070 4726 # Tottori 613 3507 # Shimane 761 6707 # Okayama 1951 7112 # Hiroshima 2879 8477 # Yamaguchi 1528 6110 # Tokushima 824 4145 # Kagawa 1023 1876 # Ehime 1493 5676 # Kochi 814 7105 # Fukuoka 5016 4971 # Saga 877 2439 # Nagasaki 1517 4092 # Kumamoto 1859 7404 # Oita 1221 6338 # Miyazaki 1170 7734 # Kagoshima 1786 9187 # Okinawa 1318 2271 東北地方の県のデータを人口密度の小さい順に打ち出す :- 東北地方の県のデータならび(_東北地方の県のデータならび), sort(_東北地方の県のデータならび,_人口密度を鍵に整列した東北地方の県のデータならび), write('人口密度,県名,面積,人口\n'), append(_,[[[_人口密度,_県名,_面積,_人口]|R],_人口密度を鍵に整列した東北地方の県のデータならび), write_formatted('%t,%t,%t,%t,%t\n',[_人口密度,_件名,_面積,_人口]), R = []. 東北地方の県のデータならび(_東北地方の県のデータならび) :- webサイトから読み出した東北地方の県のデータならび(_県のデータならび), findall([_人口密度,_県名,_面積,_人口],( append(_,[[_県名,_面積,_人口]|_],_県のデータならび), 東北地方(_県名), 人口密度(_面積,_人口,_人口密度)), _東北地方の県のデータならび). webサイトから読み出した東北地方の県のデータならび(_県のデータならび) :- w3c('http://nojiriko.asia/prolog/c144_347_1.html',L), 県のデータ部分のみを切り出す(L,_県のデータ部分ならび), findall(_県のデータ,( append(_,[_行|_],_県のデータ部分ならび), split(_行,[' '],['#'|_県のデータ])), _県のデータならび),!. 県のデータ部分のみを切り出す(L,_県のデータ部分ならび) :- append(_,[_行,_|R],L), \+(sub_atom(_行,0,7,_,'# 県のデータ')), append(_県のデータ部分ならび,[_行2|_],R), \+(sub_atom(_行2,0,1,_,'#')),!. 人口密度(_面積,_人口,_人口密度) :- _人口密度 is floor((_人口 / _面積) * 10 + 5) / 10. 東北地方('Aomori'). 東北地方('Iwate'). 東北地方('Akita'). 東北地方('Miyagi'). 東北地方('Yamagata'). 東方地方('Fukushima'). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1291471791/714 # # [1] 授業単元:cプログラミング1 # [2] 問題文(含コード&リンク): # 問題1、円の面積を求めるプログラムまではできたのですが # ↓このプログラムを負の値が入力されるまで繰り返すようにしたいのですがどうすればいいですか? # #include <stdio.h> # double get_area( int hankei); # int main(void) # { # double hankei,area; # printf ("半径"); # scanf ("%lf",&hankei); # area = get_area(hankei); # printf ("面積=%lf\n",area); # return 0; # } # double get_area( int hankei) # { # double area; # area = hankei * hankei * 3.14; # return area; # } 円の面積を求める :- write('半径を入力してください : 催促付き実数値を入力('円の半径を入力してください : ',_半径), 円の面積を求める(_半径). 円の面積を求める(_値) :- _値 < 0.0,!. 円の面積を求める(_値) :- _値 < 0,!. 円の面積を求める(_半径) :- _円の面積 is _半径 * _半径 * pi, write_formatted('入力された半径 %t の円の面積は %t です。\n',[_半径,_円の面積]). 催促付き実数値入力('円の半径を入力してください : ',_半径2), 円の面積を求める(_半径2). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1267796762/694 # # 【課題】三角形の面積を求めるプログラムを作成せよ。三角形のデータは、2辺の長さとその間の角度(単位はdegree)が分かっているとする。面積は、double値で表示すること。面積の計算には、Mathクラスのスタティックメソッドsin()を利用する。 # 【形態】1. Javaアプリケーション # 【期限】3日くらい # 【補足】あんまり関係ないかもしれませんが、linuxを使ったと思います # class クラス名 { # クラスの内容 # } # が一般形式みたいです。 # % http://nojiriko.asia/prolog/c135_856.html も参照してください。 '三角形の面積を求める。三角形のデータは、2辺の長さとその間の角度(単位はdegree)が分かっているとする。'(_辺1,_辺2,_その間のdegree角度,_三角形の面積) :- _その間のradian角度 is ((_その間のdegree角度 / 180 ) * pi), _三角形の面積 is 0.5 * _辺1 * _辺2 * sin(_その間のradian角度). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1294061094/189 # # [1] 授業単元: C言語基礎 # [2] 問題文(含コード&リンク): http://ime.nu/www.dotup.org/uploda/www.dotup.org1351836.jpg # # 二次元平面上の二点A,Bの座標を引数として点A,B間の距離を返す関数distance()を作成し, # さらにdistance()を利用して二点の座標を引数として,その二点を直径とする円の面積を計算して # 返すcircle()を作れ。 # '二次元平面上の二点A,Bの座標を引数として点A,B間の距離を返す'(A_X,A_Y,B_X,B_Y,_二点間の距離) :- _二点間の距離 is abs(sqrt((A_X - B_X) * (A_X - B_X) + (A_Y - B_Y) * (A_Y - B_Y))). '二点の座標を引数として,その二点を直径とする円の面積'(A_X,A_Y,B_X,B_Y,_円の面積) :- '二次元平面上の二点A,Bの座標を引数として点A,B間の距離を返す'(A_X,A_Y,B_X,B_Y,_二点間の距離), _円の面積 is (_二点間の距離 / 2) * (_二点間の距離 / 2) * pi. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1294061094/626 # # [1] 授業単元:プログラミング演習 # [2] 問題文(含コード&リンク) # # 問題1メイン関数でキーボードから二つの整数n1とn2を読み込み,それらをexponent関数を呼び出して, # n1のn2乗を計算し,結果をメイン関数で表示するプログラムを書きなさい. # <実行例> # 二つの整数を入力してください. # n1 = 5 # n2 = 2 # 5の2乗は25です. # 問題2 5人の点数を読み込んでいき、その最高点を表示するプログラムを作成しなさい。 # 問題3 円の面積の一覧表を計算するプログラムを作成しなさい。 # <実行結果> # 半径 --- 面積 # 1.0 --- 3.14 # 1.1 --- 3.80 # 1.2 --- 4.52 # 1.3 --- 5.31 # 問題4 球の体積を計算するプログラムを作成しなさい。 # 実行例 # 体積 = 1766.25 'メイン関数でキーボードから二つの整数n1とn2を読み込み,それらをexponent関数を呼び出して,n1のn2乗を計算し,結果をメイン関数で表示する' :- メイン. メイン :- キーボードから二つの整数n1とn2を読み込み(_n1,_n2), exponent(_n1,_n2,_結果), writef('%tの%t乗は%tです\n',[_n1,_n2,_結果]). キーボードから二つの整数n1とn2を読み込み(_n1,_n2) :- キーボードからn1を読み込み(_n1), キーボードからn2を読み込み(_n2). キーボードからn1を読み込み(_n1) :- write('n1 = '), get_line(Line), キーボードからn1を読み込み診断(Line,_n1),!. キーボードからn1を読み込み(_n1) :- キーボードからn1を読み込み(_n1). キーボードからn1を読み込み診断(Line,_n1) :- atom_to_term(Line,_n1,_), integer(_n1),!. キーボードからn1を読み込み診断(Line,_n1) :- writef('入力された %t からは整数が得られません。再入力をお願いします\n',[Line]), fail. キーボードからn2を読み込み(_n2) :- write('n2 = '), get_line(_n2), キーボードからn2を読み込み診断(Line,_n2),!. キーボードからn2を読み込み(_n2) :- キーボードからn2を読み込み(_n2). キーボードからn2を読み込み診断(Line,_n2) :- atom_to_term(Line,_n2,_), integer(_n2),!. キーボードからn2を読み込み診断(Line,_n2) :- writef('入力された %t からは整数が得られません。再入力をお願いします\n',[Line]), fail. exponent(_n1,0,1) :- !. exponent(_n1,1,_n1) :- !. exponent(_n1,_n2,_結果) :- exponentで定数が整数の時は(_n1,_n2,_結果). exponent(_n1,_n2,_結果) :- exponentで定数が負数の時は(_n1,_n2,_結果). exponentで定数が整数の時は(_n1,_n2,_結果). _n2 > 0, _n2_1 is _n2 - 1, exponent(_n1,_n2_1,_結果_1), _結果 is _n1 * _結果_1. exponentで定数が負数の時は(_n1,_n2,_結果) :- _n2 < 0, _n2_1 is _n2 + 1, exponent(_n1,_n2_1,_結果_1), _結果 is _結果_1 / _n1. % get_line/1 % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1294061094/626 # # [1] 授業単元:プログラミング演習 # [2] 問題文(含コード&リンク) # # 問題1メイン関数でキーボードから二つの整数n1とn2を読み込み,それらをexponent関数を呼び出して, # n1のn2乗を計算し,結果をメイン関数で表示するプログラムを書きなさい. # <実行例> # 二つの整数を入力してください. # n1 = 5 # n2 = 2 # 5の2乗は25です. # 問題2 5人の点数を読み込んでいき、その最高点を表示するプログラムを作成しなさい。 # 問題3 円の面積の一覧表を計算するプログラムを作成しなさい。 # <実行結果> # 半径 --- 面積 # 1.0 --- 3.14 # 1.1 --- 3.80 # 1.2 --- 4.52 # 1.3 --- 5.31 # 問題4 球の体積を計算するプログラムを作成しなさい。 # 実行例 # 体積 = 1766.25 '5人の点数を読み込んでいき、その最高点を表示する' :- '5人の点数を読み込んでいき'(_5人の点ならび), 最高点を表示する(_5人の点ならび). '5人の点数を読み込んでいき'(_5人の点ならび) :- length(_5人の点ならび,5), findall(_点数,( append(L0,[_点数|_],_5人の点ならび), 点数を得る(L0,_点数)), _5人の点ならび),!. 点数を得る(L0,_点数) :- length([_|L0],N人目), writef('%t人目の点数を入力してください : ',[N人目]), get_line(Line), 点数の入力診断(Line,_点数),!. 点数を得る(L0,_点数) :- 点数を得る(L0,_点数). 点数の入力診断(Line,_) :- atom_to_term(Line,_点数,_), number(_点数),!. 点数の入力診断(Line,_点数) :- writef('入力された %t からは点数が得られません。再入力をお願いします\n',[Line]), fail. 最高点を表示する(_5人の点ならび) :- 最高点を(_5人の点ならび,_最高点), 表示する(_最高点). 最高点を(_5人の点ならび,_最高点) :- sort(_5人点ならび,_昇順に整列した5人の点ならび), last(_昇順に整列した5人の点ならび,_最高点). 表示する(_最高点) :- writef('最高点は%tです\n',[_最高点]). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1294061094/626 # # [1] 授業単元:プログラミング演習 # [2] 問題文(含コード&リンク) # # 問題1メイン関数でキーボードから二つの整数n1とn2を読み込み,それらをexponent関数を呼び出して, # n1のn2乗を計算し,結果をメイン関数で表示するプログラムを書きなさい. # <実行例> # 二つの整数を入力してください. # n1 = 5 # n2 = 2 # 5の2乗は25です. # 問題2 5人の点数を読み込んでいき、その最高点を表示するプログラムを作成しなさい。 # 問題3 円の面積の一覧表を計算するプログラムを作成しなさい。 # <実行結果> # 半径 --- 面積 # 1.0 --- 3.14 # 1.1 --- 3.80 # 1.2 --- 4.52 # 1.3 --- 5.31 # 問題4 球の体積を計算するプログラムを作成しなさい。 # 実行例 # 体積 = 1766.25 円の面積の一覧表を計算する(_半径下限,_半径上限) :- write('半径 --- 面積\n'), '半径を0.1刻みで増加させて円の面積一覧表を表示する'(_半径下限,_半径上限). '半径を0.1刻みで増加させて円の面積一覧表を表示する'(_半径,_半径上限) :- _半径 > _半径上限,!. '半径を0.1刻みで増加させて円の面積一覧表を表示する'(_半径,_半径上限) :- _面積 is _半径 * _半径 * pi, write_formtted('%.1f --- %.2f\n',[_半径,_面積]), _半径_2 is _半径 + 0.1, '半径を0.1刻みで増加させて円の面積一覧表を表示する'(_半径_2,_半径上限). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1294061094/626 # # [1] 授業単元:プログラミング演習 # [2] 問題文(含コード&リンク) # # 問題1メイン関数でキーボードから二つの整数n1とn2を読み込み,それらをexponent関数を呼び出して, # n1のn2乗を計算し,結果をメイン関数で表示するプログラムを書きなさい. # <実行例> # 二つの整数を入力してください. # n1 = 5 # n2 = 2 # 5の2乗は25です. # 問題2 5人の点数を読み込んでいき、その最高点を表示するプログラムを作成しなさい。 # 問題3 円の面積の一覧表を計算するプログラムを作成しなさい。 # <実行結果> # 半径 --- 面積 # 1.0 --- 3.14 # 1.1 --- 3.80 # 1.2 --- 4.52 # 1.3 --- 5.31 # 問題4 球の体積を計算するプログラムを作成しなさい。 # 実行例 # 体積 = 1766.25 球の体積を計算する(_半径) :- _体積 is (4 * _半径 * _半径 * _半径 * pi) / 3, write_formatted('体積 = %.2f\n',[_体積]). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1307166756/262 # # [1] 授業単元:C言語 # [2] 問題文: # 構造体trinagleを typedef struct{ # double x,y; # } Point; # # typedey struct{ # Point p1,p2,p3; # } Trinagle; # とする。 # 構造体の構成要素は3つの頂点のx座標、y座標をメンバとして持つ構造体Pointである。 # 任意の三角形の面積、その三角形を適当な2×2行列で線形変換した結果の三角形の座 # 標とその面積、任意の二つの三角形が合同かどうかを表示するプログラムを作りなさい。 # 座標の回転 90度 [[0,-1],[1,0]] 180度 [[-1,0],[0,-1]] 270度 [[0,1],[-1,0]] # -90度 [[0,1],[-1,0]] -180度 [[-1,0],[0,-1]] -270度 [[0,1],[-1,0]] 変換正方行列(回転,V,[[A,B],[C,D]]) :- \+(var(V)), R is pi * V / 180, A is cos(R), B is (-1) * sin(R), C is sin(R), D = A. 変換正方行列(回転,90,[[0,-1],[1,0]]). 変換正方行列(回転,180,[[-1,0],[0,-1]]). 変換正方行列(回転,270,[[0,1],[-1,0]]). 変換正方行列(回転,-90,[[0,1],[-1,0]]). 変換正方行列(回転,-180,[[-1,0],[0,-1]]). 変換正方行列(回転,-270,[[0,-1],[1,0]]). 任意の三角形の面積、その三角形を適当な2×2行列で線形変換した結果の三角形の座標とその面積(X1,Y1,X2,Y2,X3,Y3,_x1,_y1,_x2,_y2,_x3,_y3,_面積) :- 三角形の面積(X1,Y1,X2,Y2,X3,Y3,_面積_1), writef('三角形の面積 %t\n',[_面積_1]), 変換正方行列(回転,_度,_変換行列), 行列の積([[Y1,X1],[Y2,X2],[Y3,X3]],_変換行列,[[_y1,_x1],[_y2,_x2],[_y3,_x3]]), 三角形の面積(_x1,_y1,_x2,_y2,_x3,_y3,_面積_2), writef('%t度回転された座標は(%t %t)(%t %t)(%t %t) 面積は %t です\n',[_度,_x1,_y1,_x2,_y2,_x3,_y3,_面積_2]), fail. 任意の三角形の面積、その三角形を適当な2×2行列で線形変換した結果の三角形の座標とその面積'(X1,Y1,X2,Y2,X3,Y3,_x1,_y1,_x2,_y2,_x3,_y3,_面積). 任意の二つの三角形が合同かどうか(X1,Y1,X2,Y2,X3,Y3,_x1,_y1,_x2,_y2,_x3,_y3) :- 任意の二つの三角形が合同かどうか(X1,Y1,X2,Y2,X3,Y3,_x1,_y1,_x2,_y2,_x3,_y3,_合同かどうか), writef('%t\n',[_合同かどうか]). 任意の二つの三角形が合同かどうか(X1,Y1,X2,Y2,X3,Y3,_x1,_y1,_x2,_y2,_x3,_y3,合同) :- A is (X1-X2) * (X1-X2) + (Y1-Y2) * (Y1-Y2), B is (X2-X3) * (X2-X3) + (Y2-Y3) * (Y2-Y3), C is (X3-X1) * (X3-X1) + (Y3-Y1) * (Y3-Y1), _a is (_x1-_x2) * (_x1-_x2) + (_y1-_y2) * (_y1-_y2), _b is (_x2-_x3) * (_x2-_x3) + (_y2-_y3) * (_y2-_y3), _c is (_x3-_x1) * (_x3-_x1) + (_y3-_y1) * (_y3-_y1), sort([A,B,C],X), sort([_a,_b,_c],X),!. 任意の二つの三角形が合同かどうか(X1,Y1,X2,Y2,X3,Y3,_x1,_y1,_x2,_y2,_x3,_y3,合同ではない). 三角形の面積(X1,Y1,X2,Y2,X3,Y3,_三角形の面積) :- 一角を原点へ移動(X1,Y1,X2,Y2,X3,Y3,0,0,_x2,_y2,_x3,_y3), _三角形の面積 is abs(_x2 * _y3 - _y2 * _x3) / 2. 一角を原点へ移動(X1,Y1,X2,Y2,X3,Y3,0,0,_x2,_y2,_x3,_y3) :- _x2 is X2 - X1, _y2 is Y2 - Y1, _x3 is X3 - X1, _y3 is Y3 - X1. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1308749241/691 # # [1] 授業単元: プログラム演習 # [2] 問題文(含コード&リンク): 次の 銑い両魴錣鯔たすプログラムを作成せよ # # 1)main関数においてint型の半径rをキーボードから受け取る # 2)円周(ring)を求めるenshu関数にrを「値呼び出し」で渡して面積を計算し、 # その値をmain関数にreturnする # 3)円の面積(area)を求めるmenseki関数にrを「参照呼び出し」で渡して面積を計算し、 # その値をmain関数にreturnする # 4)main関数でreturnされた円周と面積の値を実行結果のように表示する # # [実行結果] # 半径rを入力:5(←キーボードから入力) # 円周:31.400000 # 面積:78.500000 # '半径rをキーポードから受け取り、円周と面積を計算して、表示する' :- 半径rをキーボードから受け取る(_半径r), 円周を求める述語に半径rを渡して円周を計算する(_半径r,_円周), 面積を求める述語に半径rを渡して面積を計算する(_半径r,_面積), 円周と面積の値を実行結果のように表示する(_円周,_面積). 半径rをキーボードから受け取る(_半径r) :- write('半径rを入力:'), readln([_半径r]). 円周を求める述語に半径rを渡して円周を計算する(_半径r,_円周) :- 円周を求める(_半径r,_円周). 円周を求める(_半径r,_円周) :- _面積 is 2 * pi * _半径r. 面積を求める述語に半径rを渡して面積を計算する(_半径r,_面積) :- 面積を求める(_半径r,_面積). 面積を求める(_半径r,_面積) :- _面積 is pi * _半径r * _半径r. 円周と面積の値を表示する(_円周,_面積) :- writef('円周: %t\n面積: %t\n',[_円周,_面積]). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1312201995/761 # # [1] 授業単元:プログラミング演習 # [2] 問題文: # 円1:x^2+y^2=r^2と円2:(x-r)^2+(y-r)^2=r^2が重なっている部分の面積を求めるプログラムを作成しなさい。 # ただしπ=3,14159とする。               # 'x^2+y^2=r^2と円2:(x-r)^2+(y-r)^2=r^2が重なっている部分の面積を求める'(_r,_重なっている部分の面積) :- _重なっている部分の面積 is _r * _r * ( 1 - 2 * 3.14159 / 4). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1312201995/761 # # [1] 授業単元:プログラミング演習 # [2] 問題文: # 円1:x^2+y^2=r^2と円2:(x-r)^2+(y-r)^2=r^2が重なっている部分の面積を求めるプログラムを作成しなさい。 # ただしπ=3,14159とする。               # 'x^2+y^2=r^2と円2:(x-r)^2+(y-r)^2=r^2が重なっている部分の面積を求める'(_r,_重なっている部分の面積) :- count(( for(1,N,100000), _x is random(1001) / 1000, _y is random(1001) / 1000, 1.0 =< _x * _x + _y * _y), COUNT), _重なっている部分の面積 is _r * _r * ( 1 - 2 * COUNT / 100000). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1312201995/827 # # [1] 授業単元:モンテカルロ # [2] 問題文(含コード&リンク):http://ime.nu/ideone.com/foLSr # # 問題1. サイコロを10, 100 ,1000 ,10000 ,100000 回投げて分布を調べよ。 # 問題2. コイン投げも同様にして、Sn = X1 +....+ Xn のSn, そのmax,min を調べよ。 # 問題3.  面積 # ∫ 1 # 0 x^2 dx # をモンテカルロ法で求めよ。 # # 問題4. π の値をモンテカルロ法で求めよ。 # 問題5. 2 項分布をp=0.4 として実行してみよ。分布は、**** を打って表示せよ。 'サイコロを10, 100 ,1000 ,10000 ,100000 回投げて分布を調べよ。'(_分布ならび) :- findall([_n,_1,_2,_3,_4,_5,_6],( append(_,[_n|_],[10,100,100,10000,100000]), 'サイコロを_n回投げて分布を調べる'(_n,0,0,0,0,0,0,_1,_2,_3,_4,_5,_6)), _分布ならび). 'サイコロを_n回投げて分布を調べる'(0,_1,_2,_3,_4,_5,_6,_1,_2,_3,_4,_5,_6). 'サイコロを_n回投げて分布を調べる'(N,_1_1,_2_1,_3_1,_4_1,_5_1,_6_1) :- 賽を投げる(_賽の目), 分布の更新(_賽の目,_1_1,_2_1,_3_1,_4_1,_5_1,_6_1,_1_2,_2_2,_3_2,_4_2,_5_2,_6_2), N_1 is N - 1, 'サイコロを_n回投げて分布を調べる'(N_1,_1_2,_2_2,_3_2,_4_2,_5_2,_6_2,_1,_2,_3_4,_5,_6). 賽を投げる(_賽の目) :- _賽の目 is random(6) + 1. 分布の更新(1,_1_1,_2,_3,_4,_5,_6,_1_2,_2,_3,_4,_5,_6) :- _1_2 is _1_1 + 1. 分布の更新(2,_1,_2_1,_3,_4,_5,_6,_1,_2_2,_3,_4,_5,_6) :- _2_2 is _2_1 + 1. 分布の更新(3,_1,_2,_3_1,_4,_5,_6,_1,_2,_3_2,_4,_5,_6) :- _3_2 is _3_1 + 1. 分布の更新(4,_1,_2,_3,_4_1,_5,_6,_1,_2,_3,_4_2,_5,_6) :- _4_2 is _4_1 + 1. 分布の更新(5,_1,_2,_3,_4,_5_1,_6,_1,_2,_3,_4,_5_2,_6) :- _5_2 is _5_1 + 1. 分布の更新(6,_1,_2,_3,_4,_5,_6_1,_1,_2,_3,_4,_5,_6_2) :- _6_2 is _6_1 + 1. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1312201995/827 # # [1] 授業単元:モンテカルロ # [2] 問題文(含コード&リンク):http://ime.nu/ideone.com/foLSr # # 問題1. サイコロを10, 100 ,1000 ,10000 ,100000 回投げて分布を調べよ。 # 問題2. コイン投げも同様にして、Sn = X1 +....+ Xn のSn, そのmax,min を調べよ。 # 問題3.  面積 # ∫ 1 # 0 x^2 dx # をモンテカルロ法で求めよ。 # # 問題4. π の値をモンテカルロ法で求めよ。 # 問題5. 2 項分布をp=0.4 として実行してみよ。分布は、**** を打って表示せよ。 'コイン投げも同様にして、Sn = X1 +....+ Xn のSn, そのmax,min を調べよ。'(_n,_分布ならび) :- findall([_回数,_Sn,_max,_min],( append(_,[_回数|_],[10,100,1000,10000,100000]), 'コインを指定された回数投げて_Sn,_max,_minを得る'(_回数,_n,_Sn,_Max,_Min)), _分布ならび). 'コインを指定された回数投げて_Sn,_max,_minを得る'(_回数,_n,_Sn,_Max,_Min) :- findall(_合計,( for(1,_,_回数), 'コインを_n回投げて表となった回数'(_n,_合計)), L), sum(L,_Sn), max(L,_max), min(L,_min). 'コインを_n回投げて表となった合計'(_n,_合計回数) :- count((for(1,_,_n),1 is random(2)),_合計回数). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1312201995/827 # # [1] 授業単元:モンテカルロ # [2] 問題文(含コード&リンク):http://ime.nu/ideone.com/foLSr # # 問題1. サイコロを10, 100 ,1000 ,10000 ,100000 回投げて分布を調べよ。 # 問題2. コイン投げも同様にして、Sn = X1 +....+ Xn のSn, そのmax,min を調べよ。 # 問題3.  面積 # ∫ 1 # 0 x^2 dx # をモンテカルロ法で求めよ。 # # 問題4. π の値をモンテカルロ法で求めよ。 # 問題5. 2 項分布をp=0.4 として実行してみよ。分布は、**** を打って表示せよ。 'モンテカルロ法で積分区間0-1のx^2の値を求める'(_試行回数,_値) :- count(( between(1,_試行回数,_), X is random(1000), Y is random(1000),Y =< X * X), Count), _値 is Count / _試行回数. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1312201995/827 # # [1] 授業単元:モンテカルロ # [2] 問題文(含コード&リンク):http://ime.nu/ideone.com/foLSr # # 問題1. サイコロを10, 100 ,1000 ,10000 ,100000 回投げて分布を調べよ。 # 問題2. コイン投げも同様にして、Sn = X1 +....+ Xn のSn, そのmax,min を調べよ。 # 問題3.  面積 # ∫ 1 # 0 x^2 dx # をモンテカルロ法で求めよ。 # # 問題4. π の値をモンテカルロ法で求めよ。 # 問題5. 2 項分布をp=0.4 として実行してみよ。分布は、**** を打って表示せよ。 'π の値をモンテカルロ法で求める'(_π の値) count(( for(1,N,10000), X is random(1000) / 1000, Y is random(1000) / 1000, ピタゴラスの定理を使って座標点が円の内部であるか判定する(_x,_y)), Count), _π の値 is Count / (10000 / 4). ピタゴラスの定理を使って座標点が円の内部であるか判定する(_x,_y) :- 1.0 >= _x * _x + _y * _Y. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1312201995/827 # # [1] 授業単元:モンテカルロ # [2] 問題文(含コード&リンク):http://ime.nu/ideone.com/foLSr # # 問題1. サイコロを10, 100 ,1000 ,10000 ,100000 回投げて分布を調べよ。 # 問題2. コイン投げも同様にして、Sn = X1 +....+ Xn のSn, そのmax,min を調べよ。 # 問題3.  面積 # ∫ 1 # 0 x^2 dx # をモンテカルロ法で求めよ。 # # 問題4. π の値をモンテカルロ法で求めよ。 # 問題5. 2 項分布をp=0.4 として実行してみよ。分布は、**** を打って表示せよ。 '2 項分布をp=0.4 として実行してみよ。分布は、**** を打って表示する'(_n) :- _p = 0.4, findall([_k,Y],( for(0,_k,_n), Y is (_p^_k) * (1-_p)^(_n-_k)), _二項分布), '分布は、**** を打って表示する'(_二項分布). '分布は、**** を打って表示する'([]). '分布は、**** を打って表示する'([[_k,Y]|R]) :- 'Yを0から100まで範囲に変換'(Y,Y2), 星並びアトムを作る(Y2,_星並びアトム), 横向きにグラフ表示(_k,_星並びアトム), '分布は、**** を打って表示する'(R). 'Yを0から100まで範囲に変換'(Y,Y2) :- Y2 is truncate(Y * 100). 星並びアトムを作る(N,_星並びアトム) :- length(L,N), all(L,'*'), concat_atom(L,_星ならぴアトム). 横向きにグラフ表示(_k,_星並びアトム) :- writef('%4c: %t\n',[_k,_星並びアトム]). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1312201995/845 # # 台形近似法を用いてf(x)=cos(x)を任意の範囲で積分するプログラムを # ユーザ関数を定義して作成しなさい. # その際の区分間距離も任意に入力できるようにすること。 # # 実行例 # 積分範囲を入力せよ # x0 = 0 # xl = 10 # 区分間距離を入力せよ # length = 1 # ans = 9.949055 # 積分範囲を入力せよ # x0 = 0 # xl = 100 # 区分間距離を入力せよ # length = 5 # ans = 49.588107 # # お願いします。 # # f(X,Y) :- Y is cos(X). '台形近似法を用いてf(x)=cos(x)を任意の範囲で積分する 区分間距離は任意に入力できるようにする' :- 積分範囲を入力する(_積分範囲下限,_積分範囲上限), 区分間距離を入力する(_区分間距離), f(_積分範囲下限,Y_1), '台形近似法を用いて積分する'(_積分範囲下限,Y_1,_積分範囲上限,_区分間距離,_積分値), writef('f(x)=cos(x) x範囲 %t-%t の積分値は %t です。\n',[_積分範囲下限,_積分範囲上限,_積分値]). 積分範囲を入力する(_積分範囲下限,_積分範囲上限) :- write('積分範囲を入力してください\n積分範囲下限(実数) : '), 実数入力(_積分範囲下限), write('積分範囲上限(実数) : '), 実数入力(_積分範囲上限), _積分範囲上限 > _積分範囲下限,!. 積分範囲を入力する(_積分範囲下限,_積分範囲上限) :- 積分範囲を入力する(_積分範囲下限,_積分範囲上限). 実数入力(_実数) :- get_line(Line), 実数入力診断(Line,_実数),!. 実数入力診断(Line,_実数) :- atom_to_term(Line,_実数,_), float(_実数),!. 実数入力診断(Line,_実数) :- writef('入力された %t は実数表現になっていません。再入力をお願いします。\n',[Line]), fail. 区分間距離を入力する(_区分間距離) :- write('区分間距離を入力してください : '), 実数入力(_区分間距離),!. 区分間距離を入力する(_区分間距離) :- 区分間距離を入力する(_区分間距離). '台形近似法を用いて積分する'(K,_,_積分範囲上限,_区分間距離,0.0) :- K >= _積分範囲上限,!. '台形近似法を用いて積分する'(X_1,Y_1,_積分範囲上限,_区分間距離,_積分値) :- X_2 is X_1 + _区分間距離, f(X_2,Y_2), _台形面積 is (_Y_1 + _Y_2) * _区分間距離 / 2, '台形近似法を用いて積分する'(X_2,Y_2,_積分範囲上限,_区分間距離,_積分値_2), _積分値 is _台形面積 + _積分値_2. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1320365280/335 # # [1] 授業単元:楽しいプログラミング # [2] 問題文(含コード&リンク): 以下の実行例のように,三角形の2 辺の長さとその2 # 辺のなす角(0〜180[deg])を入力すると,もう1 辺の # 長さと,三角形の面積を表示するプログラムを作成せ # よ.π = 3.14159265 とする. #  [3.1] OS: linux #  [3.2] コンパイラ名とバージョン: gcc 3.4 #  [3.3] 言語: C # [4] 期限:2011年11月17日 9:00まで # [5] その他の制限: while, if, for, 配列まで # # 例 #  三角形の2 辺の長さを入力してください。 # 辺1:-3.0 # 正の値を入力してください。辺1:3.0 # 辺2:6.0 # 2 辺のなす角度[deg] を入力してください:200.0 # 0<角度[deg]<180 の値を入力してください。30.0 # もう1 辺の長さ= 3.717941 # 三角形の面積= 4.500000 # # '三角形の2 辺の長さとその2辺のなす角(0〜180[deg])を入力すると,もう1 辺の長さと,三角形の面積を表示するプログラムを作成せよ.π = 3.14159265 とする' :- '三角形の2 辺の長さとその2辺のなす角(0〜180[deg])を入力すると'(_辺の長さ_1,_辺の長さ_2,_2辺のなす角), もう1辺の長さと三角形の面積を表示する(_辺の長さ_1,_辺の長さ_2,_2辺のなす角). '三角形の2 辺の長さとその2辺のなす角(0〜180[deg])を入力すると'(_辺の長さ_1,_辺の長さ_2,_2辺のなす角) :- write('三角形の2 辺の長さを入力してください。 '), 辺の長さ_1の入力(_辺の長さ_1), 辺の長さ_2の入力(_辺の長さ_2), '2辺のなす角の入力'(_2辺のなす角). 辺の長さ_1の入力(_辺の長さ_1) :- write('辺[1] : '), get_line(Line), 辺の長さ_1の入力診断(Line,_辺の長さ_1),!. 辺の長さ_1の入力(_辺の長さ_1) :- 辺の長さ_1の入力(_辺の長さ_1). 辺の長さ_2の入力(_辺の長さ_2) :- write('辺[2] : '), get_line(Line), 辺の長さの入力診断(Line,_辺の長さ_2),!. 辺の長さ_2の入力(_辺の長さ_2) :- 辺の長さ_2の入力(_辺の長さ_2). 辺の長さの入力診断(Line,_辺の長さ) :- atom_to_term(Line,_辺の長さ,_), number(_辺の長さ), _辺の長さ > 0.0,!. 辺の長さの入力診断(Line,_辺の長さ) :- writef('入力された %t からは三角形の辺にあたる情報が得られません。再入力をお願いします。\n',[Line]), fail. '2辺のなす角の入力'(_2辺のなす角) :- write('2辺のなす角度を入力して下さい (0<角度<180) : '), get_line(Line), '2辺のなす角の入力診断'(Line,_2辺のなす角),!. '2辺のなす角の入力'(_2辺のなす角) :- '2辺のなす角の入力(_2辺のなす角). '2辺のなす角の入力診断'(Line,_2辺のなす角) :- atom_to_term(Line,_2辺のなす角), number(_2辺のなす角), _2辺のなす角 > 0.0, _2辺のなす角 < 180.0,!. '2辺のなす角の入力診断'(Line,_2辺のなす角) :- writef('入力された%t からは2辺のなす角を得られません。再入力をお願いします。\n',[Line]), fail. もう1辺の長さと三角形の面積を表示する(_辺の長さ_1,_辺の長さ_2,_2辺のなす角) :- _辺の長さ_2 >= _辺の長さ_1, もう1辺の長さ(_辺の長さ_1,_辺の長さ_2,_2辺のなす角,_もう1辺の長さ), 三角形の面積(_辺の長さ_1,_辺の長さ_2,_2辺のなす角,_三角形の面積), 表示する(_もう1辺の長さ,_三角形の面積),!. もう1辺の長さと三角形の面積を表示する(_辺の長さ_1,_辺の長さ_2,_2辺のなす角) :- _辺の長さ_2 < _辺の長さ_1, もう1辺の長さと三角形の面積を表示する(_辺の長さ_2,_辺の長さ_1,_2辺のなす角). もう1辺の長さ(_辺の長さ_1,_辺の長さ_2,_2辺のなす角,_もう1辺の長さ) :- _三角形の高さ is _辺の長さ_1 * sin(_2辺のなす角 / 180 * pi), _辺の長さ_2_1 is _辺の長さ_1 * cos(_2辺のなす角 / 180 * pi), _辺の長さ_2_2 is _辺の長さ_2 - _辺の長さ_2_1, _もう1辺の長さ is sqrt(_辺の長さ_2_2 * _辺の長さ_2_2 + _三角形の高さ * _三角形の高さ). 三角形の面積(_辺の長さ_1,_辺の長さ_2,_2辺のなす角,_三角形の面積) :- _三角形の高さ is _辺の長さ_1 * sin(_2辺のなす角 / 180 * pi), _三角形の面積 is _辺の長さ_2 * _三角形の高さ / 2. 表示する(_もう1辺の長さ,_三角形の面積) :- writef('%16c : %12r\n%16c : %12r\n',[もう1辺の長さ,_もう1辺の長さ,三角形の面積,_三角形の面積]). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1320365280/641 # # [1] 授業単元: プログラミング基礎 # [2] 問題文(含コード&リンク): # 半径5cmの円の面積[cm^2]を求めるプログラムを作成し、 # 小数点以下5桁まで解を求めよ。 # '半径5cmの円の面積[cm^2]を求めるプログラムを作成し、小数点以下5桁まで解を求めよ。' :- X is 5 * 5 * pi, format('半径5cmの円の面積は ~5f cm^2です。\n',[X]). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1325685876/285 # # [1] 授業単元:計算機アルゴリズム [2] 問題文(含コード&リンク): # (1).2つの整数を引数で持ち、小さい方を出力する関数、imin2(整数,整数)を作成し、 imin2を使用した4つの数値を入力して最小値を 出力するプログラムを作成せよ。 # # (2).半径1の円に内接したn角形の面積Sを求め よ。またn=100のケースと手計算の 円の面積を比較せよ(n-100のケースのプログラム の結果をプログラムの下に貼り付ければ良い). # imin2(_整数,_整数,_整数). imin2(_整数1,_整数2,_整数1) :- _整数1 < _整数2. imin2(_整数1,_整数2,_整数2) :- _整数1 > _整数2. '2つの整数を引数で持ち、小さい方を出力する関数、imin2(整数,整数)を作成し、imin2を使用した4つの数値を入力して最小値を出力する'(_数値1,_数値2,_数値3,_数値4,_最小値) :- imin2(_数値1,_数値2,_準決勝勝者1), imin2(_数値3,_数値4,_準決勝勝者2), imin2(_準決勝勝者1,_準決勝勝者2,_最小値). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1325685876/285 # # [1] 授業単元:計算機アルゴリズム [2] 問題文(含コード&リンク): # (1).2つの整数を引数で持ち、小さい方を出力する関数、imin2(整数,整数)を作成し、 imin2を使用した4つの数値を入力して最小値を 出力するプログラムを作成せよ。 # # (2).半径1の円に内接したn角形の面積Sを求め よ。またn=100のケースと手計算の 円の面積を比較せよ(n-100のケースのプログラム の結果をプログラムの下に貼り付ければ良い). # imin2(_整数,_整数,_整数). imin2(_整数1,_整数2,_整数1) :- _整数1 < _整数2. imin2(_整数1,_整数2,_整数2) :- _整数1 > _整数2. '2つの整数を引数で持ち、小さい方を出力する関数、imin2(整数,整数)を作成し、imin2を使用した4つの数値を入力して最小値を出力する'(_数値1,_数値2,_数値3,_数値4,_最小値) :- imin2(_数値1,_数値2,_準決勝勝者1), imin2(_数値3,_数値4,_準決勝勝者2), imin2(_準決勝勝者1,_準決勝勝者2,_最小値). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1325685876/285 # # [1] 授業単元:計算機アルゴリズム [2] 問題文(含コード&リンク): # (2).半径1の円に内接した正n角形の面積Sを求めよ。またn=100のケースと手計算の円の面積を比較せよ(n-100のケースのプログラム の結果をプログラムの下に貼り付ければ良い). # '半径1の円に内接した正n角形の面積Sを求めよ。'(_n角形,_面積) :- _θ is 2 * pi / _nn角形, _面積 is (0.5 * 1 * 1 * sin(_θ)) * _nn角形. 'またn=100のケースと手計算の円の面積を比較せよ'(_手計算の円の面積) :- '半径1の円に内接した正n角形の面積Sを求めよ。'(100,_面積), writef('手計算の円の面積 = %t\n',[_手計算の円の面積]), writef('_n角形の円の面積 = %t\n',[_面積]). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1328276597/522 # # [1] 授業単元: 情報処理 # [2] 問題文 # (1) # http://ime.nu/ideone.com/F0NZo # # 上記のプログラムはオープンするファイルが abc に限られている。 # キーボードからファイル名を読み込んで、そのファイルをオープンするように変更せよ。 # # (2) 台形公式を用いて、分割数 N を増やしながら f(x) = x 3 を 0から1の範囲で積分し、 # その計算結果と解析解(1/4)の差が0.001未満になったら計算を終了するプログラムを作成せよ。 # Nの初期値を1として、Nについての for文を用いること。 # f(X,Y) :- Y is X ^ 3. '台形公式を用いて、分割数 N を増やしながら f(x) = x 3 を 0から1の範囲で積分し、その計算結果と解析解(1/4)の差が0.001未満になったら計算を終了する' :- for(1,N,maxint), '0から1の範囲で積分し'(N,_積分値), writef('N=%t: 計算結果=%t\n',[N,_積分値]), 0.001 > abs((1/4) - _積分値). '0から1の範囲で積分し'(N,_積分値) :- _区分間距離 is (1-0) / N, f(0,Y_1), '0から1の範囲で積分し'(0.0,Y_1,_区分間距離,_積分値). '0から1の範囲で積分し'(K,_,_区分間距離,0.0) :- K >= 1.0,!. '0から1の範囲で積分し'(X_1,Y_1,_区分間距離,_積分値) :- X_2 is X_1 + _区分間距離, f(X_2,Y_2), _台形面積 is (_Y_1 + _Y_2) * _区分間距離 / 2, '0から1の範囲で積分し'(X_2,Y_2,_区分間距離,_積分値_2), _積分値 is _台形面積 + _積分値_2. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1335517816/285 # # [1] 授業単元:プログラミング演習 # [2] 問題文: # 円の半径rを受け取ると、rからこの半径の円の周囲の長さlと面積sを計算するcircle関数を作成。 # そしてmain関数でrを入力すると、circle関数でlとsが計算され、その結果をmain関数で出力するプログラムを作成しなさい。 # main :- 円の半径の入力(_円の半径r), 'circle関数'(_円の半径r,_周囲の長さl,_面積s), writef('円の半径 %t, 周囲の長さ %t, 面積 %t\n',[_円の半径r,_周囲の長さl,_面積s]). 円の半径の入力(_円の半径r) :- get_line(Line), 円の半径の入力診断(Line,_円の半径r),!. 円の半径の入力(_円の半径r) :- 円の半径の入力(_円の半径r). 円の半径の入力診断(Line,_円の半径r) :- atom_to_term(Line,_円の半径r,_), number(_円の半径), _円の半径 >= 0.0,!. 円の半径の入力診断(Line,_円の半径r) :- writef('入力された %t からは円の半径が得られません。再入力をお願いします。\n',[Line]), fail. 'circle関数'(_円の半径r,_周囲の長さl,_面積s) :- _周囲の長さl is 2 * _円の半径r * pi, _面積s is _円の半径r * _円の半径r * pi. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1335517816/868 # # [1] 授業単元:プログラミング # [2] 問題文(含コード&リンク):http://ime.nu/www.fluid.cse.nagoya-u.ac.jp/~ishihara/c/Sec6kadai0.html # # 「x^2をaからbまで台形則を用いて数値積分する関数」を用いて作成せよ。 # なお、台形則の分割数はnとし、a,b,nは入力できるようにすること。 f(X,Y) :- Y is X ^ 2. 台形則(_分割数,_a,_b,_積分値) :- _差分 is ( _b - _a ) / _分割数, 台形則(_a,_b,_差分,0.0,_積分値). 台形則(_a_1,_b,_差分,_積分値,_積分値) :- _a_1 >= _b,!. 台形則(_a_1,_b,_差分,_積分値_1,_積分値) :- _a_2 is _a_1 + _差分, 差分台形面積の計算(_差分,_a_1,_a_2,_差分台形面積), _積分値_2 is _差分台形面積 + _積分値_1, 台形則(_a_2,_b,_差分,_積分値_2,_積分値). 差分台形面積の計算(_差分,_a_1,_a_2,_差分台形面積) :- f(_a_1,_X_1), f(_a_2,_X_2), _差分台形面積 is (_X_1 + _X_2) / 2. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1335517816/987 # # (c言語) # 関数f(x)=4.0/(1.0+X^2) の (0,1)間の定積分を # 台形公式を用いて計算するプログラムを作成せよ。 # 台形の分割数 n は 2のk乗とし、(k=1,2,3,,,10)について求める # [台形公式] # 関数f(x)の定積分値は、積分区間(a,b)を幅hの区間にn等分し、 # 区分点をx0(=a), x1, .. xn(=b)とするとき、面積Sは # S=h×[0.5×f(x0)+f(x1)+f(x2)+...+0.5×f(xn)で近似される # # f(_x,_y) :- _y is 4.0 / (1.0 + _x ^ 2). '関数f(x)=4.0/(1.0+X^2) の (0,1)間の定積分を台形公式を用いて計算する'(_k,_s) :- '_kと_分割数'(_k,_分割数), f(0.0,_y_0), '関数f(x)=4.0/(1.0+X^2) の (0,1)間の定積分を台形公式を用いて計算する'(1,_分割数,_h,_y_0,_s). '_kと_分割数'(_k,_分割数) :- between(1,10,_k), _分割数 is truncate( 2 ^ _k). '関数f(x)=4.0/(1.0+X^2) の (0,1)間の定積分を台形公式を用いて計算する'(N,_分割数,_h,_y_1,0.0) :- N > _分割数,!. '関数f(x)=4.0/(1.0+X^2) の (0,1)間の定積分を台形公式を用いて計算する'(N,_分割数,_h,_y_1,_s) :- 台形の面積(N,_y_1,_h,_y_2,_s_1), N_2 is N + 1, '関数f(x)=4.0/(1.0+X^2) の (0,1)間の定積分を台形公式を用いて計算する'(N_2,_分割数,_h,_y_2,_s_2), _s is _s_1 + _s_2. 台形の面積(N,_y_1,_h,_y_2,_s_1) :- _x_2 is 0.0 + _h * N, f(_x_2,_y_2), s_1 is (_y_1 + _y_2) * _h / 2. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1339338438/118 # # [1] 授業単元: C言語 # [2] 問題文(含コード&リンク): キーボードから底面の半径と高さを入力したときの円柱の体積を計算するプログラムを作成しなさい # キーボードから底面の半径と高さを入力したときの円柱の体積を計算する(_円柱の体積) :- キーボードから底面の半径と高さを入力したときの円柱の体積を計算する(_,_,_円柱の体積). キーボードから底面の半径と高さを入力したときの円柱の体積を計算する(_底面の半径,_高さ,_円柱の体積) :- キーボードから底面の半径と高さを入力したときの(_底面の半径,_高さ), 円柱の体積を計算する(_底面の半径,_高さ,_円柱の体積). キーボードから底面の半径と高さを入力したときの(_底面の半径,_高さ) :- 底面の半径の入力(_底面の半径), 高さの入力(_高さ). 底面の半径の入力(_底面の半径) :- write('底面の半径を入力してください : '), get_line(Line), '診断: 底面の半径の入力(Line,_底面の半径),!. 底面の半径の入力(_底面の半径) :- 底面の半径の入力(_底面の半径). '診断: 底面の半径の入力'(Line,_底面の半径) :- atom_to_term(Line,_底面の半径,_), number(_底面の半径), _底面の半径 >= 0.0,!. '診断: 底面の半径の入力'(Line,_底面の半径) :- writef('入力された %t からは底面の半径が得られません。再入力をお願いします。\n',[Line]), fail. 高さの入力(_高さ) :- write('高さを入力してください : '), get_line(Line), '診断: 高さの入力(Line,_高さ),!. 高さの入力(_高さ) :- 高さの入力(_高さ). '診断: 高さの入力'(Line,_高さ) :- atom_to_term(Line,_高さ,_), number(_高さ), _高さ >= 0.0,!. '診断: 高さの入力'(Line,_高さ) :- writef('入力された %t からは高さが得られません。再入力をお願いします。\n',[Line]), fail. 円柱の体積を計算する(_底面の半径,_高さ,_円柱の体積) :- 円柱の体積は底面の面積に高さを掛けたものである(_底面の半径,_高さ,_円柱の体積). 円柱の体積は底面の面積に高さを掛けたものである(_底面の半径,_高さ,_円柱の体積) :- 底面の面積(_底面の半径,_底面の面積), _円柱の体積 is _底面の面積 * _高さ. 底面の面積(_底面の半径,_底面の面積) :- _底面の面積 is _底面の半径 * _底面の半径 * pi. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1276873238/586 # # 問題 # 円Cの半径r、中心の座標(x,y)が与えられたとき # 円の面積の第1象限の部分、第2象限の部分、第3象限の部分、第4象限の部分を求めよ。 # 円の面積(_r,_面積) :- _面積 is _r * _r * pi. '円Cの半径r、中心の座標(x,y)が与えられたとき円の面積の第1象限の部分、第2象限の部分、第3象限の部分、第4象限の部分を求めよ'(_r,_中心のx座標,_中心のy座標,_第1象限の面積,_第2象限の面積,_第3象限の面積,_第4象限の面積) :- 円の面積(_r,_円の面積), 半径を0からrまで変化させて中心座標から半径分だけ離れた任意の座標の象限の統計をとる(100000,_r,_中心のx座標,_中心のy座標,0,0,0,0,_第1象限の度数,_第2象限の度数,_第3象限の度数,_第4象限の度数), 度数から面積を得る(_円の面積,_第1象限の度数,_第2象限の度数,_第3象限の度数,_第4象限の度数,_第1象限の面積,_第2象限の面積,_第3象限の面積,_第4象限の面積). 半径を0からrまで変化させて中心座標から半径分だけ離れた任意の座標の象限の統計をとる(0,_r,_,_,_第1象限の度数,_第2象限の度数,_第3象限の度数,_第4象限の度数,_第1象限の度数,_第2象限の度数,_第3象限の度数,_第4象限の度数) :- !. 半径を0からrまで変化させて中心座標から半径分だけ離れた任意の座標の象限の統計をとる(N,_r,_中心のx座標,_中心のy座標,_第1象限の度数_1,_第2象限の度数_1,_第3象限の度数_1,_第4象限の度数_1,_第1象限の度数,_第2象限の度数,_第3象限の度数,_第4象限の度数) :- 標本点を得る(_r,_中心のx座標,_中心のy座標,_x,_y), 象限度数に加算(_x,_y,_第1象限の度数_1,_第2象限の度数_1,_第3象限の度数_1,_第4象限の度数_1,_第1象限の度数_2,_第2象限の度数_2,_第3象限の度数_2,_第4象限の度数_2). N_1 is N - 1, 半径を0からrまで変化させて中心座標から半径分だけ離れた任意の座標の象限の統計をとる(N_1,_r,_中心のx座標,_中心のy座標,_第1象限の度数_2,_第2象限の度数_2,_第3象限の度数_2,_第4象限の度数_2,_第1象限の度数,_第2象限の度数,_第3象限の度数,_第4象限の度数). 象限度数に加算(_x,_y,_第1象限の度数,_第2象限の度数,_第3象限の度数,_第4象限の度数,_第1象限の度数_2,_第2象限の度数,_第3象限の度数,_第4象限の度数) :- _x > 0.0, _y > 0.0, _第1象限の度数_2 is _第1象限の度数 + 1,!. 象限度数に加算(_x,_y,_第1象限の度数,_第2象限の度数,_第3象限の度数,_第4象限の度数,_第1象限の度数,_第2象限の度数_2,_第3象限の度数,_第4象限の度数) :- _x < 0.0, _y > 0.0, _第2象限の度数_2 is _第2象限の度数 + 1,!. 象限度数に加算(_x,_y,_第1象限の度数,_第2象限の度数,_第3象限の度数,_第4象限の度数,_第1象限の度数,_第2象限の度数,_第3象限の度数_2,_第4象限の度数) :- _x < 0.0, _y < 0.0, _第3象限の度数_2 is _第3象限の度数 + 1,!. 象限度数に加算(_x,_y,_第1象限の度数,_第2象限の度数,_第3象限の度数,_第4象限の度数,_第1象限の度数,_第2象限の度数,_第3象限の度数,_第4象限の度数_2) :- _x > 0.0, _y < 0.0, _第4象限の度数_2 is _第4象限の度数 + 1,!. 象限度数に加算(_x,_y,_第1象限の度数,_第2象限の度数,_第3象限の度数,_第4象限の度数,_第1象限の度数,_第2象限の度数,_第3象限の度数,_第4象限の度数). 標本点を得る(_r,_中心のx座標,_中心のy座標,_x,_y) :- 半径とラジアン角度をランダムに得る(_r,_半径,_ラジアン角度), _x is _半径 * cos(_ラジアン角度) + _中心のx座標, _y is _半径 * sin(_ラジアン角度) + _中心のy座標. 半径とラジアン角度をランダムに得る(_r,_半径,_ラジアン角度) :- _半径 is _r * (random(10000) + 1) / 10000, _ラジアン角度 is 2 * pi * (random(10000) + 1) / 10000. 度数から面積を得る(_円の面積,_第1象限の度数,_第2象限の度数,_第3象限の度数,_第4象限の度数,_第1象限の面積,_第2象限の面積,_第3象限の面積,_第4象限の面積) :- _標本数 is _第1象限の度数+_第2象限の度数+_第3象限の度数+_第4象限の度数, _第1象限の面積 is _円の面積 * _第1象限の度数 / _標本数, _第2象限の面積 is _円の面積 * _第2象限の度数 / _標本数, _第3象限の面積 is _円の面積 * _第3象限の度数 / _標本数, _第4象限の面積 is _円の面積 * _第4象限の度数 / _標本数. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1276873238/602 # # 問題 # 辺の長さがa,b,c,dの四角形の面積の最大値を求めよ。 # # 一般に, AB=a, BC=b, CD=c,DA=dの四角形ABCDの面積Sは, # http://www2.ocn.ne.jp/~mizuryu/kadai5/kadai241a.files/image006.gif # (但し,)(http://www2.ocn.ne.jp/~mizuryu/kadai5/kadai241a.files/image007.gif) # # で与えられる. # 今,a,b,c,d,pは一定だから, この四角形ABCDが最大となるのは, # http://www2.ocn.ne.jp/~mizuryu/kadai5/kadai241a.files/image012.gif のとき, すなわち, 円に内接するとき, である. # このとき http://www2.ocn.ne.jp/~mizuryu/kadai5/kadai241a.files/image013.gif # '辺の長さがa,b,c,dの四角形の面積の最大値を求める'(_a,_b,_c,_d,_辺の長さが_a_b_c_dの四角形の面積の最大値) :- _e is (_a + _b + _c + _d) / 2, _辺の長さが_a_b_c_dの四角形の面積の最大値 is sqrt((_e - _a) * (_e - b) * (_e - _c) * (_e - _d)). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1276873238/602 # # 問題 # 辺の長さがa,b,c,dの四角形の面積の最大値を求めよ。 # # http://www2.ocn.ne.jp/~mizuryu/kadai5/kadai241a.htm # # 一般に, AB=a, BC=b, CD=c,DA=dの四角形ABCDの面積Sは, # http://www2.ocn.ne.jp/~mizuryu/kadai5/kadai241a.files/image006.gif # (但し,)(http://www2.ocn.ne.jp/~mizuryu/kadai5/kadai241a.files/image007.gif) # # で与えられる. # 今,a,b,c,d,pは一定だから, この四角形ABCDが最大となるのは, # http://www2.ocn.ne.jp/~mizuryu/kadai5/kadai241a.files/image012.gif のとき, すなわち, 円に内接するとき, である. # このとき http://www2.ocn.ne.jp/~mizuryu/kadai5/kadai241a.files/image013.gif # '辺の長さがa,b,c,dの四角形の面積の最大値を求める'(_a,_b,_c,_d,_辺の長さが_a_b_c_dの四角形の面積の最大値) :- findall(W,( select(D,[_a,_b,_c,_d],[A,B,C]), W is A+B+C-D), L), mult(L,X), _辺の長さが_a_b_c_dの四角形の面積の最大値 is sqrt(X) / 4. mult([],1). mult([A|R],X) :- mult(R,Y), X is A * Y. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1339338438/546 # # [1] 授業単元:C言語 # [2] 問題文(含コード&リンク): # # 次の1〜4の仕様を満たすプログラムを作成しなさい。 # 1:main 関数において int 型の半径 r をキーボードから受け取る # 2:円周( ring )を求める enshu 関数に r を値呼び出しで渡して円周を計算し、 # その値を main 関数に return する # 3:円の面積( area )を求める menseki 関数に r を参照呼出しで渡して面積を計算し、 # その値を main 関数に return する # 4:main 関数で return された円周と面積の値を下記の実行結果のように画面表示する # # [実行結果・例] # 半径rを入力:5 # 円周:31.400000 # 面積:78.500000 # # 'int 型の半径 r をキーボードから受け取る'(_r) :- 整数を得る(半径,_r). '円周を求める。'(_r,_円周) :- _円周 is 2 * pi * _r. '円の面積を求める。'(_r,_円の面積) :- _円の面積 is _r * _r * pi. main :- 'int 型の半径 r をキーボードから受け取る'(_r), '円周を求める。'(_r,_円周), '円の面積を求める。'(_r,_円の面積), writef('円周: %10r\n面積: %10r\n',[_円周,_円の面積]). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1276873238/735 # # 問題 # # 三本のまっすぐな棒の長さ a, b, c (1<= a,b,c <=1000 の整数)が与えられたとき # 三本の棒で作ることの出来る三角形の最大面積を求めよ(計算誤差は 0.001以下とする) # 棒は切断したり曲げたりすることは出来ない # また棒の太さは十分細く無視できるものとする # '三本のまっすぐな棒の長さ a, b, c (1<= a,b,c <=1000 の整数)が与えられたと三本の棒で作ることの出来る三角形の最大面積を求めよ(計算誤差は 0.001以下とする)棒は切断したり曲げたりすることは出来ないまた棒の太さは十分細く無視できるものとする'(_a,_b,_c,_三角形の面積) :- 最長辺の二乗が他の二辺のそれぞれの長さの二乗の和以下である(_a,_b,_c), ヘロンの公式(_a,_b,_c,_三角形の面積). '三本のまっすぐな棒の長さ a, b, c (1<= a,b,c <=1000 の整数)が与えられたと三本の棒で作ることの出来る三角形の最大面積を求めよ(計算誤差は 0.001以下とする)棒は切断したり曲げたりすることは出来ないまた棒の太さは十分細く無視できるものとする'(_a,_b,_c,_三角形の面積) :- 最長辺の二乗が他の二辺のそれぞれの長さの二乗の和より大きい(_a,_b,_c,_最長辺,_辺_2,_辺_3), '最大面積の三角形は、長辺を直径として、頂点が円周上にある三角形つまり長編を斜辺とする直角三角形である'(_辺_2,_辺_3,_三角形の面積). 最長辺の二乗が他の二辺のそれぞれの長さの二乗の和以下である(_a,_b,_c) :- select(_最長辺,[_a,_b,_c],[_辺_2,_辺_3]), _最長辺 >= _辺_2, _最長辺 >= _辺_3, _最長辺 * _最長辺 =< _辺_2 * _辺_2 + _辺_3 * _辺_3,!. 最長辺の二乗が他の二辺のそれぞれの長さの二乗の和より大きい(_a,_b,_c,_最長辺,_辺_2,_辺_3) :- select(_最長辺,[_a,_b,_c],[_辺_2,_辺_3]), _最長辺 >= _辺_2, _最長辺 >= _辺_3, _最長辺 * _最長辺 > _辺_2 * _辺_2 + _辺_3 * _辺_3,!. ヘロンの公式(_a,_b,_c,_三角形の面積) :- _周囲の半分 is (_a + _b + _c) / 2, _三角形の面積 is sqrt(_周囲の半分 * (_周囲の半分 - _a) * (_周囲の半分 - _b) * (_周囲の半分 - _c)). '最大面積の三角形は、長辺を直径として、頂点が円周上にある三角形つまり長編を斜辺とする直角三角形である'(_辺_2,_辺_3,_三角形の面積) :- _三角形の面積 is _辺_2 * _辺_3 * 0.5. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1337692704/242 # # 【課題】http://www.dotup.org/uploda/www.dotup.org3205225.txt.html # 【形態】1. Javaアプリケーション(main()で開始) # 【GUI】4. 制限なし # 【期限】提出期限:7月18日 20時まで # 【Ver】java version "1.7.0_03 # よろしくお願いします。 # # # # 1.線分オブジェクトを定義 # # 二点 (Point) を両端とする線分 (LineSegment) のクラスを定義する # # a1. フィールド : (Point型) p1, p2 # LineSegment オブジェクトを生成した直後では, # p1, p2 フィールドは null であることに注意 # a2. 線分の長さを得るメソッド getLength() を定義する。 # 引数無し,戻り値の型はdouble # # # 2.長方形オブジェクトを定義 # # 左上隅と右下隅の二点 (Point) で与えられる長方形 (Rectangle) のクラスを定義する # # フィールド : (Point型) top_left, bottom_right # 次のメソッドを定義し,実行する。 # # a: 面積を求める double getArea() # # b: 周囲の長さを求める int getPerimeter() # # c: ある点が内部に含まれるかどうかを調べる # boolean isAround(Point p) # # 複数課題で申し訳ありませんがよろしくお願いします。 線分の定義(_識別子,_X座標_1,_Y座標_1,_X座標_2,_Y座標_2) :- assertz(線分(_識別子,X座標_1,_X座標_1)), assertz(線分(_識別子,Y座標_1,_Y座標_1)), assertz(線分(_識別子,X座標_2,_X座標_2)), assertz(線分(_識別子,Y座標_2,_Y座標_2)). 線分の長さを得る(_識別子,_線分の長さ) :- 二つの端点の座標を得る(_識別子,_X座標_1,_Y座標_1,_X座標_2,_Y座標_2), _線分の長さ is sqrt((_X座標_2-_X座標_1) * (_X座標_2-_X座標_1) + (_Y座標_2-_Y座標_1) * (_Y座標_2-_Y座標_1)). 二つの端点の座標を得る(_識別子,_X座標_1,_Y座標_1,_X座標_2,_Y座標_2) :- 線分(_識別子,X座標_1,_X座標_1), 線分(_識別子,Y座標_1,_Y座標_1), 線分(_識別子,X座標_2,_X座標_2), 線分(_識別子,Y座標_2,_Y座標_2). 長方形の定義(_識別子,_左上隅のX座標,_左上隅のY座標,_右下隅のX座標,_右下隅のY座標) :- assertz(長方形(_識別子,左上隅のX座標,_左上隅のX座標)), assertz(長方形(_識別子,左上隅のX座標,_左上隅のY座標)), assertz(長方形(_識別子,右下隅のX座標,_右下隅のX座標)), assertz(長方形(_識別子,右下隅のX座標,_右下隅のY座標)). 長方形の面積を求める(_識別子,_長方形の面積) :- 左上隅と右下隅の座標を得る(_識別子,_左上隅のX座標,_左上隅のY座標,_右下隅のX座標,_右下隅のY座標), _長方形の面積 is abs(_右下隅のX座標-_左上隅のX座標) * abs(_右下隅のY座標-_左上隅のY座標). 左上隅と右下隅の座標を得る(_識別子,_左上隅のX座標,_左上隅のY座標,_右下隅のX座標,_右下隅のY座標) :- 長方形(_識別子,左上隅のX座標,_左上隅のX座標), 長方形(_識別子,左上隅のX座標,_左上隅のY座標), 長方形(_識別子,右下隅のX座標,_右下隅のX座標), 長方形(_識別子,右下隅のX座標,_右下隅のY座標). 周囲の長さを求める(_識別子,_周囲の長さ) :- 辺の長さを得る(_識別子,_辺の長さ_1,_辺の長さ_2,_辺の長さ_3,_辺の長さ_4), _周囲の長さ is _辺の長さ_1 + _辺の長さ_2 + _辺の長さ_3 + _辺の長さ_4. 辺の長さを得る(_識別子,_辺の長さ_1,_辺の長さ_2,_辺の長さ_3,_辺の長さ_4) :- 左上隅と右下隅の座標を得る(_識別子,_左上隅のX座標,_左上隅のY座標,_右下隅のX座標,_右下隅のY座標), _辺の長さ_1 is abs(_右下隅のX座標-_左上隅のX座標), _辺の長さ_2 = _辺の長さ_1, _辺の長さ_3 is abs(_右下隅のY座標-_左上隅のY座標), _辺の長さ_4 = _辺の長さ_3. ある点が内部に含まれるかどうかを調べる(_識別子,_ある点のX座標,_ある点のY座標) :- 左上隅と右下隅の座標を得る(_識別子,_左上隅のX座標,_左上隅のY座標,_右下隅のX座標,_右下隅のY座標), _ある点のX座標 >= _左上隅のX座標, _ある点のX座標 =< _右下隅のX座標, _ある点のY座標 =< _左上隅のY座標, _ある点のY座標 >= _右下隅のY座標. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1342966104/844 # # [1] 授業単元:C言語 # [2] 問題文(含コード&リンク): # http://ime.nu/codepad.org/DXRUGC3J # http://ime.nu/codepad.org/e9CIf3Iy # # /* # # 4. # 2次元平面上の3つの座標 p1、p2、 p3 を頂点とする # 3角形を考え、構造体 triangle を以下のように定義する。 # struct triangle { # double p1[2]; double p2[2]; double p3[2]; # }; # # 構造体 triangle に対して、以下の関数を作成せよ。 適当な構造体 triangle の変数を # いくつか作成して、この関数が正しく動作することを確認するプログラムを作成せよ。 # # int congruence (structure triangle *a, structure triangle *b) # # 三角形 a と三角形 b が合同かどうかを判定する、 # 合同なら 1 を合同でないなら 0 を返す # # */ # # /* # # 5.構造体Tri は三角形に対応するものであり、3 つの辺の長さ(a,b,c) とその三角形の面積(area) を # メンバーとしてして持つ。 # struct Tri { # int a; # int b; # int c; # double area # }; # # 構造体Tri の変数をランダムにn 個作成して、三角形の面積が大きい順に表示するプログラムを作成 # する。ただしn はプログラムの引数として与える。また構造体Tri の変数をランダムに作成する際 # に、a とb には3 以上30 以下の整数をランダムに入れ、c にはa とb の値から、3 辺a, b, c から三 # 角形ができるようにランダムに正の整数を入れる。 # # [実行結果] # > ./a.out 1000 # 1 番目に大きい三角形は3 辺が( 30, 29, 41 ) で面積は434.741302 # 2 番目に大きい三角形は3 辺が( 29, 29, 43 ) で面積は418.422260 # 3 番目に大きい三角形は3 辺が( 30, 27, 37 ) で面積は399.749922 # ... # 998 番目に大きい三角形は3 辺が( 4, 3, 3 ) で面積は4.472136 # 999 番目に大きい三角形は3 辺が( 3, 3, 3 ) で面積は3.897114 # 1000 番目に大きい三角形は3 辺が( 3, 3, 1 ) で面積は1.479020 # # */ '三角形の面積が大きい順に表示する'(_n) :- 三角形をn個生成する(_n,_n個の三角形ならび), 大きい順に表示する(_n個の三角形ならび). 三角形をn個生成する(_n,_n個の三角形ならび) :- findall([_a,_b,_c],( between(1,_n,_), 三辺の長さを生成する(_a,_b,_c)), _n個の三角形ならび). 三辺の長さを生成する(_a,_b,_c) :- _a is random(100) + 1, _b is random(100) + 1, _c is random(100) + 1. 大きい順に表示する(_n個の三角形ならび) :- 三角形の面積と相対位置のならびを作る(0,_n個の三角形ならび,_面積と相対位置のならび), 大きい順に(_面積と相対位置のならび,_大きい順に整列した面積と相対位置のならび), 表示する(0,_大きい順に整列した面積と相対位置のならび,_n個の三角形ならび). 三角形の面積と相対位置のならびを作る(_,[],[]). 三角形の面積と相対位置のならびを作る(N_1,[[_a,_b,_c]|R1],[[_三角形の面積,N_2]|R2]) :- N_2 is N + 1, ヘロンの公式(_a,_b,_c,_三角形の面積), 三角形の面積と相対位置のならびを作る(0,R1,R2). ヘロンの公式(_a,_b,_c,_三角形の面積) :- _周囲の半分 is (_a + _b + _c) / 2, _三角形の面積 is sqrt(_周囲の半分 * (_周囲の半分 - _a) * (_周囲の半分 - _b) * (_周囲の半分 - _c)). 大きい順に([],[]). 大きい順に([_軸要素|L1],L2) :- 大きい順に分割する(_軸要素,L1,_軸要素に等しいか大きい要素ならび,_軸要素より小さい要素ならび), 大きい順に(_軸要素に等しいか大きい要素ならび,_大きい順に整列した軸要素に等しいか大きい要素ならび), 大きい順に(_軸要素より小さい要素ならび,_大きい順に整列した軸要素より小さい要素ならび), append(_大きい順に整列した軸要素に等しいか大きい要素ならび,[_軸要素|_大きい順に整列した軸要素より小さい],L2). 大きい順に分割する(_,[],[],[])). 大きい順に分割する(_軸要素,[_要素|R1],[_要素|_軸要素に等しいか大きい要素ならび],_軸要素より小さい要素ならび) :- _要素 @>= _軸要素, 大きい順に分割する(_軸要素,R1,_軸要素に等しいか大きい要素ならび,_軸要素より小さい要素ならび). 大きい順に分割する(_軸要素,[_要素|R1],_軸要素に等しいか大きい要素ならび,[_要素|_軸要素より小さい要素ならび]) :- _要素 @< _軸要素, 大きい順に分割する(_軸要素,R1,_軸要素に等しいか大きい要素ならび,_軸要素より小さい要素ならび). 表示する(_,[],_). 表示する(_順位_0,[[_面積,_相対番号]|R1],_n個の三角形ならび) :- _順位 is _順位_0 + 1, nth1(_相対番号,_n個の三角形ならび,[_a,_b,_c]), writef('%t 番目に大きい三角形は3 辺が( %t, %t, %t ) で面積は%t\n',[_順位,_a,_b,_c,_面積]), 表示する(_順位,R1,_n個の三角形ならび). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1349527750/258 # # [1] 授業単元:C言語 # [2] 問題文(含コード&リンク): # # 次の1〜4の仕様を満たすプログラムを作成しなさい。 # 1:main 関数において int 型の半径 r をキーボードから受け取る # 2:円周( ring )を求める enshu 関数に r を値呼び出しで渡して円周を計算し、 # その値を main 関数に return する # 3:円の面積( area )を求める menseki 関数に r を参照呼出しで渡して面積を計算し、 # その値を main 関数に return する # 4:main 関数で return された円周と面積の値を下記の実行結果のように画面表示する # # [実行結果・例] # 半径rを入力:5 # 円周:31.400000 # 面積:78.500000 # # main :- 'int 型の半径をキーボードから受け取る'(_半径), 円周と面積の値を画面表示する(_円周,_円の面積). 'int 型の半径をキーボードから受け取る'(_半径) :- 整数を得る(半径,_半径). 円周と面積の値を画面表示する(_半径,_円周,_円の面積) :- 円周を求める(_半径,_円周), 円の面積を求める(_半径,_円の面積), writef('円周: %t\n面積: %t です。\n',[_円周,_円の面積]). 円周を求める(_半径,_円周) :- _直径 is _半径 * 2, _円周 is _直径 * pi. 円の面積を求める(_半径,_円の面積) :- _円の面積 is _半径 * _半径 * pi. % c160_258_1 % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1349527750/258 # # [1] 授業単元:C言語 # [2] 問題文(含コード&リンク): # # 次の1〜4の仕様を満たすプログラムを作成しなさい。 # 1:main 関数において int 型の半径 r をキーボードから受け取る # 2:円周( ring )を求める enshu 関数に r を値呼び出しで渡して円周を計算し、 # その値を main 関数に return する # 3:円の面積( area )を求める menseki 関数に r を参照呼出しで渡して面積を計算し、 # その値を main 関数に return する # 4:main 関数で return された円周と面積の値を下記の実行結果のように画面表示する # # [実行結果・例] # 半径rを入力:5 # 円周:31.400000 # 面積:78.500000 # # main :- 'int 型の半径をキーボードから受け取る'(_半径), 円周と面積の値を画面表示する(_円周,_円の面積). 'int 型の半径をキーボードから受け取る'(_半径) :- 整数を得る(半径,_半径). 円周と面積の値を画面表示する(_半径,_円周,_円の面積) :- 円周を求める(_半径,_円周), 円の面積を求める(_半径,_円の面積), writef('円周: %t\n面積: %t です。\n',[_円周,_円の面積]). 円周を求める(_半径,_円周) :- _直径 is _半径 * 2, _円周 is _直径 * pi. 円の面積を求める(_半径,_円の面積) :- _円の面積 is _半径 * _半径 * pi. % c160_258_1 % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1349527750/261 # # [1] 授業単元:プログラミング演習 # [2] 問題文: # 円の半径rを受け取ると、rからこの半径の円の周囲の長さlと面積sを計算するcircle関数を作成。 # そしてmain関数でrを入力すると、circle関数でlとsが計算され、その結果をmain関数で出力するプログラムを作成しなさい。 # '円の半径rを受け取ると、rからこの半径の円の周囲の長さlと面積sを計算するcircle関数を作成。そしてmain関数でrを入力すると、circle関数でlとsが計算され、その結果をmain関数で出力するプログラムを作成しなさい。' :- main. main :- rを入力すると(_r), 'circle述語でlとsが計算され、その結果を出力する'(_r). rを入力すると(_r) :- 数を得る(半径,_r). 'circle述語でlとsが計算され、その結果を出力する'(_r) :- circle(_r,_l,_s), writef('r:%t,l:%t,s:%t\n',[_r,_l,_s]). circle(_r,_l,_s) :- _l is 2 * _r * pi, _s is _r * _r * pi. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1349527750/366 # # [1] 授業単元:C言語 # [2] 問題文(含コード&リンク):キーボードから球の半径rを実数入力し(doubleで変数宣言)、半径rの円周、表面積、体積を計算、表示(出力は%15.5f)するプログラムを作成する。 # 'キーボードから球の半径を実数入力し、半径rの円の円周、球の表面積、球の体積を計算、表示(出力は%15.5f)する' :- 'キーボードから球の半径rを実数入力し'(_半径r), '半径rの円の円周、球の表面積、球の体積を計算'(_半径r,_円の円周,_球の表面積,_球の体積), '表示(出力は%15.5f)する'(_半径r,_円の円周,_球の表面積,_球の体積). 'キーボードから球の半径rを実数入力し'(_半径r) :- 実数を得る('球の半径r',_半径r). '半径rの円周、球の表面積、球の体積を計算'(_半径r,_円の円周,_球の表面積,_球の体積) :- 円周を計算(_半径r,_円の円周), 球の円周を計算(_半径r,_球の表面積), 球の体積を計算(_半径r,_球の体積). 円周を計算(_球の半径r,_球の円周) :- _球の円周 is 2 * pi * _球の半径r. 球の表面積を計算(_球の半径r,_球の表面積) :- _球の表面積 is 4 * pi * _球の半径r. 球の体積を計算(_球の半径r,_球の体積) :- _球の体積 is ( 4 * pi * (_球の半径r * _球の半径r * _球の半径r)) / 3. '表示(出力は%15.5f)する'(_球の半径r,_円周,_球の表面積,_球の体積) :- writef('半径 %t の円周は ',[_球の半径r]), format('~5, 表面積は ~5, 体積は ~5 です。\n',[_円周,_球の表面積,_球の体積]). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1349527750/409 # # [1] 授業単元:C言語 アルゴリズム # [2] 問題文(含コード&リンク):モンテカルロ法 # http://ime.nu/codepad.org/6m1GPoV0 # # /* # 問題1. サイコロを10,100,1000,10000,100000 回投げて分布を調べよ。 # # 問題2. コイン投げも同様にして、Sn = X1 + ・・・ + Xn のSn, # そのmax、min を調べよ。 # # 問題3.   # 面積 # 1 # ∫ x^2dx をモンテカルロ法で求めよ # 0 # # 問題4. πの値をモンテカルロ法で求めよ。 # 問題5. 2 項分布をp=0.4 として実行してみよ。分布は、**** を打って表示せよ。 # */ 'サイコロを10,100,1000,10000,100000 回投げて分布を調べよ'(N,0,0,0,0,0,0,_1,_2,_3,_4,_5,_6) :- append(_,[_何回|R],[10,100,1000,10000,100000]), サイコロの目の頻度(0,_何回,L1,L2), writef('投げた回数..%t, 1..%t,2..%t,3..%t,4..%t,5..%t,6..%t\n',[_何回|L2]), R = []. サイコロの目の頻度(_何回,_何回,L,L) :- !. サイコロの目の頻度(N,_何回,L1,L) :- _サイコロの目 is random(6) + 1, 頻度に加算(_サイコロの目,L1,L2), N_2 is N + 1, サイコロの目の頻度(N_2,_何回,L2,L). 頻度に加算(1,[_1,_2,_3,_4,_5,_6],[_1_2,_2,_3,_4,_5,_6]) :- _1_2 is _1 + 1. 頻度に加算(2,[_1,_2,_3,_4,_5,_6],[_1,_2_2,_3,_4,_5,_6]) :- _2_2 is _2 + 1. 頻度に加算(3,[_1,_2,_3,_4,_5,_6],[_1,_2,_3_2,_4,_5,_6]) :- _3_2 is _3 + 1. 頻度に加算(4,[_1,_2,_3,_4,_5,_6],[_1,_2,_3,_4_2,_5,_6]) :- _4_2 is _4 + 1. 頻度に加算(5,[_1,_2,_3,_4,_5,_6],[_1,_2,_3,_4,_5_2,_6]) :- _5_2 is _5 + 1. 頻度に加算(6,[_1,_2,_3,_4,_5,_6],[_1,_2,_3,_4,_5,_6_2]) :- _6_2 is _6 + 1. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1349527750/409 # # [1] 授業単元:C言語 アルゴリズム # [2] 問題文(含コード&リンク):モンテカルロ法 # http://ime.nu/codepad.org/6m1GPoV0 # # /* # 問題1. サイコロを10,100,1000,10000,100000 回投げて分布を調べよ。 # # 問題2. コイン投げも同様にして、Sn = X1 + ・・・ + Xn のSn, # そのmax、min を調べよ。 # # 問題3.   # 面積 # 1 # ∫ x^2dx をモンテカルロ法で求めよ # 0 # # 問題4. πの値をモンテカルロ法で求めよ。 # 問題5. 2 項分布をp=0.4 として実行してみよ。分布は、**** を打って表示せよ。 # */ # 'コイン投げも同様にして、Sn = X1 + ・・・ + Xn のSn,そのmax、min を調べよ。'(_n) :- append(_,[_試行回数|R],[10,100,1000,10000,100000]), 試行回数の集計ならび(_試行回数,_最大値,_最小値), 整数から文字列(6,_試行回数,_試行回数文字列), writef('試行回数%t: 最大値=%t 最小値=%t\n',[_試行回数文字列,_最大値,_最小値]), R = []. 試行回数の集計ならび(_試行回数,_最大値,_最小値) :- findall(S,( between(1,_試行回数,_), count(( between(1,_n,_), 1 is random(1)), S)), L), min(L,_最小値), max(L,_最大値),!. 整数から文字列(_文字列桁,_整数,_文字列) :- 桁不足の場合頭部には空白を詰める(_文字列桁,_整数,_文字列),!. 整数から文字列(_文字列桁,_整数,_文字列) :- atom_number(_文字列,_整数). 桁不足の場合頭部には空白を詰める(_文字列桁,_整数,_文字列) :- length(L,_文字列桁), number_chars(_整数,Chars), append(L0,Chars,L), all(L0,' '), atomic_list_concat(L,_文字列). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1349527750/409 # # [1] 授業単元:C言語 アルゴリズム # [2] 問題文(含コード&リンク):モンテカルロ法 # http://ime.nu/codepad.org/6m1GPoV0 # # /* # 問題1. サイコロを10,100,1000,10000,100000 回投げて分布を調べよ。 # # 問題2. コイン投げも同様にして、Sn = X1 + ・・・ + Xn のSn, # そのmax、min を調べよ。 # # 問題3.   # 面積 # 1 # ∫ x^2dx をモンテカルロ法で求めよ # 0 # # 問題4. πの値をモンテカルロ法で求めよ。 # 問題5. 2 項分布をp=0.4 として実行してみよ。分布は、**** を打って表示せよ。 # */ # # '1 ∫ x^2dx をモンテカルロ法で求めよ 0'(_積分値) :- '区間0..1範囲のx^2dxの積分値をモンテカルロ法で求めよ'(_積分値). '区間0..1範囲のx^2dxの積分値をモンテカルロ法で求めよ'(_積分値) :- 'x^2dx をモンテカルロ法で求めよ'(0,0,_頻度), _積分値 is _頻度 / 100000. '区間0..1範囲のx^2dxの積分値をモンテカルロ法で求めよ'(100000,_頻度,_頻度) :- !. '区間0..1範囲のx^2dxの積分値をモンテカルロ法で求めよ'(N,_頻度_1,_頻度) :- 頻度を更新する(_頻度_1,_頻度_2), N_2 is N + 1, '区間0..1範囲のx^2dxの積分値をモンテカルロ法で求めよ'(N_2,_頻度_2,_頻度). 頻度を更新する(_頻度_1,_頻度_2) :- _x is random(10001) / 10000, _y is random(10001) / 10000, _y =< _x ^ 2, _頻度_2 is _頻度_1 + 1,!. 頻度を更新する(_頻度,_頻度). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1349527750/409 # # [1] 授業単元:C言語 アルゴリズム # [2] 問題文(含コード&リンク):モンテカルロ法 # http://ime.nu/codepad.org/6m1GPoV0 # # /* # 問題1. サイコロを10,100,1000,10000,100000 回投げて分布を調べよ。 # # 問題2. コイン投げも同様にして、Sn = X1 + ・・・ + Xn のSn, # そのmax、min を調べよ。 # # 問題3.   # 面積 # 1 # ∫ x^2dx をモンテカルロ法で求めよ # 0 # # 問題4. πの値をモンテカルロ法で求めよ。 # 問題5. 2 項分布をp=0.4 として実行してみよ。分布は、**** を打って表示せよ。 # */ 'πの値をモンテカルロ法で求めよ'(_pi) :- 'πの値をモンテカルロ法で求めよ'(0,[],L), length(L,_頻度), _pi is _頻度 * 4 / 100000. 'πの値をモンテカルロ法で求めよ'(100000,L,L) :- !. 'πの値をモンテカルロ法で求めよ'(N,L_1,L) :- '点が四分の一円弧の内側の時はカウントする'(L_1,L), N_2 is N + 1, 'πの値をモンテカルロ法で求めよ'(N_2,L_2,L). '点が四分の一円弧の内側の時はカウントする'(L_1,[1|L_1] _x is random(10001) / 10000, _y is random(10001) / 10000, _x ^ 2 + _y ^ 2 >= 1.0,!. '点が四分の一円弧の内側の時はカウントする'(L,L). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1349527750/409 # # [1] 授業単元:C言語 アルゴリズム # [2] 問題文(含コード&リンク):モンテカルロ法 # http://ime.nu/codepad.org/6m1GPoV0 # # /* # 問題1. サイコロを10,100,1000,10000,100000 回投げて分布を調べよ。 # # 問題2. コイン投げも同様にして、Sn = X1 + ・・・ + Xn のSn, # そのmax、min を調べよ。 # # 問題3.   # 面積 # 1 # ∫ x^2dx をモンテカルロ法で求めよ # 0 # # 問題4. πの値をモンテカルロ法で求めよ。 # 問題5. 2 項分布をp=0.4 として実行してみよ。分布は、**** を打って表示せよ。 # */ # '2 項分布をp=0.4 として実行してみよ。分布は、**** を打って表示せよ。' :- findall(Count,( between(1,100,N), count((between(1,100,M), U is random(1000), U < 400), Count)), L), 分布を表示する(L). 分布を表示する(L) :- between(0,100,N), 表示文字列を生成(N,L,_表示文字列), writef('%t: %t\n',[_カウント表示文字列]), N = 100. 表示文字列を生成(N,L,_表示文字列) :- 整数から文字列(2,Count,_カウント表示文字列), findall((*),( member(N,L)), L), atomic_list_concat([_カウント表示文字列,': '|L],_表示文字列). 整数から文字列(_文字列桁,_整数,_文字列) :- 桁不足の場合頭部には空白を詰める(_文字列桁,_整数,_文字列),!. 整数から文字列(_文字列桁,_整数,_文字列) :- atom_number(_文字列,_整数). 桁不足の場合頭部には空白を詰める(_文字列桁,_整数,_文字列) :- length(L,_文字列桁), number_chars(_整数,Chars), append(L0,Chars,L), all(L0,' '), atomic_list_concat(L,_文字列). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1349527750/496 # # [1] c言語 # [2] 問題文: # 1. 円柱の半径と高さを入力すると、表面積と体積を計算するプログラムを作成せよ。 # 入力される数値として、浮動小数点数値に対応すること。 # 作業内容と考察もお願いします。 # '円柱の半径と高さを入力すると、表面積と体積を計算する' :- '円柱の半径と高さを入力すると'(_円柱の半径,_円柱の高さ), '表面積と体積を計算する'(_円柱の半径,_円柱の高さ,_表面積,_体積), writef('半径 %t 高さ %t の円柱の\n表面積は %t\n体積は %t です\n',[_円柱の半径,_円柱の高さ,_表面積,_体積]). '円柱の半径と高さを入力すると'(_円柱の半径,_円柱の高さ) :- 数を得る(円柱の半径,_円柱の半径 > 0,_円柱の半径), 数を得る(円柱の高さ,_円柱の高さ > 0,_円柱の高さ). '円柱の半径と高さを入力すると、表面積と体積を計算する'(_円柱の半径,_円柱の高さ,_表面積,_体積) :- 表面積を計算する(_円柱の半径,_円柱の高さ,_表面積), 体積を計算する(_円柱の半径,_円柱の高さ,_体積). 表面積を計算する(_円柱の半径,_円柱の高さ,_表面積) :- _上下底の面積合計 is pi * _円柱の半径 * _円柱の半径, _側面の面積 is 2 * pi * _円柱の半径 * _円柱の高さ, _表面積 is _上下底の面積合計 + _側面の面積. 体積を計算する(_円柱の半径,_円柱の高さ,_体積) :- _体積 is pi * _円柱の半径 * _円柱の半径 * _円柱の高さ. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1349527750/543 # # [1] c言語 # [2] 問題文: # 円柱の半径と高さを入力すると、表面積と体積を計算するプログラムを作成せよ。 # 入力される数値として、浮動小数点数値に対応すること。 # 作業内容と考察もお願いします。 # '円柱の半径と高さを入力すると、表面積と体積を計算するプログラムを作成せよ。 入力される数値として、浮動小数点数値に対応すること。' :- '円柱の半径と高さを入力すると、表面積と体積を計算するプログラムを作成せよ。入力される数値として、浮動小数点数値に対応すること。'(_表面積,_体積), writef('円柱の 表面積は %t, 体積は %t です。\n',[_表面積,_体積]). '円柱の半径と高さを入力すると、表面積と体積を計算するプログラムを作成せよ。入力される数値として、浮動小数点数値に対応すること。'(_表面積,_体積) :- '円柱の半径と高さを入力すると(入力される数値として、浮動小数点数値に対応すること)'(_円柱の半径,_円柱の高さ), '表面積と体積を計算する'(_円柱の半径,_円柱の高さ,_表面積,_体積), '円柱の半径と高さを入力すると(入力される数値として、浮動小数点数値に対応すること)'(_円柱の半径,_円柱の高さ) :- '円柱の半径の入力(入力される数値として、浮動小数点数値に対応すること)'(_円柱の半径), '円柱の高さの入力(入力される数値として、浮動小数点数値に対応すること)'(_円柱の高さ). '円柱の半径の入力(入力される数値として、浮動小数点数値に対応すること)'(_円柱の半径) :- write('円柱の半径を入力してください : '), get_line(Line), 円柱の半径入力診断(Line,_円柱の半径),!. '円柱の半径(入力される数値として、浮動小数点数値に対応すること)入力診断'(Line,_円柱の半径) :- atom_to_term(Line,_円柱の半径,_), 円柱の半径は整数か実数かのどちらか(_円柱の半径), _円柱の半径 > 0,!. '円柱の半径(入力される数値として、浮動小数点数値に対応すること)入力診断'(Line,_円柱の半径) :- writef('入力された %t からは適切な円柱の半径としての値が取れません。\n再入力をお願いします。\n',[Line]), fail. 円柱の半径は整数か実数かのどちらか(_円柱の半径) :- integer(_円柱の半径). 円柱の半径は整数か実数かのどちらか(_円柱の半径) :- float(_円柱の半径). '円柱の高さの入力(入力される数値として、浮動小数点数値に対応すること)'(_円柱の高さ) :- write('円柱の高さを入力してください : '), get_line(Line), '円柱の高さ(入力される数値として、浮動小数点数値に対応すること)入力診断'(Line,_円柱の高さ),!. '円柱の高さ(入力される数値として、浮動小数点数値に対応すること)入力診断'(Line,_円柱の高さ) :- atom_to_term(Line,_円柱の高さ,_), 円柱の高さは整数か実数かのどちらか(_円柱の高さ), _円柱の高さ > 0,!. '円柱の高さ(入力される数値として、浮動小数点数値に対応すること)入力診断'(Line,_円柱の高さ) :- writef('入力された %t からは適切な円柱の高さとしての値が取れません。\n再入力をお願いします。\n',[Line]), fail. 円柱の高さは整数か実数かのどちらか(_円柱の高さ) :- integer(_円柱の高さ). 円柱の高さは整数か実数かのどちらか(_円柱の高さ) :- float(_円柱の高さ). '表面積と体積を計算する'(_円柱の半径,_円柱の高さ,_表面積,_体積) :- 表面積を計算する(_円柱の半径,_円柱の高さ,_表面積), 体積を計算する(_円柱の半径,_円柱の高さ,_体積). 表面積を計算する(_円柱の半径,_円柱の高さ,_表面積) :- '表面積は上面、底面、側面の合計である'(_円柱の半径,_円柱の高さ,_表面積). '表面積は上面、底面、側面の合計である'(_円柱の半径,_円柱の高さ,_表面積) :- _上面の面積 is _円柱の半径 * _円柱の半径 * pi, _底面の面積 is _円柱の半径 * _円柱の半径 * pi, 側面の面積は円柱の円の周囲の長さに高さを乗じたもの(_円柱の半径,_円柱の高さ,_側面の面積), _表面積 is _上面の面積 + _底面の面積 + _側面の面積. 側面の面積は円柱の円の周囲の長さに高さを乗じたもの(_円柱の半径,_円柱の高さ,_側面の面積) :- _円柱の円の周囲の長さ is _円柱の半径 * 2 * pi, _側面の面積 is _円柱の周囲の長さ * _円柱の高さ. 体積を計算する(_円柱の半径,_円柱の高さ,_体積) :- 円柱の体積は上面の面積に高さを乗じたもの(_円柱の半径,_円柱の高さ,_体積). 円柱の体積は上面の面積に高さを乗じたもの(_円柱の半径,_円柱の高さ,_体積) :- _上面の面積 is _円柱の半径 * _円柱の半径 * pi, _体積 is _上面の面積 * _円柱の高さ. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1354070278/817 # # # (2).半径1の円に内接したn角形の面積Sを求め よ。またn=100のケースと手計算の 円の面積を比較せよ(n-100のケースのプログラム の結果をプログラムの下に貼り付ければ良い). # # '半径1の円に内接した正n角形の面積Sを求めよ'(_n,_S) :- _θ is 2 * pi / _n, _S is ( 1 * 1 * sin(_θ) / 2) * _n. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1357748713/363 # # [1] 授業単元:C++基礎 # [2] 問題文(含コード&リンク): # 基底クラスとして Shape、その派生クラスとして Rectangle (正方形)を定義し、 # 正四角形の辺の長さの合計と面積を計算する。 # 面積(_ある正方形,_面積) :- 正方形(_ある正方形), 辺(_ある正方形,_辺), _面積 is _辺 * _辺. 辺の合計(_ある正方形,_面積) :- 正方形(_ある正方形), 辺(_ある正方形,_辺), _辺の合計 is _辺 * 4. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1357748713/705 # # [1] 授業単元:プログラミング演習 # [2] 問題文(含コード&リンク) # [3] 環境 # 問題1メイン関数でキーボードから二つの整数n1とn2を読み込み,それらをexponent関数を呼び出して, # n1のn2乗を計算し,結果をメイン関数で表示するプログラムを書きなさい. # <実行例> # 二つの整数を入力してください. # n1 = 5 # n2 = 2 # 5の2乗は25です. # 問題2 5人の点数を読み込んでいき、その最高点を表示するプログラムを作成しなさい。 # 問題3 円の面積の一覧表を計算するプログラムを作成しなさい。 # <実行結果> # 半径 --- 面積 # 1.0 --- 3.14 # 1.1 --- 3.80 # 1.2 --- 4.52 # 1.3 --- 5.31 # 問題4 球の体積を計算するプログラムを作成しなさい。 # 実行例 # 体積 = 1766.25 # [3.1] OS: unix #  [3.2] コンパイラ名とバージョン: gcc #  [3.3] 言語: C # [4] 期限:2月19日 # [5] その他の制限: なし # よろしくお願いします。 'キーボードから二つの整数n1とn2を読み込み,n1のn2乗を計算し,結果を表示する' :- 'キーボードから二つの整数n1とn2を読み込み'(_n1,_n2), 'n1のn2乗を計算し'(_n1,_n2,_n3), 結果を表示する(_n1,_n2,_n3). 'キーボードから二つの整数n1とn2を読み込み'(_n1,_n2) :- 整数を得る(n1,true,_n1), 整数を得る(n2,true,_n2). 'n1のn2乗を計算し'(_n1,_n2,_n3) :- _n3 is truncate(_n1 ^ _n2). 結果を表示する(_n1,_n2,_n3) :- writef('%tの%t乗は%tです\n',[_n1,_n2,_n3]). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1357748713/705 # # [1] 授業単元:プログラミング演習 # [2] 問題文(含コード&リンク) # [3] 環境 # 問題1メイン関数でキーボードから二つの整数n1とn2を読み込み,それらをexponent関数を呼び出して, # n1のn2乗を計算し,結果をメイン関数で表示するプログラムを書きなさい. # <実行例> # 二つの整数を入力してください. # n1 = 5 # n2 = 2 # 5の2乗は25です. # 問題2 5人の点数を読み込んでいき、その最高点を表示するプログラムを作成しなさい。 # 問題3 円の面積の一覧表を計算するプログラムを作成しなさい。 # <実行結果> # 半径 --- 面積 # 1.0 --- 3.14 # 1.1 --- 3.80 # 1.2 --- 4.52 # 1.3 --- 5.31 # 問題4 球の体積を計算するプログラムを作成しなさい。 # 実行例 # 体積 = 1766.25 # [3.1] OS: unix #  [3.2] コンパイラ名とバージョン: gcc #  [3.3] 言語: C # [4] 期限:2月19日 # [5] その他の制限: なし # よろしくお願いします。 '5人の点数を読み込んでいき、その最高点を表示する' :- findall(_点数,( between(1,5,_), 数を得る(点数,true,_点数)), _5人の点数ならび), 最高点(_5人の点数ならび,_最高点), writef('最高点は%tです\n',[_最高点). 最高点(_5人の点数ならび,_最高点) :- append(_,[_最高点|R],_5人の点数ならび), \+((member(A,R),A > _最高点)),!. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1357748713/705 # # [1] 授業単元:プログラミング演習 # [2] 問題文(含コード&リンク) # [3] 環境 # 問題1メイン関数でキーボードから二つの整数n1とn2を読み込み,それらをexponent関数を呼び出して, # n1のn2乗を計算し,結果をメイン関数で表示するプログラムを書きなさい. # <実行例> # 二つの整数を入力してください. # n1 = 5 # n2 = 2 # 5の2乗は25です. # 問題2 5人の点数を読み込んでいき、その最高点を表示するプログラムを作成しなさい。 # 問題3 円の面積の一覧表を計算するプログラムを作成しなさい。 # <実行結果> # 半径 --- 面積 # 1.0 --- 3.14 # 1.1 --- 3.80 # 1.2 --- 4.52 # 1.3 --- 5.31 # 問題4 球の体積を計算するプログラムを作成しなさい。 # 実行例 # 体積 = 1766.25 # [3.1] OS: unix #  [3.2] コンパイラ名とバージョン: gcc #  [3.3] 言語: C # [4] 期限:2月19日 # [5] その他の制限: なし # よろしくお願いします。 球の体積を計算する(_球の半径,_球の体積) :- count(( between(1,100000,_), '3座標を乱数で得る'(X,Y,Z), 原点からの距離が球の半径の範囲(X,Y,Z)), _球の半径の範囲内の個数), _球の体積 is (_球の半径の範囲内の個数 / 100000) * (_球の半径 ^ 3) * 8. '3座標を乱数で得る'(X,Y,Z) :- X is random(1001) / 1000, Y is random(1001) / 1000, Z is random(1001) / 1000. 原点からの距離が球の半径の範囲(X,Y,Z) :- sqrt(X ^ 2 + Y ^ 2 + Z ^ 2) =< 1.0. count(P,N) :- findsum(1,P,F), N is truncate(F). findsum(_選択項,_項,_合計値) :- findall(_選択項,_項,_値ならび), sum(_値ならび,_合計値),!. sum(L,Sum) :- sum(L,0,Sum). sum([],Sum,Sum) :- !. sum([N|R],Sum_1,Sum) :- Sum_2 is Sum_1 + N, sum(R,Sum_2,Sum). % 以下のサイトは % % 三角形の周囲の辺の長さをa,b,cとするとき % 三角形の面積は % ヘロンの公式(_a,_b,_c,_三角形の面積) :- _周囲の半分 is (_a + _b + _c) / 2, _三角形の面積 is sqrt(_周囲の半分 * (_周囲の半分 - _a) * (_周囲の半分 - _b) * (_周囲の半分 - _c)). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1354393458/295 # # # お題 頂点座標から多角形の面積を求める # 頂点座標から多角形の面積を求める(_閉路をなす多角形の頂点座標ならび,_多角形の面積) :- '多角形の面積は iが1からnまで変化する範囲で Xi * (Yi+1 - Yi-1) の総計となる。(ただし Yn+1 = Y1 Y0 = Yn)'(_閉路をなす多角形の頂点座標ならび,_多角形の面積). '多角形の面積は iが1からnまで変化する範囲で Xi * (Yi+1 - Yi-1) の総計の半分となる。(ただし Yn+1 = Y1 Y0 = Yn)'(_閉路をなす多角形の頂点座標ならび,_多角形の面積) :- 'ただし Yn+1 = Y1 Y0 = Yn'(_閉路をなす多角形の頂点座標ならび,_拡張した座標ならび), '多角形の面積は iが1からnまで変化する範囲で Xi * (Yi+1 - Yi-1) の総計の半分となる。'(_拡張した座標ならび,_多角形の面積). '多角形の面積は iが1からnまで変化する範囲で Xi * (Yi+1 - Yi-1) の総計の半分となる。'(_拡張した座標ならび,_多角形の面積) :- findsum(U,( append(_,[(_x1,_y1),(_x2,_y2),(_x3,_y3)|_],_拡張した座標ならび), U is _x2 * (_y3 - _y1)), S), _多角形の面積 is S / 2. 'ただし Yn+1 = Y1 Y0 = Yn'([_0,_1|_残り座標ならび],_拡張した座標ならび) :- append([_0,_1|_残り座標ならび],[_0,_1],_拡張した座標ならび). findsum(U,P,Sum) :- findall(U,P,L), sum(L,Sum). sum([],0). sum([A|R],Sum) :- sum(R,Sum1), Sum is Sum1 + A. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1370255305/761 # # どなたかお手伝いお願いします。 # # [1] 授業単元:プログラミング実習 # [2] 問題文:三角形底辺aと高さhを引数で与え、面積を計算する関数sを作成しなさい。 # また,main関数で底辺と高さを入力し、面積は関数で求め、main関数に返し出力しなさい。 # main :- 三角形の底辺aを得る(_a), 高さhを得る(_h), '三角形底辺aと高さhを引数で与え、面積sを計算する'(_a,_h,_s), writef('三角形の面積は %t \n',[_s]). '三角形底辺aと高さhを引数で与え、面積sを計算する'(_a,_h,_s) :- _s is 0.5 * _h * _s. 三角形の底辺aを得る(_a) :- write('三角形の底辺aを入力して下さい : '), get_line(Line), '診断: 三角形の底辺aを得る'(Line,_a),!. 三角形の底辺aを得る(_a) :- 三角形の底辺aを得る(_a). '診断: 三角形の底辺aを得る'(Line,_a) :- atom_number(Line,_a),!. '診断: 三角形の底辺aを得る'(Line,_a) :- writef('入力された %t は数値ではありません。再入力をお願いします。\n',[Line]), fail. 高さhを得る(_h) :- write('高さhを入力して下さい : '), get_line(Line), '診断: 高さhを得る'(Line,_h),!. 高さhを得る(_h) :- 高さhを得る(_h). '診断: 高さhを得る'(Line,_h) :- atom_number(Line,_h),!. '診断: 高さhを得る'(Line,_h) :- writef('入力された %t は数値ではありません。再入力をお願いします。\n',[Line]), fail. % 以下のサイトは # 出典: twitter_by_@takashi_sansu_20140627 # # 【算数】たかしくんはネオン街に飛び出した。 # 街の喧騒がすべてを忘れさせてくれる。 # 家庭崩壊、いじめ、裏切り。 # 信頼は疑心に変わり、愛情は憎しみへと変化した。 # たかしくんは荒んだ心の隙間を満たすように夜の街へ消えていった。 # 底辺2cm,高さ3cmの三角形の面積を求めなさい。 # '【算数】たかしくんはネオン街に飛び出した。 街の喧騒がすべてを忘れさせてくれる。 家庭崩壊、いじめ、裏切り。 信頼は疑心に変わり、愛情は憎しみへと変化した。 たかしくんは荒んだ心の隙間を満たすように夜の街へ消えていった。 底辺2cm,高さ3cmの三角形の面積を求めなさい。'(_底辺2cm高さ3cmの三角形の面積) :- 'たかしくんはネオン街に飛び出した。 街の喧騒がすべてを忘れさせてくれる。 家庭崩壊、いじめ、裏切り。 信頼は疑心に変わり、愛情は憎しみへと変化した。 たかしくんは荒んだ心の隙間を満たすように夜の街へ消えていった。', '底辺2cm,高さ3cmの三角形の面積を求めなさい。'(_底辺2cm高さ3cmの三角形の面積). 'たかしくんはネオン街に飛び出した。 街の喧騒がすべてを忘れさせてくれる。 家庭崩壊、いじめ、裏切り。 信頼は疑心に変わり、愛情は憎しみへと変化した。 たかしくんは荒んだ心の隙間を満たすように夜の街へ消えていった。'. '底辺2cm,高さ3cmの三角形の面積を求めなさい。'(_底辺2cm高さ3cmの三角形の面積) :- 三角形の面積の公式(2,3,_底辺2cm高さ3cmの三角形の面積). 三角形の面積の公式(_底辺,_高さ,_三角形の面積) :- _三角形の面積 is _底辺 * _高さ / 2.