このディレクトリの索引

# 出典 :: C/C++の宿題片付けます 131代目 #598 # [1] 授業単元: プログラミング # [2] 問題文(含コード&リンク): 2つの整数値と1つの文字を、例えば「4+2」のように入力し、 # 入力に応じた四則演算を行って結果を出力するプログラムを作成しなさい。 # ただし、中央の文字に四則演算の記号以外の文字が入力された時のことも考慮しなさい。 二項式(_式文字列,N1,_演算子,N2,_答え,_診断) :- '2つの整数値と1つの文字を、例えば「4+2」のように入力し、入力に応じた四則演算を行って結果を出力する。ただし、中央の文字に四則演算の記号以外の文字が入力された時のことも考慮しなさい。'(_式文字列,N1,_演算子,N2,_答え,_診断). '2つの整数値と1つの文字を、例えば「4+2」のように入力し、入力に応じた四則演算を行って結果を出力する。ただし、中央の文字に四則演算の記号以外の文字が入力された時のことも考慮しなさい。'(_式文字列,N1,_演算子,N2,_答え,_診断) :- '式文字列を前文字列、演算子文字列、後文字列に分解する。前文字列と後文字列は数字のみからなり、演算子文字列は数字を含まない。'(_式文字列,_前文字列,_演算子文字列,_後文字列), '前文字列、後文字列を数値に演算子文字列を演算子に変換して、二項式を評価する。'(_前文字列,_演算子文字列,_後文字列,N1,_演算子,N2,_答え,_診断). '式文字列を前文字列、演算子文字列、後文字列に分解する。前文字列と後文字列は数字のみからなり、演算子文字列は数字を含まない。'(_式文字列,_前文字列,_演算子文字列,_後文字列) :- '式文字列を前文字列、演算子文字列、後文字列に分解する。'(_式文字列,_前文字列,_演算子文字列,_後文字列), '前文字列と後文字列は数字のみからなり、演算子文字列は数字を含まない。'(_前文字列,_演算子文字列,_後文字列). '式文字列を前文字列、演算子文字列、後文字列に分解する。'(_式文字列,_前文字列,_演算子文字列,_後文字列) :- atom_concat(_前文字列,_残り文字列,_式文字列), atom_concat(_演算子文字列,_後文字列,_残り文字列). '前文字列と後文字列は数字のみからなり、演算子文字列は数字を含まない。'(_前文字列,_演算子文字列,_後文字列) :- '前文字列と後文字列は数字のみからなり、'(_前文字列,_後文字列), '演算子文字列は数字を含まない。'(_演算子文字列). '前文字列と後文字列は数字のみからなり、'(_前文字列,_後文字列) :- 前文字列は数字のみからなる(_前文字列), 後文字列は数字のみからなる(_後文字列). 前文字列は数字のみからなる(_前文字列) :- forall(sub_atom(_前文字列,_,1,_,_文字),数字である(_文字)). 後文字列は数字のみからなる(_後文字列) :- forall(sub_atom(_後文字列,_,1,_,_文字),数字である(_文字)). '演算子文字列は数字を含まない。'(_演算子文字列) :- forall(sub_atom(_演算子文字列,_,1,_,_文字),数字ではない(_文字)). '前文字列、後文字列を数値に演算子文字列を演算子に変換して、二項式を評価する。'(_前文字列,_演算子文字列,_後文字列,N1,_演算子,N2,_答え,_診断) :- '前文字列と後文字列を数値に変換してN1、N2とする'(_前文字列,_後文字列,N1,N2), 演算子文字列から空白を取り除き演算子を得る(_演算子文字列,_演算子), 二項式を評価する(N1,_演算子,N2,_答え,_診断). '前文字列と後文字列を数値に変換してN1、N2とする'(_前文字列,_後文字列,N1,N2) :- atom_number(_前文字列,N1), atom_number(_後文字列,N2). 演算子文字列から空白を取り除き演算子を得る(_演算子文字列,_演算子) :- 演算子文字列から空白を取り除き空白のない演算子文字ならびを得る(_演算子文字列,_空白のない演算子文字ならび), atomic_list_concat(_空白のない演算子文字ならび,_演算子). 演算子文字列から空白を取り除き空白のない演算子文字ならびを得る(_演算子文字列,_空白のない演算子文字ならび) :- findall(_空白ではない文字,演算子文字列から空白を取り除き(_演算子文字列,_空白ではない文字),_空白のない演算子文字ならび). 演算子文字列から空白を取り除き(_演算子文字列,_空白ではない文字) :- sub_atom(_演算子文字列,_,1,_,_空白ではない文字), 空白ではない(_空白ではない文字). 空白ではない(_空白ではない文字) :- _空白ではない文字 \== ' '. 二項式を評価する(N1,_演算子,N2,_答え,演算子が四則演算子ではありません) :- 四則演算子ではない(_演算子). 二項式を評価する(N1,_演算子,N2,_答え,正常終了) :- 演算子が四則演算子である場合式を評価する(_演算子,N1,N2,_答え). 演算子が四則演算子である場合式を評価する(_演算子,N1,N2,_答え) :- 四則演算子である(_演算子), 式を評価する(_演算子,N1,N2,_答え). 数字である(A) :- member(A,['0','1','2','3','4','5','6','7','8','9']). 数字ではない(A) :- \+(member(A,['0','1','2','3','4','5','6','7','8','9'])). 四則演算子である(A) :- member(A,['+','-','*','/','//']). 四則演算子ではない(_演算子) :- \+(四則演算子である(_演算子)). 式を評価する(_演算子,N1,N2,_答え) :- _式 =..[_演算子,N1,N2], _答え is _式.