Войти

Показать полную графическую версию : [решено] Калькулятор.Ошибка вычисления ариф действий


Ksenya
20-10-2011, 19:56
Здравствуйте. В попытке создания простейшего калькулятора на с# возникли проблемы: действия "*" и "/". Ошибка зарылась в глобальных переменных начальных значений, только в чем именно уму не приходит(


namespace Kalkulator
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button_1_Click(object sender, EventArgs e)
{
textBox1.Text += 1;
textBox2.Text += 1;
}

private void button_2_Click(object sender, EventArgs e)
{
textBox1.Text += 2;
textBox2.Text += 2;
}

private void button_3_Click(object sender, EventArgs e)
{
textBox1.Text += 3;
textBox2.Text += 3;
}

private void button_4_Click(object sender, EventArgs e)
{
textBox1.Text += 4;
textBox2.Text += 4;
}

private void button_5_Click(object sender, EventArgs e)
{
textBox1.Text += 5;
textBox2.Text += 5;
}

private void button_6_Click(object sender, EventArgs e)
{
textBox1.Text += 6;
textBox2.Text += 6;
}

private void button_7_Click(object sender, EventArgs e)
{
textBox1.Text += 7;
textBox2.Text += 7;
}

private void button_8_Click(object sender, EventArgs e)
{
textBox1.Text += 8;
textBox2.Text += 8;
}

private void button_9_Click(object sender, EventArgs e)
{
textBox1.Text += 9;
textBox2.Text += 9;
}

private void button_0_Click(object sender, EventArgs e)
{
textBox1.Text += 0;
textBox2.Text += 0;
}

private void button_plus_Click(object sender, EventArgs e)
{
if (textBox1.Text == "")
MessageBox.Show("Данные не введены");
else
{
ch = '+';
sum += Double.Parse(textBox1.Text);
textBox1.Text = "";
textBox2.Text += "+";

}
}

private void button_minus_Click(object sender, EventArgs e)
{
if (textBox1.Text == "")
MessageBox.Show("Данные не введены");
else
{
ch = '-';
sum -= Double.Parse(textBox1.Text);
textBox1.Text = "";
textBox2.Text += "-";
}
}

private void button_mult_Click(object sender, EventArgs e)
{
if (textBox1.Text == "")
MessageBox.Show("Данные не введены");
else
{
ch = '*';
sam *= Double.Parse(textBox1.Text);
sum = sam;
textBox1.Text = "";
textBox2.Text += "*";
}
}

private void button_del_Click(object sender, EventArgs e)
{
if (textBox1.Text == "")
MessageBox.Show("Данные не введены");
else
{
ch = '/';
sam /= Double.Parse(textBox1.Text);
sum = sam;
textBox1.Text = "";
textBox2.Text += "/";
}
}

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

private void button_answ_Click(object sender, EventArgs e)
{
if (ch == '+')
sum += Double.Parse(textBox1.Text);
if (ch == '-')
sum -= Double.Parse(textBox1.Text);
if (ch == '*')
sum *= Double.Parse(textBox1.Text);
if (ch == '/')
sum /= Double.Parse(textBox1.Text);
textBox1.Text = sum.ToString() ;

textBox2.Text = textBox1.Text;

}
public double sam=1;
public double sum=0;
}
}

LilLoco
20-10-2011, 22:06
Ошибка зарылась в глобальных переменных начальных значений »
Текст ошибки? Ошибка при компиляции? или же во время выполнения?
У вас переменные sam и sum объявлены в дизайнере (Form1.designer.cs) и в классе формы (Form1.cs). Удалите из дизайнера.
Без них проект компилируется, и как то считает - не проверял правильность.

Ksenya
20-10-2011, 22:23
Ошибка во время выполнения..считает не правильно)) не соображу с глобальными начальными переменными..как совместить в программе одну=0 и другую=1, если мы можем выбрать любое действие будь то ("+","-"): для них начальная переменная =0 и ("*","/"): =1?
__
просто если мы используем переменную, а без нее никак, то никак и без начальных значений, ей задаваемых)

LilLoco
20-10-2011, 22:45
Ksenya, на самом деле не понятно зачем вам 0 или 1. может быть уже сказывается конец дня

Почему бы вам просто не объявить переменную
private double Temp;
затем в обработчике события клавиши операции ( для примера возьмем умножение)

private void button_mult_Click(object sender, EventArgs e)
{
if (textBox1.Text == "")
MessageBox.Show("Данные не введены");
else
{
ch = '*';
Temp = double.Parse(textBox1.Text);
textBox1.Text = "";
textBox2.Text += "*";
}
}

далее в обработчике события кнопки равно

private void button_answ_Click(object sender, EventArgs e)
{
double answer;
...
if (ch == '*')
{
answer = Temp * double.Parse(textBox1.Text);
}
....
textBox1.Text = answer.ToString() ;

textBox2.Text = textBox1.Text;

}

Попробуйте, должно получиться...

Ksenya
21-10-2011, 23:48
Попыталась реализовать..В итоге возникает ошибка: использование локальной переменной, которой не присвоено значение..: вот для чего нужны начальные значения..
если же присвоить зн-е=0, считает не правильно)

Извините пожалуйста, я поспешила и скомпилила, не удалив предыдущие действия..спасибо, все верно..работает..как доктор прописал. Спасибо, спаситель ;)

Ksenya
22-10-2011, 00:41
Однако потом возникает вопрос, что делать, если калькулятор инженерный и помимо простых реализаций ариф действий требуются корни 3-ей степени, логарифмы и другие преобразования. Я к тому, что как в дальнейшем поведет себя, а может и не нужна будет вовсе, переменная ch?

Ksenya
22-10-2011, 01:28
Вопрос исчерпан. спасибо)




© OSzone.net 2001-2012