Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/47: Рейтинг темы: голосов - 47, средняя оценка - 4.83
0 / 0 / 3
Регистрация: 15.09.2016
Сообщений: 26
1

Найти вещественные корни квадратного уравнения

22.09.2016, 15:59. Показов 9265. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет, реализуйте на Си, пожалуйста.Как мне сказали это вроде не сложно. Заранее благодарен.
Даны произвольные числа a,b,c. Найти вещественные корни уравнения ax^2+bx+c=0; Либо сообщить, что таких корней нет.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.09.2016, 15:59
Ответы с готовыми решениями:

Найти корни квадратного уравнения и сделать их проверку подстановкой в уравнение
Всех приветствую. Опыта почти нет, сижу вот разбираюсь, как и что работает на си. С нахождением...

Переменной s присвоить значение 1, если оба уравнения имеют вещественные корни
Даны вещественные числа а, b, с, d, e, f. Переменной s присвоить значение 1, если оба уравнения ах2...

Найти корни уравнения
Как можно запрограммировать следующие неравенства? 7*x1+5*x2>=7 x1-x2<=6

Найти корни уравнения
Не могу разобраться с задачей по серийным экспериментам. Необходимо найти корни уравнения. При этом...

10
48 / 48 / 57
Регистрация: 25.11.2015
Сообщений: 140
22.09.2016, 16:47 2
ko4a,

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
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
 
int main( void ) {
    
double a = 0, b = 0, c = 0, delta, x1 = 0, x2 = 0;
 
puts( "Enter values of your quadratic equation");
scanf( "%lf%lf%lf", &a, &b, &c );
 
delta = pow( b, 2 ) - ( 4 * a * c );
 
if ( delta == 0 ) {
    x1 = (( -b + sqrt(delta)) / ( 2 * a ));
    printf( "%s%5.2f\n", "Your equation has one solution: ", x1 );
}
 
else if ( delta > 0 ) {
    x1 = (( -b + sqrt(delta)) / ( 2 * a ));
    x2 = (( -b - sqrt(delta)) / ( 2 * a ));
    printf( "%s%5.2f%5.2f\n", "Your equation has two solutions: ", x1, x2 );
}
else
    puts( "Your equation has no solutions");
 
 
return EXIT_SUCCESS;
 
}
1
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,641
Записей в блоге: 13
22.09.2016, 17:03 3
Писать if (delta == 0) для данных с плавающей точкой некорректно. Лучше так: if (fabs(delta)<1.0E-15)
2
48 / 48 / 57
Регистрация: 25.11.2015
Сообщений: 140
22.09.2016, 17:23 4
Catstail,

Спасибо большое! А в чем может быть проблема?
0
0 / 0 / 3
Регистрация: 15.09.2016
Сообщений: 26
22.09.2016, 17:56  [ТС] 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
#include <stdio.h>
#include <iostream>
#include <conio.h>
 
 
 
void main()
{
    setlocale(0, "Russian");
    float a, b, c,x1, x2,D,x;
 
    printf("Введите переменную a\n");
    scanf_s("%f", &a);
    printf("Введите переменную b\n");
    scanf_s("%f", &b);
    printf("Введите переменную c\n");
    scanf_s("%f", &c);
    //a*x*x+b*x+c=0а
    
    D = (b*b) - (4 * a*c);
    printf("D=%f\n", D);
    if (D >= 0)
    {
        x1 = (-b + sqrt(D)) / (2 * a);
        x2 = (-b - sqrt(D)) / (2 * a);
        printf("x1=  ",x1);
        printf("x2=  ", x2);
    }
    else
    {
        printf("Действительных корней нет");
    }
    _getch();
}
0
48 / 48 / 57
Регистрация: 25.11.2015
Сообщений: 140
22.09.2016, 18:15 6
ko4a,

C++
1
<iostream>
это вообще из другого языка. Я бы писал b*b через функцию pow (). В квадратных уравнениях дельта равна нулю или больше нуля это очень большая разница...если равна нулю то будет один корень иначе их будет два.
1
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,641
Записей в блоге: 13
22.09.2016, 21:47 7
Цитата Сообщение от LaFayette Посмотреть сообщение
А в чем может быть проблема?
- дело в том, что сравнение с нулем выполняется "бит в бит" (если хоть один бит отличен от нуля - все число не нуль). А в процессе вычислений с плавающей точкой вместо нуля может возникнуть число очень близкое к нулю (из-за погрешности). Сравнение не сработает.
2
Вездепух
Эксперт CЭксперт С++
11695 / 6374 / 1724
Регистрация: 18.10.2014
Сообщений: 16,068
22.09.2016, 22:01 8
Квадратное уравнение решается неправильно
2
48 / 48 / 57
Регистрация: 25.11.2015
Сообщений: 140
23.09.2016, 05:46 9
Catstail,

