|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Решение квадратных уравнений на С++ |
|
|
C/C++ - Решение квадратных уравнений на С++
|
Пользователь Сообщения: 98 |
Люди подскажите плиз, пробую написать тестовую програмку на С++ , чего то не правельно считает "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 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Alan85:
Цитата Admiral:
![]() Без signed ошибки нет, но появляется ошибка: Цитата:
заменить на логично? Логично. Тогда программа компилируется и работает. ![]() Но всё же два вопроса: 1. Эта замена в данном случае мне кажется равноценной, верно? 2. Чего всё же надо было при ошибке goto? (Этот вопрос я ещё сегодня вечером попробую решить, возьму книгу, сверюсь, уточню) |
|||
------- Отправлено: 16:57, 23-02-2009 | #21 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
![]() Забанен Сообщения: 463
|
1. Нет. Так как автор предлагал этим трюком закончить выполнение программы окончательно, а break лишь выводит из текущего блока и все идет далее по тексту. Лучше уж тогда exit.
2. Потому что между goto end и самим есть есть два объявления переменных (выходит что они могут быть не объявлены - как будто вырезается часть исходника между goto end и самой меткой, но не в момент компиляции а в реал тайм. Что приведет к ошибки. Исправляется переносом объявления переменных и их инициализации до первого использования goto end. В данном случаи это переменные int i и float D. |
Отправлено: 17:37, 23-02-2009 | #22 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Alan85:
![]() Цитата Alan85:
![]() ![]() |
||
------- Отправлено: 17:59, 23-02-2009 | #23 |
Необычный Сообщения: 4463
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Drongo:
ax^2 + bx + c = 0 При вводе в программу, мы указываем с = -5. предварительно указав правильный тип переменной. Нашел здесь Цитата:
В справке NetBeans ничего про unsignet float не нашел. |
||
------- Отправлено: 23:12, 23-02-2009 | #24 |
Ветеран Сообщения: 3320
|
Профиль | Отправить PM | Цитировать Drongo, алгоритм ответа был таков, я помнил что для типов существует такая приставка как signed, но не был уверен доступна ли она для float. Через поиск провёл данную комбинацию (вместо того что б проверить компилятором) и вышел на ту тему. Как оказал безграмотное. Насчёт signed float я ошибся - ибо signed/unsigned только для char/int Is unsigned float legal?
Компилятор говорит что много типов так как, по его мнению объявляют signed int и float. Что делать, оставить всё как есть. Я проверил, на практике никакого минуса выставлять не требуется. Минус сохраняется в переменной, скомпилив И запустив на выполнение с предложенными параметрами Если интересно то минус можно задать так c=-c. Мнение не разделись, а были предложены варианты. Alan85 не просто лишние, а кардинально не к месту и недопустимо его с float использовать. Кроме exit можно использовать return 0 если конечно не void main/WinMain/etc то есть если главная функция программы не без типовая. lxa85 видимо и в Java (или NetBeans может быть IDE и для С\С++?) решили не вносить путаницу по данному вопросу. |
Последний раз редактировалось Admiral, 24-02-2009 в 00:58. Отправлено: 00:47, 24-02-2009 | #25 |
Необычный Сообщения: 4463
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Admiral:
Но сама среда да, написана на Java. |
|
------- Отправлено: 09:21, 24-02-2009 | #26 |
Старожил Сообщения: 158
|
Профиль | Отправить PM | Цитировать Вот мой вариант проги:
int x2yravn () { double a, b, c, x1, x2; double error; unsigned short int back; cout << "Ввод уравнения: " << endl; cout << endl << "(a=) "; cin >> a; cout << "(b=) "; cin >> b; cout << "(c=) "; cin >> c; error = GetX2yravn (a, b, c, &x1, &x2); if (!error) { backer (); } else { cout << endl << "Ошибка! а=0, уравнение не квадратное" << endl; } char response; cin >> response; return 0; } // Функция нахождения корней double GetX2yravn (double a, double b, double c, double *px1, double *px2) { double value = 0; if (a == 0) value = 1; else { double D; D = b*b - 4*a*c; cout << endl << "Дискриминант равен " << D << endl; if (D < 0) { cout << "=====РЕЗУЛЬТАТ============================================"; cout << endl << "Корней не найдено, дискриминант меньше ноля" << endl; cout << "==========================================================" << endl; } if (D == 0) { *px1 = -b / (2*a); cout << "=====РЕЗУЛЬТАТ============================================"; cout << endl << "Найден один корень, x = " << *px1 << endl; cout << "==========================================================" << endl; } if (D > 0) { *px1 = (-b + sqrt(D)) / (2*a); *px2 = (-b - sqrt(D)) / (2*a); cout << "=====РЕЗУЛЬТАТ============================================"; cout << endl << "Найдено два корня, x1 = " << *px1 << ", x2 = " << *px2 << endl; cout << "==========================================================" << endl; } value = 0; } return value; //----Функция возврата------------------------------------------------------------------------------ int backer () { unsigned short int back; cout << endl << endl<< "Вернуться в главное меню? (Да - 1, Нет - 2)"; cin >> back; cout << endl << endl; switch (back) { case 1: { cout << "-----END---------------------------------------------------------"; cout << endl << endl << endl << endl << endl << endl << endl; return int x2yravn(); } break; case 2: { cout << endl << "Можете закрыть программу."; char response; cin >> response; return 0; } break; default: { cout << endl << "<Ошибка! Введите коректное число!>" << endl << endl; return backer (); } } } |
Последний раз редактировалось Drongo, 24-03-2009 в 11:23. Причина: Тег [code]...[/code] # Отправлено: 11:08, 24-03-2009 | #27 |
Новый участник Сообщения: 3
|
Профиль | Отправить PM | Цитировать |
Отправлено: 19:55, 19-05-2011 | #28 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать gusenkovs, где описание программы? Что она делает и т.д.?
|
------- Отправлено: 21:46, 19-05-2011 | #29 |
Новый участник Сообщения: 3
|
Профиль | Отправить PM | Цитировать Программа решает уравнния вида ax^2+bx+c
#include <math.h> #include <iostream> #include <fstream> using namespace std; double kkui_discremenant (double a,double b,double c) {double discreminant=pow(b,2)-4*a*c; return discreminant; } double x1v (double a,double b,double c) {double discreminant=kkui_discremenant(a,b,c); if (discreminant>=0) {double x1=(sqrt(discreminant)-b)/(2*a); return x1;}return 0;} double x2v (double a,double b,double c) {double discreminant=kkui_discremenant(a,b,c); if (discreminant>=0) {double x2=(-sqrt(discreminant)-b)/(2*a); return x2;};return 0;} void log(double a,double b,double c,double discremenant,double x1,double x2) { ofstream outfile("C:\\kku.log",ios::app); outfile<<a<<"x^2+"<<b<<"x+"<<c<<endl<<"дискрименант"<<discremenant<<endl<<"x1="<<x1<<endl<<"x2="<<x2<<endl<<"Теорема Виетта"<<"(x-("<<x1<<")(x-("<<x2<<"))"<<endl; outfile.close();} |
Последний раз редактировалось Drongo, 20-05-2011 в 23:39. Причина: Не вижу причит выкладывать .h файл через файлообменник Отправлено: 17:23, 20-05-2011 | #30 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|