ページ 11

キーボードからの入力による計算

Posted: 2011年5月08日(日) 14:31
by 佐藤
こんにちは。

double f(double x){
double a=3+x;
return a;
}

これは、関数fの第一引数double xに与えた数字に3を追加して返すプログラムですが、

3+x

この部分をキーボードから入力することで実現できる方法はないものでしょうか。
いろいろ考えたのですがなかなか妙案が思い浮かびません。

アイディアなどよろしくお願いします。

Re: キーボードからの入力による計算

Posted: 2011年5月08日(日) 14:40
by はんなり
scanfという関数を使うと良いです。

Re: キーボードからの入力による計算

Posted: 2011年5月08日(日) 14:49
by 佐藤
scanfをどのように使うのでしょうか?

scanf関数で扱う変数をdouble型とすると文字は格納できず、char型で

x+3

のように入力しても、そのxに値を代入することができません。

Re: キーボードからの入力による計算

Posted: 2011年5月08日(日) 15:05
by hidden
何をしたいのか、仕様を明確にすべきです。

入力した値を加算したいのであれば変数を宣言してscanfの引数にしてから加算すればいいです。
x+3のように入力とおっしゃっていますが、
xは引数として与えられるものなのでそれを関数内で入力させるのはおかしいです。

Re: キーボードからの入力による計算

Posted: 2011年5月08日(日) 15:16
by 佐藤
仕様ですか、失礼しました。

1.キーボードからxやyといった文字を含む式を入力する。
   例:x+3 (←これは文字列)

2.xの値をdouble型で定め、文字列にそれを代入し、新たな文字列を生成する。 
   例: x=3.14(←double型) なら 3.14+3 (←これは文字列)

以上となります。不明な点があればよろしくお願いします。

Re: キーボードからの入力による計算

Posted: 2011年5月08日(日) 15:38
by dic

コード:

#include <stdio.h>

void main()
{
	char mes[80];
	float in;
	scanf( "%f", &in );
	sprintf( mes, "x + %f\n", in );
	printf( mes );
}
ではどうでしょうか?

Re: キーボードからの入力による計算

Posted: 2011年5月08日(日) 15:59
by 佐藤
うーん、それでは想定通りの動作になりません。

x+3 (char型)

という式を入力し、

x=3.14 (double型)

などと定めると、

3.14+3 (char型)

のような文字列を返してほしいのです。

Re: キーボードからの入力による計算

Posted: 2011年5月08日(日) 16:04
by h2so5
佐藤 さんが書きました: x=3.14 (double型)

などと定めると、
x=3.14 はdouble型ではなくchar型ではないでしょうか?
"3.14 "だけならdoubleですが、x= が含まれていますので。

Re: キーボードからの入力による計算

Posted: 2011年5月08日(日) 16:12
by 佐藤
わかりづらくて申し訳ありません。


/*x+3のような式を文字列で入力する*/
char s[100];
scanf("%99s",s); → たとえば、x+3 (char型)

/*double型で数値を入力する*/
double x;
scanf("%f",&x); → たとえば、3.14 (double型)

このように入力したのち、

3.14+3  (char型)

という文字列が用意されてほしいのです。

Re: キーボードからの入力による計算

Posted: 2011年5月08日(日) 16:16
by hidden
トピックは計算となっていますが
やることは生成した文字列のポインタを返す でいいのでしょうか?

で、あれば3.14をdouble型で入力させる必要は無くて
最初から文字列として扱えばいいのではないでしょうか。

Re: キーボードからの入力による計算

Posted: 2011年5月08日(日) 16:20
by 佐藤
申し訳ありません。No.9の仕様で実現したいのです。
佐藤 さんが書きました:わかりづらくて申し訳ありません。


/*x+3のような式を文字列で入力する*/
char s[100];
scanf("%99s",s); → たとえば、x+3 (char型)

/*double型で数値を入力する*/
double x;
scanf("%f",&x); → たとえば、3.14 (double型)

このように入力したのち、

3.14+3  (char型)

という文字列が用意されてほしいのです。

Re: キーボードからの入力による計算

Posted: 2011年5月08日(日) 16:25
by 佐藤
仮に3.14が文字列ならば、sprintf関数などを用いて文字列を結合させるだけなので、容易に実装できるのはわかっているのですが、これがdouble型になると……ということで難儀しています。

何かアドバイス等あればよろしくお願いします。

Re: キーボードからの入力による計算

Posted: 2011年5月08日(日) 16:29
by hidden
どうしてもdouble型で入力したいのであれば
入力したあとにsprintf関数を使って文字列に変換すればいいでしょう。

Re: キーボードからの入力による計算

Posted: 2011年5月08日(日) 16:29
by h2so5
まだ仕様がよくわかりません。

1.入力できる変数名はxだけですか?
(先程は、キーボードからxやyといった文字を含む式を入力する、と書かれていましたが...)

2.使える演算子は+だけですか?
例えば、以下のような式も計算できる必要がありますか?

・x - 3.434
・x + 5 / x
・x * x + (x - 1) * 2

Re: キーボードからの入力による計算

Posted: 2011年5月08日(日) 16:35
by a5ua
こういう感じですか?(replace関数は適切に実装してください)

コード:

#include <stdio.h>

// str中で最初に見つかったbeforeをafterに置き換える
void replace(char *str, const char *before, const char *after);

int main()
{
	char result[100];
	char format[100];
	double x;
	
	scanf("%s", format);
	scanf("%lf", &x);
	
	replace(format, "x", "%f");	// "x"を"%f"に置き換える
	sprintf(result, format, x);
	puts(result);
	
	return 0;
}