よければプログラムをお教え頂きたいです。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ケント

よければプログラムをお教え頂きたいです。

#1

投稿記事 by ケント » 14年前

もう一つのトピックがいっぱいになったので、再度書かせてもらいます。

問1、次のような《条件》のもとに、挿入記法で記述された式を逆ポーランド記法に変換するプログラムを、《手順》を参考にして作れ。
《条件》 ・オペランドはアルファベット1文字からなる。
・演算子は+、-、*、/の4つの2項演算だけとする。
・与えられる挿入記法の式には誤りがないものとする。
・因子(オペランドおよび演算子)の優先順位は次のように定める。
オペランド(優先順位→)3
*、/ ・・・2
+、- ・・・1

《手順》
Step 1・・・挿入記法の式から取り出した因子を格納する作業用の文字(char)型配列work[・]と逆ポーランド記法の式を作る文字型配列polish[・]を準備する。
Step 2・・・与式の左端から右端までの各因子にStep 2.1~Step 2.3 の操作を順次(繰り返し)行う。
Step 2.1・・・与式から1つの因子を取り出す。
Step 2.2・・・次の条件式を満たす間、work の終端の格納因子を取り出して、polish の終端に追加格納する。
[取り出した因子の優先順位] ≦ [work に格納された終端の格納因子の優先順位]
Step 2.3・・・Step 2.1 で取り出した因子をwork の終端に格納する。
Step 3・・・work に残っている格納因子を終端から順次取り出し、polish の終端に順次格納する。


#include <stdio.h>

int main(void)
{
char infix[256], polish[256], *pi = infix, *pp = polish, c, d;

printf("input infix notation > ");
scanf("%s", infix);
for (*pp++ = *pi++; (c = *pi++) == '*' || c == '/'; *pp++ = c)
*pp++ = *pi++;
for (; c == '+' || c == '-'; *pp++ = c, c = d)
for (*pp++ = *pi++; (d = *pi++) == '*' || d == '/'; *pp++ = d)
*pp++ = *pi++;
*pp = '\0';
printf("polish : %s\n", polish);
return 0;
}

↑問1のプログラムはこれで正しいとおもいます。
そして次の問なのですが、

問2、【問1】に準じた《条件》のもとで、挿入記法で記述された括弧を含む式を逆ポーランド記
法に変換するプログラムを作れ。
《方針:ヒント》
・【問1】の《手順》Step 2.1 で
⇒ 与式から取り出した因子が‘(’の場合、無条件に(Step 2.2 を飛ばし)work の終端に‘(’格納する(Step 2.3 を実行する)。
⇒ 与式から取り出した因子が‘)’の場合、無条件に(Step 2.2 を飛ばし)work の終端
から‘(’が現われるまで順次格納因子を取り出し、polish の終端に順次格納する。
‘(’はpolish に格納せずに廃棄、‘)’はpolish, work のいずれにも格納せずに廃棄する(Step 2.3 は実行しない)。
《例》
・ 挿入記法:a*((b +c)*d-e) ⇒ 逆ポーランド記法:abc+d *e-*
   ↑最終段階としてはこういう実行結果を作りたいのであります・・・分かる方いればお願いします。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: よければプログラムをお教え頂きたいです。

#2

投稿記事 by softya(ソフト屋) » 14年前

あちらのトピックはまだ使えますので元のほうで続けて下さい。こちらは閉鎖させて頂きます。
それと、皆さんの質問にちゃんと答えていただくと話がスムーズに進むかと思います。
※ 結局ケントさんの言うところのデバッグが何なのかは未回答なままです。

あとフォーラムルールをちゃんと読んで頂いて、codeタグを使うなどの分かりやすい投稿をお願いします。
http://dixq.net/board/board.html
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

“C言語何でも質問掲示板” へ戻る