このディレクトリの索引

# 出典 :: C/C++の宿題片付けます 152代目 #531 # [1] 授業単元: C言語プログラミング # [2] 問題文(含コード&リンク): # 平成○年の値を入力し、西暦に変換するプログラムを作成 # '平成○年の値を入力し、西暦に変換する' :- '平成○年の値を入力し漢数字を数字に変換する'(_数字), '平成元年は西暦1989年であることから西暦を得る'(_数字,_西暦), format('西暦は ~w です。\n',[_西暦]). '平成○年の値を入力し漢数字を数字に変換する'(_数字) :- '平成○年の値を入力し'(_漢数字年), 漢数字を数字に変換する(_漢数字年,_数字). '平成○年の値を入力し'(_漢数字年) :- write('平成○年を入力してください : '), 漢数字年を得る(_漢数字年). 漢数字年を得る(_漢数字年) :- 行入力されたものが漢数字であるか検査する(_漢数字年),!. 漢数字年を得る(_漢数字年) :- 漢数字年を得る(_漢数字年). 行入力されたものが漢数字であるか検査する(_漢数字年) :- 行入力(_行), 年は切り取って検査する(_行,_年が切り取られた行), 漢数字年入力検査(_年が切り取られた行,_漢数字年). 年は切り取って検査する(_行,_年が切り取られた行) :- 末尾文字が年だったら切り取る(_行,_年が切り取られた行),!. 年は切り取って検査する(_行,_行). 末尾文字が年だったら切り取る(_行,_年が切り取られた行) :- sub_atom(_行,_,1,0,年), sub_atom(_行,0,_,1,_年が切り取られた行). 漢数字年入力検査(元,元) :- !. 漢数字年入力検査(_漢数字年,_漢数字年) :- forall(sub_atom(_漢数字年,_,1,_,A),'漢数字・数字'(A,_)),!. 漢数字年入力検査(_行,_) :- writef('入力された %t からは漢数字が得られませんでした。再入力をお願いします。\n',[_行]), fail. 漢数字を数字に変換する(元,1) :- !. 漢数字を数字に変換する(_年,_数字) :- '二桁年の数字を得る'(_年,_数字). 漢数字を数字に変換する(_年,_数字) :- '一桁年の数字を得る'(_年,_数字). '二桁年の数字を得る'(_年,_数字) :- '十の桁、一の桁の漢数字を切り取り数字を得る'(_年,_数字). '十の桁、一の桁の漢数字を切り取り数字を得る'(_年,_数字) :- '十の桁、一の桁の漢数字を得る'(_年,_十の桁の漢数字,_一の桁の漢数字), '十の桁、一の桁の数字を得る'(_十の桁の漢数字,_一の桁の漢数字,_十の桁の数字,_一の桁の数字), _数字 is _十の桁の数字 * 10 + _一の桁の数字. '十の桁、一の桁の漢数字を得る'(_年,_十の桁の漢数字,_一の桁の漢数字) :- sub_atom(_年,0,1,R,_十の桁の漢数字), sub_atom(_年,R,1,0,_一の桁の漢数字), R > 0. '十の桁、一の桁の数字を得る'(_十の桁の漢数字,_一の桁の漢数字,_十の桁の数字,_一の桁の数字) :- '漢数字・数字'(_十の桁の漢数字,_十の桁の数字), '漢数字・数字'(_一の桁の漢数字,_一の桁の数字). '一桁年の数字を得る'(_年,_数字) :- sub_atom(_年,0,1,0,_一の桁の漢数字), '漢数字・数字'(_一の桁の漢数字,_数字). '平成元年は西暦1989年であることから西暦を得る'(_数字,_西暦) :- _西暦 is _数字 + 1989 - 1. '漢数字・数字'(一,1). '漢数字・数字'(二,2). '漢数字・数字'(三,3). '漢数字・数字'(四,4). '漢数字・数字'(五,5). '漢数字・数字'(六,6). '漢数字・数字'(七,7). '漢数字・数字'(八,8). '漢数字・数字'(九,9). '漢数字・数字'(十,1). 行入力(_行) :- read_line_to_codes(user_input,Codes), atom_codes(_行,Codes).