このディレクトリの索引
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,6,10,15,20,25,30,35,40,45,50,60,70,80,90,100,120,140,160,180,200,220,240,260,280,300,320,340,360,380,400,420,440,460,480,500,520,540,560,580,600,640,680,720,760,800,840,880,920,960,1000,1040,1080,1120,1160,1200,1240,1280,1320,1360,1400]).

料金ならび([140,180,190,230,320,400,480,570,650,710,820,950,1110,1280,1450,1620,1890,2210,2520,2940,3260,3570,3890,4310,4620,4940,5250,5460,5780,6090,6300,6620,6830,7140,7350,7670,7980,8190,8510,8720,9030,9350,9560,9870,10190,10500,10820,11030,11340,11600,11970,12290,12600,12810,13130,13440,13760,14070,14390,14600]).

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

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

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

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

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

営業キロならびは昇順である(_営業キロならび) :-
        営業キロならび(_営業キロならび_1),
        営業キロならびは昇順である(_営業キロならび_1,_営業キロならび).

営業キロならびは昇順である(_営業キロならび,_営業キロならび) :-
        昇順検査(_営業キロならび),!.
営業キロならびは昇順である(_営業キロならび_1,_営業キロならび) :-
        整列(_営業キロならび_1,_営業キロならび).

料金ならびは昇順である(_料金ならび) :-
        料金ならびは昇順である(_料金ならび_1),
        料金ならびは昇順である(_料金ならび_1,_料金ならび).

料金ならびは昇順である(_料金ならび,_料金ならび) :-
        昇順検査(_料金ならび),!.
料金ならびは昇順である(_料金ならび_1,_料金ならび) :-
        整列(_料金ならび_1,_料金ならび),!.

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