このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1335517816/663
#  [2]水の量(L)を入力し、その水に含まれる水素および酸素の原子の数を表示するプログラムを作成せよ。 
#  アボガドロ定数は6.02×10^23、水の分子量は18,水の重さは1ml=1gとしてよく、 
#  入力される数値として浮動小数点数値に対応すること表示は指数表現で行う。 
#   
#  [3.1]windows 
#  [3.3]c/c++ 
#  [4]今日中 
#  よろしくお願いします。 
# 

'水の量(L)を入力し、その水に含まれる水素および酸素の原子の数を表示するプログラムを作成せよ。
アボガドロ定数は6.02×10^23、水の分子量は18,水の重さは1ml=1gとしてよく、 
入力される数値として浮動小数点数値に対応すること表示は指数表現で行う。' :-
        '水の量(L)を入力し'(_水の量),
        'その水に含まれる水素および酸素の原子の数を表示する'(_水の量,_水素の原子数,_酸素の原子数).

'水の量(L)を入力し'(_水の量) :-
        write('水の量(L)を入力してください : '),
        行入力と終了状態(_行,_),
        水の量の入力診断(_行,_水の量),!.
'水の量(L)を入力し'(_水の量) :-
        '水の量(L)を入力し'(_水の量).

水の量の入力診断(_行,_水の量) :-
        read_term_from_atom(_行,_水の量,[]),
        number(_水の量),
        _水の量 > 0.0,!.
水の量の入力診断(_行,_水の量) :-
        writef('入力された水の量は適切でありません。再入力をお願いします。\n').

'その水に含まれる水素および酸素の原子の数を表示する'(_水の量,_水素の原子数,_酸素の原子数) :-
        アボガドロ数(_アボガドロ数),
        _分子の総数 is _アボガドロ数 * _水の量 * 1000 * (1 / 1),
        水の分子量(_分子量,_酸素原子量,_水素原子量),
        水素および酸素の原子の数を(_分子の総数,_分子量,_酸素原子量,_水素原子量,_酸素原子の数,_水素原子の数),
        表示する(_水の量,_分子の総数,_酸素原子の数,_水素原子の数).

アボガドロ数(602000000000000000000000).

水の分子量(_分子量,_酸素原子量,_水素原子量) :-
        _分子量 = 18,
        _酸素原子量 = 16,
        _水素原子量 = 2.
        
水素および酸素の原子の数を(_分子の総数,_分子量,_酸素原子量,_水素原子量,_酸素原子の数,_水素原子の数) :-
        _酸素原子の数 is _分子の総数 * _酸素原子量 // _分子量,
        _水素原子の数 is _分子の総数 * _水素原子量 // _分子量.

表示する(_水の量,_分子の総数,_酸素原子の数,_水素原子の数) :-
        writef('水の量=%t\n分子の総数=%t\n酸素原子の数=%t\n水素原子の数=%t\n',[_水の量,_分子の総数,_酸素原子の数,_水素原子の数]).

行入力と終了状態(_行,_終了状態) :-
        get_char(_先読み文字),
        文字ならび行入力と終了状態(_先読み文字,_文字ならび,_終了状態),
        atom_chars(_行,_文字ならび).

文字ならび行入力と終了状態('\n',[],正常終了) :- !.
文字ならび行入力と終了状態(end_of_file,[],end_of_file) :- !.
文字ならび行入力と終了状態(_先読み文字,[_先読み文字|R],_状態) :-
        get_char(_文字),
        文字ならび行入力と終了状態(_文字,R,_状態).