?- 'a##'. c154-122#
このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1322562648/122
#  1] 授業単元:  
#  [2] 問題文(含コード&リンク):  
#   
#  (1)  
#  #include <stdio.h>  
#  #define NUMBER 5  
#  int tensu[NUMBER];  
#  int top(void);  
#  int main(void)  
#  {  
#  extern int tensu[];  
#  int i;  
#  printf("%d人の点数を入力してください。\n", NUMBER);  
#  for (i = 0; i < NUMBER; I++) { printf("%d:",i + 1); scanf("%d", &tensu[i]); } printf("最高点=%d\n", top()); return (0);  
#  }  
#  int top(void)  
#  { extern int tensu[]; int i; int max = tensu[0]; for (i = 1; i < NUMBER; i++) if (tensu[i] > max) max = tensu[i]; return (max);  
#  }  
#  上のプログラムを参考にして、5人の点数の平均点を返す関数 double ave(void)を作成せよ。  
#  その関数を用いて、読み込んだ5人の点数の平均値を出力するプログラムを作成せよ。  
#  (2)  
#  2つの 3成分ベクトル a, b の外積 c を求める関数 void acrossb(double a[], double b[], double c[]) を作成せよ。  
#  この関数を用いて次の二つのベクトル va=(1.0, 2.0, 1.0) , vb=(-2.0, 0.5, 1.0) の外積を計算するプログラムを作成せよ。  
#  

'5人の点数の平均点を返す' :-
        '5人の点数'(_5人の点数),
        平均点を返す(_5人の点数,_平均点),
        writef('平均点は %t です。\n',[_平均点]).

'5人の点数'(_5人の点数) :-
        length(_5人の点数,5),
        findall(_点数,(
                    append(L0,[_点数|_],_5人の点数),
                    点数の入力(L0,_点数)),
                _5人の点数).

点数の入力(L0,_点数) :-
        length([_|L0],N),
        writef('%t人目の点数を入力して下さい : ',[N]),
        get_line(Line),
        点数入力診断(Line,_点数),!.
点数の入力(L0,_点数) :-
        点数の入力(L0,_点数).

点数入力診断(Line,_点数) :-
        atom_to_term(Line,_点数,_),
        integer(_点数),
        _点数 >= 0,
        _点数 =< 100,!.
点数入力診断(Line,_点数) :-
        writef('入力された %t からは適切な点数が得られません。再入力をお願いします。\n',[Line]),
        fail.

平均点を返す(_5人の点数,_平均点) :-
        平均点を返す(_5人の点数,0,_平均点).

平均点を返す([],_合計,_平均点) :-
        _平均 is _合計 / 5,!.
平均点を返す([_点数|R],_合計_1,_平均点) :-
        _合計_2 is _点数 + _合計_1,
        平均点を返す(R,_合計_2,_平均点).