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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.03.2013, 18:14   #1
Cipher
 
Регистрация: 24.03.2013
Сообщений: 4
Вопрос Неполадки при работе с оператором if-else ( C++ )

Совсем недавно начал изучать С++, дошёл до оператора условия и тут возникла проблема в практике. Код решения квадратных уравнений ( создал специально так много условий, чтобы лучше усвоить ):
[ #include <iostream>
#include <math.h>

using namespace std;

int main()
{
float a, b, c, x1, x2, d;

cout << "ax^2 + bx + c = 0" << endl;

cout << "Vvedite znacheniya a, b ,c" << endl;
cin >> a >> b >> c;

if ( b < 0 )
{
if ( c < 0 )
cout << a << "x^2" << b << "x" << c << "=0" << endl;
else if ( c = 0 )
cout << a << "x^2" << b << "x" << "=0" << endl;
else
cout << a << "x^2" << b << "x+" << c << "=0" << endl;

}

else if ( b = 0 )
{
if ( c < 0 )
cout << a << "x^2" << c << "=0" << endl;
else if ( c = 0 )
cout << a << "x^2" << "=0" << endl;
else
cout << a << "x^2+" << c << "=0" << endl;
}
else
{
if ( c < 0 )
cout << a << "x^2+" << b << "x" << c << "=0" << endl;
else if ( c = 0 )
cout << a << "x^2+" << b << "x" << "=0" << endl;
else
cout << a << "x^2+" << b << "x+" << c << "=0" << endl;
}

d = pow ( b, 2 ) - 4 * a * c;

if ( d > 0 )
{
x1 = ( - b - sqrt ( d )) / 2 * a;
x2 = ( - b + sqrt ( d )) / 2 * a;
cout << "Korni uravneniya ravny: " << x1 << " and " << x2 << endl;
}

else if ( d = 0 )
{
x1 = ( - b ) / 2 * a;
cout << "Koren' uravneniya reven: " << x1 << endl;
}

else

cout << "Uravneniye ne imeyet korney" << endl;

return 0;
} ]

Проблема, собственно, в том, что при вводе параметра b, программа пишет другие значения c и b, не находя корней уравнения, хотя они есть. Помогите найти ошибку, а то много времени уже убил
Cipher вне форума Ответить с цитированием
Старый 24.03.2013, 18:31   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

Код:
#include <iostream>
#include <math.h>

using namespace std;

int main()
{
    bool t = false;
    double a, b, c, x1, x2, d;

    cout << "ax^2 + bx + c = 0" << endl;

    cout << "Vvedite znacheniya a, b ,c" << endl;
    cin >> a >> b >> c;

    if (a != 0)
    {
        t = true;
        cout << a << "x^2";
    }
    if (b != 0)
    {
        if (t && b > 0) cout << "+";
        t = true;
        cout << b << "x";
    }
    if (c != 0)
    {
        if (t && c > 0) cout << "+";
        cout << c;
    }
    cout << "=0" << endl;

    if (a != 0)
    {
        d = b * b - 4 * a * c;
        if ( d > 0 )
        {
            x1 = ( - b - sqrt ( d )) / (2 * a);
            x2 = ( - b + sqrt ( d )) / (2 * a);
            cout << "Korni uravneniya ravny: " << x1 << " and " << x2 << endl;
        }
        else if (d < 0)
        {
            cout << "Uravneniye ne imeyet korney" << endl;
        }
        else
        {
            x1 = ( - b ) / (2 * a);
            cout << "Koren' uravneniya reven: " << x1 << endl;
        }
    } else {
        cout << "Lineinie sluchai" << endl;
    }

    return 0;
}
Цитата:
Что сразу бросается в глаза это = - присваивание
Кстати, не заметил
Просто не понравился такой сложный вывод, поэтому "тупо" переписал.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 24.03.2013 в 19:24.
BDA вне форума Ответить с цитированием
Старый 24.03.2013, 18:34   #3
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,680
По умолчанию

Что сразу бросается в глаза это = - присваивание
Код:
if(с = 0)
а должно быть
Код:
if(c == 0)
и далее по тексту сделать такие же изменения.
BDA такие коды выдает... ОПЫТ, ОПЫТ
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 24.03.2013, 18:50   #4
Cipher
 
Регистрация: 24.03.2013
Сообщений: 4
По умолчанию

Спасибо, ребят. Насчёт == не знал. BDA, не, я некоторые команды из твоего кода не знаю
Cipher вне форума Ответить с цитированием
Старый 24.03.2013, 18:58   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

Cipher, учиться не поздно
!= - "не равно"
&& - "логическое и"
(t используется для того, чтобы дальнейший код мог узнать, был ли вывод до него)
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 24.03.2013, 19:14   #6
Cipher
 
Регистрация: 24.03.2013
Сообщений: 4
По умолчанию

Нет, ну теперь точно разобрался. Сэнкс)

Последний раз редактировалось Cipher; 24.03.2013 в 19:16.
Cipher вне форума Ответить с цитированием
Старый 24.03.2013, 19:25   #7
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

//delete
//delete
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 24.03.2013, 19:26   #8
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

( - b ) / 2 * a эквивалентно - a * b /2.
Это пропустил
Код выше исправлен.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Зависание при работе с HttpWebRequest при обращении к некоторым сайтам Mishiko C# (си шарп) 0 16.08.2012 12:24
неполадки при исп. EnumWindows chertovich Win Api 3 24.12.2011 05:53
samsung ml-1641 как устранить неполадки при печати? alex(21) Компьютерное железо 1 28.11.2010 19:53
Ошибка при работе с БД malevich БД в Delphi 8 25.11.2007 15:10