Консультация № 175689
28.12.2009, 02:16
0.00 руб.
0 1 1
Ещё раз добрый вечер!Уважаемые эксперты,прошу вашей помощи!
такое задание:
6 Исследовать систему: ax+by=c
dx+ey=f
1)на существование единственного решения
2)Проверить, являются ли заданные значения x и y решением системы двух линейных уравнений с двумя неизвестными
3)Проверить, имеет ли система единственное решение, или имеет множество решений или не имеет решений

Обсуждение

Неизвестный
28.12.2009, 14:51
общий
это ответ
Здравствуйте, angel.nero.
В приложении код программы. Для определения числа решений использую правило Крамера (ссылка в комментарии в коде программы).
Пример окна программы:
Код:
Решение системы уравнений
ax + by = c
dx + ey = f
Введите значение коэффициента a: 2
Введите значение коэффициента b: -
Ошибка ввода
Введите значение коэффициента b: -3
Введите значение коэффициента c: 7
Введите значение коэффициента d: 6
Введите значение коэффициента e: -9
Введите значение коэффициента f: 12
Решается система уравнений:
2.000000x + -3.000000y = 7.000000
6.000000x + -9.000000y = 12.000000

Введите Ваш вариант решения
Значение x: 1
Значение y: 2
Значения x = 1.000000 и y = 2.000000
не являются решениями системы уравнений
Количество решений:
нет решения


Жалобы на сложность принимать не буду: лучше спрашивайте - объясню, что к чему

Прикрепил файл с исходным кодом программы

Приложение:
TYPE
solutions = (sSingle, sMultiple, sNone);

{Функция для получения вещественного числа - с проверкой правильности}
function GetReal(msg: String): Real;
var
r: Real;
code: Integer;
begin
repeat
Write(msg,' ');
{$I-} ReadLn(r); {$I+}
code := IOResult;
if code <> 0 then WriteLn('Ошибка ввода');
until code = 0;
GetReal := r
end;

{Функция для проверки решения}
function TestSolution(a, b, c, d, e, f, x, y: Real): Boolean;
begin
TestSolution := (a*x + b*y = c) and (d*x + e*y = f);
end;

{Функция для определения числа решений
Находим по правилу Крамера
http://www.bymath.net/studyguide/alg/sec/alg15.html}
function SolutionCount(a, b, c, d, e, f: Real): solutions;
var DET: Real;
begin
DET := (a*e - b*d);
if DET <> 0 then SolutionCount := sSingle
else
begin
SolutionCount := sMultiple;
{Но именно здесь может получиться, что нет решений.
Проблема усложняется тем, что какие-то коэффициенты могту быть равны 0}
if (a*f <> c*d) or (b*f <> c*e) then
{так записываю отношения, чтобы избежать деления на ноль}
SolutionCount := sNone
end;
end;

VAR
a, b, c, d, e, f: Real;
x, y: Real;
BEGIN
WriteLn('Решение системы уравнений');
WriteLn(' ax + by = c');
WriteLn(' dx + ey = f');

a := GetReal('Введите значение коэффициента a:');
b := GetReal('Введите значение коэффициента b:');
c := GetReal('Введите значение коэффициента c:');

d := GetReal('Введите значение коэффициента d:');
e := GetReal('Введите значение коэффициента e:');
f := GetReal('Введите значение коэффициента f:');

WriteLn('Решается система уравнений:');
WriteLn(' ',a:10:6,'x + ',b:10:6,'y = ',c:10:6);
WriteLn(' ',d:10:6,'x + ',e:10:6,'y = ',f:10:6);

WriteLn;
WriteLn('Введите Ваш вариант решения');
x := GetReal(' Значение x: ');
y := GetReal(' Значение y: ');

WriteLn('Значения x = ',x:10:6,' и y = ',y:10:6);
if NOT TestSolution(a, b, c, d, e, f, x, y) then
Write(' не');
WriteLn(' являются решениями системы уравнений');

WriteLn('Количество решений: ');
Case SolutionCount(a, b, c, d, e, f) of
sSingle : WriteLn(' единственное');
sMultiple: WriteLn(' множество решений');
sNone : WriteLn(' нет решения');
end;
END.
Прикрепленные файлы:
Форма ответа