Разработка алгоритма выполнения поставленной задачи
Необходимо написать программу для решения системы вида: Для решения этой системы уравнений необходимо вычесть из первого уравнения второе и умножить правую и левую часть на x, причем необходимо учесть что . В результате получается стандартное квадратное уравнение, дискриминант которого . Возможные значения x находятся по формуле: значения находится путем подстановки в любое уравнение исходной системы. Схема алгоритма представлена на рисунке 1. Исходными данными являются коэффициенты , которые будут задаваться типом double , т.е. их значения должны будут находиться в диапазоне 1.7E-308..1.7E308 Выходными данными являются и , которые так же будут задаваться типом long double, т.е. их значения должны будут находиться в диапазоне 3.4E-4932..3.4E+4932. В качестве среды программирования была выбрана среда визуального программирования C++ Builder 6, позволяющая создавать Windows-приложения.
Рисунок А.1
Текст функции, выполняющей решение системы уравнений: int solution_equation(double a,double b, double c, double d,long double &resultX1, long double &resultX2, long double &resultY1, long double &resultY2) { //вычитаем из первого уравнения второе, домножаем всё на x и получаем: a + b*x -c*x*x - d*x = 0 => -c*x*x + (b-d)*x + a = 0 //временные переменные для преобразования типов long double tmp_a = a; long double tmp_b = b; long double tmp_c = c; long double tmp_d = d; //временные переменные для сохранения результатов long double x1 = 0, x2 = 0; long double y1 = 0, y2 = 0; //решение системы уравнений long double D = (tmp_b - tmp_d)*(tmp_b - tmp_d) + 4*tmp_a*tmp_c; if (D < 0.0) return SQ_ERROR_NO_ROOT; if (D == 0.0) { //один корень if (tmp_c == 0) return SQ_ERROR_DIV_BY_ZERO; x1 = (tmp_b - tmp_d) /(2 * tmp_c ); if (x1 == 0) return SQ_ERROR_DIV_BY_ZERO; y1 = tmp_c * x1 + tmp_d; resultX1 = x1; resultY1 = y1; resultX2 = x1; resultY2 = y1; return SQ_SUCCES_ALONE_ROOT; } if (D > 0.0) { //два корня if (tmp_c == 0) return SQ_ERROR_DIV_BY_ZERO; x1 = (-1.0*(tmp_b - tmp_d) + sqrt(D)) /(-2 * tmp_c ); y1 = tmp_c * x1 + tmp_d; x2 = (-1.0*(tmp_b - tmp_d) - sqrt(D)) /(-2 * tmp_c ); y2 = tmp_c * x2 + tmp_d; if ((x1 == 0)&&(x2 != 0)) { resultX1 = x2; resultY1 = y2; resultX2 = x2; resultY2 = y2; return SQ_SUCCES_ALONE_ROOT; } if ((x2 == 0)&&(x1 != 0)) { resultX1 = x1; resultY1 = y1; resultX2 = x1; resultY2 = y1; return SQ_SUCCES_ALONE_ROOT; } if ((x1 == 0)&&(x2 == 0)) return SQ_ERROR_DIV_BY_ZERO; resultX1 = x1; resultY1 = y1; resultX2 = x2; resultY2 = y2; return SQ_SUCCES_TWO_ROOT; } } Тестовые примеры: 1) Система умеет 2 решения: Входные данные: Выходные данные:
2)Система имеет 1 решение: Входные данные: Выходные данные:
2)Система не имеет решений: Входные данные: Выходные данные: Система уравнений не имеет решения !
При большом объеме данных предусмотрен ввод данных из файла, а так же вывод результатов в файл. По умолчанию файлом для входных данных является input.ini . Вывод результатов осуществляется в файл results.ini.
Приложение Б
Компоновка форм
В программе используется четыре формы: главная форма, информация о программе, помощь и массовая обработка данных. Главная форма представлена на рисунке Б.1. Рисунок Б.1
В главной форме происходит ввод исходных данных и вывод результатов. В этой форме использованы следующие элементы VBL: Edit – ввод исходных данных; Memo – вывод результатов; Image – рисунок (исходная система); Button – кнопка запуска решения; Label – вспомогательная информация. Форма с информацией о программе и авторе представлена на рисунке Б.2. Рисунок Б.2
В этой форме использованы следующие элементы VBL: Image – рисунок(исходная система); Label – вспомогательная информация. Форма, содержащая информацию, которая помогает пользователю работать с программой, представлена на рисунке Б.3. Рисунок Б.3
В этой форме использованы следующие элементы VBL: Label – вспомогательная информация. Форма, реализующая массовую обработку данных, представлена на рисунке Б.4. Рисунок Б.4
Этот режим работы используется при большом объеме входных и выходных данных. Ввод данных осуществляется из файла, вывод – в файл. В этой форме использованы следующие элементы VBL: Button – кнопка запуска решения; Label – вспомогательная информация; GroupBox - вспомогательная информация.
Приложение В
Популярное: Модели организации как закрытой, открытой, частично открытой системы: Закрытая система имеет жесткие фиксированные границы, ее действия относительно независимы... Личность ребенка как объект и субъект в образовательной технологии: В настоящее время в России идет становление новой системы образования, ориентированного на вхождение... Генезис конфликтологии как науки в древней Греции: Для уяснения предыстории конфликтологии существенное значение имеет обращение к античной... Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (493)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |