このディレクトリの索引

# 出典 :: C/C++の宿題片付けます 158代目 #978 # [1] 授業単元:C言語演習 # [2] 問題文: # ../test/read.cgi/tech/1339338438/976のプログラムを修正して、メッセージ転送時間の平均値を計算するaverage関数を追加し、main関数側で平均メッセージ転送時間も出力するようにせよ。 # '実験データは、あるコンピュータAのメッセージ発生時刻と、そのメッセージが宛先コンピュータBに到着した時刻である。メッセージの転送時間の平均値を出力する'(_実験データファイル) :- 実験データは(_実験データファイル,_実験データ行ならび), 'あるコンピュータAのメッセージ発生時刻と、そのメッセージが宛先コンピュータBに到着した時刻である。メッセージ毎の転送時間を出力する'(_実験データ行ならび). 実験データは(_実験データファイル,_実験データ行ならび) :- open(_実験データファイル,read,_入力), 実験データを読み取る(_入力,_実験データ行ならび), close(_入力). 実験データを読み取る(_入力,[]) :- at_end_of_stream(_入力),!. 実験データを読み取る(_入力,_実験データ行ならび) :- 実験データを読み取って行く(_入力,_実験データ行ならび). 実験データを読み取って行く(_入力,[_実験データ行|_実験データ行ならび]) :- 行入力(_入力,_実験データ行), 実験データを読み取る(_入力,_実験データ行ならび). 行入力(_入力,_行) :- read_line_to_codes(_入力,_文字コードならび), atom_codes(_行,_文字コードならび). 'あるコンピュータAのメッセージ発生時刻と、そのメッセージが宛先コンピュータBに到着した時刻である。メッセージ毎の転送時間を出力する'(_実験データ行ならび) :- 'あるコンピュータAのメッセージ発生時刻と、そのメッセージが宛先コンピュータBに到着した時刻である。メッセージの転送時間の平均値を'(_実験データ行ならび,_転送時間の平均値), 出力する(_転送時間の平均値). 'あるコンピュータAのメッセージ発生時刻と、そのメッセージが宛先コンピュータBに到着した時刻である。メッセージの転送時間の平均値を'(_実験データ行ならび,_転送時間の平均値) :- findavg(_メッセージの転送時間,( 'あるコンピュータAのメッセージ発生時刻と、そのメッセージが宛先コンピュータBに到着した時刻である。'(_実験データ行ならび,_メッセージの転送時間)),_転送時間の平均値). findavg(A,_副目標,_平均値) :- '_副目標の解を集めた時の_解の数と_合計'(A,_副目標,_解の数,_合計), _平均値 is _合計 / _解の数. '_副目標の解を集めた時の_解の数と_合計'(A,_副目標,_解の数,_合計) :- '_副目標の解を集めた時の'(A,_副目標,L), '_解の数と合計'(L,_解の数,_合計). '_副目標の解を集めた時の'(A,_副目標,L) :- findall(A,_副目標,L). '_解の数と合計'(L,_解の数,_合計) :- length(L,_解の数), sum_list(L,_合計). 'あるコンピュータAのメッセージ発生時刻と、そのメッセージが宛先コンピュータBに到着した時刻である。'(_実験データ行ならび,_メッセージの転送時間) :- member(_行文字列,_実験データ行ならび), メッセージ毎の転送時間(_行文字列,_メッセージの転送時間). メッセージ毎の転送時間(_行文字列,_メッセージの転送時間) :- 数値変換項目区切り(_行文字列,[' '],[_メッセージ番号,_メッセージの発生時刻,_メッセージの到達時刻]), _メッセージの転送時間 is _メッセージの到達時刻 - _メッセージの発生時刻. 出力する(_転送時間の平均値) :- writef('転送時間の平均値は %t 秒です\n',[_転送時間の平均値]). 数値変換項目区切り(_文字列,_区切り文字列ならび,_区切られた文字列ならび) :- 数値変換項目区切り(_文字列,_区切り文字列ならび,_使われている区切り文字ならび,_区切られた文字列ならび). 数値変換項目区切り('',_,[],[]) :- !. 数値変換項目区切り(_文字列,_区切り文字列ならび,_使われている区切り文字ならび,_区切られた文字列ならび) :- '先頭から区切り文字列で区切って行く(可能なものは数値に変換する)'(_文字列,_区切り文字列ならび,_使われている区切り文字ならび,_区切られた文字列ならび),!. 数値変換項目区切り(_文字列,_,[],[_文字列_1]) :- 数値に変換可能なものは変換する(_文字列,_文字列_1). '先頭から区切り文字列で区切って行く(可能なものは数値に変換する)'(_文字列,_区切り文字列ならび,[_区切り文字列|R1],[_前文字列_1|R2]) :- '区切り文字列で前文字列、後文字列に区切る(前文字列は空文字ではない)'(_文字列,_区切り文字列ならび,_前文字列,_区切り文字列,_後文字列), 数値に変換可能なものは変換する(_前文字列,_前文字列_1), 数値変換項目区切り(_後文字列,_区切り文字列ならび,R1,R2). '区切り文字列で前文字列、後文字列に区切る(前文字列は空文字ではない)'(_文字列,_区切り文字列ならび,_前文字列,_区切り文字列,_後文字列) :- member(_区切り文字列,_区切り文字列ならび), 副文字列(_文字列,_前文字列,_区切り文字列,_後文字列), 前文字列は空文字ではない(_前文字列). 副文字列(_文字列,_前文字列,_副文字列,_後文字列) :- atom_concat(_前文字列,_残り文字列,_文字列), atom_concat(_副文字列,_後文字列,_残り文字列). 数値に変換可能なものは変換する(_文字列,_項目) :- atom_number(_文字列,_項目),!. 数値に変換可能なものは変換する(_文字列,_文字列). 前文字列は空文字ではない(_前文字列) :- _前文字列 \== ''.