• ベストアンサー

算術記号(+,-,/,*)を文字としてあらわして計算に使用する方法

ビジュアルベーシック初心者です。 タイトルでは誤解をうむと思いますが、やりたいことは以下のようなことです。 kigouという変数をstringsで宣言しそこに文字として算術記号を代入する。  例 kigou = "+" このkigou変数を用いて、実際の計算をする。 例 i = 1 kigou 2 この場合、kigou変数には+が代入されているので、iの値は3になる。 このように、kigouに入れる算術記号を任意にかえ、kigouという変数を用いて実際の計算をさせたいのですが、正しい記述方法などがわかりません。方法はありますか?

noname#55437
noname#55437

質問者が選んだベストアンサー

  • ベストアンサー
  • Ishiwara
  • ベストアンサー率24% (462/1914)
回答No.4

#3です。 プログラムは、どれだけ多く使われるかによって、作るのにどれだけ手間をかけてもよいか、が決まるものです。例えば、それだけの需要があれば、次のようなプログラムを作っても採算がとれるはずです。 例えば、 keisan (2, +, 3) よりも一歩進めて、keisan ("(2 + 3) * 4") の値が 20 となるような function keisan を作ることは可能です。中級者以上の練習問題に適していると思います。

その他の回答 (3)

  • Ishiwara
  • ベストアンサー率24% (462/1914)
回答No.3

Function keisan (x, kigou, y) Select Case kigou Case "+" keisan = x + y case "-" keisan = x - y End Select End Function のようにすれば keisan (2, +, 3) で 5 が返されるのでは? (すみません、しばらくVBをやっていないので、合っているかどうか)

noname#58606
noname#58606
回答No.2

