このディレクトリの索引

# 出典 :: C/C++の宿題片付けます 135代目 #685 # 1] 授業単元: プログラム演習 # [2] 問題文(含コード&リンク): # 下記のような成績があった時、各科目の平均、各学生の合計点の偏差値、科目毎の相関係数を求めるプログラムを配列を用いて実装しなさい。 # http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10601.txt # # 名前   点数 #     英語 数学 物理  # 学生1 80 50 60 # 学生2 60 70 80 # 学生3 50 80 90 # 学生4 60 75 80 # 学生5 50 90 75 # # 名前   点数 #     英語 数学 物理  値位置(名前,[_名前,_,_,_],_名前). 値位置(英語,[_,_英語,_,_],_英語). 値位置(数学,[_,_,_数学,_],_数学). 値位置(物理,[_,_,_,_物理],_物理). 成績(学生1,80,50,60). 成績(学生2,60,70,80). 成績(学生3,50,80,90). 成績(学生4,60,75,80). 成績(学生5,50,90,75). 各科目の平均(_各科目の平均) :- findall([_科目,_科目の平均],( 値位置(_科目,[A,B,C,D],_点数), \+(_科目=名前), findavg(_点数,成績(A,B,C,D),_科目の平均)), _各科目の平均). 各学生の合計点の偏差値(_各学生の合計点の偏差値) :- findall(_名前,成績(_名前,_,_,_),_名前ならび), 標本を集める(_母集合), 偏差値(_母集合,_偏差値ならび), 名前と符合させる(_名前ならび,_偏差値ならび,_各学生の合計点の偏差値). 偏差値(_母集合,_偏差値ならび) :- 相加平均(_母集合,_算術合計), 標準偏差(_母集合,_標準偏差), findall(_偏差値,(member(_値,_母集合),偏差値(_値,_相加平均,_標準偏差,_偏差値)),_偏差値ならび). 偏差値(_標本値,_相加平均,_標準偏差,_偏差値) :- _偏差値 is 10 * (_標本値 - _相加平均) / _標準偏差 + 50.0. 各学生の合計点の総和(_合計点の総和) :- findsum(_各学生の合計点,各学生の合計点(_,_各学生の合計点),_合計点の総和). 各学生の合計点(_名前,_各学生の合計点) :- 成績(_名前,_英語,_数学,_物理), _各学生の合計点 is _英語 + _数学 + _物理. 標本を集める(_母集合) :- findall(_各学生の合計点,各学生の合計点(_,_各学生の合計点),_母集合). 名前と符合させる([],[],[]) :- !. 名前と符合させる([A|R1],[B|R2],[[A,B]|R3]) :- 名前と符合させる(R1,R2,R3). 科目間の相関係数(_科目1,_科目2,_相関係数) :- findall(_点数,(成績(A,B,C,D),値位置(_科目1,[A,B,C,D],_点数)),_科目1の点数ならび), findall(_点数,(成績(A,B,C,D),値位置(_科目2,[A,B,C,D],_点数)),_科目2の点数ならび), 相関係数(_科目1のならび,_科目2の点数ならび,_相関係数). 相関係数(_科目1の点数ならび,_科目2の点数ならび,_相関係数) :- length(_科目1の点数ならび,Len), 相加平均(_科目1の点数ならび,_科目1の相加平均), 相加平均(_科目2の点数ならび,_科目2の相加平均), 共分散(_科目1の点数ならび,_科目2の点数ならび,_共分散), 標準偏差(_科目1の点数ならび,Len,_科目1の相加平均,0.0,_科目1の標準偏差), 標準偏差(_科目2の点数ならび,Len,_科目2の相加平均,0.0,_科目2の標準偏差), _相関係数 is _共分散 / (_科目1の標準偏差 * _科目2の標準偏差). 共分散(_標本ならび1,_標本ならび2,_共分散) :- length(_標本ならび1,Len), length(_標本ならび2,Len), 相加平均(_標本ならび1,_標本ならび1の相加平均), 相加平均(_標本ならび2,_標本ならび2の相加平均), 共分散(_標本ならび1,_標本ならび2,Len,_標本ならび1の相加平均,_標本ならび2の相加平均,0.0,_共分散). 共分散([],[],Len,_,_,S,_共分散) :- _共分散 is S / Len,!. 共分散([A|R1],[B|R2],Len,_相加平均1,_相加平均2,S1,_共分散) :- U is (A-_相加平均1) * (B-_相加平均2), S2 is S1 + U, 共分散(R1,R2,Len,_相加平均1,_相加平均2,S2,S),!.