Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.81/75: Рейтинг темы: голосов - 75, средняя оценка - 4.81
0 / 0 / 1
Регистрация: 20.07.2017
Сообщений: 75
1

Написал программу для решения квадратных уравнений, но не получается подогнать ее под нужные условия

20.07.2017, 19:19. Показов 14386. Ответов 14
Метки нет (Все метки)

Дано условие : На вход вашей программе в стандартном вводе даны действительные коэффициенты A, B и C уравнения Ax² + Bx + C = 0. Выведите все его различные действительные корни в любом порядке. Гарантируется, что хотя бы один из коэффициентов не равен нулю.
и вот мой код.
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
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
 
int main(){
 
  double A,B,C,D,x,x1;
  cin >> A >> B >> C;
if (A ==0 && B == 0 && C!=0){
  cout << " ";
  } else if (A == 0 && B!=0 && C !=0){
    x = C/B;
    cout << x;
 
    }else if ( B == 0 && A == 0 && C ==0 ){
      x = 0;
      cout << x;
    } else if ( A!=0 && B!=0 && C==0){
      x = 0;
      cout << x;
 
    }else if (A!=0 && B!=0 && C!=0){
 
 
 
 
 
  D = (B*B)- 4*A*C;
  if (D == 0 ){
    x = - B/(2*A);
    cout << x;
  }if (D > 0){
    x1 = (-B + sqrt(D))/(2*A);
    x = (-B - sqrt(D))/(2*A);
    cout << x1 << " " << x;
 
  }if (D <0){
    cout <<  " ";
  }
    }
 
 
 
  return 0;
}
Я не могу понять почему код не соответствует условиям задачи хотя я учел большую часть случаев и на выходе программа выдает адекватные результаты. Надеюсь на вашу помощь и добрый совет.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.07.2017, 19:19
Ответы с готовыми решениями:

Написать программу для решения квадратных уравнений
Написать программу, которая реализует решение квадратного уравнения y=ax2+bx+c. При условии, если...

Написать программу для решения квадратных уравнений теорема Виета
Написать программу, которая реализует решение квадратного уравнения y=ax2+bx+c с помощью теоремы...

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

Создать программу для решения квадратных уравнений, учесть корни, есть ли они
Создать программу для решения квадратных уравнений, учесть корени, есть ли они

14
1466 / 1174 / 551
Регистрация: 08.01.2012
Сообщений: 4,524
20.07.2017, 19:22 2
А не может быть 0, т.к. он в знаменатель попадает, все остальные наздоровье
0
0 / 0 / 1
Регистрация: 20.07.2017
Сообщений: 75
20.07.2017, 19:30  [ТС] 3
По условию пользователь вводит ряд чисел. Эти числа указаны в ниже в условиях задачи и среди них есть такой ряд значений, в котором А В С равны 0 4 10 соответственно. и моя программа должна вывести корень получившегося уравнения (-2,5). Поэтому случай , когда А = 0 должен быть описан в коде, или нет?
0
67 / 50 / 27
Регистрация: 27.04.2015
Сообщений: 201
20.07.2017, 19:31 4
Albatrosso, что-то много у вас условий лишних, всё гораздо проще.
Если А == 0, тогда X=-C/B
Иначе решаем через дискриминант.
Всё.
1
0 / 0 / 1
Регистрация: 20.07.2017
Сообщений: 75
20.07.2017, 20:28  [ТС] 5
Да, спасибо, условий действительно слишком много, подправил, код работает корректно. Но все еще не проходит проверку.
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
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
 
int main(){
 
  double A,B,C,D,x,x1;
  cin >> A >> B >> C;
if (A == 0){
    x = -C/B;
    cout << x;
 
    } else if ( A!=0 && B!=0 && C!=0 ){
 
 
 
 
 
  D = (B*B)- 4*A*C;
  if (D == 0 ){
    x = - B/(2*A);
    cout << x;
  }if (D > 0){
    x1 = (-B + sqrt(D))/(2*A);
    x = (-B - sqrt(D))/(2*A);
    cout << x1 << " " << x;
 
  }if (D <0){
    cout <<  " ";
  }
    }
 
 
 
  return 0;
}
0
67 / 50 / 27
Регистрация: 27.04.2015
Сообщений: 201
20.07.2017, 20:29 6
где вы там проверяете?
0
0 / 0 / 1
Регистрация: 20.07.2017
Сообщений: 75
20.07.2017, 20:33  [ТС] 7
Это одна из задач к курсу по С++. причину почему задача не проходит тест не объясняют. бьюсь с ней уже третий день, а понять в каком направлении работать не могу
0
67 / 50 / 27
Регистрация: 27.04.2015
Сообщений: 201
20.07.2017, 20:37 8
Можно полное описание задачи? Особенно образец ввода-вывода?
0
0 / 0 / 1
Регистрация: 20.07.2017
Сообщений: 75
20.07.2017, 20:40  [ТС] 9
"На вход вашей программе в стандартном вводе даны действительные коэффициенты A, B и C уравнения Ax² + Bx + C = 0. Выведите все его различные действительные корни в любом порядке. Гарантируется, что хотя бы один из коэффициентов не равен нулю."

sdtin stdout
2 5 2 -0.5 -2
2 4 2 -1
2 1 2
0 4 10 -2.5
0
67 / 50 / 27
Регистрация: 27.04.2015
Сообщений: 201
20.07.2017, 20:59 10
Лучший ответ Сообщение было отмечено Albatrosso как решение

Решение

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
#include <iostream>
#include <cmath>
 
