このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1307166756/342
#  ごめんなさい。よろしくお願いします。 
#   
#  [1] 授業単元: プログラミング  
#  [2] 問題文(含コード&リンク):  
#  学籍番号(整数)、身長(実数)、体重(実数)を入力すると、meibo.txt という
#  名前のファイルを作り、その中に学籍番号、身長、体重を記録する処理と、  
#  続いてそのファイルを開いてデータを読み込み、指定した番号の人のデータを
#  以下のように表示する処理をするプログラムを作りなさい。  
#  (実行後meibo.txt の中身は  
#   
#  1 
#  168.000000 
#  55.000000 
#  2 
#  170.000000 
#  66.000000 
#  3 
#  158.000000 
#  45.000000 
#   
#  と書かれている) 
#   
#  実行例です 
#  http://ime.nu/uproda.2ch-library.com/387866eaw/lib387866.jpg 
#   
#  

'学籍番号(整数)、身長(実数)、体重(実数)を入力すると、meibo.txt という名前のファイルを作り、その中に学籍番号、身長、体重を記録する処理と、続いてそのファイルを開いてデータを読み込み、指定した番号の人のデータを以下のように表示する' :-
        '学籍番号(整数)、身長(実数)、体重(実数)を入力すると、meibo.txt という名前のファイルを作り、その中に学籍番号、身長、体重を記録する処理',
        続いて,
        'そのファイルを開いてデータを読み込み、指定した番号の人のデータを以下のように表示する'.

'学籍番号(整数)、身長(実数)、体重(実数)を入力すると、meibo.txt という名前のファイルを作り、その中に学籍番号、身長、体重を記録する処理' :-
        '学籍番号(整数)、身長(実数)、体重(実数)を入力すると'(_学籍番号・身長・体重ならび),
        'meibo.txt という名前のファイルを作り'(Outstream),
        'その中に学籍番号、身長、体重を記録する'(Outstream,_学籍番号・身長・体重ならび),!.

そのファイルを開いてデータを読み込み、指定した番号の人のデータを以下のように表示する :-
        そのファイルを開いてデータを読み込み(_データ),
        指定した番号の人のデータを以下のように表示する(_データ).

'学籍番号(整数)、身長(実数)、体重(実数)を入力すると'(_学籍番号・身長・体重ならび) :-
        登録人数を得る(_登録人数),
        学籍番号・身長・体重ならびを形作る(_学籍番号・身長・体重ならび,_登録人数),
        学籍番号・身長・体重ならびを得る(_学籍番号・身長・体重ならび).

学籍番号・身長・体重ならびを形作る(_学籍番号・身長・体重ならび,_登録人数) :-
        length(_学籍番号・身長・体重ならび,_登録人数).

学籍番号・身長・体重ならびを得る([]).
学籍番号・身長・体重ならびを得る([[_学籍番号・身長・体重ならび]|R]) :-
        学籍番号を得る(_学籍番号),
        身長を得る(_身長),
        体重を得る(_体重),
        学籍番号・身長・体重ならびを得る(R).

'meibo.txt という名前のファイルを作り'(Outstream) :-
        open('meibo.txt',write,Outstream),!.

'その中に学籍番号、身長、体重を記録する'(Outstream,_学籍番号・身長・体重ならび) :-
        append(_,[[_学籍番号,_身長,_体重]|R],_学籍番号・身長・体重ならび),
        writef(Outstream,'%t\n%t\n%t\n',[_学籍番号,_身長,_体重]),
        R = [],
        close(Outstream),!.

そのファイルを開いてデータを読み込み(_データ) :-
        get_lines('meibo.txt',_データ).

指定した番号の人のデータを以下のように表示する(_データ) :-
        指定した番号の人(_学籍番号),
        指定した番号の人のデータを以下のように表示する(_学籍番号,_データ),!.

指定した番号の人のデータを以下のように表示する('',_) :- !.
指定した番号の人のデータを以下のように表示する(end_of_file,_) :- !.
指定した番号の人のデータを以下のように表示する(_学籍番号,_データ) :-
        append(_,[[_学籍番号,_身長,_体重]|_],_データ),
        writef('%t %t %t\n',[_学籍番号,_身長,_体重]),
        指定した番号の人(_学籍番号2),
        指定した番号の人のデータを以下のように表示する(_学籍番号2,_データ),!.

指定した番号の人(_学籍番号) :-
        write('検索する学籍番号を入れてください : '),
        get_integer(_学籍番号),!.

登録人数を得る(_登録人数) :-
        write('最初に登録人数を決めてください : '),
        get_line(Line),
        登録人数入力診断(Line,_登録人数),!.

登録人数入力診断(Line,_登録人数) :-
        atom_to_term(Line,_登録人数,_),
        integer(_登録人数),
        _登録人数 >= 1,
        _登録人数 =< 10,!.
登録人数入力診断(Line,_登録人数) :-
        再入力指示(Line,[登録人数]).

学籍番号を得る(_学籍番号) :-
        repeat,
        write('学籍番号(整数) : '),
        get_line(Line),
        学籍番号入力検査(Line,_学籍番号),!.
学籍番号入力検査(Line,_学籍番号) :-
        再入力指示(Line,学籍番号),
        fail.

身長を得る(_身長) :-
        repeat,
        write('身長(実数) : '),
        get_line(Line),
        学籍番号入力検査(Line,_身長),!.
体重を得る(_体重) :-
        repeat,
        write('体重(実数) : '),
        get_line(Line),
        学籍番号入力検査(Line,_体重),!.

学籍番号入力検査(Line,_学籍番号) :-
        atom_to_term(Line,_学籍番号,_),
        integer(_学籍番号),!.
学籍番号入力検査(Line,_学籍番号) :-
        再入力指示(Line,学籍番号),
        fail.

身長入力検査(Line,_身長) :-
        atom_to_term(Line,_身長,_),
        float(_身長),!.
身長入力検査(Line,_身長) :-
        再入力指示(Line,身長),
        fail.

体重入力検査(Line,_体重) :-
        atom_to_term(Line,_体重,_),
        float(_体重),!.
体重入力検査(Line,_体重) :-
        再入力指示(Line,体重),
        fail.

再入力指示(Line,_項目名) :-
        writef('入力された %t からは%tが得られません。再入力をお願いします。\n',[Line,_項目名]).

続いて :- true.