すいません。 Delphi、PHP、Perlしか経験がないのですが、VBって文を変数の中に入れても成立するんですか? No1の方が、 >kigouの内容によって計算が変わるので、 と書いているので、質問の流れをあわせると、・・・出来るのかな!? a := '<'; if 1 a 2 then ShowMessage('OK'); ってコンパイル出来ます? 私が知らないだけかもしれませんが、どの言語でも出来ない気がします。 (あー、特殊な言語は別で。世の中には特殊な言語があるようなので。^^; まえに、練習でDelphiで切符の4桁の四則演算(4つの数字を足して、0とか1にするやつ)を作りましたが、結局はいいアイディアが浮かばず、すべての例を挙げて、if文で条件分けするという、かっこの悪いものしか出来ませんでした。 Case文で分けてもいいですけど。 Delphiでも、文のなかに変数をいれて成立する方法があれば、その名前だけでも教えてください。

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

#計算式が文字列で与えられたりすれば文字列のparseから考えないといけませんが・・ kigouの内容によって計算が変わるので、Select Case kigouでcase分けをするしかありませんね。しょっちゅう使うようなら関数にするかな・・。

関連するQ&A

  • froat型

    int型の変数iとjに100000000を代入し、float型の変数rを宣言し、   r = (i + j + 1); を計算するとrは200000000.000000になりdouble型の変数uを宣言し、   u = (i + j + 1); を計算するとuは200000001.000000になりました。 何故そうなるのかわかりません。教えてください。

  • フォームのテキストコントロールに代入された計算式を計算したい

    VB.Netのイベントで、フォームのテキストコントロールに代入された計算式を計算したいのです。 (String変数に代入された値でも構いません) 計算式.textに "3*4+5"等の計算式が代入されているとします。 これを計算して結果を変数に代入させたいのですが、Textになっているので、どうすればよいか分かりません。 よい方法を教えて下さい。

  • 文字列(×と÷)の文字化けについて

    phpを勉強している初心者です。 2つのテキストボックスを作って、 各数値を「架ける」または「割る」計算処理ができるように記述しています。 index.phpのフォーム部分は下記のようになっています。 <form method="post" action="test.php"> 入力欄1:<input type="text" name="number1"><br> <input type="radio" name="kigou" value="×">× <input type="radio" name="kigou" value="÷">÷<br> 入力欄2:<input type="text" name="number2"><br> <input type="submit" value="計算"> </form> test.phpの処理部分は下記のようになっています。 <?php if($_POST["kigou"] == "×" ){ $answer=$_POST["number1"]*$_POST["number2"]; }elseif($_POST["kigou"] == "÷" ){ $answer=$_POST["number1"]/$_POST["number2"]; } print $_POST["number1"].$_POST["kigou"].$_POST["number2"]."=".$answer; ?> しかし、結果では、記号部分が文字化けしてしまいました。 (例:4テ4=16、4テキ4=1) HTMLの特殊記号を試しに設定してみましたが 計算すらしてくれなくなりました。 (&times;と&divide;) こんな場合、どうすれば良いのでしょうか? また、if分の条件式にはHTMLの特殊記号は使えないのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • 小数点第2位の数値の計算

    下記のような処理があるとします。 Dim 変数1 As 宣言 Dim 変数2 As 宣言 Dim 変数3 As 宣言 Dim 変数4 As 宣言 変数1 = 0 変数2 = 0 変数3 = 0 変数4 = 0 変数1 = テキストボックス1.Text 変数2 = ラベル2.Caption 変数3 = ラベル3.Caption 変数4 = (変数2 + 変数3) - 変数1 ラベル4.Caption = 変数4 変数1~3には、小数点第2位までの 数値が入る事があるのですが、 例) 変数1 = 3.0 変数2 = 4.75 変数3 = 7.75 の場合、変数4 = 0 と計算される。 その場合、変数4の計算結果が 正しく出力されません。 宣言はDoubleを使うと計算結果は 16進数表示になり、Singleを使うと0になります。 正しい計算結果を出すには どのようにすれば良いでしょうか?

  • やはり文字コードのせいでしょうか?

    固定長のテキストに区切り文字の","や"/"を挿入して整形する プログラムを作っていたときWin98では正常に動作していましたが、 Win2000だと文字化けしてうまくいきません。 Unicodeとの文字コードの違いかな?とも思ったのですが、16bit (2バイト)ということでバイト数は同じだと思うのですが、デバッカ で見ると目的の位置より手前でカウントを終了しているようです。 というのもWin2000上ではデバッカのローカル変数をウオッチしても 変数内の漢字も文字化けしているため確認できません。 元のテキスト "20010505文字列次の文字列1234" こうしたい "2001/05/05,文字列,次の文字列,12,34" が、こうなる "2001/05/05,文字・。・・次の文字・。、" (実際とは違います) 行儀が悪いプログラムなのですが、こんな感じです。 char kigou[7][2]={"/","/",","," ",":",":",""}; int skip[7]={4,2,22,12,2,2,2}; for(i=0;i<7;i++){ strncat(tmpbuff, pt, skip[i]); tmpptr += skip[i]; strcat(tmpbuff,kigou[i]); tmpptr += strlen(kigou[i]); pt += skip[i]; } コンパイラはBorlandC++Builder4です。 ファイルの整形だけなのでCの関数しか使っていません。 ご存知の方、回答よろしくお願いします。

  • 変数の宣言について

    VBですけれども 変数の宣言なしに For i  ・  ・   ・ Next i などを記述しますと「変数の宣言がされていません」 というメッセージがでるのですが、テキストなどでは 変数の宣言などしていなくとも動作しますこれはどうして どういうことなのかご存知の方教えてください。 Dimとかの宣言もなしにです。 著書は 独習Visual Basic 6.0 などです。

  • オリフィスのβ値計算方法について

    オリフィスの絞り直径比を求める"繰り返し計算"について教えてください。 計算方法を具体的な例を交えて教えて頂けると幸いです。 JIS Z 8762-1(https://kikakurui.com/z8/Z8762-1-2007-01.html)の7ページ目5.2によると、「流出係数Cおよび熱膨張係数εは一般的には決まっておらず、絞り直径比は繰り返し計算により求めることが出来る」と記述してあります。16ページ目に付属書A(参考) 繰り返し計算にはもう少し計算の詳しい内容が記述されていますが、イマイチピンときません。 イマイチピンとこないのは具体的には下記の通りです。 流量計算式には未知の変数が3つあります。 (1)絞り比(β) (2)流量係数(C) (3)熱膨張係数(ε) 流体を液体と仮定(ε=1.0)しても変数は2つとなります。 【疑問1】 漸化式を見ると、Xnを求めるためにはその前2つXn-1とXn-2が必要になります。すなわち、初期の仮定値を2つ決めないと、次の仮定値X3を求められないような気がします。X1とX2をこちらで決めてやる必要があるのでしょうか? 【疑問2】 16ページ目では、「最初の仮定値X1を未知量に代入すると,既知量との間にδ1の違いが生じる。次の仮定値X2は,繰返し計算のδ2を求めるのに用いられる。」となっています。初期の仮定値X1はβとCそれぞれに対して、1つずつ(漸化式を考えるとn=2まで?)決める必要があるのでしょうか?すなわち、Xβ1とXc1、Xβ2とXc2といった具合に。 【疑問3】初期の仮定値X1は未知量に代入するのだと思いますが、代入先は計算式の何処なのでしょうか?βのみ?それとも、βとCの両方? 可能であれば、具体的な計算の流れを教えて頂きたです。 簡単のため、既知の値A=10とし、C=0.606とします(17ページ目より)。また、流体は液体とするのでε=1.0固定とします。この時、変数はβとCの2つで、計算式はCβ^2/√(1-β^4)=10となります。この式から繰り返し計算でβを求めたいと思います。 初期の仮定値X1はどう決めるのか?決めたX1は計算式の何処に代入するのか?が興味あるところです。n=4くらいまで途中計算を記述して頂けると非常に助かります。 よろしくお願いいたします。

  • getchar,isalphaについて

    C言語を習いはじめてまもない者です。getcharとisalphaについて教えてください。  まず、getcharから。この関数は、キーボードから文字を一文字ずつ読み、読み出した文字を返す。といった働きをするそうですが、この関数を用いて、取り込んだ文字をなぜか、int型で宣言した変数に代入しています。(例:int aなどのaに取り込んだ文字を代入している。)なぜ、文字を取り込んでいるのに、intで宣言した変数に代入すのでしょうか?charで宣言した変数に代入しなくていいのですか?  次に、isalphaについてです。この関数は、変数に代入されている文字が数字か文字かを判断して、文字が入力されていると、0以外の値を返す関数だそうです。しかし、この関数も、変数の宣言がintです。なぜ、charではなくintで宣言するのでしょうか?

  • 任意の文字列を変数にする方法

    お世話になります。 掲題の件につきまして質問させていただきます。 テキストファイルに記述されている文字列を ルールにのっとり、読み込んだ変数に置き換える方法が よくわかりません。 ご存知のかたがいらっしゃいましたらどうぞご教授ください。 例) <テキストファイル> ☆☆☆$hensuu☆☆☆ <vb> (1)テキストファイルより、上記文字列を取得 (2)$以下の文字列(hensuu)をvbで宣言した変数(hennsuu)と置き換える。 (3)vb側でhennsuu = 100とすると、 vbからテキストファイルを読み込んだ時点で hennsuuに”☆☆☆100☆☆☆”と代入される。 わかりづらい例で申し訳ありませんがどうぞよろしくお願い申し上げます。 失礼いたします。

  • SQLの中での算術演算子使用は?

    VB.NETで、dataadapterウイザードでSQL文が 自動作成されますが、この中で¥やMODなどの算術演算子を 記述するとエラーになります。 下記のようなことがしたいのですが、いい方法はないでしょうか? 例  開始時間 a 時 b 分    終了時間 c 時 d 分    a,b,c,d はそれぞれフォームから手入力(string)    所要時間を e 時間 f 分と表示させたい 今SQLで、   ((val(c) - val(a))*60 + (val(d) - val(b))) as 所要分 としており、ここまではエラーなしで動いてくれます。 ただこれに   (上の計算式)¥60として所要時間を   (上の計算式)MOD 60として端数の分を 計算させに行くとエラーになります。 こんな使い方はできない(しない)ものなのでしょうか。 datasetにこれ以外に数値(データ)を持たせる方法があれば ご教示ください。 よろしくお願いします。

専門家に質問してみよう