● StrCalc の実装
6.代入式の計算
代入式とは、計算後に結果を変数へ代入する事を記した計算式です。
右辺の式を計算し、結果を左辺に代入する.
代入対象変数 = 計算式
StrCalc の計算式規則では、イコールは比較(一致)を表しますが、代入式では左側から見て一番最初に出現したイコールを、式の区切りとします。
代入式は関数StrCalc で直接処理する事はできません。関数StrCalc_substitution を使用する必要があります。
例.
#include <stdio.h>
#include <string.h>
#include "sc39.h"
void main(void)
{
STRCALC_PARAM prm;
PARAM_INFO inf;
int ret,x,y;
if (!StrCalc_init(&prm)){
printf("メモリの確保に失敗しました\n");
return;
}
/* 2次元配列の登録 */
inf.type = PRM_DIM2;
strcpy(inf.name,"test_dim");
inf.width = 3;
inf.height = 4;
inf.btempflg = 0;
if (StrCalc_new_param(&prm,&inf) <= 0){
StrCalc_term(&prm);
printf("変数の登録に失敗しました\n");
return;
}
/* prm1 の登録と計算、結果の格納 */
ret = StrCalc_substitution(&prm,"prm1 = 3 * pi / 2",0,NULL,0,0);
if (ret != STATUS_NORMAL){
StrCalc_term(&prm);
printf("計算エラー1 ... %d\n",ret);
return;
}
/* prm1 を使った計算の結果を test_dim(1,2) へ代入 */
ret = StrCalc_substitution(&prm,"test_dim(1,2) = sin(prm1) * 987",0,&inf,&x,&y);
if (ret != STATUS_NORMAL){
StrCalc_term(&prm);
printf("計算エラー2 ... %d\n",ret);
return;
}
printf("x : %d y : %d\n",x,y);
printf("計算結果 : %.16G\n",prm.ans);
printf("変数の内容 : %.16G\n",inf.pval[y * inf.width + x]);
/* test_dim の内容表示 */
printf("\ntest_dim の内容\n");
for(y = 0;y < inf.height;y++){
for(x = 0;x < inf.width;x++)
printf("%4.f ",inf.pval[y * inf.width + x]);
printf("\n");
}
StrCalc_term(&prm);
}
ソースファイル(zip)