Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
DeZRo
3 / 3 / 0
Регистрация: 05.11.2012
Сообщений: 49
#1

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

07.04.2013, 14:19. Просмотров 436. Ответов 12
Метки нет (Все метки)

Почему-то выдает два сообщения вместо одного ( лишнее выделено на картине). Скрин прикреплен. Вот отдельно фрагмент кода:
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;
            
        }
Подскажите что здесь не так и правильно ли поставлены условия?
0
Миниатюры
Что-то не так?  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.04.2013, 14:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Что-то не так? (C++):

Как сделать так что я мог умножать не на два числа а на 3,4,5 и так далее? - C++
Вот код: #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int main(){ float a,c; char b; skip: ...

Что в коде ни так? while не работает так, как ожидаю - C++
Написанный код, как я думаю, должен выдавать цифры от 0 до 1000, столбиком. Но выдает начиная от 702 до 1000. Что ни так понимаю, где...

Что-то не то с Майкрсофт визуал студио 2010 или я что-то не так делаю - C++
Дело в том что при запуске вот этой программы: #include &lt;iostream&gt; using namespace std; int main () { for (int i=100; i&lt;=999;...

Что в программе делает так, что процессор грузится на 100%? - C++
Я не очень разбираюсь в С++, поэтому прошу вашей подсказки по поводу нагрузки на процессор. Вот код программы, на компьютере жрет всю...

Список: Что не так с выводом списка, потому что выводится какой-то мусор? - C++
#include &lt;iostream&gt; using namespace std; struct point { int data;//информационное поле-это даннные объявленного или используемого...

Лучший интерактивный самоучитель с++, но так понравился, что думаю, а что если после python изучать с++? - C++
http://academy.cppstudio.com/courses/ 1.) поделитесь опытом после какого языка вы перешли на с++. 2.) Что вам нравится/не очень в языке...

12
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);
Вот в этом месте вы ошиблись когда писали или когда копировали, либо фрагмент левый (я про скобочку)
0
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
0
Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
07.04.2013, 15:10 #4
DeZRo, Я вас не понял. Я имел ввиду, что вы не весь код выложили, либо ошиблись при копировании. Скиньте весь код
0
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. надеюсь, что комментариев не надо =)
0
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)
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. Помогите сделать код нормальным. Я не особо разбираюсь, а сдать нужно уже в среду.
0
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)
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 все поправил. ошибку все еще выдает, но не могу понять почему....
0
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 у вас происходит краш. И т.к. вы не соблюдаете даже форматирования кода, вы запутались.
0
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");
}
0
Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
07.04.2013, 15:40 #12
DeZRo, if (n=1) исправьте if (n == 1) и везде сравнение делается с == а не с 1 = . У меня после Delphi была такя же привычка. Да и не нужно ничего переопределять.
0
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_о я вообще не понимаю что значит "переопределять".
0
07.04.2013, 15:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.04.2013, 15:46
Привет! Вот еще темы с ответами:

Как сделать так,что бы при введение,например 0;0 выдавалось сообщение,что точка находится на границе? - C++
#include &lt;iostream&gt; using namespace std; int main(){ double x, y; int R=10 cout &lt;&lt; &quot;Введите x: &quot; &lt;&lt;...

Ребят Незнаю что делать при запуске на компилирование выдает ошибку.Кто понимает что не так скажите а если не затруднит исправьте ошибку - C++
Разговаривал с двумя преподами говорят что проект не правильно создавал,хотя все правильно из группы спрашивал у парней говорят что не...

что не так? - C++
/*задано масcив цеых чисел,создать новый массив который состоит с елементов первого массива и встречаеться всего один раз . получить...

Что не так? - C++
Решаю олимпиадные задачи по-тихоньку. Щас встрял на второй задаче... #include &lt;cstdlib&gt; #include &lt;iostream&gt; #include &lt;math.h&gt;...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru