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

Компьютер неправильно осуществляет вычисления с числами. Как исправить? - C++

Восстановить пароль Регистрация
 
AndrewWolf68
Сообщений: n/a
26.09.2013, 15:09     Компьютер неправильно осуществляет вычисления с числами. Как исправить? #1
Создал программу для решения уравнений, синтаксических ошибок нет, но в переменной b компьютер выдает неверное значение. Строка 84. Как это исправить? Вот код:

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
114
115
116
117
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
 
int main(int argc, char* argv[])
{
    cout << "Choose tipe of equation:\n1 - Linear\n2 - Square\n3 - Cubic\n";
    int choose;
    cin >> choose;
    switch (choose)
    {
    case 1:
        {
            cout << "Choose the tipe of the lineal equation\n0 -| ax + b = 0\n1 -| ax = b\n";
            int choose_1;
            cin >> choose_1;
            switch(choose_1)
            {
            case 0:
                {
                    cout << "\t\tTHE LINEAR EQUATION\n\t\t    ax + b = 0\na = ";
                    int a1_a;
                    cin >> a1_a;
                    cout << "b = ";
                    int b1_a;
                    cin >> b1_a;
                    char symbol;
                    b1_a < 0 ? : symbol = 43;
                    if(a1_a == 1)
                    {
                        cout << "x " << symbol << " " << b1_a << " = 0\n";
                    }
                    else
                        {
                            cout << a1_a << "x " << symbol << " " << b1_a << " = 0\n";
                        }
                    float x1_a = (float)b1_a * -1 / (float)a1_a;
                    if(b1_a < a1_a)
                    {
                        cout << "x = " << b1_a * -1 << "\n    --\n    " << a1_a;
                    }
                    else
                    {
                        cout << "x = " << fixed << setprecision(2) << x1_a;
                    }
                    return(0);
            }
            case 1:
                cout << "\t\tTHE LINEAR EQUATION\n\t\t       ax = b\na = ";
                float a1_b;
                cin >> a1_b;
                cout << "b = ";
                float b1_b;
                cin >> b1_b;
                if(a1_b == 1)
                {
                    cout << "x = " << b1_b;
                }
                else
                {
                    cout << a1_b << "x = " << b1_b << "\n";
                    float x1_b = (float)b1_b / (float)a1_b;
                    if(b1_b < a1_b)
                    {
                        cout << "x = " << b1_b << "\n    --\n    " << a1_b;
                    }
                    else
                    {
                        cout << "x = " << fixed << setprecision(2) << x1_b;
                    }
                    return(0);
                }
            }
    }
            case 2:
                {
                    cout << "\t\tTHE SQUARE EQUATION\n\t\t ax^2 + bx + c = 0\na = ";
                    char symbol_2;
                    char symbol_2a;
                    int a2_a;
                    int b2_a;
                    int c2_a;
                    int d = (b2_a * b2_a) - (a2_a * c2_a * 4);
                    cin >> a2_a;
                    cout << "b = ";
                    cin >> b2_a;
                    cout << "c = ";
                    cin >> c2_a;
                    b2_a < 0 ? : symbol_2 = 43;
                    c2_a < 0 ? : symbol_2a = 43;
 
                            cout << "D = b^2 - 4ac = " << b2_a << "^2 - 4(" << a2_a << " * " << c2_a << ") = " << d;
                            if(d < 0)
                            {
                                cout << "This equation has'nt radicals";
                                return(0);
                            }
                            if(d == 0)
                            {
                                cout << "\n           _\nx = -b +- VD\n    --------\n       2a\n";
                                cout << "x = " << b2_a * -1 << "\n    ----\n      " << a2_a * 2 << endl;
                                cout << "x = " << (b2_a * -1) / (a2_a * 2);
                                return(0);
                            }
                            if(d > 0)
                            {
                                cout << "\n           _\nx = -b +- VD\n    --------\n       2a\n";
                                cout << "x = " << b2_a * -1 << " +- " << sqrt(d) << "\n    --------\n       " << a2_a * 2 << endl;
                                cout << "x = " << (b2_a * -1 + sqrt(d)) / (a2_a * 2) << "; " << (b2_a * -1 - sqrt(d)) / (a2_a * 2);
                                return(0);
                            }
 
 
                }
}
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.09.2013, 15:16     Компьютер неправильно осуществляет вычисления с числами. Как исправить? #2
Цитата Сообщение от AndrewWolf68 Посмотреть сообщение
в переменной b компьютер выдает неверное значение. Строка 84.
И где там b?

Добавлено через 3 минуты
Вот это как понимать?
C++
1
b1_a < 0 ? : symbol = 43;
HedgehogLu
 Аватар для HedgehogLu
146 / 67 / 1
Регистрация: 04.09.2013
Сообщений: 250
26.09.2013, 15:17     Компьютер неправильно осуществляет вычисления с числами. Как исправить? #3
Я так понял подразумевалась строка 85 и значение d
Цитата Сообщение от AndrewWolf68 Посмотреть сообщение
int d = (b2_a * b2_a) - (a2_a * c2_a * 4); cin >> a2_a; cout << "b = "; cin >> b2_a; cout << "c = "; cin >> c2_a;
весело у вас сначала считается дискрименант а потом только вводятся коэффициенты уравнения

случаем ли d не равняется ли нулю всегда?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.09.2013, 15:19     Компьютер неправильно осуществляет вычисления с числами. Как исправить? #4
И нет sqrt для int.

Добавлено через 38 секунд
У вас этот код, вообще, компилируется?
HedgehogLu
 Аватар для HedgehogLu
146 / 67 / 1
Регистрация: 04.09.2013
Сообщений: 250
26.09.2013, 15:25     Компьютер неправильно осуществляет вычисления с числами. Как исправить? #5
упс
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.09.2013, 15:25     Компьютер неправильно осуществляет вычисления с числами. Как исправить? #6
Цитата Сообщение от alsav22 Посмотреть сообщение
И нет sqrt для int.
Если только не С++11 или gcc.
Цитата Сообщение от HedgehogLu Посмотреть сообщение
Это краткая форма логической конструкции
(условие)?_дейстсие при истине_:_действие при ложь;
Это мне объясняете? Я не про то, как должно быть, а как в коде понимать строку.
HedgehogLu
 Аватар для HedgehogLu
146 / 67 / 1
Регистрация: 04.09.2013
Сообщений: 250
26.09.2013, 15:30     Компьютер неправильно осуществляет вычисления с числами. Как исправить? #7
Цитата Сообщение от alsav22 Посмотреть сообщение

Добавлено через 3 минуты
Вот это как понимать?
C++
1
b1_a < 0 ? : symbol = 43;
C++
1
2
if (b1_a<0) ;
 else symbol=43;
но кажется там условие обязательно в скобки брать надобно

Это краткая форма логической конструкции
(условие)?_дейстсие при истине_:_действие при ложь;

Добавлено через 1 минуту
Цитата Сообщение от alsav22 Посмотреть сообщение
И нет sqrt для int.
скорее всего там компилятор допустил неявное преобразование типа данных
vua72
410 / 410 / 83
Регистрация: 28.11.2010
Сообщений: 1,158
26.09.2013, 15:39     Компьютер неправильно осуществляет вычисления с числами. Как исправить? #8
Этот "код" кодом назвать нельзя,может автор вначале условие сформирует и попытается описать алгоритм? Копаться в этом потоке мыслей бесполезно.
HedgehogLu
 Аватар для HedgehogLu
146 / 67 / 1
Регистрация: 04.09.2013
Сообщений: 250
26.09.2013, 15:43     Компьютер неправильно осуществляет вычисления с числами. Как исправить? #9
да там все понятно.
с консоли спрашивает какое уровнение надо решить.
1 - линейное
2 - квадратное
3 - кубическое

1 понятно кар решать всем
2 по дескрименанту
3 а вот кубическое автор не сделал

а алгоритмы там просто по формулам
еще со школьной программы
vua72
410 / 410 / 83
Регистрация: 28.11.2010
Сообщений: 1,158
26.09.2013, 15:47     Компьютер неправильно осуществляет вычисления с числами. Как исправить? #10
Цитата Сообщение от HedgehogLu Посмотреть сообщение
да там все понятно.
с консоли спрашивает какое уровнение надо решить.
1 - линейное
2 - квадратное
3 - кубическое

1 понятно кар решать всем
2 по дескрименанту
3 а вот кубическое автор не сделал

а алгоритмы там просто по формулам
еще со школьной программы
там все понятно всем кроме автора, о чем и свидетельствует этот "код".
Я про алгоритм решения не случайно спросил, его просто нет.

Добавлено через 1 минуту
может автору стоить поискать семантические ошибки?
HedgehogLu
26.09.2013, 15:50
  #11

Не по теме:

все мы были такими когда-то

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.09.2013, 18:33     Компьютер неправильно осуществляет вычисления с числами. Как исправить?
Еще ссылки по теме:

C++ Неправильно считает функцию вычисления суммы элементов массива
Время обслуживания вводиться неправильно, как исправить? C++
C++ Двумерный массив. Неправильно считается сумма. Как исправить?

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

Или воспользуйтесь поиском по форуму:
zer0mail
26.09.2013, 18:33     Компьютер неправильно осуществляет вычисления с числами. Как исправить?
  #12

Не по теме:

ТС сам где-то накосячил и обвиняет компьютер

Yandex
Объявления
26.09.2013, 18:33     Компьютер неправильно осуществляет вычисления с числами. Как исправить?
Ответ Создать тему
Опции темы

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