Форум программистов, компьютерный форум CyberForum.ru

Что-то не так? - C++

Восстановить пароль Регистрация
 
DeZRo
3 / 3 / 0
Регистрация: 05.11.2012
Сообщений: 49
07.04.2013, 14:19     Что-то не так? #1
Почему-то выдает два сообщения вместо одного ( лишнее выделено на картине). Скрин прикреплен. Вот отдельно фрагмент кода:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
double x1 , x2 , x3 , x4;
        if (D > 0) 
        {
            
        double x1 = (-b + sqrt(D)) / (2*a);
        double x2 = (-b - sqrt(D)) / (2*a);
        if (x1<0 , x2<0)
        {
            double x3= x1*(-1);
            double x4=x2*(-1);
                cout<< "По теореме Виета множители равны:"<<endl;
            cout<< a << "(x+"<< x3 << ")(x+"<< x4 <<")"<<endl;
        }
        if (x1<0 ,x2>0)
        {
            double x3= x1*(-1);
            double x4=x2*(-1);
            cout<< "По теореме Виета множители равны:"<<endl;
            cout<< a << "(x+"<< x3 << ")(x"<<x4<<")"<<endl;
            
        }
        if (x1>0 ,x2<0)
        {
            double x3= x1*(-1);
            double x4=x2*(-1);
            cout<< "По теореме Виета множители равны:"<<endl;
            cout<< a << "(x"<< x3 << ")(x+"<<x4<<")"<<endl;
            
        }
        if (x1>0 ,x2>0)
        {
            double x3= x1*(-1);
            double x4=x2*(-1);
            cout<< "По теореме Виета множители равны:"<<endl;
            cout<< a << "(x"<< x3 << ")(x"<<x4<<")"<<endl;
            
        }
Подскажите что здесь не так и правильно ли поставлены условия?
Миниатюры
Что-то не так?  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.04.2013, 14:19     Что-то не так?
Посмотрите здесь:

что не так? C++
C++ что-то не так
что-то не так C++
Что не так? C++
что не так C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
07.04.2013, 14:47     Что-то не так? #2
DeZRo,
C++
1
2
3
4
5
if (D > 0) 
        {
            
        double x1 = (-b + sqrt(D)) / (2*a);
        double x2 = (-b - sqrt(D)) / (2*a);
Вот в этом месте вы ошиблись когда писали или когда копировали, либо фрагмент левый (я про скобочку)
DeZRo
3 / 3 / 0
Регистрация: 05.11.2012
Сообщений: 49
07.04.2013, 14:59  [ТС]     Что-то не так? #3
Цитата Сообщение от Ternsip Посмотреть сообщение
DeZRo,
C++
1
2
3
4
5
if (D > 0) 
        {
            
        double x1 = (-b + sqrt(D)) / (2*a);
        double x2 = (-b - sqrt(D)) / (2*a);
Вот в этом месте вы ошиблись когда писали или когда копировали, либо фрагмент левый (я про скобочку)
Можно уточнить "координаты" ? =D
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
07.04.2013, 15:10     Что-то не так? #4
DeZRo, Я вас не понял. Я имел ввиду, что вы не весь код выложили, либо ошиблись при копировании. Скиньте весь код
DeZRo
3 / 3 / 0
Регистрация: 05.11.2012
Сообщений: 49
07.04.2013, 15:11  [ТС]     Что-то не так? #5
Цитата Сообщение от Ternsip Посмотреть сообщение
DeZRo, Я вас не понял. Я имел ввиду, что вы не весь код выложили, либо ошиблись при копировании. Скиньте весь код
Весь, так весь:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#include <iostream>
#include <math.h>
#include <cstdio>
#include <Windows.h>
#include "process.h"
 
using namespace std;
int main()
{ 
    setlocale(LC_ALL,"Russian");
    int a, b, c, n;
    cout <<"1 - Дискриминант"<<endl;
    cout <<"2 - Теорема Виета"<< endl;
    cin >> n;
    if (n=1)
    
    double x1 , x2 ;
    
    cout <<"Введите число a" << endl; 
    cin >> a;
    cout <<"Введите число b" << endl;
    cin >> b;
    cout <<"Введите число c" << endl;
    cin >> c;
    double D = b*b - 4*a*c ;
    cout << "По формуле находения дискриминанта b^2-4ac, дискриминант равен " << D << endl;
        
    if (D > 0) 
        {
        cout <<"D>0, тогда"<<endl;
        double x1 = (-b + sqrt(D)) / (2*a);
        double x2 = (-b - sqrt(D)) / (2*a);
        cout << " x1 = " << x1 << endl;
        cout << " x2 = " << x2 << endl;
    }
    if (D == 0)
    {
        cout <<"D=0 , тогда"<<endl;
        double x = -b / (2*a);
        cout << "x = " << x << endl;
    }
    if (D < 0)
    {
        cout <<"D<0 , тогда"<<endl;
        cout << "Нет корней" << endl;
    }
    if(n=2)
    {
        double x1 , x2 , x3 , x4;
        if (D > 0) 
        {
            
        double x1 = (-b + sqrt(D)) / (2*a);
        double x2 = (-b - sqrt(D)) / (2*a);
        if (x1<0 , x2<0)
        {
            double x3= x1*(-1);
            double x4=x2*(-1);
                cout<< "По теореме Виета множители равны:"<<endl;
            cout<< a << "(x+"<< x3 << ")(x+"<< x4 <<")"<<endl;
        }
        if (x1<0 ,x2>0)
        {
            double x3= x1*(-1);
            double x4=x2*(-1);
            cout<< "По теореме Виета множители равны:"<<endl;
            cout<< a << "(x+"<< x3 << ")(x"<<x4<<")"<<endl;
            
        }
        if (x1>0 ,x2<0)
        {
            double x3= x1*(-1);
            double x4=x2*(-1);
            cout<< "По теореме Виета множители равны:"<<endl;
            cout<< a << "(x"<< x3 << ")(x+"<<x4<<")"<<endl;
            
        }
        if (x1>0 ,x2>0)
        {
            double x3= x1*(-1);
            double x4=x2*(-1);
            cout<< "По теореме Виета множители равны:"<<endl;
            cout<< a << "(x"<< x3 << ")(x"<<x4<<")"<<endl;
            
        }
        }
        
        
 
    }
    int r;
    cout << " Для перезапуска программы введите 1"<< endl;
    cout << " Для выхода введите 2" << endl;
    cin >> r;
    if (r==1)
    {
        LPCWSTR open = L"open";
        LPCWSTR file = L"Дискриминант.exe";
        ShellExecute (NULL, open, file ,0,0, SW_SHOWNORMAL);
        return 0;
 
    }
    else (r==2);
    {
        return 0;
    }
 
    system("pause");
}
P.S. надеюсь, что комментариев не надо =)
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
07.04.2013, 15:19     Что-то не так? #6
DeZRo, ну у вас масса ошибок, начнём с того, что if (D == 0) сюда вы никогда не попадёте. т.к. D - double. Чтобы сделать такое условие нужно проверить лежит ли D в эпсилон окрестности 0 те abs(D) <= 1e-20

Добавлено через 3 минуты
DeZRo, А ещё условие нужно писать так, а не через запятую
C++
1
 if (x1>0  && x2>0)
DeZRo
3 / 3 / 0
Регистрация: 05.11.2012
Сообщений: 49
07.04.2013, 15:20  [ТС]     Что-то не так? #7
Цитата Сообщение от Ternsip Посмотреть сообщение
DeZRo, ну у вас масса ошибок, начнём с того, что if (D == 0) сюда вы никогда не попадёте. т.к. D - double. Чтобы сделать такое условие нужно проверить лежит ли D в эпсилон окрестности 0 те abs(D) <= 1e-20
1) Я не на столько прошарен в этой теме, поэтому нашел только две ошибки( забыл кое где {} поставить)
2) Я ничего не понял из того, что вы сказали
3)Я поставил там где надо эти самые {} и теперь у меня не выводит "По теореме Виета множители равны: блаблабла".....
p.s. код с исправлением :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#include <iostream>
#include <math.h>
#include <cstdio>
#include <Windows.h>
#include "process.h"
 
