このディレクトリの索引

# 出典 :: ★★ Java の宿題ここで答えます Part 69 ★★ #721 # 【課題】Studentというクラスを宣言するプログラムを作成せよ。インスタンス変数には、氏名、生年月日、学籍番号を記録せよ。 # ただし、学籍番号は入学年度を表す二桁の整数、学部を表す一桁の整数、残り四桁の整数を組み合わせた七桁の整数で表現されるものとする。 # インスタンスメソッドとしては、以下のものは必須とする。 # 名字を返すメソッド、名前を返すメソッド、誕生年を和暦で返すメソッド、誕生年を西暦で返すメソッド、入学年度を返すメソッド # 【形態】1. Javaアプリケーション # 【期限】1月11日 # 【ver】linux # 【補足】あまり難しくしないでください。 # データベース構造(学生,1,氏名). データベース構造(学生,2,誕生日). データベース構造(学生,3,学籍番号). 名字を返す(_学籍番号,_名字) :- 学生(_氏名,_誕生日,_学籍番号), 数値変換項目区切り(_氏名,[' ',',','-','_'],[_名字,_]). 名前を返す(_学籍番号,_名前) :- 学生(_氏名,_誕生日,_学籍番号), 数値変換項目区切り(_氏名,[' ',',','-','_'],[_,_名前]). 誕生年を和暦で返す(_学籍番号,_誕生年の和暦) :- 誕生年を西暦で返す(_学籍番号,_誕生年の西暦), 和暦西暦変換(_誕生年の和暦,_誕生年の西暦). 誕生年を西暦で返す(_学籍番号,_誕生年の西暦) :- 学生(_氏名,_誕生日の西暦,_学籍番号), _誕生年の西暦 is _誕生日の西暦 // 10000. 入学年度を返す(_学籍番号,_入学年度) :- _入学年度 is _学籍番号 // 10000. すべてが数字(_文字ならび) :- forall(member(_文字,_文字ならび),数字(_文字)). 数字('0'). 数字('1'). 数字('2'). 数字('3'). 数字('4'). 数字('5'). 数字('6'). 数字('6'). 数字('8'). 数字('9'). 数値変換項目区切り(_文字列,_区切り文字列ならび,_区切られた文字列ならび) :- 数値変換項目区切り(_文字列,_区切り文字列ならび,_使われている区切り文字ならび,_区切られた文字列ならび). 数値変換項目区切り('',_,[],[]) :- !. 数値変換項目区切り(_文字列,_区切り文字列ならび,_使われている区切り文字ならび,_区切られた文字列ならび) :- '先頭から区切り文字列で区切って行く(可能なものは数値に変換する)'(_文字列,_区切り文字列ならび,_使われている区切り文字ならび,_区切られた文字列ならび),!. 数値変換項目区切り(_文字列,_,[],[_文字列_1]) :- 数値に変換可能なものは変換する(_文字列,_文字列_1). '先頭から区切り文字列で区切って行く(可能なものは数値に変換する)'(_文字列,_区切り文字列ならび,[_区切り文字列|R1],[_前文字列_1|R2]) :- '区切り文字列で前文字列、後文字列に区切る(前文字列は空文字ではない)'(_文字列,_区切り文字列ならび,_前文字列,_区切り文字列,_後文字列), 数値に変換可能なものは変換する(_前文字列,_前文字列_1), 数値変換項目区切り(_後文字列,_区切り文字列ならび,R1,R2). '区切り文字列で前文字列、後文字列に区切る(前文字列は空文字ではない)'(_文字列,_区切り文字列ならび,_前文字列,_区切り文字列,_後文字列) :- member(_区切り文字列,_区切り文字列ならび), 副文字列(_文字列,_前文字列,_区切り文字列,_後文字列), 前文字列は空文字ではない(_前文字列). 副文字列(_文字列,_前文字列,_副文字列,_後文字列) :- atom_concat(_前文字列,_残り文字列,_文字列), atom_concat(_副文字列,_後文字列,_残り文字列). 数値に変換可能なものは変換する(_文字列,_項目) :- atom_number(_文字列,_項目),!. 数値に変換可能なものは変換する(_文字列,_文字列). 前文字列は空文字ではない(_前文字列) :- _前文字列 \== ''. 和暦西暦変換(_和暦,_西暦) :- 西暦が整数の時は西暦から和暦を得る(_和暦,_西暦). 和暦西暦変換(_和暦,_西暦) :- 和暦が文字列の時は和暦から西暦を得る(_西暦,_和暦). 西暦が整数の時は西暦から和暦を得る(_西暦,_和暦) :- 西暦が整数の時は(_西暦), 西暦から和暦を得る(_西暦,_和暦). 西暦が整数の時は(_西暦) :- integer(_西暦). 西暦から和暦を得る(_和暦,_西暦) :- 西暦から年間と年を得る(_西暦,_年間,_年), 和暦年文字列(_年間,_年,_和暦). 西暦から年間と年を得る(_西暦,_年間,_年) :- 年間(_年間,_元年,_最終年), between(_元年,_最終年,_西暦), _年 is _西暦 - _元年 + 1. 和暦が文字列の時は和暦から西暦を得る(_和暦,_西暦) :- 和暦が文字列の時は(_和暦), 和暦の年と元年の西暦を抽出(_和暦,_年間,_年,_元年), _西暦 is _元年 + _年 - 1. 和暦が文字列の時は(_和暦) :- atom(_和暦). 和暦の年と元年の西暦を抽出(_和暦,_年間,_年,_元年) :- sub_atom(_和暦,_,_,_,_年間,S2,年,L1,L2,L3), 年間(_年間,_元年,_最終年), 漢数字アラビア数字対応(L2,_年). 和暦年文字列(_年間,_年,_和暦年) :- _年 =< 10, nth1(_年,[元,二,三,四,五,六,七,八,九,十],A), concat_atom([_年間,A,年],_和暦年),!. 和暦年文字列(_年間,_年,_和暦年) :- _年 >= 11, Div is _年 // 10, Mod is (_年 mod 10) + 1, nth1(Div,['',二,三,四,五,六,七,八,九],A), nth1(Mod,['',一,二,三,四,五,六,七,八,九],B), concat_atom([_年間,A,十,B,年],_和暦年),!. 漢数字アラビア数字対応('',0). 漢数字アラビア数字対応(元,1). 漢数字アラビア数字対応(一,1). 漢数字アラビア数字対応(二,2). 漢数字アラビア数字対応(三,3). 漢数字アラビア数字対応(四,4). 漢数字アラビア数字対応(五,5). 漢数字アラビア数字対応(六,6). 漢数字アラビア数字対応(七,7). 漢数字アラビア数字対応(八,8). 漢数字アラビア数字対応(九,9). 漢数字アラビア数字対応([A,十,B],N) :- 漢数字アラビア数字対応(A,N1), 漢数字アラビア数字対応(B,N2), N is N1 * 10 + N2,!. 漢数字アラビア数字対応([A,十],N) :- 漢数字アラビア数字対応(A,N1), N is N1 * 10,!. 漢数字アラビア数字対応([十,B],N) :- 漢数字アラビア数字対応(B,N2), N is 10 + N2,!. 漢数字アラビア数字対応([十],10) :- !. 漢数字アラビア数字対応([A],N) :- 漢数字アラビア数字対応(A,N). 年間(安政,1854,1860). 年間(万延,1860,1861). 年間(文久,1861,1864). 年間(元治,1864,1865). 年間(慶応,1865,1868). 年間(明治,1868,1912). 年間(大正,1912,1926). 年間(昭和,1926,1989). 年間(平成,1989,2017).