Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Калькулятор.Ошибка вычисления ариф действий (http://forum.oszone.net/showthread.php?t=218495)

Ksenya 20-10-2011 19:56 1778008

Калькулятор.Ошибка вычисления ариф действий
 
Вложений: 1
Здравствуйте. В попытке создания простейшего калькулятора на с# возникли проблемы: действия "*" и "/". Ошибка зарылась в глобальных переменных начальных значений, только в чем именно уму не приходит(

Код:

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 1778121

Цитата:

Цитата Ksenya
Ошибка зарылась в глобальных переменных начальных значений »

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

Ksenya 20-10-2011 22:23 1778134

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

LilLoco 20-10-2011 22:45 1778155

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 1779061

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

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

Ksenya 22-10-2011 00:41 1779088

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

Ksenya 22-10-2011 01:28 1779097

Вопрос исчерпан. спасибо)


Время: 21:28.

Время: 21:28.
© OSzone.net 2001-