C/C++ - Ошибка вычисления деления калькулятора на С#

Аватара пользователя
Ksenya

C/C++ - Ошибка вычисления деления калькулятора на С#

Сообщение Ksenya »

Здрасьте. мною написан, уже в полузавершенном варианте инженерный калькулятор..В момент написания кода к действию "деления" само действие работало прекрасно, но после добавления след строк по действиям до существующего конца программы..возникает непонятная ошибка) (причем ничего изменено не было). Подскажите в чем дело..почти дописан(



Папочку с кодом предлагаю для рассмотрения.
Вложения
Калькулятор.zip
(90.53 КБ) 0 скачиваний
Калькулятор.zip
(90.53 КБ) 0 скачиваний
Аватара пользователя
ferget

Re: C/C++ - Ошибка вычисления деления калькулятора на С#

Сообщение ferget »

Цитата Ksenya:



возникает непонятная ошибка
C/C++ - Ошибка вычисления деления калькулятора на С#




Опять тот же вопрос Изображение Что за ошибка?




Цитата Ksenya:



Подскажите в чем дело
C/C++ - Ошибка вычисления деления калькулятора на С#




Где именно смотреть? Скачал проект, но что - то в нем не так, не хватает Form1.Designer.cs, скорее всего Изображение
Аватара пользователя
Ksenya

Re: C/C++ - Ошибка вычисления деления калькулятора на С#

Сообщение Ksenya »

Наверно, все это прекрасно работает, только не в моем коде..калькулятор отказывается выполнять мои требования. Изображение
Вложения
Вложение _Del.rar больше недоступно
Вложения
_Del.rar
(105.59 КБ) 0 скачиваний
_Del.rar
(105.59 КБ) 0 скачиваний
Аватара пользователя
lxa85

Re: C/C++ - Ошибка вычисления деления калькулятора на С#

Сообщение lxa85 »

Ksenya, отслеживаю тему, все никак руки не дойдут до трассировки.

Опиши пожалуйста на словах принцип разбора выражения и его расчета.

Т.е. при введении скобок и сложных выражений, с разделением приоритетов выполнения операций, могут применяться различные типы разбора строки.

Как пример - Польская обратная запись. Она может строиться с помощью стека, может строиться с помощью дерева. Я в свое время писал на Delphi не слишком быстрый, многопроходный разбор выражения в дерево.

OPZ - как я понимаю и есть Польская обратная запись. С принципом ее работы разобрались?

К ночи постараюсь взглянуть на код.

----

ferget, LilLoco, Изображение
Аватара пользователя
LilLoco

Re: C/C++ - Ошибка вычисления деления калькулятора на С#

Сообщение LilLoco »

и еще с блоком проверки деления на ноль проблема





Код:

Код: Выделить всё

             if (ch == '/')
            {
                if (double.Parse(textBox1.Text) != 0) { answer = Temp / double.Parse(textBox1.Text); }
                else if (double.Parse(textBox1.Text) == 0)
                {
                    textBox1.Text = "Деление на ноль невозможно";
                    textBox2.Text = textBox1.Text; System.Media.SystemSounds.Asterisk.Play();
                    return;
                }
            }
            textBox1.Text = answer.ToString();
            textBox2.Text = textBox1.Text;
Аватара пользователя
LilLoco

Re: C/C++ - Ошибка вычисления деления калькулятора на С#

Сообщение LilLoco »

Ksenya, Так как вы снова не указали ошибку и место где она возникает, буду угадывать...

При делении у вас всегда выводится "Деление на ноль невозможно" .

Это из - за того, что вы обнуляете переменную, заносите ее в поле и потом его парсите:

Код:

Код: Выделить всё

            double answer = 0; // вот тут обнуление у вас
            if (ch == '+')
            { answer = Temp + double.Parse(textBox1.Text); }
            if (ch == '-')
            { answer = Temp - double.Parse(textBox1.Text); }
            if (ch == '*')
            { answer = Temp * double.Parse(textBox1.Text); }
            if (ch == '^')
            { answer = Math.Pow(Temp, double.Parse(textBox1.Text)); }
            if (ch == 'k')
            { answer = SqrtY(Temp); }
            if (ch == 'm')
            { answer = Temp % double.Parse(textBox1.Text); }
            textBox1.Text = answer.ToString();  // здесь вы в поле текстбокс1 вносите "0"
            textBox2.Text = textBox1.Text;
            if (ch == '/')
            {
// а тут начинаете парсить, в итоге первое условие никогда не выполнится, только если равно нулю.
                if (double.Parse(textBox1.Text) != 0) { answer = Temp / double.Parse(textBox1.Text); }
                else if (double.Parse(textBox1.Text) == 0)
                {
                    textBox1.Text = "Деление на ноль невозможно";
                    textBox2.Text = textBox1.Text; System.Media.SystemSounds.Asterisk.Play();
                }
            }

И еще, просто совет, на примере этого же куска кода. Не делайте просто через if, лучше использовать else if. Будет выполняться меньше проверок, тем самым оптимизируете работу.

Код:

Код: Выделить всё

            if (ch == '+')
            { answer = Temp + double.Parse(textBox1.Text); }
            else if (ch == '-')
            { answer = Temp - double.Parse(textBox1.Text); }
            else if (ch == '*')
            { answer = Temp * double.Parse(textBox1.Text); }
            esle if (ch == '^')
            { answer = Math.Pow(Temp, double.Parse(textBox1.Text)); }
....
Аватара пользователя
Ksenya

Re: C/C++ - Ошибка вычисления деления калькулятора на С#

Сообщение Ksenya »

Да, но тогда возникает ошибка, я писала о ней в пред теме..(использование переменной, которой не присвоено значение(скриншот в дополнение)

и тогда напрашивается другой вопрос: почему другие действия не становятся равными нулю? магия, как вы думаете? Изображение
Аватара пользователя
ferget

Re: C/C++ - Ошибка вычисления деления калькулятора на С#

Сообщение ferget »

Цитата Ksenya:



потому как нашла только дэлфийский
C/C++ - Ошибка вычисления деления калькулятора на С#




Ну алгоритм значит есть, остается только перевести на другой язык...


Цитата Ksenya:



нет, работает не так..потому что после нахождения деления, к примеру деления на ноль, не выводит сообщение в textbox пользователю, о том что он ошибся
C/C++ - Ошибка вычисления деления калькулятора на С#




воообще не понятно, что не так




Цитата Ksenya:



а как избавится от записи double answer=0
C/C++ - Ошибка вычисления деления калькулятора на С#




Зачем от нее избавляться?
Ответить

Вернуться в «Программирование и базы данных»