Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Решение квадратных уравнений на С++

Ответить
Настройки темы
C/C++ - Решение квадратных уравнений на С++

Пользователь


Сообщения: 98
Благодарности: 1

Профиль | Отправить PM | Цитировать


Изменения
Автор: Drongo
Дата: 06-02-2009
Описание: тег [code]...[/code]
Люди подскажите плиз, пробую написать тестовую програмку на С++ , чего то не правельно считает "sqrt" от числа , тип переменной назначаю с плавающей тачкой(навсякмй случа).
Вот пример

для проверки можно взять такое квадратное уравнение

y = 4x^2 + 3x - 5

Програмка

Код: Выделить весь код
#include <iostream.h>
#include <conio.h>
#include <math.h>
 main()
{
float b,a,x,c,D,y,z;
D=0;

cout <<"Davayte reshim kvadratnoe uravnenie sleduyushego vida y=ax**2+b*x+c "<<endl;
cout <<"Dla etogo vnesite znacheniya v posledovatelnosti a,b,c"<<endl;getch();clrscr();
cout <<"a="<<endl;
cin>>a;
if (a==0)
{
cout <<"Esli znachenie a=0 - Net resheniy"<<endl;getch();clrscr();
}
if (a!=0)
{
cout <<"b="<<endl;
cin>>b;
cout <<"c="<<endl;
cin>>c;
D=b*b-4*a*c;
cout <<"Diskremenant="<<D<<endl;getch();clrscr();
}
if (D<0)
{
cout <<"Net resheniy"<<endl;getch();clrscr();
} 
if (D==0)
{
x=b*b/2*a;
cout <<"naydeno odno vozmoznoe reshenie x="<<x<<endl;getch();clrscr();
}
if (D>0)
{
y=b*b+sqrt(D)/2*a;
z=b*b-sqrt(D)/2*a;
cout <<"naydeni znacheniya x1 i x2"<<endl;
cout <<"x1="<<y<<" x2="<<z<<endl;getch();clrscr();
 }
 }
Вопрос то сам как раз в выделеной части, почему то неправельно считает?
Может структура записи формулы не правельная?

Отправлено: 14:22, 06-02-2009

 

Ветеран


Сообщения: 3320
Благодарности: 916

Профиль | Отправить PM | Цитировать


А что я? Это вы ребята. Я лишь посоветовал не забивать голову фразой что корней при дискриминанте меньше нуля не существует, а в программе предусмотреть на будущее этот вариант.
Я когда-то на VB6 сделал сабжевую прогу, и выводил сообщение о том что корней нет при дискриминанте меньше нуля.

Отправлено: 00:37, 07-02-2009 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


Я вот отсюда оттолкнулся, Как вычислить дискриминант квадратного уравнения? Там и формула есть, но вот не могу найти ссылку, где тоже говорилось что-то о высшей математике касательно квадратных уравнений.

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Отправлено: 18:33, 07-02-2009 | #12


Ветеран


Сообщения: 3320
Благодарности: 916

Профиль | Отправить PM | Цитировать


Drongo есть эксперт в этой области, портал http://exponenta.ru/
на нём и ссылка http://model.exponenta.ru/bt/bt_001141.html
Цитата:
Таким образом, при решении квадратного уравнения может оказаться, что решения его среди действительных чисел от -∞ до +∞ не имеется. Можно было бы воспринять это как данность и считать, что операция вычисления корней может выводить решение за пределы существующих чисел. Но математики пошли по другому пути, добиваясь того, чтобы каждое квадратное уравнение имело корни. Они обобщили понятие числа, добавив к числам новые математические объекты, которые получаются из обычных чисел домножением их на корень квадратный из -1.
Так что автор может теперь апгредить прогу.
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:56, 07-02-2009 | #13


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


Хорошие ссылки.
Цитата Admiral:
Так что автор может теперь апгредить прогу. »
Да в принципе я думаю, при таком варианте
Код: Выделить весь код
...
if(D < 0){
// Код 
}
...
Вместо сообщения "корней нет", достаточно вывести уведомление
Цитата Admiral:
при дискриминанте меньшем нуля корни тоже есть, но они лежат в комплексном множестве. »

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Отправлено: 20:07, 07-02-2009 | #14


Ветеран


Сообщения: 3320
Благодарности: 916

Профиль | Отправить PM | Цитировать


А когда знаний и опыта хватать будет считать комплексные, как математические программы.
complex.h в помощь.

Последний раз редактировалось Admiral, 15-02-2009 в 03:30.


