数式の文字列の処理

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Ma

数式の文字列の処理

#1

投稿記事 by Ma » 15年前

 x^3+12
とか
 x*x/(14+x)
などの文字列を入力し、それを数式として(独自のクラス等で)管理、
さらに関数などでxに値を指定すれば答えが戻ってくる
そのようなライブラリはないでしょうか?
もちろん、自作してもいいのですが、手軽にあるのならばそちらを使いたいので。

↑で言ったことよりも多くの機能が入っていてもかまいません。

この前、同じような質問があったような気がしたのですが、見つからず。。。すいません。
知っている方がいらっしゃればリンクおねがいします。 画像

SooA

Re:数式の文字列の処理

#2

投稿記事 by SooA » 15年前

参考
K-BASIC というスクリプトを作成する過程で
再帰下降構文解析について説明されています。
http://ruffnex.oc.to/kenji/text/script/

Vectorで検索して出てきたDLL
http://www.vector.co.jp/soft/win95/prog/se348215.html

Ma

Re:数式の文字列の処理

#3

投稿記事 by Ma » 15年前

>K-BASIC というスクリプト
読んでみようと思いましたが、dllがあったみたいなのでそちらを利用させていただくことにしました。

Vector ...検索の仕方が悪かったのかな。
ありがとうございます。
かなり意図したとおりのものでたすかりました。

ただ、気になるのは、戻り値がint 型だったことですが
まぁ、引数に*100を加えて戻ってきた値に100で割れば、細かい値が出せれるかな。

ほんとうに、ありがとうございました。

画像

Ma

Re:数式の文字列の処理

#4

投稿記事 by Ma » 15年前

追記



すいません。。。LIBファイルをうまくリンクできないようです。。。

1>test.obj : error LNK2019: 未解決の外部シンボル "__declspec(dllimport) int __cdecl StrCalc(struct STRCALC_PARAM *)" (__imp_?StrCalc@@YAHPAUSTRCALC_PARAM@@@Z) が関数 "void __cdecl drawGrid(void)" (?drawGrid@@YAXXZ) で参照されました。
1>C:\Users\Masao\Documents\C language\calc volume\Debug\test.exe : fatal error LNK1120: 外部参照 1 が未解決です。

http://www.ne.jp/asahi/hishidama/home/t ... /dll.html#呼出方法
ここを参考にして

#pragma comment(lib, "stcalc35.lib")
#include "stcalc35.h"

このようにインクルードしました。


lib, dll,h ファイルはすべてソースファイルと同じディレクトリにおいてあります。

dllファイルは、DXライブラリ以外は初挑戦だったりします。

環境は,
VC++ 2008 Express Edition
Windows7 です。


あと、DXライブラリのようにインクルードディレクトリに、dll, h, lib ファイルがおかれているフォルダを追加しましたが、変わりありませんでした。


フォルダ構成的には

-Debug
-test.pdb
-test
-Debug
-test.objとか・・
-materials
-*.jbg とか・・
-stcalc35.dll
-StCalc35.H
-stcalc35.lib
-test.cpp
-test.vcproj
test.ncb
test.sln
test.suo


このようになってます。 画像

non

Re:数式の文字列の処理

#5

投稿記事 by non » 15年前

試してないけど
マニュアルに
>StrCalc の関数はCの装飾名を持ちますので、C++ でコンパイルすると関数をリンクする事ができません。
と、書いてあります。

Ma

Re:数式の文字列の処理

#6

投稿記事 by Ma » 15年前

ほんとうですね。。。

これとDXライブラリを一緒に使うことはできないんだろうか。。。

たいちう

Re:数式の文字列の処理

#7

投稿記事 by たいちう » 15年前

> これとDXライブラリを一緒に使うことはできないんだろうか。。。

StrCalcを呼び出すdllをCで作ればヨロシ。
試してないけど。

SooA

Re:数式の文字列の処理

#8

