C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[19]: C#で電卓を作っているのですが


(過去ログ 129 を表示中)

[トピック内 23 記事 (1 - 20 表示)]  << 0 | 1 >>

■76604 / inTopicNo.1)  C#で電卓を作っているのですが
  
□投稿者/ 紅 (1回)-(2015/07/27(Mon) 15:34:30)

分類:[C#] 

2015/07/27(Mon) 15:41:27 編集(投稿者)
2015/07/27(Mon) 15:41:21 編集(投稿者)

windows標準搭載のような電卓を作っています
一応完成はしたのですが
連続計算1+5+6のような
↑のようにすると11と出ます
答えを12にしたいのですが、どのようにすればいいでしょうか?

プログラムは初心者です
引用返信 編集キー/
■76605 / inTopicNo.2)  Re[1]: C#で電卓を作っているのですが
□投稿者/ 魔界の仮面弁士 (425回)-(2015/07/27(Mon) 16:38:39)
No76604 (紅 さん) に返信
> 一応完成はしたのですが
> 連続計算1+5+6のような
> ↑のようにすると11と出ます

現在の実装がどのようになっているのか分かりませんが、
手抜き実装でよければ:


string 計算式 = "1+5+6";

dynamic 答え = new DataTable().Compute(計算式, null);

label1.Text = 答え.ToString();
引用返信 編集キー/
■76606 / inTopicNo.3)  Re[1]: C#で電卓を作っているのですが
□投稿者/ みい (18回)-(2015/07/27(Mon) 16:38:58)
No76604 (紅 さん) に返信
> 2015/07/27(Mon) 15:41:27 編集(投稿者)
> 2015/07/27(Mon) 15:41:21 編集(投稿者)
>
> windows標準搭載のような電卓を作っています
> 一応完成はしたのですが
> 連続計算1+5+6のような
> ↑のようにすると11と出ます
> 答えを12にしたいのですが、どのようにすればいいでしょうか?
>
> プログラムは初心者です

どのようなコードを書いているか分からないので推測ですが…
演算子の前後の数値だけで処理していませんか?

累積用の変数を用意し、
まず最初の値をそこに入れる

変数の値と次の値と演算

演算結果を変数にセット


の繰り返しが必要です。
引用返信 編集キー/
■76607 / inTopicNo.4)  Re[2]: C#で電卓を作っているのですが
□投稿者/ 紅 (2回)-(2015/07/27(Mon) 16:58:36)
お二方ありがとうございます
ほんとにプログラム初心者で右も左もわからないので感謝です

今はこんな状態です

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication2
{
public partial class Form1: Form
{

public Form1()
{
InitializeComponent();
}


bool isFirst = true;
decimal x = 0;
private void buttonNumber_Click(object sender, EventArgs e)
{
if (key != Operator.undefined && isFirst)
{
x = Convert.ToDecimal(textBox1.Text);
textBox1.Text = "";
isFirst = false;
}

String text = textBox1.Text + ((Button)sender).Text;

decimal d = Convert.ToDecimal(text);

String text2 = d.ToString();


textBox1.Text = text2;

}

private void buttonClear_Click(object sender, EventArgs e)
{
textBox1.Text = "";
}

private void buttonDot_Click(object sender, EventArgs e)
{
if (textBox1.Text.IndexOf(".") >= 0)
{
return;
}

textBox1.Text = textBox1.Text + ".";
}


enum Operator
{
undefined, add, sub, mul, dvi
};

Operator key = Operator.undefined;

private void buttonAdd_Click(object sender, EventArgs e)
{
key= Operator.add;
isFirst = true;
}

private void buttonSub_Click(object sender, EventArgs e)
{
key=Operator.sub;
isFirst = true;
}

private void buttonMul_Click(object sender, EventArgs e)
{
key= Operator.mul;
isFirst = true;
}

private void buttonDvi_Click(object sender, EventArgs e)
{
key= Operator.dvi;
isFirst = true;
}

private void buttonResult_Click(object sender, EventArgs e)
{
decimal y = Convert.ToDecimal(textBox1.Text);
decimal results = 0;
switch (key)
{
case Operator.add:
results = x + y;

break;

case Operator.sub:
results = x - y;
break;

case Operator.mul:
results = x * y;
break;

case Operator.dvi:
results = x / y;
break;

}

textBox1.Text = results.ToString();


}
}
}
引用返信 編集キー/
■76608 / inTopicNo.5)  Re[3]: C#で電卓を作っているのですが
□投稿者/ みい (19回)-(2015/07/27(Mon) 17:40:50)
No76607 (紅 さん) に返信
> お二方ありがとうございます
> ほんとにプログラム初心者で右も左もわからないので感謝です
>
> 今はこんな状態です