Отправлено: 20:21, 07-02-2009 | #15


Пользователь


Сообщения: 98
Благодарности: 1

Профиль | Отправить PM | Цитировать


Огромное спачибо всем участникам темки очень помогли,узнал много нового!

Ещё раз ОГРОМНОЕ СПАСИБО!!!

Отправлено: 21:44, 21-02-2009 | #16


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


Цитата ShadowMas:
y = 4x^2 + 3x - 5 »
В общем, немножко проконсультировался со своей знакомой педагогом-математики, и получилось следующее, одним словом я запутался, итак дано:
Уравнение и размышления вслух:

Код: Выделить весь код
4х^2 + 3х – 5 = 0
Оно же в общем виде
Код: Выделить весь код
ах^2 + bх – с = 0.
Дискриминант:
Код: Выделить весь код
D =  b^2 – 4ac
корни:
Код: Выделить весь код
х1 = (-b + sqrt(D)) / 2a
x2 = (-b - sqrt(D)) / 2a
Ключевой момент 4х^2 + 3х – 5 = 0
Если человек учитывает такое число –5, то программе, в формуле нет этого, там задаётся только положительное число, в смысле в переменной отрицательное храниться может, но хранится в этом случае, неправильное, положительное! Тоесть в случае
Код: Выделить весь код
...
   cin>>c;
...
нужно явно указывать отрицательное!
Цитата ShadowMas:
Код: Выделить весь код
...
   cout<<"c = "<<endl;
   cin>>c;
   D = (b * b) - (4 * a * c);
...
»
и получается следующее
Код: Выделить весь код
D = (3 * 3) - (4 * 4 * 5) = 71, Корней нет!
вместо
Код: Выделить весь код
D = (3 * 3) – (4 * 4 * (-5)) = 89,  Корень = 9,43

Х1 = (-3 + 9,43) / 8 = 0,8
Х2 = (-3 – 9,43) / 8 = -1,55
Так что нужно ещё учесть знаковые числа. Либо использовать следующую конструкцию, принудительно ставить знак минус
Код: Выделить весь код
...
   D = (b * b) - (4 * a * (c));
...


Или я ошибся?

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Последний раз редактировалось Drongo, 23-02-2009 в 16:23. Причина: Применил тег скрытия


Отправлено: 14:05, 22-02-2009 | #17


Ветеран


Сообщения: 3320
Благодарности: 916

Профиль | Отправить PM | Цитировать


Drongo,
Цитата Drongo:
в переменной отрицательное храниться может, но хранится в этом случае, неправильное, положительное! »
правильно, в этом случаи если
Цитата ShadowMas:
float b,a,x,c,D,y,z; »
с & другие переменные могут принимать лишь положительные значения в вещественном диапазоне зависящем от платформы и от компилятора (от заданного в float.h/cfloat).
Нужно указывать signed float.
В аналогичном сабже так и поступили. У них float только дискриминант.
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:58, 23-02-2009 | #18


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


Цитата Admiral:
В аналогичном сабже так и поступили »
Я видел это решение, когда искал первый раз, грамотно написано, но у меня не компилировалось, выдаёт ошибку:
[C++ Ошибка] Unit1.cpp(25): E2176 Too many types in declaration
Код: Выделить весь код
...
   mes("Введите квадратное уравнение (типа 2x^2+3x-6=0): ");
   string input, a, b, c;
   signed float fA=1, fB=1, fC=1; // Ошибка на этой строке
   getline(cin,input);
...
И что нужно сделать, я не знаю.

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif

Это сообщение посчитали полезным следующие участники:

Отправлено: 11:41, 23-02-2009 | #19


Аватара для Alan85

Старожил


Сообщения: 463
Благодарности: 91

Профиль | Отправить PM | Цитировать


Drongo, помоему слово signed лишнее :

Код: Выделить весь код
 float fA=1, fB=1, fC=1;
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:26, 23-02-2009 | #20



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Решение квадратных уравнений на С++

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Wireless - Посоветуйте WI-FI решение. krec Сетевое оборудование 2 29-06-2009 10:39
C/C++ - Решение кубических уравнений на С++ XEN_STRANGER Программирование и базы данных 16 02-04-2009 14:19
Теория - Решение системы уравнений quaker_strelok Программирование и базы данных 3 23-09-2007 14:29
*Теория* | Решение системы линейных уравнений DeadBoy Программирование и базы данных 5 23-02-2005 17:12
Терминальное решение Baboon Сетевые технологии 2 06-10-2003 17:13




 
Переход