HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
1219
ポチ文字列を数値として計算処理させたいのですが・・・。10未解決


ポチ

リンク

2010/12/19(Sun) 09:30:06|NO.36221

現在コマンドラインで動く有効数字8桁位
(整数4桁+小数4桁:±1234.5678)の
インタプリタ型電卓を考えています。
考え方としては入力ボックスに文字列を入力して
(50文字程度迄)それをそのまま計算させて結果を表示したいと思っています。

X="(25.5+SQRT(17.8+LOG(82.33)))+SIN(45)";(deg)

この文字列から記号(,),SQRT,LOG,SINを抜き出して改行する。

25.5
17.8
82.33
45

これらの数字を実数変数として割り当てる。
x1=1.0*25.5,x2=1.0*17.8,x3=1.0*82.33,x4=1.0*45

文字列Xの数字を変数に置き換える。

X="(y1+SQRT(y2+LOG(y3)))+SIN(y4)"

xi=yi(i=1,2,3,4)として計算させる。

としたいのですが・・・""の中を計算させるにはどうしたら良いでしょうか?



この記事に返信する


skyblue

リンク

2010/12/19(Sun) 09:49:22|NO.36222

めんどくさいかもしれないけど
文字列型の数値をintかdoubleに変換してSINとかは、
取り出して、変数に入っている数値に対して計算するとか?



damage

リンク

2010/12/19(Sun) 12:10:39|NO.36225

>考え方としては入力ボックスに文字列を入力して
>(50文字程度迄)それをそのまま計算させて結果を表示したいと思っています
残念ながら、それは考え方ではなくプログラムの最初と最後を述べただけで「考え」に至っていません。
しかし途中経過を後述しているので良しとします。

>82.33
>45
>これらの数字を実数変数として割り当てる。
残念ながら、割り当てられません。
変数名に数字から始まる文字列とピリオドは使えないからです。

>x1=1.0*25.5,x2=1.0*17.8,x3=1.0*82.33,x4=1.0*45
変数に割り当てるといいながら計算では変数を使っておらず単なる「計算結果を変数に代入」しているだけのように見えますが違いますか?

>文字列Xの数字を変数に置き換える。
>X="(y1+SQRT(y2+LOG(y3)))+SIN(y4)"
文字列Xは既に変数です。置き換える必要もなければどう置き換えようというのか理解できません。
また抜き出した記号は説明によると抜き出したままどこかへ放り投げたまま行方不明ですが回収できるのでしょうか。
回収できるとして、いったん放り投げたものを再び拾いにいくなら、最初から捨てなければいいのではと思ってしまいます。
あ、いやあくまであなたの考え方を読み解くとそういうことになると思っただけで、そういう方法が必要なこともあると思いますが。

>xi=yi(i=1,2,3,4)として計算させる。
HSPにそのような高度な式を解釈できるとは思えませんが・・・。


いいですか。
人に説明するときには正しい用語を使わなければ伝わらないということを覚えておいてください。
○○と言えばいいところを妙に凝って「割り当てる」と言ってみたりですね、まぁ努力して解決されることを期待します。



damage

リンク

2010/12/19(Sun) 12:21:36|NO.36228

再び失礼します。また面白いことを思いついたので。

>X="(25.5+SQRT(17.8+LOG(82.33)))+SIN(45)";(deg)

あなたはこれを解決するために

>この文字列から記号(,),SQRT,LOG,SINを抜き出して改行する。
>これらの数字を実数変数として割り当てる。
>文字列Xの数字を変数に置き換える。

などの方法を解決しようと考え

X="(y1+SQRT(y2+LOG(y3)))+SIN(y4)"

にたどり着き、

>""の中を計算させるにはどうしたら良いでしょうか?

と尋ねていますが、

>X="(25.5+SQRT(17.8+LOG(82.33)))+SIN(45)";(deg)
>X="(y1+SQRT(y2+LOG(y3)))+SIN(y4)"

の2つは非常によく似ていますね。
結局あながた行ったことといえば、式の中の数字部分の実数値に求め再び数字に直して式に戻し「;(deg)」を取り去ったこと、のようですね。
ここで再びこの文字列から記号(,),SQRT,LOG,SINを抜き出して改行する、と繰り返せば無限ループ

