このディレクトリの索引

% 課題1 ターミナルから日本円の金額を読み込み,これをドルとユーロに変換して表示するプログラムを作成しなさい. 
%    作成にあたっては,下図の構造体を用い,為替レートは図に示された初期値を用いなさい.
% 
% struct rate {        //  外国為替レート
%   double to_yen;     //  対円
%   double to_dollar;  //  対ドル
%   double to_euro;    //  対ユーロ
% };
% 
% struct rate yen = {1.0, 0.0104, 0.007347,};
% /*  1$=96.15円, 1EURO=136.11円の場合の,各国通貨に対する円の為替レート    */
% 
% 
% 
% 課題2 ターミナルから一文字を読み込み,それが'e'の場合は英語の国名を出力し,'f'の場合はフランス語で国名を出力する
%    プログラムを作成しなさい.ただし,国名を格納した変数は下図に示すものを用いること. 
% 
% #define SLENGTH    20
% #define COUNTRIES   5
% 
% struct nation {
%   char en[SLENGTH];  /*  国名(英語)  */
%   char fr[SLENGTH];  /*  国名(仏語)  */
% };
%   
% struct nation country[COUNTRIES] = {  /* 国名の初期化  */
%   {"Japan", "Japon", },       // 日本
%   {"France", "France",},      // フランス
%   {"Germany", "Allemagne",},  // ドイツ
%   {"Spain", "Espagne",},      // スペイン
%   {"Italy", "Italie",},       // イタリア
% };
% 
% 
% 課題3 氏名,身長,体重を収めるリストを構造体で作成し,BMI指数により標準体型と見なされる人の氏名とBMI指数を出力する
%    プログラムを作成せよ. 
% 
%     ・登録できる人数の上限を16人とし,登録者数を入力してから,各人のデータを入力する. 
%     ・構造体の各要素は,name(氏名),height(身長),weight(体重)とする. 
%     ・氏名は,30文字以内とし,スペースを含まない. 
%     ・身長の単位は[cm],体重の単位は[Kg]とする. 
%     ・各項目は<スペース>で区切られて入力される.
%     ・各項目は<スペース>で区切られて出力される. 
% 
% 課題1
対円レート(1.0, 0.0104, 0.007347).
外国為替レート(_円,_ドル,_ユーロ) :-
    対円レート(_, _対ドル, _対ユーロ),
    not(var(_円)),
    _ドル is _円 * _対ドル,
    _ユーロ is _円 * _対ユーロ.

% 課題2
課題2 :-
    read(X),
    課題2_1(X).

課題2_1(e) :-
    country(L),
    member([Country,_],L),
    write(Country),nl,
    fail.
課題2_1(f) :-
    country(L),
    member([_,Country],L),
    write(Country),nl,
    fail.
課題2_1(_).

country([['Japan', 'Japon'],    % 日本
  ['France', 'France'],      % フランス
  ['Germany', 'Allemagne'],  % ドイツ
  ['Spain', 'Espagne'],      % スペイン
  ['Italy', 'Italie']]).       % イタリア

% 課題3
データ入力 :-
    abolish(個人データ/0),
    構造体生成(_構造体1),
    read(X),
    split(X,[' '],[_名前,_身長,_体重]),
    データ入力(_名前,_身長,_体重,_構造体1,_構造体2),
    assertz(個人データ(_構造体2)),
    'BMI標準メンバーの表示.

'BMI標準メンバーの表示' :-
    個人データ(_構造体),
    member([_名前1,_身長1,_体重1],_構造体),
    'BMI判定'(_身長1,_体重1,BMI,普通です),
    wr('%t %t %t %t\n',[_名前1,_身長1,_体重1,BMI]),
    fail;
    true.

データ入力(end_of_file,_構造体,_構造体) :- !.
データ入力(_入力行,_構造体1,_構造体) :-
    split(_入力行,[' '],[_名前,_身長,_体重]),
    sub_atom(_名前,0,30,_,_名前1),
    構造体更新(_氏名,_身長1,_体重,_構造体1,_構造体2),
    read(X),
    データ入力(X,_構造体2,_構造体).

構造体生成([]).
構造体更新(_名前,_身長,_体重,_更新前,_更新後) :-
    length(_更新前,Len),
    Len < 16,
    _更新後=[[名前(_名前),身長(_身長),体重(_体重)]|_更新前].

構造体更新(_名前,_身長,_体重,_,_) :-
    write('登録者がすでに16名います\n追加できません\n').

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

'BMI判定'(BMI,やせてます) :- BMI =< 18.5.
'BMI判定'(BMI,普通です) :- BMI > 18.5,BMI < 25.0.
'BMI判定'(BMI,レッツエクササイズ!) :- BMI >= 25.0.