演算子ボタン押しの2回目以降、結果ボタンと同じ処理を先に
やらないといけないですよ。

引用返信 編集キー/
■76609 / inTopicNo.6)  Re[4]: C#で電卓を作っているのですが
□投稿者/ 紅 (3回)-(2015/07/27(Mon) 17:45:44)
No76608 (みい さん) に返信
> 演算子ボタン押しの2回目以降、結果ボタンと同じ処理を先に
> やらないといけないですよ。

ありがとうございます
何度も申し訳ないですが
どこの部分にどういったコードを足せばよろしいでしょうか?
引用返信 編集キー/
■76610 / inTopicNo.7)  Re[5]: C#で電卓を作っているのですが
□投稿者/ みい (20回)-(2015/07/27(Mon) 17:56:59)
No76609 (紅 さん) に返信
> ■No76608 (みい さん) に返信
>>演算子ボタン押しの2回目以降、結果ボタンと同じ処理を先に
>>やらないといけないですよ。
>
> ありがとうございます
> 何度も申し訳ないですが
> どこの部分にどういったコードを足せばよろしいでしょうか?

buttonAdd_Click/buttonSub_Click/buttonMul_Click/buttonDvi_Clickの
先頭でisFirstがTrueだったらbuttonResult_Clickを呼ぶのです。
引用返信 編集キー/
■76611 / inTopicNo.8)  Re[6]: C#で電卓を作っているのですが
□投稿者/ 紅 (4回)-(2015/07/27(Mon) 17:59:56)
No76610 (みい さん) に返信
> buttonAdd_Click/buttonSub_Click/buttonMul_Click/buttonDvi_Clickの
> 先頭でisFirstがTrueだったらbuttonResult_Clickを呼ぶのです。

ほんとうに何度もありがとうがざいます
参考になったのでやってみます
引用返信 編集キー/
■76612 / inTopicNo.9)  Re[7]: C#で電卓を作っているのですが
□投稿者/ 紅 (5回)-(2015/07/27(Mon) 18:00:11)
No76611 (紅 さん) に返信
> ■No76610 (みい さん) に返信
>>buttonAdd_Click/buttonSub_Click/buttonMul_Click/buttonDvi_Clickの
>>先頭でisFirstがTrueだったらbuttonResult_Clickを呼ぶのです。
>
> ほんとうに何度もありがとうがざいます
> 参考になったのでやってみます
解決済み
引用返信 編集キー/
■76617 / inTopicNo.10)  Re[8]: C#で電卓を作っているのですが
□投稿者/ 紅 (6回)-(2015/07/28(Tue) 10:26:39)
やってみましたがやっぱりよくわかりません
どなたか知識をかしてください
引用返信 編集キー/
■76621 / inTopicNo.11)  Re[9]: C#で電卓を作っているのですが
□投稿者/ 通りすがり (17回)-(2015/07/28(Tue) 11:16:59)
No76617 (紅 さん) に返信
> やってみましたがやっぱりよくわかりません
> どなたか知識をかしてください

考えてみましたがやっぱりよくわかりません
紅さんコードをみしてください


冗談はさておき。
(この掲示板だけに限らず)掲示板で回答して頂く皆様はエスパーではありません。
紅さんが「何を」「どうやったら」「何が」わからなかったのか分かりませんよ?

質問する時は読み手に伝わるようにしてみてください。
この場合では先のコードから紅さんが「どのように」変更し、「何が」わからなかったのかを
コードを交えて説明下さい。

ちなみに、コードを載せる場合、「図表モード」にチェックして投稿するとコードが読みやすくなっていいですよ!
引用返信 編集キー/
■76622 / inTopicNo.12)  Re[10]: C#で電卓を作っているのですが
□投稿者/ 紅 (7回)-(2015/07/28(Tue) 11:28:28)
No76621 (通りすがり さん) に返信
回答ありがとうございます

上記のコードのどの部分にどういったコードを追加すればいいのかが、まだ理解できていません

演算子を押したときのコードにみいさんのおっしゃっているbuttonResult_Clickを呼び出すとはどのようなコードを書けばいいのでしょうか?


引用返信 編集キー/
■76626 / inTopicNo.13)  Re[11]: C#で電卓を作っているのですが
□投稿者/ 774RR (281回)-(2015/07/28(Tue) 13:12:55)
> buttonResult_Clickを呼び出すとは
文字通り buttonResult_Click(sender, e); なんだけど sender や e をどうするかは要考察。
そもそもイベントハンドラを自分で呼ぶのはいささか筋が悪いと思う。

自作関数「ここまでの結果を求める」を作ったらいい。
そこに sender や EventArgs は必要ないわけで。

private void buttonAdd_Click(object sender, EventArgs e) {
    calculate(); // ここまでの演算を実施 (ついでに表示も更新)
    key=Operator.add; // 次の演算は +
    isFirst=true; // 新しい数値入力を開始する
}

