こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

プログラミングに自信のある方是非解答をお願いします

問題は以下です。
以下のプログラムは、整数の数式を入力して、式の値を求めて表示するプログラムである。このプログラムを発展させて、さらに高機能にせよ。(何をする機能を加えたかについての解説もお願いします。)
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

static int ch;

void error(char *s)
{
fprintf(stderr, "%s\n", s);
exit(EXIT_FAILURE);
}

void nextch()
{
do {
if ((ch = getchar()) == EOF) return;
}while (ch == ' ' || ch == '\t');
}

double number()
{
double x, a;
int sign = '+';

if (ch == '+' || ch == '-') {
sign = ch; nextch();
}
if (! isdigit(ch)) error("Not a number or '(' is required.");
x = ch - '0'; nextch();
while (isdigit(ch)) {
x = 10 * x + ch - '0';
nextch();
}
if (ch == '.') {
a = 1; nextch();
while (isdigit(ch)) {
x += (a /= 10) * (ch - '0');
nextch();
}
}
return sign == '-' ? -x : x;
}

double expression();

double factor()
{
double x;

if (ch != '(') return number();
nextch(); x = expression();
if (ch != ')') error("')' is required,");
nextch(); return x;
}

double term() {
double x, y;

x = factor();
while (1) {
if (ch == '*') {
nextch(); x *= factor();
} else if (ch == '/') {
nextch(); y = factor();
if (y == 0) error("Zero division");
x /= y;
} else break;
}
return x;
}

double expression()
{
double x;

x = term();
while (1) {
if (ch == '+') {
nextch(); x += term();
} else if (ch == '-') {
nextch(); x -= term();
} else break;
}
return x;
}

int main()
{
double x;

nextch(); x = expression();
if (ch != '\n') error("Syntax error");
printf("%g\n", x);
return EXIT_SUCCESS;
}

投稿日時 - 2013-01-12 17:38:37

QNo.7888289

すぐに回答ほしいです

質問者が選んだベストアンサー

まず。
プログラム自体が長過ぎる(スパゲッティコード)
start
data cls

// main
keyinput
if keyin=""then rtn else sub cmpdata ; キー入力待ち
if keying="e" then sub printout else end;ここでeが押されるまで処理を繰り返す。
end 
//cmpdata ;比較用データアレイと処理
data アレイ
1.a
2.b
.
end
----------
printout ;結果表示
--=====
endReturn

投稿日時 - 2013-01-12 18:05:20

お礼

ありがとうございます。

投稿日時 - 2013-01-22 18:17:36

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

他人の作ったプログラムを改変する自信があるわけではありませんが、
処理を整数の数式に限定するために、
すべてのdoubleをintに置き換える
%gを%dに置き換える
入力文字が'.'のときの処理を削除する
これで、環境によっては、処理が高速になります。

投稿日時 - 2013-01-13 00:20:18

ANo.3

宿題だろ、これ?
丸投げすんな・・・

投稿日時 - 2013-01-12 20:54:14

ANo.1

自信なくてもできると思うから、本当に自信のある人は回答しないと思うし、基本的に丸投げの人って、自分では何も努力しない他人任せな人という印象が強いから、助けてあげようという気持ちになるひとは少ないと思います。

投稿日時 - 2013-01-12 17:42:33

あなたにオススメの質問