int main() {
    double a, b, c, d, x1, x2;
    std::cin >> a >> b >> c;
    if (a == 0) {//линейное уравнение вида bx+c=0
        if (b != 0) {
            std::cout << -c / b;
        }
        else {
            //не имеет решений, т.к. по условию получиться что С !=0
        }
    }
    else {//квадратное уравнение
        d = (b*b - 4 * a*c);//вычисляем дискриминант
        if (d < 0) {
            //нет действительных корней
        }
        else {
            if (d == 0) {//одинаковые корни
                x1 = x2 = -b / (2 * a);
                std::cout << x1;
            }
            else {//d>0  два корня
                x1 = (-b + sqrt(d)) / (2 * a);
                x2 = (-b - sqrt(d)) / (2 * a);
                std::cout << x1 << x2;
            }
        }
    }
}
Я не знаю что тут может ломаться.
1
0 / 0 / 1
Регистрация: 20.07.2017
Сообщений: 75
20.07.2017, 21:15  [ТС] 11
Я похоже понял в чем моя ошибка. Спасибо вам, скорее всего дело в том что я нагородил условий, а в последней версии кода не указал что как минимум одна переменная не может равняться нулю.
0
67 / 50 / 27
Регистрация: 27.04.2015
Сообщений: 201
20.07.2017, 22:02 12
Albatrosso, вы меня простите, но я когда писал вторую часть кода совсем забыл про неполные квадратные
Так что
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
#include <iostream>
#include <cmath>
 
int main() {
    double a, b, c, d = 0, x1, x2;
    std::cin >> a >> b >> c;
    if (a == 0) {//линейное уравнение вида bx+c=0
        if (b != 0) {
            std::cout << -c / b;
        }
        else {
            //не имеет решений, т.к. по условию получиться что С !=0
        }
    }
    else {//a!=0 квадратное уравнение
        if (b != 0 && c != 0) {//полное квадратное
            d = (b*b - 4 * a*c);//вычисляем дискриминант
            if (d < 0) {
                //нет действительных корней
            }
            else {
                if (d == 0) {//одинаковые корни
                    x1 = x2 = -b / (2 * a);
                    std::cout << x1;
                }
                else {//d>0  два корня
                    x1 = (-b + sqrt(d)) / (2 * a);
                    x2 = (-b - sqrt(d)) / (2 * a);
                    std::cout << x1 << x2;
                }
            }
        }
        else {
            if (b == 0 && c == 0) {//неполное квадратное 1 вариант
                std::cout << 0;//x==0
            }
            else {
                if (b != 0) {//c==0 2й вариант
                    //имеет два корня
                    x1 = 0;
                    x2 = -b / a;
                    std::cout << x1 << x2;
                }
                else {//c!=0 && b==0 3й вариант
                    if (-c / a > 0) {
                        x1 = sqrt(-c / a);
                        x2 = -sqrt(-c / a);
                        std::cout << x1 << x2;
                    }
                    else {
                        //не имеет действительных корней
                    }
                }
            }
        }
    }
}
Пообъемней все..)
Проверить бы это еще.
PS Между выводами не ставил пробелов.

Добавлено через 1 минуту
UPD ловлю баги, не юзать

Добавлено через 17 минут
UPD2 Вроде бы корректно работает. Вручную с онлайн калькуляторами прогнал. Хотя одно исключение есть, которое я не указал, это когда a==0 && c==0, но у меня пять утра и я что-то туго соображаю. У меня программа выдает -0, калькуляторы -infinity, а по идее должно быть вроде просто 0.
В общем оставлю пока это вам для размышлений, что же надо указать, чтобы прошло через ваши тесты..)
2
0 / 0 / 1
Регистрация: 20.07.2017
Сообщений: 75
21.07.2017, 15:51  [ТС] 13
первый вариант оказался наиболее подходящим тесту, как оказалось все случаи учитывать не нужно было. мне интересен один момент. вы пишите
C++
1
std::cout << x1;
в чем преимущество написания std перед командами ввода и вывода, а не в начале кода? вы меня очень выручили , спасибо)
0
зомбяк
1556 / 1195 / 339
Регистрация: 14.05.2017
Сообщений: 3,882
21.07.2017, 16:02 14
Чтобы не было ошибок, если в подключенном в include заголовке (какой-нибудь чужой библиотеки) вдруг окажутся int cout или string endl или struct vector и прочих. При подключении в начале кода тебе придётся следить, чтобы ни одна твоя переменная не совпала с многочисленными переменными и структурами пространства std, иначе будут ошибки.

Если нужны только cout, cin и endl, пропиши только 3 строки
C++
1
2
3
using std::cout;
using std::cin;
using std::endl;
тогда в коде сможешь их использовать, не задумываясь об остальных именах.
2
1472 / 1188 / 820
Регистрация: 29.02.2016
Сообщений: 3,579
21.07.2017, 16:11 15
Цитата Сообщение от Albatrosso Посмотреть сообщение
в чем преимущество написания std перед командами ввода и вывода
в вашем случае преимуществ нет
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.07.2017, 16:11

Программа для решения квадратных уравнений
Здравствуйте! Я написал программу, решающую квадратные уравнения. Все работает. Только есть одна...

Приложение для решения квадратных уравнений
Здравствуйте, проблема такая, нужно написать форму для решения квадратного уравнения. На форме 3...

Программа для решения квадратных уравнений
В общем надо написать прогу для расчета корней квадратного уравнения. Вот что у меня получилось: ...

Программа для решения квадратных уравнений
Изучаю VB не давно, решил составить прогу для решение кв. уравнений помогите что я не так делаю? ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru