このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1291471791/729
#  [1] 授業単元:Cプログラミング 
# [2] 問題文(含コード&リンク):http://ime.nu/www.dotup.org/uploda/www.dotup.org1309111.txt.html 
#  構造体を用いて一人分の名前,性別,年齢,身長[m],体重[kg],BMI値,BMI判定を処理するプログラムを
#  以下の手順(1)〜(4)に従って作成せよ.ただし,BMIの判定はBMI値が
#  18.5未満なら1, 18.5以上25未満なら2,25以上30未満なら3,30以上なら4 とする.
#  
#  (1) 次のようなPERSON構造体を定義せよ 
#  
#  【PERSON構造体】 
#  
#  メンバ:名前を代入する配列 name 
#          性別を代入する変数 gender 
#          年齢を代入する変数 age 
#          身長を代入する変数 height 
#          体重を代入する変数 weight 
#          BMI値を代入する変数 bmi 
#          BMI判定結果を代入する変数judge 
#  
#  (2) 以下の仕様を満たす関数makePersonalDataを作成せよ. 
#  
#  ◎char *data = "Andrew M 38 1.805 105.2"; 
#   のように文字列で与えられている一人分の名前,性別,年齢,身長[m],体重[kg]のデータを引数として受け取る 
#  
#  
#  ◎受け取った文字列を名前,性別,年齢,身長,体重のデータに分割し,PERSON構造体
#   変数のメンバ変数name, gender, age, height, weightに代入する 
#  
#  ◎BMI値を計算し,メンバ変数bmiに代入する 
#  
#  ◎BMI値を判定し,判定結果をメンバ変数judgeに代入する 
#  
#  ※BMI値の計算と判定は以下に示す関数calc_bmiを利用する 
#  
#  (3) 以下の仕様を満たす関数printPersonalDataを作成せよ. 
#  ◎PERSON構造体変数を引数として受け取る 
#  ◎PERSON構造体のメンバを1行で出力する.順番は名前,性別,年齢,身長,体重,
#   BMI値,BMI判定とし,タブ区切り(’\t’を用いる)とする. 
#   Andrew M 	38 	1.805000 	105.200000 	32.289501 	4
#   
#  (4) (1)〜(3)で作成した構造体と関数が正しく動作することを次のmain関数を用いて確認せよ. 
#  
#  【実行結果】
#  
#  Andrew M	38	1.805000	105.200000	32.289501	4
#  
#  Jane   F	31	1.724000	75.400000	25.368619	3
#  
#  Thomas M	43	1.892000	65.100000	18.186064	1
#  
#  

個人データの作成(_個人データ文字列,_名前,_性別,_年齢,_身長,_体重) :-
        split(_個人データ文字列,[' '],[_名前,_性別,_年齢,_身長,_体重]),
        'BMI値の判定'(_身長,_体重,_BMI値,_BMI判定),
        assertz(個人データ(_名前,_性別,_年齢,_身長,_体重,_BMI値,_BMI判定)).

個人データの表示 :-
        個人データ(_名前,_性別,_年齢,_身長,_体重,_BMI値,_BMI判定),
        write_formatted('%t\t%t\t%t\t%t\t%t\t%t\t%t\n',[_名前,_性別,_年齢,_身長,_体重,_BMI値,_BMI判定]),
        fail.
個人データの表示.

'BMI値の判定'(_身長,_体重,_BMI値,_BMI判定) :-
        _BMI値 is _体重 / ( _身長 * _身長),
        'BMI値の判定'(_BMI値,_BMI判定).

'BMI値の判定'(_BMI値,1) :-
        _BMI値 < 18.5,!.
'BMI値の判定'(_BMI値,2) :-
        _BMI値 < 25.0,!.
'BMI値の判定'(_BMI値,3) :-
        _BMI値 < 30.0,!.
'BMI値の判定'(_BMI値,4).