このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1284632294/463
#  [1] 授業単元:C言語 
#  [2] 問題文(含コード&リンク): 
#  (問題1)合計演算する関数Goukeiを作成せよ。ただし、引数として、配列とその個数および演算結果をとるものとする。 
#  (問題2)Goukeiを用いて平均値を求める関数Heikinを作成せよ。ただし、引数として配列とその個数および演算結果をとるものとする。 
#  (問題3)関数Heikinを用いて、main関数を作成せよ。ただし、身長のデータ数Nは、キーボードより入力されるとし、配列を動的に確保せよ。また、身長データは、キーボードより入力されるものとする。 
#  
% リスト処理とせず、配列を L として抽象化してみた。

'Goukei'(L,Length,_合計) :-
        'Goukei'(L,1,Length,0,_合計).

'Goukei'(L,N,Length,_合計,_合計) :- N > Length,!.
'Goukei'(L,N1,Length,_合計1,_合計) :-
        要素番号から要素を決定する(N1,L,_値),
        _合計2 is _合計1 + _値,
        'Goukei'(L,N,Length,_合計2,_合計).

'Heikin'(L,Length,_平均) :-
        'Goukei'(L,1,Length,0,_合計),
        _平均 is _合計 / Length.

main :-
        n人分の身長データを得る(L,_n人分),
        機能選択(L,_n人分).

n人分の身長データを得る(L,_n人分) :-
        最初に人数を入力する(_n人分),
        length(L,_n人分),
        n人分身長を入力する(L,1,_n人分).

最初に人数を入力する(_n人分) :-
        get_integer(_n人分),!.

n人分身長を入力する(L,1,_n人分) :- N > _n人分,!.
n人分身長を入力する(L,N1,_n人分) :-
        get_integer(_身長),
        list_nth(N1,L,_身長),
        N2 is N1 + 1,
        n人分身長を入力する(L,N2,_n人分).

機能選択(L,_n人分) :-
        write('機能番号を選択してください : '\n1: 合計\n2: 平均\n'),
        get_integer(N),
        機能選択診断(N,L,_n人分).
機能選択(L,_n人分) :-
        write_formatted('選択した機能番号は1または2ではありません\n'),
        機能選択(L,_n人分).

機能選択診断(1,L,_n人分) :-
        'Goukei'(L,_n人分,_合計),
        write_formatted('入力されたデータの合計は %t です\n',[_合計]),!.
機能選択診断(2,L,_n人分) :-
        'Heikin'(L,_n人分,_平均),
        write_formatted('入力されたデータの平均は %t です\n',[_平均]),!.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

要素番号から要素を決定する(_要素番号,L,_要素) :-
        list_nth(_要素番号,L,_要素).