例1. #include <stdio.h> #include "sc39.h" void main(void) { STRCALC_PARAM prm; int ret; /* StrCalc環境の初期化。 このエラーチェックは必ず行ってください。 */ if (!StrCalc_init(&prm)){ printf("メモリの確保に失敗しました\n"); return; } /* 計算式を格納する領域のアドレスをメンバ str にセットします */ prm.str = "sin(4.53)^2 + cos(4.53)^2"; ret = StrCalc(&prm); /* 計算を行う */ /* 環境の解放 */ StrCalc_term(&prm); if (ret != STATUS_NORMAL) printf("error. %d\n",ret); else printf("ans. : %.16G\n",prm.ans); }例1ソースファイル(zip)
引数に環境(STRCALC_PARAM 構造体)のアドレスを指定する関数は、StrCalc_init 、StrCalc_term による一連の手順を必要とします。 環境を指定する関数を実行した場合、環境の内容は更新されると思ってください。例えば、関数StrCalc_substitution 等は内部でメンバstr を使って関数StrCalc を呼び出すため、関数の呼び出し前、呼出し後では内容が異なります。 |
(1+2+3+4+5+6)+7 一階層 (1+2+3+(4+5)+6)+7 二階層 ((1+2+3+(4+5))+6)+7 三階層この階層には制限が設けられており、STRCALC_PARAM 構造体のメンバ paren_cnt に設定されている階層数が上限となっています。このメンバは、関数StrCalc_init によりデフォルト値 64 が設定されます。
通常の使用で 64 階層にもなる事は無いと思います。 多くの場合、デフォルトのままで問題は無いと思いますが、デバッグや記述の洗練のために、条件を厳しくする方向で(階層数上限を減らす方向で)変更する使い方もあります。 |
例2. #include <stdio.h> #include <time.h> #include "sc39.h" void main(void) { STRCALC_PARAM prm; int i,ret; if (!StrCalc_init(&prm)){ printf("メモリの確保に失敗しました\n"); return; } /* StrCalc の擬似乱数初期化 */ StrCalc_srand((unsigned)time(NULL)); /* 乱数を 10 回表示する */ prm.str = "rnd(100)"; for(i = 0;i < 10;i++){ if ((ret = StrCalc(&prm)) != STATUS_NORMAL){ printf("error. %d\n",ret); break; }else printf("%2d : %.16G\n",i + 1,prm.ans); } StrCalc_term(&prm); }例2ソースファイル(zip)