このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1325685876/588
#  [1] プログラミング 
#  [2] 営業キロを入力したら料金を表示するプログラムを作りなさい。なお、営業キロは小数点以下はすべて切り上げで計算されます。 
#    営業キロはキーボードからの入力とし、正しい結果が表示されれば繰り返し終了、エラーの場合再入力する。 
#  [3] Linux C言語 
#  [4] 期限:2012年1月25日 
#  [5] 構造体の使用は無し、運賃と距離は配列を使用する。 
#   
#  一応途中まで作ってみましたが、dis[0]のときfare[0]の値は出ますがそれ以外が出ません。。。助けてください。 
#   
#  #include<stdio.h> 
#  int main(void){ 
#   int fare[100]; 
#   int dis[100]; 
#   int j; 
#   float n; 
# 
#   fare[0]=140;    fare[1]=180;    fare[2]=190; 
#   fare[3]=230;    fare[4]=320;    fare[5]=400; 
#   fare[6]=480;    fare[7]=570;    fare[8]=650; 
#   fare[9]=710;    fare[10]=820;   fare[11]=950; 
#   fare[12]=1110;  fare[13]=1280;  fare[14]=1450; 
#   fare[15]=1620;  fare[16]=1890;  fare[17]=2210; 
#   fare[18]=2520;  fare[19]=2940;  fare[20]=3260; 
#   fare[21]=3570;  fare[22]=3890;  fare[23]=4310; 
#   fare[24]=4620;  fare[25]=4940;  fare[26]=5250; 
#   fare[27]=5460;  fare[28]=5780;  fare[29]=6090; 
#   fare[30]=6300;  fare[31]=6620;  fare[32]=6830; 
#   fare[33]=7140;  fare[34]=7350;  fare[35]=7670; 
#   fare[36]=7980;  fare[37]=8190;  fare[38]=8510; 
#   fare[39]=8720;  fare[40]=9030;  fare[41]=9350; 
#   fare[42]=9560;  fare[43]=9870;  fare[44]=10190; 
#   fare[45]=10500; fare[46]=10820; fare[47]=11030; 
#   fare[48]=11340; fare[49]=11600; fare[50]=11970; 
#   fare[51]=12290; fare[52]=12600; fare[53]=12810; 
#   fare[54]=13130; fare[55]=13440; fare[56]=13760; 
#   fare[57]=14070; fare[58]=14390; fare[59]=14600; 
#   fare[60]=14910; 
# 
#   dis[0]=3;     dis[1]=6;     dis[2]=10; 
#   dis[3]=15;    dis[4]=20;    dis[5]=25; 
#   dis[6]=30;    dis[7]=35;    dis[8]=40; 
#   dis[9]=45;    dis[10]=50;   dis[11]=60; 
#   dis[12]=70;   dis[13]=80;   dis[14]=90; 
#   dis[15]=100;  dis[16]=120;  dis[17]=140; 
#   dis[18]=160;  dis[19]=180;  dis[20]=200; 
#   dis[21]=220;  dis[22]=240;  dis[24]=260; 
#   dis[24]=280;  dis[25]=300;  dis[26]=320; 
#   dis[27]=340;  dis[28]=360;  dis[29]=380; 
#   dis[30]=400;  dis[31]=420;  dis[32]=440; 
#   dis[33]=460;  dis[34]=480;  dis[35]=500; 
#   dis[36]=520;  dis[37]=540;  dis[38]=560; 
#   dis[39]=580;  dis[40]=600;  dis[41]=640; 
#   dis[42]=680;  dis[43]=720;  dis[44]=760; 
#   dis[45]=800;  dis[46]=840;  dis[47]=880; 
#   dis[48]=920;  dis[49]=960;  dis[50]=1000; 
#   dis[51]=1040; dis[52]=1080; dis[53]=1120; 
#   dis[54]=1160; dis[55]=1200; dis[56]=1240; 
#   dis[57]=1280; dis[58]=1320; dis[59]=1360; 
#   dis[60]=1400; 
# 

料金(3,140).
料金(6,180).
料金(10,190).
料金(15,230).
料金(20,320).
料金(25,400).
料金(30,480).
料金(35,570).
料金(40,650).
料金(45,710).
料金(50,820).
料金(60,950).
料金(70,1110).
料金(80,1280).
料金(90,1450).
料金(100,1620).
料金(120,1890).
料金(140,2210).
料金(160,2520).
料金(180,2940).
料金(200,3260).
料金(220,3570).
料金(240,3890).
料金(260,4310).
料金(280,4620).
料金(300,4940).
料金(320,5250).
料金(340,5460).
料金(360,5780).
料金(380,6090).
料金(400,6300).
料金(420,6620).
料金(440,6830).
料金(460,7140).
料金(480,7350).
料金(500,7670).
料金(520,7980).
料金(540,8190).
料金(560,8510).
料金(580,8720).
料金(600,9030).
料金(640,9350).
料金(680,9560).
料金(720,9870).
料金(760,10190).
料金(800,10500).
料金(840,10820).
料金(880,11030).
料金(920,11340).
料金(960,11600).
料金(1000,11970).
料金(1040,12290).
料金(1080,12600).
料金(1120,12810).
料金(1160,13130).
料金(1200,13440).
料金(1240,13760).
料金(1280,14070).
料金(1320,14390).
料金(1360,14600).

'営業キロを入力したら料金を表示するプログラムを作りなさい。 なお、営業キロは小数点以下はすべて切り上げで計算されます。営業キロはキーボードからの入力とし、正しい結果が表示されれば繰り返し終了、エラーの場合再入力する。' :-
        '営業キロはキーボードからの入力とし'(_営業キロ),
        '料金を表示する'(_営業キロ,_料金).

'営業キロはキーボードからの入力とし'(_営業キロ) :-
        write('営業キロを入力して下さい : '),
        get_line(Line),
        営業キロ入力診断(Line,_営業キロ),!.
'営業キロはキーボードからの入力とし'(_営業キロ) :-
        '営業キロはキーボードからの入力とし'(_営業キロ).

営業キロ入力診断(Line,_営業キロ) :-
        atom_to_term(Line,_営業キロ),
        integer(_営業キロ),
        _営業キロ > 0,!.
営業キロ入力診断(Line,_営業キロ) :-
        writef('入力された %t から適切な営業キロが得られませんでした。再入力をお願いしす。\n',[Line]),
        fail.

料金を表示する(_営業キロ,_料金) :-
        料金を計算する(_入力営業キロ,_料金),
        writef('%t 円です。\n',[_料金]).

料金を計算する(_入力営業キロ,14910) :-
        _入力営業キロ >= 1400,!.
料金を計算する(_入力営業キロ,_料金) :-
        findall([_営業キロ,_金額],(
                    料金(_営業キロ,_料金),
                    _入力営業キロ < _営業キロ),
                LL),
        min(LL,[_営業キロ,_料金]).

%  料金/2述語の節の順序は必ずしも営業キロ数の小さい順であるとは
%  言えない。それでこういうプログラムとなる。
%  小さい順だとするためには、最初にその検査が必要だろう。