Aizu Online Judge(AOJ)が提供している「プログラミング入門」(ITP1)の4_C問題をC++とPython で解いてみました。
ITP1 のトピック4では、計算について学びます。「計算式に用いられる様々な演算子を学習します。」とあります。この学習コースを通じて、Python に慣れていきたいと考えています。
問題(4_C: Simple Calculator)
問題はリンク先をご覧ください。
AOJ ITP1 4_C問題:Simple Calculator
整数2つと演算子を1つを含む、非常に簡単な1行計算機を実装します。繰り返し処理、条件分岐処理を使う応用になっています。
解答案
C++ プログラム例(ITP1 4_C)
2つの整数と1つを読み込み、演算子によって計算結果を変えて結果を出力しています。if 文でも書けますが、この場合は、switch 文を使うほうがすっきり書けます。
switch 文では、break を各 case 節の終わりとして使います。終了するために bool 型の変数 is_continue を用いて判断しています。
#include <iostream>
using namespace std;
int main() {
int a, b;
char op;
bool is_continue = true;
while (is_continue) {
cin >> a >> op >> b;
switch (op) {
case '+':
cout << a + b << endl;
break;
case '-':
cout << a - b << endl;
break;
case '*':
cout << a * b << endl;
break;
case '/':
cout << a / b << endl;
break;
case '?':
is_continue = false;
break;
default:
break;
}
}
return 0;
}
switch 文では、どの case 節にも該当しない場合、default 節を実行します。今回のロジックでは default 節は必要ありませんが、作法として記載しています。
Python プログラム例(ITP1 4_C)
Python では、if-elif で書きました。演算子として ? を読み取れば、break で計算機としての処理を終了します。
この計算器では、整数の割り算を行うように指示されているため、/ ではなく // で演算しています。
while True:
a, op, b = input().split()
a = int(a)
b = int(b)
if op == "+":
print(a + b)
elif op == "-":
print(a - b)
elif op == "*":
print(a * b)
elif op == "/":
print(a // b)
elif op == "?":
break
上記プログラムは、すべて AOJ で「AC(Accepted=正解)」と判定されます。
最後に
使える文法要素が増えてきました。簡単ではありますが、実用的なプログラムが書けるようになってきました。
引き続き、ITP1 の問題を紹介していきます。