● 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)