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

Компьютерный форум 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

 

Аватара для Drongo

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


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

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


ShadowMas, Гляньте в комментарий 2. И ещё я бы
Сделал так

Код: Выделить весь код
...
  cout <<"a = ";
  cin>>a;
  while(a == 0){ // Вместо 'if' - разовой, прикрутил бы циклическую проверку
    cout <<"Esli znachenie a = 0 - Net resheniy"<<endl;
    clrscr();
    cout <<"a = ";
    cin>>a;
   }
...
Тогда отпадёт необходимость в следующем условии:
Код: Выделить весь код
...
//  if(a != 0){
    cout <<"b = ";
    cin>>b;
    cout <<"c = ";
    cin>>c;
    D = b * b + 4 * a * c;
    cout <<"Diskriminant = "<<D<<endl;
    // getch();
    // clrscr();
  // }
...
Картина в целом
Код: Выделить весь код
...
  cout <<"a = ";
  cin>>a;
  while(a == 0){
    cout <<"Esli znachenie a = 0 - Net resheniy"<<endl;
    clrscr();
    cout <<"a = ";
    cin>>a;
  }
  cout <<"b = ";
  cin>>b;
  cout <<"c = ";
  cin>>c;
  D = b * b + 4 * a * c;
  cout <<"Diskriminant = "<<D<<endl;
...
Ко всему ещё стоит добавить 'else', тогда не будет ненужной проверки всех условий
Код: Выделить весь код
...
  if(D < 0){
    // Код   
   }
  else if(D == 0){
    // Код
   }
  else if(D > 0){
    // Код
...

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
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, 06-02-2009 в 16:11. Причина: Дополнил мысль...

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

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



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

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


Аватара для lxa85

Необычный


Contributor


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

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


Цитата ShadowMas:
y=b*b+sqrt(D)/2*a;
z=b*b-sqrt(D)/2*a; »
Элементарная ошибка в последовательности выполнения операторов с числами.
Сначала выполняется умножения/деления, потом сложения/вычитания.
сначала все, что в скобках, потом все что вне скобок.
У нас числитель равен b*b-sqrt(D)
знаменатель 2*a
т.е. ( b*b+sqrt(D) ) / ( 2*a )
Тем самым мы сделаем нужный нам, правильный, порядок выполнения операций.

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)

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

Отправлено: 16:40, 06-02-2009 | #3


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


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

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


Спасибо огромное за совет!

Последний раз редактировалось ShadowMas, 06-02-2009 в 17:11.


Отправлено: 16:41, 06-02-2009 | #4


Аватара для Drongo

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


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

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


Цитата ShadowMas:
А если целое " int " то результат вобще левый? »
Не левый, а приведённый к типу 'int', без дробной части:
х1 = 0
х2 = -1

Призабыл уже как вычисляется это уравнение... Погуглил, нашёл, вот только не пойму
У тебя

Код: Выделить весь код
...
   x = b * b / 2 * a;
...
Получается, что неправильно?
Цитата:
при D = 0 корень один:
x = –b/2a.
Код: Выделить весь код
...
   x = -b / (2 * a);
...
И ещё один момент, авторский вариант
Код: Выделить весь код
...
(b * b + sqrt(D)) / (2 * a);
...
Почему не так?
Код: Выделить весь код
...
(-b + sqrt(D)) / (2 * a);
(-b - sqrt(D)) / (2 * a);
...

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
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, 06-02-2009 в 17:43. Причина: Укоротил комментарий

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

Отправлено: 17:16, 06-02-2009 | #5


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


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

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


Да спасибо огромное я уже разобрался,я там просто с арихметикой на тупил решил что корень от 89 сто пудово должен быть 9 и с это вот увереностью тут вам и морочу голову

Ещё раз огромное спасибо за вашу помощь и терпение!

Отправлено: 17:29, 06-02-2009 | #6


Аватара для Drongo

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


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

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


ShadowMas, Значит твой код считает правильно?

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
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


Отправлено: 17:44, 06-02-2009 | #7


Ветеран


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

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


ShadowMas, это
Цитата Drongo:
...
if(D < 0){
// Код
} »
оставить с заделом на будущие, ибо в случаи изучении высшей математики станет известно, что при дискриминанте меньшем нуля корни тоже есть, но они лежат в комплексном множестве.
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:43, 06-02-2009 | #8


Аватара для lxa85

Необычный


Contributor


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

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


Admiral, Drongo, Мо-лод-цы!

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)


Отправлено: 20:49, 06-02-2009 | #9


Аватара для Drongo

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


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

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


Цитата lxa85:
Admiral, Drongo, Мо-лод-цы! »
А сам чего не с нами? Тоже ж помогал, значит и ты - мо-ло-дец!

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
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


Отправлено: 21:24, 06-02-2009 | #10



Компьютерный форум 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




 
Переход