Мегаобучалка Главная | О нас | Обратная связь


Разработка алгоритма выполнения поставленной задачи



2016-09-15 487 Обсуждений (0)
Разработка алгоритма выполнения поставленной задачи 0.00 из 5.00 0 оценок




Необходимо написать программу для решения системы вида:

Для решения этой системы уравнений необходимо вычесть из первого уравнения второе и умножить правую и левую часть на 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 - вспомогательная информация.

 


Приложение В

 



2016-09-15 487 Обсуждений (0)
Разработка алгоритма выполнения поставленной задачи 0.00 из 5.00 0 оценок









Обсуждение в статье: Разработка алгоритма выполнения поставленной задачи

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Как построить свою речь (словесное оформление): При подготовке публичного выступления перед оратором возникает вопрос, как лучше словесно оформить свою...
Почему люди поддаются рекламе?: Только не надо искать ответы в качестве или количестве рекламы...
Генезис конфликтологии как науки в древней Греции: Для уяснения предыстории конфликтологии существенное значение имеет обращение к античной...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (487)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.008 сек.)