引用返信 編集キー/
■76627 / inTopicNo.14)  Re[12]: C#で電卓を作っているのですが
□投稿者/ 紅 (8回)-(2015/07/28(Tue) 13:56:29)
No76626 (774RR さん) に返信
ありがとうございます
C#を初めてというか、プログラムを初めてまだ10日ほどなのでほんとに無知で
そのなかみなさん親切に教えてくださりありがとうございます

質問ばかりですいませんが
calculate(); // ここまでの演算を実施 (ついでに表示も更新)
の部分のcalculateはコードのほかの部分にも、追加しないとダメですよね?

引用返信 編集キー/
■76631 / inTopicNo.15)  Re[13]: C#で電卓を作っているのですが
□投稿者/ 774RR (283回)-(2015/07/28(Tue) 15:15:44)
> calculateはコードのほかの部分にも、追加しないとダメですよね?
そういうこと。

Visual Studio でボタンを配置し、イベントハンドラを追加してるよね。
イベントハンドラとは文字通り「ボタンが押されたらこうする」という処理を記入するところだ。

Visual Studio の「ソースの表示」をすると、イベントハンドラ以外にも自作関数を書くことができる。
今回は「計算する」という関数を( Visual Studio の GUI デザイナではなくて)手書きするんだ。
そしてイベントハンドラの中から自作関数を呼び出す、ということになる。

private void Calculate()
{
}
と(クラス Form1 の中、他の関数の外に)手入力するといい。
Calculate の中身は先の buttonResult_Click から持ってくるといいだろう。

そして buttonResult_Click のほうは書き換えることになる。
private void buttonResult_Click()
{
    Calculate();
}

引用返信 編集キー/
■76632 / inTopicNo.16)  Re[14]: C#で電卓を作っているのですが
□投稿者/ 紅 (9回)-(2015/07/28(Tue) 15:37:46)
No76631 (774RR さん) に返信
ありがとうございます
ほんとに助かります
解決済み
引用返信 編集キー/
■76641 / inTopicNo.17)  Re[15]: C#で電卓を作っているのですが
□投稿者/ Jitta (159回)-(2015/07/28(Tue) 22:28:46)
2015/07/28(Tue) 22:29:05 編集(投稿者)

「電卓 祭 site:wankuma.com」で bing 検索すると幸せになれると思います。
http://blogs.wankuma.com/aqua/articles/84300.aspx


> calculate(); // ここまでの演算を実施 (ついでに表示も更新)
> の部分のcalculateはコードのほかの部分にも、追加しないとダメですよね?

 数字の方は、1つのイベントハンドラに集約していますよね?
演算子ボタンについても、同じことができるのではないでしょうか?
解決済み
引用返信 編集キー/
■76661 / inTopicNo.18)  Re[16]: C#で電卓を作っているのですが
□投稿者/ 紅 (10回)-(2015/07/31(Fri) 10:29:03)
2015/07/31(Fri) 10:29:36 編集(投稿者)
2015/07/31(Fri) 10:29:34 編集(投稿者)

No76641 (Jitta さん) に返信
ありがとうございます
参考にさせていただきます
解決済み
引用返信 編集キー/
■76662 / inTopicNo.19)  Re[17]: C#で電卓を作っているのですが
□投稿者/ 紅 (11回)-(2015/07/31(Fri) 11:09:29)
2015/07/31(Fri) 16:08:32 編集(投稿者)

みなさんに教えていただいてコードを足してみましたが、いくつか問題が出てきました

・一回目の計算がうまくいかない
例 1+3+5のように打つと8と出る
二回目以降は8にどんどん計算されていくのですが

・演算子を押すとその前計算が処理される
例 5+5=10の後-を押すとテキストに15と表示されます

・クリアボタンを押しても今打った数字しか消えない
計算された累積値?って言うのですかね
が残ります
これはACボタンなどを作ればいいんでしょうか?

上記のことでわかることありましたらお力貸していただきたいです。
引用返信 編集キー/
■76667 / inTopicNo.20)  Re[18]: C#で電卓を作っているのですが
 
□投稿者/ よもやま (1回)-(2015/08/01(Sat) 06:24:33)
No76662 (紅 さん) に返信
> 2015/07/31(Fri) 16:08:32 編集(投稿者)
>
> みなさんに教えていただいてコードを足してみましたが、いくつか問題が出てきました
>
> ・一回目の計算がうまくいかない
> 例 1+3+5のように打つと8と出る
> 二回目以降は8にどんどん計算されていくのですが
isFirst変数の状態がどのように変化しているか動作を確認されてますか。



引用返信 編集キー/

次の20件>
トピック内ページ移動 / << 0 | 1 >>

管理者用

- Child Tree -