滑稽です
まったく問題の核心部分の解決を考えられていなかったようです。

無駄な説明を省くと
>""の中を計算させるにはどうしたら良いでしょうか?
だけで用件が済んでしまい、まったく考えていなかったことになります。
考えているようで考えていなかった・・・

どんまい!



info

リンク

2010/12/19(Sun) 13:23:32|NO.36229

ダメモトでエクセルを使ってみてはどうだろう と 呟いてみます。


newcom xlapp , "Excel.Application" xlApp("Visible") = 0 xlApp("DisplayAlerts") = 0 xlBooks = xlApp("Workbooks") xlBook = xlBooks("Add") xlSheet = xlBook("ActiveSheet") xlRange = xlSheet("Range" , "A1" ) xlRange("Formula") = "=(25.5+SQRT(17.8+LOG(82.33)))+SIN(45)" mes xlRange("Value") onexit *exit stop *exit xlApp -> "Quit" delcom xlSheet delcom xlBook delcom xlBooks delcom xlApp end



ポチ

リンク

2010/12/19(Sun) 13:59:06|NO.36230

damageさんの仰る通りです。

質問内容を改めます。

""の中を計算させるにはどうしたら良いでしょうか?

大変失礼致しました。

skyblueさん、infoさん、ありがとうございます。参考にさせて頂きます。



test

リンク

2010/12/19(Sun) 16:54:29|NO.36232

SQRT、LOG、SINなどは複雑なので、まず簡単なところから考えてみましょう。
最も簡単なのは、
"1+2*3+4"
のように、四則演算だけで表現された形です。
これを、"1" "+" "2" "*" "3" "+" "4" というように、数字と演算子(+とか*とかの記号)に分解して配列に格納するとよいでしょう。

これができたら、今度は"(1+2)*3+4"のように括弧がついた形を分解してみましょう。
方法としては、"(1+2)" "*" "3" "+" "4" のように括弧はそのままひとまとめにしておいて、実際に計算するときに括弧が出てきたらその場でその中を計算する、という方法などがあります。

そして、その次にSQRT,LOG,SINなどの関数に対応します。
これも、"SQRT(1+2)*3+4"を "SQRT(1+2)" "*" "3" "+" "4"のように分解して、"SQRT(1+2)"が出てきたらその場で平方根を計算する、というような括弧の応用でできます。



Hatter

リンク

2010/12/20(Mon) 11:45:36|NO.36250

あなたの為になるかどうかは不明ですけど参考までに
http://blogs.yahoo.co.jp/masadatte/32149614.html
かなり独特の癖のありかつ構造的には悲惨なので
上記のプログラムから学べることは基本的にないと思うので
勉強したいなら見ないことをおすすめします。

余談ですがどういうプログラムを作るか、そしてどういう風に処理をするかそして
実際にそれを書くのがプログラミングのおもしろさだとは思うんですけどね。
それをしたくないなら既存のソフトを探す方が良いと思うんですけどね。
ま、あくまで個人的な独り言です。軽く流してください。



gth

リンク

2010/12/20(Mon) 15:18:07|NO.36253

逆ポーランド記法に変換して、それを計算するという
よくある手段をとったほうが早い気が・・・・。



damage

リンク

2010/12/20(Mon) 22:06:32|NO.36263

よくある手段をとると何が早くなるのかわからんが。

求めるツールを作るのが早くなる?
答えを引き出す手技が早くなる?
論理を組み立てるのが早くなる?

逆ポーランド手法が分かったところで、彼にはもっと基礎的なプログラミング力が必要だと思うよ。
複数の課題を一度にこなすソフト作りより、ひとつの課題を一問一答で実装していくようなプログラミング力がね。
説明不足がそれを物語っているよ。



R

リンク

2010/12/20(Mon) 22:56:37|NO.36266

>よくある手段をとると何が早くなるのかわからんが。
話が早くなる。
独自の方法を考えるより悩む時間は少ないでしょ。



ONION software Copyright 1997-2021(c) All rights reserved.