using namespace std;
int main()
{ 
    setlocale(LC_ALL,"Russian");
    int a, b, c, n;
    cout <<"1 - Дискриминант"<<endl;
    cout <<"2 - Теорема Виета"<< endl;
    cin >> n;
    if (n=1)
        
    {
    double x1 , x2 ;
    
    cout <<"Введите число a" << endl; 
    cin >> a;
    cout <<"Введите число b" << endl;
    cin >> b;
    cout <<"Введите число c" << endl;
    cin >> c;
    double D = b*b - 4*a*c ;
    cout << "По формуле находения дискриминанта b^2-4ac, дискриминант равен " << D << endl;
    
    if (D > 0) 
        {
        cout <<"D>0, тогда"<<endl;
        double x1 = (-b + sqrt(D)) / (2*a);
        double x2 = (-b - sqrt(D)) / (2*a);
        cout << " x1 = " << x1 << endl;
        cout << " x2 = " << x2 << endl;
    }
    if (D == 0)
    {
        cout <<"D=0 , тогда"<<endl;
        double x = -b / (2*a);
        cout << "x = " << x << endl;
    }
    if (D < 0)
    {
        cout <<"D<0 , тогда"<<endl;
        cout << "Нет корней" << endl;
    }
    }
    if(n=2)
    {
        double x1 , x2 , x3 , x4 , D;
        if (D > 0) 
        {
            
        double x1 = (-b + sqrt(D)) / (2*a);
        double x2 = (-b - sqrt(D)) / (2*a);
        if (x1<0 , x2<0)
        {
            double x3= x1*(-1);
            double x4=x2*(-1);
                cout<< "По теореме Виета множители равны:"<<endl;
            cout<< a << "(x+"<< x3 << ")(x+"<< x4 <<")"<<endl;
        }
        if (x1<0 ,x2>0)
        {
            double x3= x1*(-1);
            double x4=x2*(-1);
            cout<< "По теореме Виета множители равны:"<<endl;
            cout<< a << "(x+"<< x3 << ")(x"<<x4<<")"<<endl;
            
        }
        if (x1>0 ,x2<0)
        {
            double x3= x1*(-1);
            double x4=x2*(-1);
            cout<< "По теореме Виета множители равны:"<<endl;
            cout<< a << "(x"<< x3 << ")(x+"<<x4<<")"<<endl;
            
        }
        if (x1>0 ,x2>0)
        {
            double x3= x1*(-1);
            double x4=x2*(-1);
            cout<< "По теореме Виета множители равны:"<<endl;
            cout<< a << "(x"<< x3 << ")(x"<<x4<<")"<<endl;
            
        }
        }
        
        
 
    }
    int r;
    cout << " Для перезапуска программы введите 1"<< endl;
    cout << " Для выхода введите 2" << endl;
    cin >> r;
    if (r==1)
    {
        LPCWSTR open = L"open";
        LPCWSTR file = L"Дискриминант.exe";
        ShellExecute (NULL, open, file ,0,0, SW_SHOWNORMAL);
        return 0;
 
    }
    else (r==2);
    {
        return 0;
    }
 
    system("pause");
}
А еще выдает
C++
1
Run-Time Check Failure #3 - The variable 'D' is being used without being initialized.
p.p.s. Помогите сделать код нормальным. Я не особо разбираюсь, а сдать нужно уже в среду.
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
07.04.2013, 15:25     Что-то не так? #8
DeZRo, if (x1<0 ,x2>0) исправьте на if (x1<0 && x2>0) и станет чуть меньше ошибок. ещё раз повторю if (D == 0 ) Это условие не выполняется никогда (почти, если повезёт, но редко) D - вещественное Если double d = 0, то в реальности d = 1e-127 (10^-127 очень мало но не 0)
DeZRo
3 / 3 / 0
Регистрация: 05.11.2012
Сообщений: 49
07.04.2013, 15:29  [ТС]     Что-то не так? #9
Цитата Сообщение от Ternsip Посмотреть сообщение
DeZRo, if (x1<0 ,x2>0) исправьте на if (x1<0 && x2>0) и станет чуть меньше ошибок. ещё раз повторю if (D == 0 ) Это условие не выполняется никогда (почти, если повезёт, но редко) D - вещественное Если double d = 0, то в реальности d = 1e-127 (10^-127 очень мало но не 0)
D может быть равно нулю, да, редко, но может. Есть значения, при которых дискриминант равен 0 -.-
в if все поправил. ошибку все еще выдает, но не могу понять почему....
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
07.04.2013, 15:34     Что-то не так? #10
DeZRo, вы не понимаете, если double d = 0, то (d == 0) = false, т.е. в условие не зайдёт.
А вот если if (abs(d) < 1e-20) тогда зайдёт

