このディレクトリの索引

# 出典 :: C/C++の宿題片付けます 128代目 #822 # 何人かの学生の3教科(数学、国語、英語)の得点を2次元配列を用いて # 処理するプログラムを作る。 # # (1)科目別の最高点、最低点を表示する。 # (2)各学生の3教科の平均点を表示する。 # (3)各教科の平均点を表示する。 # # ただし Ctrl+dが押されるまで次々と整数値を読み込んでいくものとする。 '何人かの学生の3教科(数学、国語、英語)の得点を2次元配列を用いて 処理するプログラムを作る。 (1)科目別の最高点、最低点を表示する。 (2)各学生の3教科の平均点を表示する。 (3)各教科の平均点を表示する。 ただし Ctrl+dが押されるまで次々と整数値を読み込んでいくものとする。' :- 'Ctrl+dが押されるまで次々と整数値を読み込んでいく'(_整数行列), 転置(_整数行列,_転置行列), '(1)科目別の最高点、最低点を表示する。'(_転置行列), '(2)各学生の3教科の平均点を表示する。'(_整数行列), '(3)各教科の平均点を表示する。'(_転置行列). 'Ctrl+dが押されるまで次々と整数値を読み込んでいく'(_整数行列) :- findall(_行,( repeat, readln(_行),(_行=[],!,fail;true)),_整数行列). '(1)科目別の最高点、最低点を表示する。'(_転置行列) :- forall( member([_科目,_位置],[[数学,2],[_英語,3],[国語,4]]), '科目別の最高点、最低点を表示する'(_転置行列,_科目,_位置)). '科目別の最高点、最低点を表示する'(_転置行列,_科目,_位置) :- 最高点と最低点(_転置行列,_位置,_最高点,_最低点), 表示する(_科目,_最高点,_最低点). 最高点と最低点(_転置行列,_位置,_最高点,_最低点) :- 最高点(_転置行列,_位置,_最高点), 最低点(_転置行列,_位置,_最低点). 最高点(_転置行列,_位置,_最高点) :- nth1(_位置,_転置行列,_点数ならび), max_list(_点数ならび,_最高点). 最低点(_転置行列,_位置,_最低点) :- nth1(_位置,_転置行列,_点数ならび), min_list(_点数ならび,_最低点). 表示する(_科目,_最高点,_最低点) :- writef('科目 :: %w, 最高点 :: %w, 最低点 :: %w\n',[_科目,_最高点,_最低点]). '(2)各学生の3教科の平均点を表示する。'(_整数行列) :- forall(( nth1(_nth1,_整数行列,[_|R]), 相加平均(R,_相加平均)), '各学生の3教科の平均点を表示する。'(_nth1,_相加平均)). '各学生の3教科の平均点を表示する。'(_nth1,_相加平均) :- writef('学生:%t 3教科の平均点:%t\n',[_nth1,_相加平均]). '(3)各教科の平均点を表示する。'(_転置行列) :- forall( member([_教科,_位置],[[数学,2],[英語,3],[国語,4]]), '各教科の平均点を表示する。'(_転置行列,_教科,_位置)). '各教科の平均点を表示する。'(_転置行列,_教科,_位置) :- nth1(_位置,_転置行列,_点数ならび), 相加平均(_点数ならび,_相加平均), writef('教科 :: %t 平均点 :: %t\n',[_教科,_相加平均]). 転置([[]|_],[]) :- !. 転置(L,[L1|R2]) :- 転置(L,L2,L1), 転置(L2,R2). 転置([],[],[]) :- !. 転置([[A|R1]|R2],[R1|R3],[A|R4]) :- 転置(R2,R3,R4). 相加平均(L,M) :- length(L,N), 相加平均(L,N,0,M). 相加平均([],N,S,M) :- M is S / N,!. 相加平均([A|R],N,S,M) :- S1 is S + A, 相加平均(R,N,S1,M).