このディレクトリの索引

# 出典 :: C/C++の宿題片付けます 147代目 #305 # [1] 授業単元:プログラミング # [2] 問題文(含コード&リンク):http://ime.nu/deaimail.from.tv/up/src/up3988.jpg # # 12個の整数をxに読み込み、平均値、標準偏差を計算して、出力せよ。 '12個の整数をxに読み込み、平均値、標準偏差を計算して、出力する' :- '12個の整数をxに読み込み'(_x), '平均値、標準偏差を計算して、'(_x,_平均値,_標準偏差), 出力する(_x,_平均値,_標準偏差),!. '平均値、標準偏差を計算して、'(_x,_平均値,_標準偏差) :- 平均値を計算(_x,_平均値), 標準偏差を計算(_x,_平均値,_標準偏差). '12個の整数をxに読み込み'(_x) :- length(_x,12), 'xに読み込み'(_x). 'xに読み込み'([]) :- !. 'xに読み込み'(_x) :- 'xに整数を読み込んで行く'(_x). 'xに整数を読み込んで行く'([_整数|R]) :- 整数を読み込む(_整数), 'xに読み込み'(R). 整数を読み込む(_整数) :- 整数が読み込まれるまで行入力を続ける(_整数). 整数が読み込まれるまで行入力を続ける(_整数) :- 催促後に行入力する(_行), 整数入力診断(_行,_整数),!. 整数を読み込む(_整数) :- 整数を読み込む(_整数). 催促後に行入力する(_行) :- write('整数を入力してください : '), 行入力(_行). 整数入力診断(_行,_整数) :- 行は整数である(_行,_整数),!. 整数入力診断(_行,_) :- 再入力の要請(_行). 行は整数である(_行,_整数) :- catch(read_term_from_atom(_行,_整数,[]),E,fail), integer(_整数). 再入力の要請(_行) :- writef('入力された %t から整数が得られませんでした。再入力をお願いします\n',[_行]), fail. 平均値を計算(L,_平均値) :- length(L,_要素数), 合計(L,_合計値), _平均値 is _合計値 / _要素数. 合計(L,_合計) :- 合計(L,0,_合計). 合計([],_合計,_合計). 合計([N|R],_合計_1,_合計) :- _合計_2 is _合計_1 + N, 合計(R,_合計_2,_合計). 標準偏差を計算(L,_平均値,V) :- length(L,_標本数), 標準偏差(L,_標本数,_平均値,0.0,V). 標準偏差([],_標本数,_平均値,S,_標準偏差) :- _標準偏差 is sqrt(S / (_標本数 - 1)). 標準偏差([A|R],_標本数,_平均値,S1,_標準偏差) :- S2 is S1 + (A - _平均値) ^ 2, 標準偏差(R,_標本数,_平均値,S2,_標準偏差). 出力する(_x,_平均値,_標準偏差) :- writef('x=%w, 平均値=%t, 標準偏差=%t\n',[_x,_平均値,_標準偏差]). 行入力(_行) :- read_line_to_codes(current_input,Codes), atom_codes(_行,Codes).