このディレクトリの索引

# 出典 :: C/C++の宿題片付けます 158代目 #48 # {1] 授業単元:プログラミング演習 # [2] 問題文: # http://ime.nu/codepad.org/5oepZpDW # #include # double heikin(int a[]); # # int main(void) # { # int data[5],i; # double ave; # for (i=0;i<=4;i++) # { # printf("data[%d]= ",i); # scanf("%d",&data[i]); # } # ave=heikin(data); # printf("heikin=%f \n",ave); # return 0; # } # # double heikin(int a[]) # { # int i,k=0; # for(i=0;i<=4;i++) # { # k=k+a[i]; # } # return((double)k/5); # } # 上記のプログラムに5人の得点(10点満点)を受け取ると、合格者数を戻すgoukaku関数を追加せよ、但し6点以上で合格とする。 # そして5人のテストの得点を整数型配列data[5]の要素にそれぞれ入力すると # 5人の平均点に加えて合格者数も出力するプログラムをheikin関数およびgoukaku関数を利用して作成しなさい。 # '5人の得点(10点満点)を受け取ると、合格者数を戻す述語を定義する。但し6点以上で合格とする。そして5人のテストの得点を入力すると5人の平均点に加えて合格者数も出力する。' :- '5人の得点(10点満点)を受け取ると'(_5人の得点ならび), 平均点を出力する(_5人の得点ならび), '6点以上を取った合格者数を出力する'(_5人の得点ならび). 平均点を出力する(_5人の得点ならび) :- 平均点を戻す(_5人の得点ならび,_平均点), writef('平均点 = %w 点\n',[_平均点]). 平均点を戻す(_5人の得点ならび,_平均点) :- sum_list(_5人の得点ならび,_合計点), _平均点 is _合計点 / 5. '6点以上を取った合格者数を出力する'(_5人の得点ならび) :- '6点以上を取った合格者数を戻す'(_5人の得点ならび,_合格者数), writef('合格者数 = %w 人\n',[_合格者数]). '5人の得点(10点満点)を受け取ると'(_5人の得点ならび) :- findall(_得点,( '5人の', '得点(10点満点)を受け取る'(_得点)),_5人の得点ならび). '5人の' :- between(1,5,_). '得点(10点満点)を受け取る'(_得点) :- 行入力(_行文字列), '診断: 得点(10点満点)を受け取る'(_行文字列,_得点),!. '得点(10点満点)を受け取る'(_得点) :- '得点(10点満点)を受け取る'(_得点). '診断: 得点(10点満点)を受け取る'(_行文字列,_得点) :- 行文字列を解析して0から10の範囲の得点を得る(_行文字列,_得点),!. '診断: 得点(10点満点)を受け取る'(_行文字列,_得点) :- writef('入力された %w からは適切な得点が得られません。再入力をお願いします。\n',[_行文字列]), fail. 行文字列を解析して0から10の範囲の得点を得る(_行文字列,_得点) :- 行文字列を解析して(_行文字列,_得点), '0から10の範囲の得点を得る'(_得点). 行文字列を解析して(_行文字列,_得点) :- read_term_from_atom(_行文字列,_得点,[]). '0から10の範囲の得点を得る'(_得点) :- integer(_得点), member(_得点,[0,1,2,3,4,5,6,7,8,9,10]). 行入力(_行文字列) :- read_line_to_codes(current_input,Codes), atom_codes(_行文字列,Codes). '6点以上を取った合格者数を戻す'(_5人の得点ならび,_合格者数) :- findall(_,( '6点以上で合格とする'(_5人の得点ならび)),L), length(L,_合格者数). '6点以上で合格とする'(_5人の得点ならび) :- member(_得点,_5人の得点ならび), _得点 >= 6.