このディレクトリの索引
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]]).

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

料金表は昇順にならんでいる(_料金表) :-
        料金表(_料金表),
        昇順検査(_料金表),!.
料金表は昇順にならんでいる(_料金表) :-
        料金表(_料金表_1),
        整列(_料金表_1,_料金表).

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

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

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

料金を計算する(_入力営業キロ,_,14910) :-
        _入力営業キロ >= 1400,!.
料金を計算する(_入力営業キロ,[[_営業キロ,_料金]|_],_料金) :-
        _営業キロ > _入力営業キロ,!.
料金を計算する(_入力営業キロ,[_|R],_料金) :-
        料金を計算する(_入力営業キロ,R,_料金).

昇順検査([_]) :- !.
昇順検査([A,B|R]) :-
        B @>= A,
        昇順検査([B|R]).