質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

Q&A

解決済

4回答

3950閲覧

VisualBasic 文字列の中に文字を追加するには

Strauss

総合スコア32

VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

0グッド

0クリップ

投稿2015/06/30 06:02

編集2015/06/30 06:51

お久しぶりです。以前VBにて電卓を作っていたものです。

現在機能を追加しているところでして、
・計算経過ディスプレイ
・24桁まで対応
・関数電卓化
上記の上2つはできました。

ただ、現在関数電卓化の階乗のところで処理をどうすればいいのか悩んでいます。
なお、この関数の動きはウィンドウズに標準搭載の電卓の動きに準じています。

階乗(n!)のボタンを連続で押すと
「fact(fact(fact(fact(2))))」このような表示になると思いますが、
どのような処理をしたらfact()のかっこの中にfact()を表示されるのでしょうか
ご教授よろしくお願いします。

--追記--
階乗部分のコードです。

lang

1If NumberHold = "C" Then 2 NumberHold = FactValue 3 Else 4 'NumberHoldにある数値を維持 5 End If 6 DisplayPassage.Text = String.Format("fact({0})", DisplayPassage.Text)

NumberHoldというのは階乗をする数字を記憶する変数です。
初期値だった場合に数字を記憶し、初期値でない場合はその状態を維持します。
現在上記のコードだと計算経過のディスプレイには
fact(fact(fact(fact(fact(fact())))))というように表示できるようになりました。
これをfact(fact(fact(fact(fact(5)))))というようにするにはどうしたらよいでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

各変数の意味が掴みきれていませんが、やりたいのはこんなことでしょうか?

If NumberHold = "C" Then '←初回判定と推測しました NumberHold = FactValue DisplayPassage.Text = NumberHold .ToString() '初回から数値を含めた状態で"fact()"で括る Else 'NumberHoldにある数値を維持 End If DisplayPassage.Text = String.Format("fact({0})", DisplayPassage.Text)

投稿2015/07/17 03:22

jawa

総合スコア3013

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

fact(x)の状態も退避したほうが良さそうですね。
以下のような感じでフォーマット後の値を毎回退避しましょう。

で連続で押された場合は除去してから追記する感じで

lang

1Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 2 Dim tmpFact = String.Format("fact({0})", strPreInput) 3 Dim posPre = TextBox1.Text.LastIndexOf(strPreInput) 4 If posPre = TextBox1.Text.Length - strPreInput.Length Then 5 '前回入力していれば消す 6 TextBox1.Text = TextBox1.Text.Remove(posPre, strPreInput.Length) 7 End If 8 TextBox1.Text += tmpFact 9 strPreInput = tmpFact 10End Sub

投稿2015/06/30 08:00

Tak1wa

総合スコア4791

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

色々方法があると思いますが、これでどうでしょう。

lang

1Dim calcStr as string 2 3calcStr = String.Format("fact({0})", 2) 4calcStr = String.Format("fact({0})", calcStr) 5calcStr = String.Format("fact({0})", calcStr) 6calcStr = String.Format("fact({0})", calcStr)

投稿2015/06/30 06:16

ta-kun

総合スコア59

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

こんにちは。

String.Formatを使用します。

lang

1Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 2 TextBox1.Text = String.Format("fact({0})", TextBox1.Text) 3End Sub

投稿2015/06/30 06:07

Tak1wa

総合スコア4791

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Strauss

2015/06/30 06:26 編集

ご丁寧にありがとうございます。fact()のかっこの中身をボタンを押したときの数字をつけたいのですが、その場合どうすればよろしいでしょうか?"fact("+NumberHold(階乗したい数値)+")"←のように書いた場合エラーでおこられてしまいました。
Tak1wa

2015/06/30 06:28

Windowsの電卓からすると数字→n!キー以外は上書きされているようですが、それはさて置き、怒られるとはどのように怒られますか。数値型ですよーって感じでしょうか。それならばNumberHold.ToString()で文字列として扱ってください。
Strauss

2015/06/30 06:39

お返事ありがとうございます。インデックス (0 ベース) は 0 以上で、引数リストのサイズよりも小さくなければなりません。というエラーが出てしまします。
Tak1wa

2015/06/30 06:42

理解力が乏しくすみません。状況がわからなくなってきたので質問へ現在のコードを追記して頂いても良いでしょうか。
Strauss

2015/06/30 06:46

こちらこそわかりにくく書いてしまい申し訳ございません。すぐ載せますので少々お待ちください。
Tak1wa

2015/06/30 06:59

追記頂いた例だとNumberHoldに"5"(文字列)が入っているということですか?であれば、DisplayPassage.Text = String.Format("fact({0})", NumberHold)になりますが。一度n!キーを押すとNumberHold変数の中身はどうなりますか。
Strauss

2015/06/30 07:08

0の場所にNumberHoldと書くとfact(fact(fact()))…という風にはならず、例:5を押してから階乗ボタンを押すと fact(5)と表示されます。何回押してもfact(fact(fact(5)))と増えません。
Strauss

2015/06/30 07:10 編集

質問に答えていませんでした。数字ボタンを押してからn!ボタンを押すとNumberHoldにはその階乗された元の数字が記録されます。2回目以降はNumberHoldはそのままの状態を維持します。
Tak1wa

2015/06/30 07:15

NumberHoldに何故退避しているのかによりますが、退避する必要あるのでしょうか。 数字キーが押された時点でDisplayPassage.Textへ数字を設定しておけば、String.Format("fact({0})", DisplayPassage.Text)で済みそうな気がしますが
Strauss

2015/06/30 07:32

Windowsの標準電卓を基に製作しており、数字ボタン+四則の演算子 を押すことで計算経過を表示されているのでそれに準じて作成しています。退避している理由として、数字ボタンを押したときに計算経過のディスプレイに表示しないためなのと、演算子を押したときに一緒に出すためです。
Tak1wa

2015/06/30 08:00

成程、よくわかりました。 別回答しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問