Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Ошибка вычисления деления калькулятора на С#

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

Аватара для Ksenya

Новый участник


Сообщения: 45
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: Ksenya
Дата: 25-10-2011
Описание: добавление вложенных файлов
Вложения
Тип файла: zip Калькулятор.zip
(90.5 Kb, 11 просмотров)
Здрасьте. мною написан, уже в полузавершенном варианте инженерный калькулятор..В момент написания кода к действию "деления" само действие работало прекрасно, но после добавления след строк по действиям до существующего конца программы..возникает непонятная ошибка) (причем ничего изменено не было). Подскажите в чем дело..почти дописан(

Папочку с кодом предлагаю для рассмотрения.

Отправлено: 20:18, 25-10-2011

 

В Поисках Истины


Сообщения: 802
Благодарности: 135

Профиль | Отправить PM | Цитировать


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

Цитата Ksenya:
Подскажите в чем дело »
Где именно смотреть? Скачал проект, но что - то в нем не так, не хватает Form1.Designer.cs, скорее всего

-------
foreach(short w in new short[] {73,3,79,83,90,79,78,69}){
Console.Write((char)w);
}


Отправлено: 22:02, 25-10-2011 | #2



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

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Ksenya

Новый участник


Сообщения: 45
Благодарности: 0

Профиль | Отправить PM | Цитировать


перезалила

Отправлено: 23:31, 25-10-2011 | #3


В Поисках Истины


Сообщения: 802
Благодарности: 135

Профиль | Отправить PM | Цитировать


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)); }
....

-------
foreach(short w in new short[] {73,3,79,83,90,79,78,69}){
Console.Write((char)w);
}

Это сообщение посчитали полезным следующие участники:

Отправлено: 07:47, 26-10-2011 | #4


Аватара для ferget

Разный


Сообщения: 1294
Благодарности: 359

Профиль | Отправить PM | Цитировать


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

Код: Выделить весь код
             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;
Это сообщение посчитали полезным следующие участники:

Отправлено: 08:20, 26-10-2011 | #5


Аватара для Ksenya

Новый участник


Сообщения: 45
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 19:21, 26-10-2011 | #6


Аватара для ferget

Разный


Сообщения: 1294
Благодарности: 359

Профиль | Отправить PM | Цитировать


Цитата Ksenya:
но тогда возникает ошибка »
тогда это когда?

и где скриншот?
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:29, 26-10-2011 | #7


Аватара для Ksenya

Новый участник


Сообщения: 45
Благодарности: 0

Профиль | Отправить PM | Цитировать


извините, "Общая квота форума превышена на 117.6 Kb. " , не получилось. (Когда оставляю просто:
Код: Выделить весь код
private void button_answ_Click(object sender, EventArgs e)
        {   double answer; // без "=0"
            if (ch == '+')
            { answer = Temp + double.Parse(textBox1.Text); }
догадалась, надо просто этот этап выполнить последним
Код: Выделить весь код
 private void button_answ_Click(object sender, EventArgs e)
        {
           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 == '/')
            {
                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 (ch == 'm')
            { answer = Temp % double.Parse(textBox1.Text); }
            
            textBox1.Text = answer.ToString();
            textBox2.Text = textBox1.Text;
        }
вот я чучело-мяучело=*
спасибо ребят..

эх и намучилась я с ним, с этим калькулятором, есть кстати полу-почти-инженерный исходник, но он мудреный слишком и с ошибками, тоже с делением..препод завалит.(

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

Отправлено: 19:32, 26-10-2011 | #8


Аватара для Ksenya

Новый участник


Сообщения: 45
Благодарности: 0

Профиль | Отправить PM | Цитировать


нет, работает не так..потому что после нахождения деления, к примеру деления на ноль, не выводит сообщение в textbox пользователю, о том что он ошибся. а как избавится от записи double answer=0; или что-то в этом роде?

Отправлено: 20:03, 26-10-2011 | #9


В Поисках Истины


Сообщения: 802
Благодарности: 135

Профиль | Отправить PM | Цитировать


Цитата Ksenya:
потому как нашла только дэлфийский »
Ну алгоритм значит есть, остается только перевести на другой язык...
Цитата Ksenya:
нет, работает не так..потому что после нахождения деления, к примеру деления на ноль, не выводит сообщение в textbox пользователю, о том что он ошибся »
воообще не понятно, что не так

Цитата Ksenya:
а как избавится от записи double answer=0 »
Зачем от нее избавляться?

-------
foreach(short w in new short[] {73,3,79,83,90,79,78,69}){
Console.Write((char)w);
}


Отправлено: 21:43, 26-10-2011 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Ошибка вычисления деления калькулятора на С#

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
C/C++ - [решено] Калькулятор.Ошибка вычисления ариф действий Ksenya Программирование и базы данных 6 22-10-2011 01:28
CMD/BAT - [решено] Остаток от деления Forpost Скриптовые языки администрирования Windows 2 25-03-2011 23:58
2003/XP/2000 - EXCEL вместо калькулятора Vygov Microsoft Office (Word, Excel, Outlook и т.д.) 3 10-03-2011 14:55
Загрузка - Win7 не загружается после деления HDD Акронисом vadimovich2 Microsoft Windows 7 6 09-04-2010 20:42
Скин для калькулятора Vlad Drakula Программирование и базы данных 12 01-06-2004 08:55




 
Переход