Добавлен: 25.10.2018
Просмотров: 2134
Скачиваний: 14
16
Начало
Инициализация переменных
D=(d-b)^2+4ac
D>=0
D>0
Да
X1:=(b-d+sqrt(D))/2c
X1:=(b-d)/2c
X2:=(b-d-sqrt(D))/2c
Вывод x1,y1,x2,y2
Y1:=cX1+d
Y2:=cX2+d
Y1:=cX1+d
Вывод
(‘корней нет’)
Нет
Конец
Нет
Да
Вывод x1,y1
Рисунок А.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;
17
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;
}
}
18
Тестовые примеры:
1) Система умеет 2 решения:
Входные данные:
4
3
2
1
d
c
b
a
Выходные данные:
5
;
33
,
0
1
;
1
2
2
1
1
y
x
y
x
2)Система имеет 1 решение:
Входные данные:
5
2
1
2
d
c
b
a
Выходные данные:
3
;
1
1
1
y
x
2)Система не имеет решений:
Входные данные:
3
2
1
10
d
c
b
a
Выходные данные:
Система уравнений не имеет решения !
При большом объеме данных предусмотрен ввод данных из файла, а так же
вывод результатов в файл. По умолчанию файлом для входных данных является
input.ini . Вывод результатов осуществляется в файл results.ini.
19
Приложение Б
Компоновка форм
В программе используется четыре формы: главная форма, информация о
программе, помощь и массовая обработка данных.
Главная форма представлена на рисунке Б.1.
Рисунок Б.1
В главной форме происходит ввод исходных данных и вывод результатов. В
этой форме использованы следующие элементы VBL:
Edit – ввод исходных данных;
Memo – вывод результатов;
Image – рисунок (исходная система);
Button – кнопка запуска решения;
Label – вспомогательная информация.
Форма с информацией о программе и авторе представлена на рисунке Б.2.
Рисунок Б.2
В этой форме использованы следующие элементы VBL:
Image – рисунок(исходная система);
Label – вспомогательная информация.
Форма, содержащая информацию, которая помогает пользователю работать
с программой, представлена на рисунке Б.3.
20
Рисунок Б.3
В этой форме использованы следующие элементы VBL:
Label – вспомогательная информация.
Форма, реализующая массовую обработку данных, представлена на рисунке
Б.4.
Рисунок Б.4
Этот режим работы используется при большом объеме входных и выходных
данных. Ввод данных осуществляется из файла, вывод – в файл.
В этой форме использованы следующие элементы VBL:
Button – кнопка запуска решения;
Label – вспомогательная информация;
GroupBox - вспомогательная информация.