このディレクトリの索引 http://toro.2ch.net/test/read.cgi/tech/1339338438/915 # [1] 授業単元:C言語 # [2] 問題文: # ある地域の書数言語を調べたところ、その言語では数が五進法で表されており # また我々が使う数字の0〜4に対応する記号としてアルファベットのr,h,f,m,yによく似た形の文字が使われていることが分かった。 # この表記法で表された五進数をキーボードから文字列として受け取り、我々のの十進法表記に変換して表示するプログラムを作成せよ # 例えばキーボードから「rfym」という文字列(我々の表記では0423という五進数)を受け取った場合、 # これを「73」という十進法に変換し、画面に表示できればよい。ただし、受け取る五進数は4桁以下の非負正数(十進法の0〜624)であると仮定する。 # なお、この問題では以下のquin2dec()を作成しそれを用いて前記の処理を行うこと。 # ・4つの文字を因数として受けとる # ・受け取った4文字中r,h,f,m,y以外の文字が一文字でも含まれた場合エラーメッセージを出してプログラムを終了する。 # ・4文字をそれぞれ五進数の各桁の値と考え、それから定まる4桁の五進数を十進法整数値に変換する。 # ・前記の十進法整数値を戻り値として返す # ただし変換結果の画面表示はquin2dec()関数中ではなくmain()関数中で行うこと # # ある地域の書数表記文字(r,0). ある地域の書数表記文字(h,1). ある地域の書数表記文字(f,2). ある地域の書数表記文字(m,3). ある地域の書数表記文字(y,4). 'ある地域の書数表記法で表された五進数をキーボードから文字列として受け取り、我々の十進法表記に変換して表示する' :- 'ある地域の書数言語表記法で表された五進数をキーボードから文字列として受け取り'(_五進数表記文字列), ある地域の書数表記法による五進数表記文字列を我々の十進数表記文字列に変換(_五進数表記文字列,_十進数表記文字列), writef('%五進数表記 = %t, 我々の十進数表記 = %t\n',[_五進数表記文字列,_十進数表記文字列]). 'ある地域の書数言語表記法で表された五進数をキーボードから文字列として受け取り'(_五進数表記文字列) :- write('ある地域の書数言語表記法で表された五進数を入力してください : '), get_line(Line), '診断: ある地域の書数言語表記法で表された五進数をキーボードから文字列として受け取り'(Line,_五進数表記文字列),!. 'ある地域の書数言語表記法で表された五進数をキーボードから文字列として受け取り'(_五進数表記文字列) :- 'ある地域の書数言語表記法で表された五進数をキーボードから文字列として受け取り'(_五進数表記文字列). '診断: ある地域の書数言語表記法で表された五進数をキーボードから文字列として受け取り'(Line,_五進数表記文字列) :- sub_atom(Line,_,1,_,_文字), \+(ある地域の書数表記文字(_文字,_)),!, fail. '診断: ある地域の書数言語表記法で表された五進数をキーボードから文字列として受け取り'(_五進数表記文字列,_五進数表記文字列). ある地域の書数表記法による五進数表記文字列を我々の十進数表記文字列に変換(_五進数表記文字ならび,0,_十進数表記文字列) :- 五進数表記文字列を文字ならびに変換(_五進数表記文字列,_五進数表記文字ならび), ある地域の書数表記法による五進数文字ならびを十進数に変換(_五進数表記文字ならび,[],_十進数), 十進数を十進数表記文字列に変換(_十進数表記文字列,_十進数). 五進数表記文字列を文字ならびに変換(_五進数表記文字列,_五進数表記文字ならび) :- atom_chars(_五進数表記,_五進数表記文字ならび). ある地域の書数表記法による五進数文字ならびを十進数に変換([],_十進数,_十進数). ある地域の書数表記法による五進数文字ならびを十進数に変換([A|R1],Y_1,X) :- ある地域の書数表記文字(A,N), Y_2 is Y_1 * 5 + N, ある地域の書数表記法による五進数文字ならびを十進数に変換(R1,Y_2,X). 十進数を十進数表記文字列に変換(_十進数表記文字列,_十進数) :- atom_number(_十進数表記文字列,_十進数).