はじめまして。
課題で、Visual Studioで電卓を作らなければなりません。
「A + B」のような2つの計算まではできるのですが、
「A + B + C」のような3つ以上の計算ができずにいます。
どなたか、助けてください!
※数値のボタンを「btnNumber」で一纏めに、
液晶にあたる部分をTextBoxで作り「txtDisplay」と名づけてあります。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Cal
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
bool isFirst = true;
decimal 値1 = 0;
private void btnNumber_Click(object sender, EventArgs e)
{
if (演算 != 四則演算の記号.未定義 && isFirst)
{
値1 = Convert.ToDecimal(txtDisplay.Text);
txtDisplay.Text = "";
isFirst = false;
}
String text = txtDisplay.Text + ((Button)sender).Text;
decimal d = Convert.ToDecimal(text);
String text2 = d.ToString();
txtDisplay.Text = text2;
}
private void butC_Click(object sender, EventArgs e)
{
txtDisplay.Text = "0";
}
enum 四則演算の記号
{
未定義, ADD, SUB, MUL, DIV
};
四則演算の記号 演算 = 四則演算の記号.未定義;
private void btnAdd_Click(object sender, EventArgs e)
{
演算 = 四則演算の記号.ADD;
isFirst = true;
}
private void btnSub_Click(object sender, EventArgs e)
{
演算 = 四則演算の記号.SUB;
isFirst = true;
}
private void btnMul_Click(object sender, EventArgs e)
{
演算 = 四則演算の記号.MUL;
isFirst = true;
}
private void btnDiv_Click(object sender, EventArgs e)
{
演算 = 四則演算の記号.DIV;
isFirst = true;
}
private void btnEqu_Click(object sender, EventArgs e)
{
decimal 値2 = Convert.ToDecimal(txtDisplay.Text);
decimal 結果 = 0;
switch (演算)
{
case 四則演算の記号.ADD:
結果 = 値1 + 値2;
break;
case 四則演算の記号.SUB:
結果 = 値1 - 値2;
break;
case 四則演算の記号.MUL:
結果 = 値1 * 値2;
break;
case 四則演算の記号.DIV:
結果 = 値1 / 値2;
break;
}
txtDisplay.Text = 結果.ToString();
}
}
}
よろしくお願いします!
Visual Studio、C#で電卓を作りたい。
Re: Visual Studio、C#で電卓を作りたい。
オフトピック
(振る舞いは仕様次第ではあるでしょうが)
本物の電卓でも,Windowsにある電卓でも良いので
> 「A + B + C」のような
操作をした場合にどのように動いているかを観察してみてはいかがでしょうか.
(2回目の + を押した時点で,A+Bが計算されて,その値が2回目の+演算の左辺の値になるような動きをしませんか?)
本物の電卓でも,Windowsにある電卓でも良いので
> 「A + B + C」のような
操作をした場合にどのように動いているかを観察してみてはいかがでしょうか.
(2回目の + を押した時点で,A+Bが計算されて,その値が2回目の+演算の左辺の値になるような動きをしませんか?)
Re: Visual Studio、C#で電卓を作りたい。
返信、ありがとうございます。
実際の電卓を触ってみました。
現在のプログラムでは「1 + 2 + 3 = 5」となっており、
最後の数値以外は飛んでしまっています。
「A + B + C」をする際に、「A + B = AB」のAB部分を
labelなど数値の一時保管場所を作って、
そこに「C」を足せばいいのでしょうか?
また、この場合は今のプログラムをどう変えればいいのでしょうか?
よろしくお願いします。
実際の電卓を触ってみました。
現在のプログラムでは「1 + 2 + 3 = 5」となっており、
最後の数値以外は飛んでしまっています。
「A + B + C」をする際に、「A + B = AB」のAB部分を
labelなど数値の一時保管場所を作って、
そこに「C」を足せばいいのでしょうか?
また、この場合は今のプログラムをどう変えればいいのでしょうか?
よろしくお願いします。
Re: Visual Studio、C#で電卓を作りたい。
入力が 1 + 2 + 3 = の場合を考えてみましょう。
次の表で空いている変数の値を埋めてください。
現在のプログラムでどうなるかではなく、
期待する動作でどうなってほしいかです。
現在のプログラムでは、2つめの + が入力されたとき
txtDisplay.Text を 3 にする処理がありません。
計算は、= が押されたときにしか実行していません。
何が悪いか分かったでしょう。
各変数もどうなってほしいかを考え、そうなるようなコードを書きましょう。
さらに変数の追加が必要かもしれません。
次の表で空いている変数の値を埋めてください。
現在のプログラムでどうなるかではなく、
期待する動作でどうなってほしいかです。
txtDisplay.Text isFirst 値1 演算
開始した 0 true 0 未定義
1 が入力された 1
+ が入力された 1
2 が入力された 2
+ が入力された 3
3 が入力された 3
= が入力された 6
txtDisplay.Text を 3 にする処理がありません。
計算は、= が押されたときにしか実行していません。
何が悪いか分かったでしょう。
各変数もどうなってほしいかを考え、そうなるようなコードを書きましょう。
さらに変数の追加が必要かもしれません。
Re: Visual Studio、C#で電卓を作りたい。
C# は書いたことないのですが、こんな感じでどうでしょうか?
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Cal {
public partial class Form1 : Form {
public Form1() { InitializeComponent(); }
bool isFirst = true;
decimal 値1 = 0;
private void btnNumber_Click(object sender, EventArgs e) {
if (isFirst) {
txtDisplay.Text = "";
isFirst = false;
}
String text = txtDisplay.Text + ((Button)sender).Text;
decimal d = Convert.ToDecimal(text);
String text2 = d.ToString();
txtDisplay.Text = text2;
}
private void butC_Click(object sender, EventArgs e) {
txtDisplay.Text = "0";
値1 = 0;
isFirst = true;
}
enum 四則演算の記号 { 未定義, ADD, SUB, MUL, DIV };
四則演算の記号 演算 = 四則演算の記号.未定義;
private void btnAdd_Click(object sender, EventArgs e) {
if (!isFirst) calc();
演算 = 四則演算の記号.ADD;
}
// btnSub_Click, btnMul_Click, btnDiv_Click も同様
private void btnEqu_Click(object sender, EventArgs e) {
calc();
}
private void calc() {
decimal 値2 = Convert.ToDecimal(txtDisplay.Text);
switch (演算) {
case 四則演算の記号.ADD: 値1 += 値2; break;
case 四則演算の記号.SUB: 値1 -= 値2; break;
case 四則演算の記号.MUL: 値1 *= 値2; break;
case 四則演算の記号.DIV: 値1 /= 値2; break;
default: 値1 = 値2; break;
}
txtDisplay.Text = 値1.ToString();
isFirst = true;
}
}
}
Re: Visual Studio、C#で電卓を作りたい。
返信が遅くなり、申し訳ありません。
少しずつ理解はできつつあるのですが…もうしばらく、お付き合いお願いいたします。
現在、足し算は問題なく機能しております。
ですが、引き算をする際に「9 - 1 - 1 = 7」まではいいのですが、
クリアボタン(btnC)を押して、新しく計算しようとすると
「9 -」と入力した時点で答えが「- 9」となってしまい、「9 - 9 = -18」と表示されます。
また、掛け算と割り算はクリアボタンを入れると、
どの数字を入れて計算しようとしても「0」と表示されてしまいます。
※液晶にあたる部分をTextBoxで作り「txtDisplay」と名づけてあります。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Cal
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
bool isFirst = true;
decimal 値1 = 0;
//0~9までの数字。
private void btnNumber_Click(object sender, EventArgs e)
{
if (isFirst)
{
txtDisplay.Text = "";
isFirst = false;
}
String text = txtDisplay.Text + ((Button)sender).Text;
decimal d = Convert.ToDecimal(text);
String text2 = d.ToString();
txtDisplay.Text = text2;
}
//クリア。
private void btnC_Click(object sender, EventArgs e)
{
txtDisplay.Text = "0";
値1 = 0;
isFirst = true;
}
enum 四則演算の記号 { 未定義, ADD, SUB, MUL, DIV };
四則演算の記号 演算 = 四則演算の記号.未定義;
//足し算。
private void btnAdd_Click(object sender, EventArgs e)
{
if (!isFirst) calc();
演算 = 四則演算の記号.ADD;
}
//引き算。
private void btnSub_Click(object sender, EventArgs e)
{
if (!isFirst) calc();
演算 = 四則演算の記号.SUB;
}
//掛け算。
private void btnMul_Click(object sender, EventArgs e)
{
if (!isFirst) calc();
演算 = 四則演算の記号.MUL;
}
//割り算。
private void btnDiv_Click(object sender, EventArgs e)
{
if (!isFirst) calc();
演算 = 四則演算の記号.DIV;
}
//イコール。
private void btnEqu_Click(object sender, EventArgs e)
{
calc();
}
private void calc()
{
decimal 値2 = Convert.ToDecimal(txtDisplay.Text);
switch (演算)
{
case 四則演算の記号.ADD:
値1 += 値2;
break;
case 四則演算の記号.SUB:
値1 -= 値2;
break;
case 四則演算の記号.MUL:
値1 *= 値2;
break;
case 四則演算の記号.DIV:
値1 /= 値2;
break;
default:
値1 = 値2;
break;
}
txtDisplay.Text = 値1.ToString();
isFirst = true;
}
private void Form1_Load(object sender, EventArgs e)
{
}
}
}
よろしくお願いいたします。
少しずつ理解はできつつあるのですが…もうしばらく、お付き合いお願いいたします。
現在、足し算は問題なく機能しております。
ですが、引き算をする際に「9 - 1 - 1 = 7」まではいいのですが、
クリアボタン(btnC)を押して、新しく計算しようとすると
「9 -」と入力した時点で答えが「- 9」となってしまい、「9 - 9 = -18」と表示されます。
また、掛け算と割り算はクリアボタンを入れると、
どの数字を入れて計算しようとしても「0」と表示されてしまいます。
※液晶にあたる部分をTextBoxで作り「txtDisplay」と名づけてあります。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Cal
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
bool isFirst = true;
decimal 値1 = 0;
//0~9までの数字。
private void btnNumber_Click(object sender, EventArgs e)
{
if (isFirst)
{
txtDisplay.Text = "";
isFirst = false;
}
String text = txtDisplay.Text + ((Button)sender).Text;
decimal d = Convert.ToDecimal(text);
String text2 = d.ToString();
txtDisplay.Text = text2;
}
//クリア。
private void btnC_Click(object sender, EventArgs e)
{
txtDisplay.Text = "0";
値1 = 0;
isFirst = true;
}
enum 四則演算の記号 { 未定義, ADD, SUB, MUL, DIV };
四則演算の記号 演算 = 四則演算の記号.未定義;
//足し算。
private void btnAdd_Click(object sender, EventArgs e)
{
if (!isFirst) calc();
演算 = 四則演算の記号.ADD;
}
//引き算。
private void btnSub_Click(object sender, EventArgs e)
{
if (!isFirst) calc();
演算 = 四則演算の記号.SUB;
}
//掛け算。
private void btnMul_Click(object sender, EventArgs e)
{
if (!isFirst) calc();
演算 = 四則演算の記号.MUL;
}
//割り算。
private void btnDiv_Click(object sender, EventArgs e)
{
if (!isFirst) calc();
演算 = 四則演算の記号.DIV;
}
//イコール。
private void btnEqu_Click(object sender, EventArgs e)
{
calc();
}
private void calc()
{
decimal 値2 = Convert.ToDecimal(txtDisplay.Text);
switch (演算)
{
case 四則演算の記号.ADD:
値1 += 値2;
break;
case 四則演算の記号.SUB:
値1 -= 値2;
break;
case 四則演算の記号.MUL:
値1 *= 値2;
break;
case 四則演算の記号.DIV:
値1 /= 値2;
break;
default:
値1 = 値2;
break;
}
txtDisplay.Text = 値1.ToString();
isFirst = true;
}
private void Form1_Load(object sender, EventArgs e)
{
}
}
}
よろしくお願いいたします。
Re: Visual Studio、C#で電卓を作りたい。
ソースコードの表示がおかしいのは、最初の質問で経験済みでしょう。
フォーラムルールに従って、codeタグを使用してください。
フォーラムルールに従って、codeタグを使用してください。
btnC_Click() に「演算 = 四則演算の記号.未定義;」を忘れているだけでしょう。ひかり さんが書きました:現在、足し算は問題なく機能しております。
ですが、引き算をする際に「9 - 1 - 1 = 7」まではいいのですが、
クリアボタン(btnC)を押して、新しく計算しようとすると
「9 -」と入力した時点で答えが「- 9」となってしまい、「9 - 9 = -18」と表示されます。
Re: Visual Studio、C#で電卓を作りたい。
本当に完成ですか?ひかり さんが書きました:たった今、無事完成しました!
= を続けて 2回以上入力した場合の動作は想定通りですか?
Re: Visual Studio、C#で電卓を作りたい。
申し訳ありません!
実際の電卓動作と見比べてみたところ、
「=」を続けて押した場合の答えが全然違いました……。
足し算は「× 2」されていて、
引き算、掛け算、割り算は「0」となります…。
あと、先ほどの「フォーラムルール」についての指摘、
ありがとうございました。
実際の電卓動作と見比べてみたところ、
「=」を続けて押した場合の答えが全然違いました……。
足し算は「× 2」されていて、
引き算、掛け算、割り算は「0」となります…。
あと、先ほどの「フォーラムルール」についての指摘、
ありがとうございました。