- 締切済み
C言語で逆ポーランド演算式をスタックを用いて表現するには
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- a-saitoh
- ベストアンサー率30% (524/1722)
符号の - と引き算演算子の -に同じ文字(-)を使っているとうまく作れません。 -の直後に数字が来れば負の数、空白が来れば引き算演算子、というような制約条件でいいのなら、楽に作れます。 まず、何故自力で出来ないのかを説明しないと、うまく助言できないと思いますよ。プログラム構造的には、正の整数でできればもう完成したも同然なので。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
今どんな感じでやっているのか ソースを補足してください。
- sakusaker7
- ベストアンサー率62% (800/1280)
基本的な部分はできているわけですよね? とりあえず数値の読み取り部分を strtod などでやってやれば 小数でも符号付のものでも問題なく解析できると思いますが (今現在どうやってるのかわかりませんけど)。 後はスタックへの積み幅が変わりますが、どの辺で詰まっているのでしょう? あー、小数と整数が混在するからそこで引っかかっている?
関連するQ&A
- C言語のリスト、スタック、キュー、逆ポーランド法など
リスト、スタック、キュー、逆ポーランド法などプログラム例ののったサイト知りませんか?どうしてもわからないのですどうか教えてください。
- ベストアンサー
- C・C++・C#
- 電卓ソフトを作るには逆ポーランド法で良いのですか?
プログラミングの勉強をしながら式入力型の電卓を作りたいと思い調べたところ「逆ポーランド法」を知りました。 まず四則演算出来るものを作り最終的には関数電卓を目指そうと思っているのですが、この「逆ポーランド法」を取り入れた計算プログラムを学べば良いのでしょうか?もっと適している他の手法はありますか? 公開されている式入力型の電卓ソフトはどのような手法でプログラムされているのでしょうか?(なかなか式入力型のサンプルが見つからなくて…。) 言語はActiveBasicを使用していますが、情報が少ない為VisualBasicのサイトで勉強しています。 宜しくお願いいたします。
- 締切済み
- その他(プログラミング・開発)
- C言語・スタックを使用した逆ポーランド記法について
C言語でスタック(リスト構造)を使用した逆ポーランド記法のプログラムを作りたいのですが 計算式(例:1234+*+)が入力された場合、どのようにして数字と演算子を区別すればいいのでしょうか? 一応スタック構造の部分は、 #include <stdio.h> #include <stdlib.h> /*スタック構造*/ typedef struct stack { int max; int ptr; int *stk; } Stack; /*スタックの確保・初期化*/ int StackAlloc(Stack *s, int max) { s->ptr = 0; if ((s->stk = calloc(max, sizeof(int))) == NULL) { s->max = 0; return (-1); } s->max = max; return (0); } /*スタック解放*/ void StackFree(Stack *s) { if (s->stk != NULL) { free(s->stk); s->max = s->ptr = 0; } } /*プッシュ*/ int StackPush(Stack *s, int x) { if (s->ptr >= s->max) return (-1); s->stk[s->ptr++] = x; return (0); } /*ポップ*/ int StackPop(Stack *s, int *x) { if (s->ptr <= 0) return (-1); *x = s->stk[--s->ptr]; return (0); } /*データのピーク*/ int StackPeek(const Stack *s, int *x) { if (s->ptr <= 0) return (-1); *x = s->stk[s->ptr - 1]; return (0); } /*スタックの大きさを返却*/ int StackSize(const Stack *s) { return (s->max); } /*データを返却*/ int StackNo(const Stack *s) { return (s->ptr); } /*スタックは空か*/ int StackEmpty(const Stack *s) { return (s->ptr <= 0); } /*スタックは満杯か*/ int StackFull(const Stack *s) { return (s->ptr >= s->max); } /*スタックを空にする*/ void StackClear(Stack *s) { s->ptr = 0; } といった感じで仕上げています。
- ベストアンサー
- C・C++・C#
- C言語の余剰演算子について
読みにくい文章ですみませんでした 学校の課題(C言語)で 書いてある数字の奇数、偶数、負の数を調べて、それぞれの数をだせ という課題で負の数は0以下を++でカウントしていくのは調べてわかったのですが、 奇数偶数を調べるときに「余剰演算子」「%」を使って調べるみたいなのですが、 学校の講義で余剰演算子を習ってないのに使うのはだめだと思うので、 余剰演算子を使わずに余りを出して、奇数・偶数を調べるのはどうすればいいのか教えてください。
- ベストアンサー
- C・C++・C#
- ポーランド記法、逆ポーランド記法のプログラム
ポーランド記法、逆ポーランド記法のプログラムがわかる方、是非教えてくださいm(__)m 言語は何でもいいのでお願いします~
- ベストアンサー
- C・C++・C#
- c言語でのプログラミング
キーボードから複数個の正整数値を読み込み,合計値と平均値(小数第1位まで)を表示するプログラムを作りなさい。 ただし入力数値の個数はプログラミング時には決定していない。 負整数が入力されたら入力値はもうなくなったと判断することとし,負の数は計算には使用しないこととする。またデータは少なくとも1つは入力されるものとする。(p02ex15.c) 検証は1から10までの数字すべてを与え,合計値55,平均値5.5が表示されることを確かめること。 (「1,2,3,4,5,6,7,8,9,10,-1」(-1はデータ終わりの合図)を入力して確かめなさい。) また,1から5までの数字すべてを与え,合計値15,平均値3が表示されることを確かめること。 (「1,2,3,4,5,-1」(-1はデータ終わりの合図)を入力して確かめなさい。) このプログラムのソースコードを教えて下さい。 解説もよろしくお願いします。
- ベストアンサー
- C・C++・C#
- C言語による演算時の誤差について
C言語初心者でどなたかご教授お願いします。 小数点の演算を行うわけではないのですが、 演算を行う数値が大きすぎるために、double型を使用して以下の計算を行うつもりです。 計算結果はlong型(小数点以下切り捨て)です。 double a,b,c; long x; x = (long)((a*b/c/100) 例) x=(long)((189000*105000/100000)/100) 上記のような計算を行った際でも誤差が発生する可能性があるのでしょうか?
- ベストアンサー
- その他(インターネット・Webサービス)