このディレクトリの索引

# 出典 :: C/C++の宿題片付けます 137代目 #218 # [1] 授業単元: プログラム # [2] 問題文(含コード&リンク): 番号 国語 数学 英語のメンバを持っている構造体を作って各教科の平均値と、全平均値を求めてください。(人数は4人とか5人で行ってください。あと番号っていうのは、番号は、4人なら1〜4までで5人なら1〜5までです) # 構造定義(成績,成績(_番号,_国語,_数学,_英語)). 構造検査(成績,成績(_番号,_国語,_数学,_英語)) :- '_番号,_国語,_数学,_英語は全て整数'(_番号,_国語,_数学,_英語). '_番号,_国語,_数学,_英語は全て整数'(_番号,_国語,_数学,_英語) :- forall(member(_項,[_番号,_国語,_数学,_英語]),integer(_項)). '番号 国語 数学 英語のメンバを持っている構造体を作る'(_三科目のならび) :- '番号 国語 数学 英語のメンバを持っている構造体を作る'(1,_三科目のならび). '番号 国語 数学 英語のメンバを持っている構造体を作る'(_,[]) :-!. '番号 国語 数学 英語のメンバを持っている構造体を作る'(_番号,[[_国語,_数学,_英語]|_残りならび]) :- 番号を連番で付加して成績述語の定義節を加えて行く(_番号,_国語,_数学,_英語,_残りならび). 番号を連番で付加して成績述語の定義節を加えて行く(_番号,_国語,_数学,_英語,_残りならび) :- assertz(成績(_番号,_国語,_数学,_英語)), succ(_番号,_次の番号), '番号 国語 数学 英語のメンバを持っている構造体を作る'(_次の番号,_残りならび). 各教科の平均値と、全平均値を求める(_各教科の平均値ならび,_全平均値) :- '各教科の平均値と、'(_各教科の平均値ならび), 全平均値を求める(_全平均値). '各教科の平均値と、'(_各教科の平均 findavg([_国語,_数学,_英語],( 成績(_,_国語,_数学,_英語)),_各教科の平均値ならび). 全平均値を求める(_全平均値) :- findavg(_個人合計,( 個人合計(_個人合計)),_全平均値). 個人合計(_個人合計) :- 成績(_,_国語,_数学,_英語), _個人合計 is _国語 + _数学 + _英語. findavg(_射影項,_目標,_平均値) :- '目標の射影項のならびを取り、その合計をならびの要素数で割ったものが平均値だ'(_射影項,_目標,_平均値). '目標の射影項のならびを取り、その合計をならびの要素数で割ったものが平均値だ'(_射影項,_目標,_平均値) :- '目標の射影項のならびを取り、'(_射影項,_目標,_射影項のならび), その合計をならびの要素数で割ったものが平均値だ(_射影項のならび,_平均値). '目標の射影項のならびを取り、'(_射影項,_目標,_射影項のならび) :- findall(_射影項,_目標,_射影項のならび). その合計をならびの要素数で割ったものが平均値だ(_射影項のならび,_平均値) :- その合計を(_射影項のならび,_合計), ならびの要素数で(_射影項のならび,_ならびの要素数), 割ったものが平均値だ(_合計,_ならびの要素数,_平均値). その合計を(_射影項のならび,_合計) :- sum_list(_射影項のならび,_合計). ならびの要素数で(_射影項のならび,_ならびの要素数) :- length(_射影項のならび,_ならびの要素数). 割ったものが平均値だ(_合計,_ならびの要素数,_平均値) :- _平均値 is _合計 / _ならびの要素数.