【C言語】逆ポーランド記法で計算するプログラムの書き方

この記事では、C言語を使って逆ポーランド記法で計算する方法について解説します。

逆ポーランド記法とは何か、その利点やプログラムの実装方法、さらには応用例までをわかりやすく説明します。

初心者の方でも理解しやすいように、具体的なサンプルコードや実行結果の例も紹介します。

目次から探す

逆ポーランド記法とは

逆ポーランド記法(Reverse Polish Notation, RPN)は、数式や式を表現するための一つの方法です。

通常の数式表記法である中置記法(Infix Notation)とは異なり、演算子をオペランドの後ろに置く形式です。

逆ポーランド記法の概要

逆ポーランド記法では、演算子をオペランドの後ろに置くことで、式の評価順序を明確にします。

例えば、中置記法で表される式 3 + 4 は、逆ポーランド記法では 3 4 + と表されます。

このように、演算子がオペランドの後ろに置かれることで、式の評価順序が明確になります。

逆ポーランド記法の利点

逆ポーランド記法にはいくつかの利点があります。

まず、式の評価順序が明確になるため、括弧の使用を減らすことができます。

また、逆ポーランド記法ではスタックを使用するため、計算の途中結果を保持することができます。

これにより、複雑な式の計算を効率的に行うことができます。

逆ポーランド記法は、プログラミング言語の実装や計算機の中でよく使用されます。

特に、スタックを使用することで、計算機のハードウェアにおいて効率的に計算を行うことができます。

また、逆ポーランド記法は、数式の解析や計算機のプログラムの開発においても役立つことがあります。

逆ポーランド記法のプログラム実装

スタックの実装

逆ポーランド記法の計算には、スタックと呼ばれるデータ構造を使用します。

スタックは、データを一時的に保存するための順序付けられたコレクションです。

C言語では、配列を使用してスタックを実装することが一般的です。

スタックの基本的な操作は、データの追加(プッシュ)とデータの取り出し(ポップ)です。

プッシュでは、スタックの一番上にデータを追加し、ポップでは一番上のデータを取り出します。

逆ポーランド記法の計算プログラムの作成手順

逆ポーランド記法の計算プログラムを作成する手順は以下の通りです。

  1. 入力された逆ポーランド記法の式をトークンに分割します。

トークンとは、式を構成する要素のことです。

例えば、数字や演算子がトークンになります。

  1. トークンを順番に処理します。
  2. 数字の場合は、スタックにプッシュします。
  3. 演算子の場合は、スタックから必要な数のオペランドをポップし、演算を行った結果をスタックにプッシュします。
  4. 全てのトークンを処理し終えたら、スタックの一番上に残った値が計算結果となります。

プログラムの実行例

以下は、逆ポーランド記法で計算を行うプログラムの実行例です。

#include <stdio.h>
#define STACK_SIZE 100
int stack[STACK_SIZE];
int top = -1;
void push(int value) {
    if (top >= STACK_SIZE - 1) {
        printf("Stack Overflow\n");
        return;
    }
    stack[++top] = value;
}
int pop() {
    if (top < 0) {
        printf("Stack Underflow\n");
        return -1;
    }
    return stack[top--];
}
int main() {
    char expression[] = "5 3 + 2 *";
    char *token = strtok(expression, " ");
    int operand1, operand2, result;
    while (token != NULL) {
        if (isdigit(token[0])) {
            push(atoi(token));
        } else {
            operand2 = pop();
            operand1 = pop();
            switch (token[0]) {
                case '+':
                    result = operand1 + operand2;
                    break;
                case '-':
                    result = operand1 - operand2;
                    break;
                case '*':
                    result = operand1 * operand2;
                    break;
                case '/':
                    result = operand1 / operand2;
                    break;
                default:
                    printf("Invalid operator\n");
                    return 1;
            }
            push(result);
        }
        token = strtok(NULL, " ");
    }
    printf("Result: %d\n", pop());
    return 0;
}

上記のプログラムでは、与えられた逆ポーランド記法の式を計算し、結果を出力しています。

例として、5 3 + 2 *という式を計算しています。

計算結果は、スタックから取り出された値となります。

1 2

この記事のページ一覧
  1. 現在のページ
目次から探す