関数が使えないけど関数電卓を作ってみた

kerotan0820
記事: 91
登録日時: 14年前

関数が使えないけど関数電卓を作ってみた

投稿記事 by kerotan0820 » 11年前

四則計算の優先順位も考慮してないです。
関数もないです。
よくデータ消しちゃったりするのでメモ感覚で日記にあげました・・・。

CODE:


#include 
#include 
#include "kota_string.h"

void divide_formula( char *formula, double *figure, char *symbol);
double calculate( double *figure, char *symbol);
void batsu();

int kou_num = 0;

int main( )
{
	setbuf(stdout,0);//msPEwb2Kの制限:main関数の最初の実行文の前に置く

	char formula[100] = {"\0"}, symbol[100] = {"\0"};
	double figure[100] = {0}, sum = 0;

	printf("式:");
	fgets( formula, sizeof(formula), stdin);

	if( strchr( formula, '\n') != NULL ) {
		// 改行文字を終端記号に置換
		formula[ kota_strlen(formula) - 1] = '\0';
	} else {
		// 入力ストリームをクリア
		while( getchar() != '\n' );
	}

	divide_formula( formula, figure, symbol );	//式を文字と記号に分ける
	sum = calculate( figure, symbol );	//計算する

	printf("Ans:%f\n", sum);

	batsu();
	return 0;
}

/********************* divide_formula( ) **********************/
//数字と記号を分ける
void divide_formula( char * formula, double *figure, char *symbol)
{
	char fig[20];
	int i=0, j=0,cnt = 0;
	for(kou_num = 0; *formula != '\0'; formula++){
		if( !(*formula >= '0' && *formula = '0' && *formula = '0' && *formula <= '9' || (*formula == '.') ){
			fig[j] = *formula;
			j ++;
			formula ++;
		}
		sscanf(fig, "%lf", figure);
		figure -= kou_num;
		symbol -= kou_num;
}

double calculate(double *figure, char *symbol)
{
	double sum = 0;
	int i;
	sum = *figure;

	for(i = 0; i < kou_num; i++){
		figure ++;
		switch( *symbol )
		{
			case '+':
				sum += (double)*figure;
				break;
			case '-':
				sum -= (double)*figure;
				break;
			case '*':
				sum *= (double)*figure;
				break;
			case '/':
				sum /= (double)*figure;
				break;
			default :
				puts("入力エラー");
				exit(1);
		}
		symbol ++;
	}
	return sum;
}
void batsu()
{
	int size = 0, i, j;
	printf("\n(おまけ)×の大きさ:"); scanf("%d",&size);
	for(i = 0; i < size; i++){
		for(j = 0; j < size; j ++)
			printf("%s", (i == j || (i + j) == (size - 1 ))?" ":"*");
		putchar('\n');
	}
}

アバター
みけCAT
記事: 6734
登録日時: 14年前

Re: 関数が使えないけど関数電卓を作ってみた

投稿記事 by みけCAT » 11年前

・kota_string.hは公開しないのですか?
 外部のライブラリなら、名前とできれば入手先を書いてくれるとわかりやすいです。
 自作のライブラリであり公開できない場合でも、そう書いてあるとわかりやすいです。
・「入力ストリームをクリア」しても、その後全く入力を読み込まなかったら意味ないと思います。batsu関数に入力部分がありました。
 さらに、この処理は特別な入力を与えると無限ループを起こす可能性があります。
・「関数が使えない」と書いてありますが、+、-、*、/という4個もの関数に対応していますよね?

kerotan0820
記事: 91
登録日時: 14年前

Re: 関数が使えないけど関数電卓を作ってみた

投稿記事 by kerotan0820 » 11年前

みけCAT さんが書きました:・kota_string.hは公開しないのですか?
 外部のライブラリなら、名前とできれば入手先を書いてくれるとわかりやすいです。
 自作のライブラリであり公開できない場合でも、そう書いてあるとわかりやすいです。
・「入力ストリームをクリア」しても、その後全く入力を読み込まなかったら意味ないと思います。batsu関数に入力部分がありました。
 さらに、この処理は特別な入力を与えると無限ループを起こす可能性があります。
・「関数が使えない」と書いてありますが、+、-、*、/という4個もの関数に対応していますよね?
みけさんコメントありがとうございます。
そして明けましておめでとうございます(^^) 今年もよろしくお願いいたします。

kota_string.h は自作してみたものですが、まさかそのように言っていただけるとは思わず添付しておりませんでした。
学校にデータがあるので近いうちに公開できると思います。(文字列検索などの関数を作っていませんが・・・)

入力ストリームのクリアやそのへんのプログラムはWikipediaのfgets関数に関する解説を読んで書いてみたので、私も二度目以降の入力がない以上意味がないなと思いながらも書いておきました(^^;)
batsu関数があったのは全くたまたまです^^;

+、-、*、/も関数なのですか(´Д`;)
私の言いたかったことは math.h が持つような関数の機能の意味でした。失礼しましたー><