спасибо большое за ценный совет...постараюсь в дальнейшем всегда иметь это в виду.
0
0 / 0 / 3
Регистрация: 15.09.2016
Сообщений: 26
24.09.2016, 21:18  [ТС] 10
Ха, ребят, тут такое дело, в общем, нужно рассмотреть все случаи, когда a,b,c ==0 и типо в случае надобности свести всё к линейному уравнению

Добавлено через 51 минуту
Переписал, гляньте))
Писал на плюсах, но старался соблюдать синтаксис Си, да там только библиотеку iostream и system("pause") убрать и будет Си))
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
118
119
120
121
122
123
124
125
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <iostream>
// подключил заг. файлы.
 
 
void main()
{
    int t;
    float a, b, c,x,D,x1,x2;
    printf("input a,b,c\n");
    scanf_s("%f%f%f", &a, &b, &c);
    if (a == 0)
    {
        if (b != 0 && c != 0)
        {
            x = -c / b;
            t = 1;
            printf("x=%f  ", x);
            printf("t=%d  ", t);
            // t=1 одно решение
        }
        else if (b!=0&&c==0 )
        {
            x = 0;
            t = 1;
            printf("t=%d  ", t);
            printf("x=%f  ", x);
            //t=1 одно решение
        }
        else if (b == 0 && c != 0)
        {
            t = 0;
            printf("t=%d  ", t);
            //t=0 нет решений
        }
        else if (b == 0 && c == 0)
        {
            t = 2;
            printf("t=%d  ", t);
            //t=2 бесконечное мн-во решений
        }
    }
    else if (a != 0 && b != 0 && c != 0)
    {
        D = (b*b) - (4 * a*c);
 
        if (D > 0)
        {
            x1 = (-b + sqrt(D)) / (2 * a);
            x2 = (-b - sqrt(D)) / (2 * a);
            t = 3;
            // t=3 два решения
            printf("x1=%f  ", x1);
            printf("x2=%f  ", x2);
            printf("t=%d  ", t);
        }
        else if (D==0)
        {
            x = -b / (2 * a);
            t=1;
            printf("t=%d  ", t);
            printf("x=%f  ", x);
            //t=1 одно решение
        }
        else if (D < 0)
        {
            t = 0;
            printf("t=%d  ", t);
            //t=0 нет решений
        }
    }
    else if (a != 0 && b != 0 && c == 0)
    {
        //ax^2+bx=0
        D = b*b;
        x1 = (-b + sqrt(D)) / (2 * a);
        x2 = (-b - sqrt(D)) / (2 * a);
        t = 3;
        // t=3 два решения
        printf("x1=%f  ", x1);
        printf("x2=%f  ", x2);
        printf("t=%d  ", t);
    }
    else if (a != 0 && b == 0 && c != 0)
    {
 
        if (c > 0 && a > 0)
        {
        t = 0;
        //t=0 нет корней
        printf("t=%d  ", t);
        }
        else if (c > 0 && a < 0)
        {
            
            x1 = -sqrt(-c / a);
            x2 = sqrt(-c / a);
            t = 3; //t=3 два решения
            printf("x1=%f  ", x1);
            printf("x2=%f  ", x2);
            printf("t=%d  ", t);
 
        }
        else if (c < 0 && a>0)
        {
            
            x1 = -sqrt(c / a);
            x2 = sqrt(c / a);
            t = 3;//t=3 два решения
            printf("x1=%f  ", x1);
            printf("x2=%f  ", x2);
            printf("t=%d  ", t);
        }
        else if (c < 0 && a < 0)
        {
            t = 0;//нет решений
            printf("t=%d  ", t);
        }
        
 
    }
    system("pause");
}
Лучше для такого использовать конструкцию switch, но препод неодобрит.
0
0 / 0 / 3
Регистрация: 15.09.2016
Сообщений: 26
26.09.2016, 15:55  [ТС] 11
Ап.
Не дело мне такой код сдавать, помогите плез)
0
26.09.2016, 15:55
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.09.2016, 15:55
Помогаю со студенческими работами здесь

Найти корни уравнения
Много уважаемые форумчане!! Помогите перепмсать программу с паскаля на с. Заранее спасибо!!...

Решение квадратного уравнения (найти ошибку)
float discr( float a,float b,float c); float findx(float b, float a, float c); int main() { ...

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

Найти корни нелинейного уравнения вида x^2=e^(-(x)^2)
Найти корни нелинейного уравнения вида x^2=e^(-(x)^2). Поиск приближенного значения хотя бы одного...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru