А50

Задача А50. Даны действительные числа [latex]a_{1}[/latex], [latex]b_{1}[/latex], [latex]c_{1}[/latex], [latex]a_{2}[/latex], [latex]b_{2}[/latex], [latex]c_{2}[/latex]. Выяснить, верно ли что [latex]\left|a_{1} b_{2} -a_{2} b_{1} \right|\geq 0.0001[/latex], и если верно, то найти решение системы линейных уравнений

[latex]a_{1} x+b_{1} y+c_{1} =0[/latex],

[latex]a_{2} x+b_{2} y+c_{2} =0[/latex]

(при выполнении выписанного неравенства система заведомо совместна и имеет единственное решение).

[latex]a_{1}[/latex] [latex]b_{1}[/latex] [latex]c_{1}[/latex] [latex]a_{2}[/latex] [latex]b_{2}[/latex] [latex]c_{2}[/latex] [latex]x[/latex] [latex]y[/latex] Комментарий.
 3,8  5  -2  6  8,4  3  16,5625  -12,1875  Тест пройден.
 0 4  5  2  0  9  -4,5  -1,25  Тест пройден.
 1 2  -3  3  2  -1  -1  2  Тест пройден.
 1  0.00002  5  2  0.00005  8  —  —  Тест не пройден. Неравенство не выполняется.
 1  4  5  2  8  3  —  —  Тест не пройден. Неравенство не выполняется.

Код программы (C++):

Java:

 

По условию задачи необходимо решить систему линейных уравнений и вывести на экран [latex]x[/latex], [latex]y[/latex].

Программа решает это уравнение по методу Гаусса.

Изначально она делает проверку на наличие ненулевого аргумента [latex]a_{1}[/latex]. Если таковой имеется, то программа решает задачу, исходя из первого уравнения системы, в противном случае — решение начинается со второго уравнения.

Далее я ввела в программу переменные [latex]b_{0}[/latex], [latex]c_{0}[/latex], чтобы не перегружать формулы большим количеством данных. Алгоритм действий таков:

1) Перенести  [latex]c_{1}[/latex] и  [latex]c_{2}[/latex] в правую часть уравнения, что автоматически меняет их знак на противоположный.

2) Если в программе присутствует ненулевой аргумент [latex]a_{1}[/latex], то она вычитает из второго уравнения первое, предварительно домножив второе на [latex]\frac{b_{1} a_{2} }{a_{1} }[/latex].

3) Из преобразованного второго уравнения находится [latex]y[/latex], который впоследствии подставляется в первое уравнение системы для нахождения [latex]x[/latex] .

Для выполнения программы и проверки тестов можно воспользоваться следующим объектом (C++) и этим (Java).

Ілларіонова Марія Валеріївна
Ілларіонова Марія Валеріївна

Latest posts by Ілларіонова Марія Валеріївна (see all)

6 thoughts on “А50

  1. Добавьте, пожалуйста, тест, в котором a1*b2-a2*b1 == 0, хотя значения a1, b1, a2, b2 не так уж и малы.
    Первый тест довольно сложный, как считали ответ? Желательно добавить тесты, которые легче проверить устно.
    После вывода значений желательно перевести строку (\n) — подписи вида «x=», «y=» тоже лишними не будут.

      • Засчитано, 10 баллов.
        Попробовал на Вашем посте подсмотренную у Игоря Евгеньевича строчку, добавляющую полосу прокрутки в таблицу (чтобы она не налезала на правую колонку):