このディレクトリの索引

# 出典 :: C/C++の宿題片付けます 158代目 #54 # {1] 授業単元:プログラミング演習 # [2] 問題文: # http://ime.nu/codepad.org/Q5HCQPvq # 上記のプログラムを参考にしてa君、b君、c君の5教科(英語、数学、国語、理科、社会)の試験の得点をそれぞれ # a[5]={55,32,67,61,77};,b[5]={74,80,56,78,42};,c[5]={38,67,78,62,82}; と初期化する。 # 但し上記の3つの配列の要素番号0,1,2,3,4の得点は、それぞれ英語、数学、国語、理科、社会の得点に対応する。 # このとき、教科別の3人の平均点を求めるプログラムをポインタ配列を用いて作成せよ。 # :- dynamic([教科/1,得点/3]). 'a君、b君、c君の5教科(英語、数学、国語、理科、社会)の試験の得点をそれぞれ a[5]={55,32,67,61,77};,b[5]={74,80,56,78,42};,c[5]={38,67,78,62,82}; と初期化する。' :- '現在定義されている 教科/1 と 得点/3 を削除する', '5教科を定義する'([英語,数学,国語,理科,社会]), 'a,b,cの得点をそれぞれ a[5]={55,32,67,61,77};,b[5]={74,80,56,78,42};,c[5]={38,67,78,62,82}; と定義する'. '現在定義されている 教科/1 と 得点/3 を削除する' :- retractall(教科(_)). retractall(得点(_,_,_)). 'a,b,cの得点をそれぞれ a[5]={55,32,67,61,77};,b[5]={74,80,56,78,42};,c[5]={38,67,78,62,82}; と定義する' :- 得点を定義する(a,[英語,数学,国語,理科,社会],[55,32,67,61,77]), 得点を定義する(b,[英語,数学,国語,理科,社会],[74,80,56,78,42]), 得点を定義する(c,[英語,数学,国語,理科,社会],[38,67,78,62,82]). '5教科を定義する'(_教科ならび) :- forall(nth0(_,_教科ならび,_教科),assertz(教科(_教科))). 得点を定義する(_君,_科目ならび,_得点ならび) :- forall( 科目ならびと得点ならびから同一の要素位置の科目と得点を取り出す(_科目ならび,_得点ならび,_科目,_得点), assertz(得点(_科目,_得点)). 科目ならびと得点ならびから同一の要素位置の科目と得点を取り出す(_科目ならび,_得点ならび,_科目,_得点) :- nth1(_同一の要素位置,_科目ならび,_科目), nth1(_同一の要素位置,_得点ならび,_得点). 教科別の3人の平均点を求める(_教科,_3人の平均点) :- 教科別の(_教科), '3人の平均点を求める'(_教科,_3人の平均点). 教科別の(_教科) :- 教科(_教科). '3人の平均点を求める'(_教科,_3人の平均点) :- '3人の合計点を求める'(_教科,_3人の合計点), _平均点 is _3人の合計点 / 3. '3人の合計点を求める'(_教科,_3人の合計点) :- findall(_得点,得点(_,_教科,_得点),_得点ならび), sum_list(_得点ならび,_3人の合計点). :- 'a君、b君、c君の5教科(英語、数学、国語、理科、社会)の試験の得点をそれぞれ a[5]={55,32,67,61,77};,b[5]={74,80,56,78,42};,c[5]={38,67,78,62,82}; と初期化する。'.