このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1339338438/102
#  [1] 授業単元:C 
#  [2] 問題文(含コード&リンク): 
#  商品の種類の数をまず入力し、それから各商品の価格と 購入した個数を入力して、合計金額を計算して表示するプログラムを作成しなさい。 
#  それぞれの商品番号に対して、単価と個数の2つの要素を持つような 2次元配列を使ってプログラムを作成しなさい。 
#  ただし商品の種類の数は100以下とする。 
#  

'商品の種類の数をまず入力し、それから各商品の価格と購入した個数を入力して、合計金額を計算して表示する。それぞれの商品番号に対して、単価と個数の2つの要素を持つような2次元配列を使ってプログラムを作成しなさい。ただし商品の種類の数は100以下とする。' :-
        '商品の種類の数をまず入力し(ただし商品の種類の数は100以下とする)'(_商品の種類の数),
        'それから各商品の価格と購入した個数を入力して、それぞれの商品番号に対して、単価と個数の2つの要素を持つような_各商品の価格と購入した個数ならびを生成する'(_商品の種類の数,_各商品の価格と購入した個数ならび),
        合計金額を計算して表示する(_各商品の価格と購入した個数のならび).

'商品の種類の数をまず入力し(ただし商品の種類の数は100以下とする)'(_商品の種類の数) :-
        write('商品の種類の数を設定してください : '),
        get_line(Line),
        '診断: 商品の種類の数'(Line,_商品の種類の数),!.
'商品の種類の数をまず入力し(ただし商品の種類の数は100以下とする)'(_商品の種類の数) :-
       '商品の種類の数をまず入力し(ただし商品の種類の数は100以下とする)'(_商品の種類の数).

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

'それから各商品の価格と購入した個数を入力して、それぞれの商品番号に対して、単価と個数の2つの要素を持つような_各商品の価格と購入した個数ならびを生成する'(_商品の種類の数,_各商品の価格と購入した個数ならび) :-
        length(_各商品の価格と購入した個数ならび,_商品の種類の数),
        findall([_商品番号,_商品価格,_購入した個数],(
                    append(_,[_|_],_各商品の価格と購入した個数ならび),
                    商品の価格と購入した個数を入力して(_商品番号,_商品価格,_購入した個数)),
                _各商品の価格と購入した個数ならび).

商品の価格と購入した個数を入力して(_商品番号,_商品価格,_購入した個数) :-
        商品番号の入力(_商品番号),
        商品価格の入力(_商品番号,_商品価格),
        購入した個数の入力(_商品番号,_購入した個数).

商品番号の入力(_商品番号) :-
        get_line(_商品番号).

商品価格の入力(_商品番号,_商品価格) :-
        writef('商品番号%tの商品価格を入力してください : ',[_商品番号]),
        get_line(Line),
        '診断: 商品価格の入力'(Line,_商品価格),!.
商品価格の入力(_商品番号,_商品価格) :-
        商品価格の入力(_商品番号,_商品価格).

'診断: 商品価格の入力'(Line,_商品価格) :-
        atom_to_term(Line,_商品価格,_),
        number(_商品価格),
        _商品価格 >= 0.0,!.
'診断: 商品価格の入力'(Line,_商品価格) :-
        writef('入力された %t からは適切な商品価格が得られません。再入力をお願いします。\n',[Line]),
        fail.

購入した個数の入力(_商品番号,_購入した個数) :-
        writef('商品番号%tの購入した個数を入力してください : ',[_商品番号]),
        get_line(Line),
        '診断: 購入した個数の入力'(Line,_購入した個数),!.
購入した個数の入力(_商品番号,_購入した個数) :-
        購入した個数の入力(_商品番号,_購入した個数).

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

合計金額を計算して表示する(_各商品の価格と購入した個数のならび) :-
        合計金額を計算して(_各商品の価格と購入した個数のならび,_合計金額),
        表示する(_合計金額).

合計金額を計算して(_各商品の価格と購入した個数のならび,_合計金額) :-
        findsum(_金額,(
                    member([_,_商品の価格,_購入した個数],_各商品の価格と購入した個数のならび),
                    _金額 is _商品価格 * _購入した個数),
                _合計金額).

表示する(_合計金額) :-
        writef('合計金額は %t です\n',[_合計金額]).