このディレクトリの索引

# [1] 授業単元:fortran
# [2] 問題文(含コード&リンク):配列を使わずに平均値、分散、標準偏差を表示せよ
# データ数nとn個のデータを入力し、平均値、分散、標準偏差を標示せよ。なおn≧5である。
# dimension、if、go toを使ってはいけない。

'配列を使わずに平均値、分散、標準偏差を表示' :-
    write('データ数 : '),
    get_integer(N),
    writef('%個の数を1個1行で連続して入力してください : ',[N]),
    get_line(Line),
    read_term_from_atom(Line,X,[]),
    '配列を使わずに平均値、分散、標準偏差を表示'(1,N,X,0,_,Z).
    _分散 is Z / N,
    _標準偏差 is sqrt(Z / (N - 1)),
    writef('平均値=%t,分散=%t,標準偏差=%t\n',[_平均値,_分散,_標準偏差]),!.

'配列を使わずに平均値、分散、標準偏差を表示'(M,N,X,S,_平均,0.0) :-
    M > N,_平均 is S / N,!.
'配列を使わずに平均値、分散、標準偏差を表示'(M,N,X,S1,_平均,Z) :-
    get_line(Line2),
    read_term_from_atom(line2,X2,[]),
    S2 is S1 + X,
    M1 is M - 1,
    '配列を使わずに平均値、分散、標準偏差を表示'(M1,N,X2,S2,_平均,Z2),
    Z is (X - _平均) ^ 2 + Z2.

get_line(Line) :-
    read_line_to_codes(current_input,Codes),
    atom_codes(Line,Codes).

get_integer(N) :-
    read_line_to_codes(current_input,Codes),
    number_codes(N,Codes),
    integer(N).