Добавлено через 3 минуты
DeZRo, D у вас объявлена в другом блоке, когда вы хотите его вызывать в строчке 52 у вас происходит краш. И т.к. вы не соблюдаете даже форматирования кода, вы запутались.
DeZRo
3 / 3 / 0
Регистрация: 05.11.2012
Сообщений: 49
07.04.2013, 15:35  [ТС]     Что-то не так? #11
Цитата Сообщение от Ternsip Посмотреть сообщение
DeZRo, вы не понимаете, если double d = 0, то (d == 0) = false, т.е. в условие не зайдёт.
А вот если if (abs(d) < 1e-20) тогда зайдёт

Добавлено через 3 минуты
DeZRo, D у вас объявлена в другом блоке, когда вы хотите его вызывать в строчке 52 у вас происходит краш. И т.к. вы не соблюдаете даже форматирования кода, вы запутались.
Да, вы правы, я запутался, попытался исправить и опять провал:
C++
1
Ошибка  1   error C2086: double D: переопределение  c:\users\igor\desktop\дискриминант\дискриминант\дискриминант.cpp    52
вот код....опять...:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#include <iostream>
#include <math.h>
#include <cstdio>
#include <Windows.h>
#include "process.h"
 
using namespace std;
int main()
{ 
    setlocale(LC_ALL,"Russian");
    int a, b, c, n;
    cout <<"1 - Дискриминант"<<endl;
    cout <<"2 - Теорема Виета"<< endl;
    cin >> n;
    if (n=1)
    {
    
    double x1 , x2 ;
    
    cout <<"Введите число a" << endl; 
    cin >> a;
    cout <<"Введите число b" << endl;
    cin >> b;
    cout <<"Введите число c" << endl;
    cin >> c;
    double D = b*b - 4*a*c ;
    cout << "По формуле находения дискриминанта b^2-4ac, дискриминант равен " << D << endl;
    
    if (D > 0) 
        {
        cout <<"D>0, тогда"<<endl;
        double x1 = (-b + sqrt(D)) / (2*a);
        double x2 = (-b - sqrt(D)) / (2*a);
        cout << " x1 = " << x1 << endl;
        cout << " x2 = " << x2 << endl;
    }
    if (D == 0)
    {
        cout <<"D=0 , тогда"<<endl;
        double x = -b / (2*a);
        cout << "x = " << x << endl;
    }
    if (D < 0)
    {
        cout <<"D<0 , тогда"<<endl;
        cout << "Нет корней" << endl;
    }
}
    if(n=2)
    {
        double D = b*b - 4*a*c ;
        double x1 , x2 , x3 , x4 , D;
        
        if (D > 0) 
        {
            
        double x1 = (-b + sqrt(D)) / (2*a);
        double x2 = (-b - sqrt(D)) / (2*a);
        if (x1<0 && x2<0)
        {
            double x3= x1*(-1);
            double x4=x2*(-1);
                cout<< "По теореме Виета множители равны:"<<endl;
            cout<< a << "(x+"<< x3 << ")(x+"<< x4 <<")"<<endl;
        }
        if (x1<0 && x2>0)
        {
            double x3= x1*(-1);
            double x4=x2*(-1);
            cout<< "По теореме Виета множители равны:"<<endl;
            cout<< a << "(x+"<< x3 << ")(x"<<x4<<")"<<endl;
            
        }
        if (x1>0 && x2<0)
        {
            double x3= x1*(-1);
            double x4=x2*(-1);
            cout<< "По теореме Виета множители равны:"<<endl;
            cout<< a << "(x"<< x3 << ")(x+"<<x4<<")"<<endl;
            
        }
        if (x1>0 && x2>0)
        {
            double x3= x1*(-1);
            double x4=x2*(-1);
            cout<< "По теореме Виета множители равны:"<<endl;
            cout<< a << "(x"<< x3 << ")(x"<<x4<<")"<<endl;
            
        }
        }
        
        
 
    }
    int r;
    cout << " Для перезапуска программы введите 1"<< endl;
    cout << " Для выхода введите 2" << endl;
    cin >> r;
    if (r==1)
    {
        LPCWSTR open = L"open";
        LPCWSTR file = L"Дискриминант.exe";
        ShellExecute (NULL, open, file ,0,0, SW_SHOWNORMAL);
        return 0;
 
    }
    else (r==2);
    {
        return 0;
    }
 
    system("pause");
}
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
07.04.2013, 15:40     Что-то не так? #12
DeZRo, if (n=1) исправьте if (n == 1) и везде сравнение делается с == а не с 1 = . У меня после Delphi была такя же привычка. Да и не нужно ничего переопределять.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.04.2013, 15:46     Что-то не так?
Еще ссылки по теме:

Что не так?) C++
Что не так? C++
C++ Что не так?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
DeZRo
3 / 3 / 0
Регистрация: 05.11.2012
Сообщений: 49
07.04.2013, 15:46  [ТС]     Что-то не так? #13
Цитата Сообщение от Ternsip Посмотреть сообщение
DeZRo, if (n=1) исправьте if (n == 1) и везде сравнение делается с == а не с 1 = . У меня после Delphi была такя же привычка. Да и не нужно ничего переопределять.
дык я вроде не переопределяю 0_о или делаю это несознательно 0_о я вообще не понимаю что значит "переопределять".
Yandex
Объявления
07.04.2013, 15:46     Что-то не так?
Ответ Создать тему
Опции темы

Текущее время: 14:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru