Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.05.2016, 18:37   #1
Кари
 
Регистрация: 04.04.2015
Сообщений: 8
Печаль Помогите найти ошибку в коде калькулятора

Складывает только нормально. А вот отнимать не хочет: 1-1-1 = -3. Сначала складывает, а потом к результату добавляет минус. Как и делить, и умножать. Как не смотрела - не вижу ошибку.
Код:
public double sum = 0;
public char ch;
private void buttonPlus_Click(object sender, EventArgs e)
        {
            if (textBox1.Text == "")
                MessageBox.Show("Данные не введены");
            else
            {
                sum += Double.Parse(textBox1.Text);
                textBox1.Text = "";
            }
            ch = '+';
         }
private void button50_Click(object sender, EventArgs e)
        {
            // кнопка "="

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

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

Последний раз редактировалось Кари; 14.05.2016 в 19:01.
Кари вне форума Ответить с цитированием
Старый 14.05.2016, 19:30   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

при нажатии кнопок надо выполнять не то что нажали сейчас, а то что было нажато РАНЬШЕ.
(именно в таком режиме работают "классические" калькуляторы с одним окном ввода числа) и выполнение последней запомненной операции по '='

CALC(ch, Parse(Edit.text));//выполнить запомненную (сохраненную в переменной ch)
ch=.... // запомнить новую
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 14.05.2016, 19:37   #3
Кари
 
Регистрация: 04.04.2015
Сообщений: 8
По умолчанию

Есть еще один textBox, в нем отображается вот именно это "30+2-1", но в вычислении он не принимает участия.

Последний раз редактировалось Кари; 14.05.2016 в 19:42.
Кари вне форума Ответить с цитированием
Старый 14.05.2016, 21:06   #4
Кари
 
Регистрация: 04.04.2015
Сообщений: 8
По умолчанию

Я нашла ошибку. Переменная sum изначально равна нулю. Нужно присвоить как-то первое значение этой переменной. Но вот как пока не знаю.
Кари вне форума Ответить с цитированием
Старый 14.05.2016, 21:19   #5
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

каковы ваши действия (последовательность ввода) при вычислении 30 +2 -1 ???

1. сразу набираем ВСЕ выражение в ОДНОМ окне именно в таком виде '30 + 2 - 1 =' и выполняем расчет формулы (все операции за раз) ?

или же
2.1. вводим число '30'
2.2. нажимаем '+' (калькулятор ЗАПОМИНАЕТ введенное число) обычно просто суммирование к нулю.
2.3. вводим число '2'
2.4. нажимаем '-' (при этом "обычный" калькулятор вычисляет результат предыдущей операции 30 +2 =32 и может даже его вывести
2.5. вводим число '1'
2.6. нажимаем '=' (идет выполнение и вывод результата 'последней' операции ) 32 - 1 =31
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 14.05.2016, 21:45   #6
Кари
 
Регистрация: 04.04.2015
Сообщений: 8
По умолчанию

Второй вариант, последовательно.
Кари вне форума Ответить с цитированием
Старый 15.05.2016, 09:27   #7
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Второй вариант, последовательно.
Цитата:
при нажатии кнопок надо выполнять не то что нажали сейчас, а то что было нажато РАНЬШЕ.
когда мы нажимаем кнопку действия мы еще НЕ ЗНАЕМ к чему мы ее будем должны применить (число вводится позднее!)
исключением является кнопка '=' .
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите найти ошибку в коде timcryt Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 13.03.2016 18:23
Помогите найти ошибку в коде! Igrohim Общие вопросы Delphi 10 29.12.2014 00:01
Помогите найти ошибку в коде vbn1 Общие вопросы C/C++ 4 12.12.2014 20:50
Помогите найти ошибку в коде С++ JokerCD Помощь студентам 0 26.12.2013 12:38
помогите найти ошибку в коде xaero93 Помощь студентам 4 20.04.2009 16:05