投稿記事 by SooA » 15年前

DLLに関しては検索かけてソレっぽいリンクを
貼っただけなので、内容のほうは良くわかってません。
で、探したらバージョン違いがありました。
http://www.vector.co.jp/soft/win95/prog/se476820.html


その他ソレっぽい検索
http://search.vector.co.jp/search?query ... Z&x=45&y=7

Ma

Re:数式の文字列の処理

#9

投稿記事 by Ma » 15年前

たいちう さん。
返事ありがとうございます。
ですがマニュアルに、指示された方法があるのでこちらをとらせていただきます。(後記)

SooAさん。
バージョンを最新のものに更新してチャレンジしてみます。


DXライブラリとの連携の前に、サンプルから動かそうと思います。
以下、dllを扱ったことがないので、いろいろ間違っているかもしれませんが、私がやってみたことです。

まずは、サンプルから動かそうと思って、新しくプロジェクトを作りました。
コンソールとして空から作成して、cppファイルを作り、マニュアルどおりのコードを以下のように記載しました。
ちなみに
(C++ で利用する場合は、StrCalc の関数を呼び出している部分を extern "C" で括ってください。)
と記載してありました。

#include <stdio.h>

extern "C"{

#include "stcalc38.h"

void main(void )
{
STRCALC_PARAM prm;

if (StrCalc_Initialize(&prm) != STATUS_NORMAL){
printf("初期化に失敗しました\n"); return;
}

prm.str = "6293 * (520 + 21)";
int ret = StrCalc(&prm);

if (ret != STATUS_NORMAL) printf("エラー:%d\n",ret);
else printf("結果:%.16G\n",prm.ans);

StrCalc_Terminate(&prm);
}
} // extern "C"




その後、このcppファイルがあるフォルダと同じところに、
stcalc38.h,stcalc38.dll,stcalc38.lib
をおきました。

ついでに、インクルードディレクトリにもこのフォルダを指定。


それでコンパイルすると
1>------ ビルド開始: プロジェクト: stringCalc, 構成: Debug Win32 ------
1>コンパイルしています...
1>main.cpp
1>リンクしています...
1>main.obj : error LNK2019: 未解決の外部シンボル __imp__StrCalc_Terminate@4 が関数 _main で参照されました。
1>main.obj : error LNK2019: 未解決の外部シンボル __imp__StrCalc@4 が関数 _main で参照されました。
1>main.obj : error LNK2019: 未解決の外部シンボル __imp__StrCalc_Initialize@4 が関数 _main で参照されました。
1>C:\Users\Masao\Documents\C language\stringCalc\Debug\stringCalc.exe : fatal error LNK1120: 外部参照 3 が未解決です。
1>ビルドログは "file://c:\Users\Masao\Documents\C language\stringCalc\stringCalc\Debug\BuildLog.htm" に保存されました。
1>stringCalc - エラー 4、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========


こんな感じです・・・。

たぶん、私が間違っているのですが、手順の間違いの指摘をよろしくおねがいします。

softya

Re:数式の文字列の処理

#10

投稿記事 by softya » 15年前

リンカの入力にstcalc38.libは書きましたか?

[補足]
追加の依存ファイルにstcalc38.libと書いて下さい。 画像

Ma

Re:数式の文字列の処理

#11

投稿記事 by Ma » 15年前

softya さん、ありがとうございます。(嬉

うまく成功しました。
ようやく、前に進めそうです。
次はDXライブラリとの連携に挑戦です。
成功または失敗次第、報告に来ます。 画像

Ma

Re:数式の文字列の処理

#12

投稿記事 by Ma » 15年前

(*すいません、ミスで二重投稿してたみたいです。) 画像

Ma

Re:数式の文字列の処理

#13

投稿記事 by Ma » 15年前

成功しました。
皆様のご協力ありがとうございました。

画像

閉鎖

“C言語何でも質問掲示板” へ戻る