AIZU ONLINE JUDGE

AOJ ITP1 4_C(Simple Calculator)を解く

AOJ_ITP1_4_C

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 の問題を紹介していきます。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA