質問: と入力すると10と出力されるようなものです。 そこで、アルゴリズムとしては 式を全てcharとしてread 括弧があるか探し、あるなら括弧閉じるを探す 括弧内で乗除算を探す その右と左の数をintegerなりに変換して演算 以下同様に計算 ...という風に考えました。 そこで質問なのですが、 式のreadをするとき、変数は配列型でいいのでしょうか 配列型だとひとつの配列に二桁以上の数ひとつだけ、という風にしか収納出来ないと思うので、これでは不可能な気もします。 また配列型では不可ならどうすればいいでしょうか。 次に、式をreadした後、そのreadをどのようにして終わらせるか 以上二点がよく分からないので、よろしければお答え願います。 また私の考えが大きく違う時等も御指示お願いします。
回答: 私だったら、プログラムを次のステップに分けて考えます。 1.一文字ずつ式を読む。式の終わりは = とする。 2.式を要素に分ける。要素とは 数値 + - * / ( ) など。 3.式を逆ポーランド記法に変換する。 4.逆ポーランド記法の式を計算する。 ステップ1で式のreadをするとき、というかreadした文字を溜め込むのは配列でよいでしょう。 ステップ2で要素に分ける際、配列で数字が連続していたらひとまとめに扱うようにします。私だったら、ここでintegerに変換します。また、一つのアイデアとしては + - * / ( ) に「答としてありえない数値」を割り当てて変換しては。例えば '+'は-10000、'-'は-10001 などに。そうすれば式をintegerの配列で表現できます。(あまりよろしくないかな?) 以降はphaphaphaさんの考えるアルゴリズムを実行する訳ですが、式を計算する手法としては逆ポーランド記法を経由するのが常套手段のようです。検索してみてはどうでしょうか。 この段階では、あまりpascalに依存するところはありませんね。