Решить в целых числах уравнение ( ax + b ) : ( cx + d ) = 0. Вводятся 4 числа: a, b, c и d; c и d не равны нулю одновременно. Необходимо вывести все решения, если их число конечно, “NO” (без кавычек) , если решений нет, и “INF” (без кавычек) , если решений бесконечно много.
Пояснения:
Если a=c и b=d или a=0 и b<>0, то уравнение не имеет решений. Если a=0 и b=0, то уравнение имеет бесконечно много решений. И последний случай: если a<>0, то находим корень, проверяем, является ли он целым числом, и проверяем, не получится ли 0 в знаменателе. Если все условия выполняются - выводим корень, если нет - уравнение не имеет решений.
Сделал 2 варианта.. . оба работают но не во всех случаях.
1. program zadanieO;
var a,b,c,d:integer;
begin
readln(a);
readln(b);
readln(c);
readln(d);
if (c<>0) and (d<>0) then
if ((a=c) and (b=d)) or ((a=0) and (b<>0)) then writeln('NO')
else if ((a=0) and (b=0)) and (((-d)/c)<>0) then writeln('INF')
else if (a<>0) then
if (-b mod a = 0) and (((-d)/c)<>0) then writeln(-b div a)
else writeln('NO');
end.
2. program zadanieO;
var a,b,c,d:integer;
begin
readln(a);
readln(b);
readln(c);
readln(d);
if (c<>0) and (d<>0) then
begin
if (a=0) and (b=0) and ((c*((-d)/c)-d)<>0) then writeln('INF')
else if ((a=0) or (a*d = b*c)) and ((c*((-d)/c)-d)<>0) then writeln('NO')
else if (b div a * a = b) and ((c*((-d)/c)-d)<>0) then writeln(-b div a)
else writeln('NO');
end;
end.
Другие языки программирования и технологии
Сложное уравнение (ax+b)/(cx+d)=0 на Pascal
Одной строкой:
if a = 0 then if b = 0 then result := 'INF' else result := 'NO' else if -b*c/a+d = 0 then result := 'NO' else result := Str(-b/a)
Ответ Зла всем хорош, только не учитывает случай a=0
if a = 0 then if b = 0 then result := 'INF' else result := 'NO' else if -b*c/a+d = 0 then result := 'NO' else result := Str(-b/a)
Ответ Зла всем хорош, только не учитывает случай a=0
А ты уверен, что алгоритм в пояснениях верен?
ведь это же всего лишь система
ax+b = 0
cx+d != 0
у ax+b = 0 1 корень.
его нашел, подставил во второе, проверил.
ведь это же всего лишь система
ax+b = 0
cx+d != 0
у ax+b = 0 1 корень.
его нашел, подставил во второе, проверил.
Что-то, да, сильно сложное уравнение. А если бы пришлось что-нибудь совсем навороченное, с радикалами там или еще какими логарифмами анализировать? Совсем ведь утонуть во всех этих IF-ах можно.
Может быть, поступить так? Ввести дополнительную переменную, result, и при помощи нее избавиться от вложенных проверок? Например:
VAR result :String;
...
result := '';
IF (c = 0) and (d = 0) THEN result := 'NO';
IF (result = '') THEN
IF (a = c) and (b = d) THEN result := 'NO';
IF (result = '') THEN
IF (a = 0) and (b <> 0) THEN result := 'NO';
IF (result = '') THEN
IF (a = 0) and (b = 0) THEN result := 'INF';
IF (result = '') THEN
IF (d-c*(b div a) = 0) THEN result := 'NO';
IF (result = '') THEN
IF (b mod a = 0) THEN Str(result, - b div a);
IF (result = '') THEN result := 'Ваще в непонятках';
WriteLn(result);
Может быть, поступить так? Ввести дополнительную переменную, result, и при помощи нее избавиться от вложенных проверок? Например:
VAR result :String;
...
result := '';
IF (c = 0) and (d = 0) THEN result := 'NO';
IF (result = '') THEN
IF (a = c) and (b = d) THEN result := 'NO';
IF (result = '') THEN
IF (a = 0) and (b <> 0) THEN result := 'NO';
IF (result = '') THEN
IF (a = 0) and (b = 0) THEN result := 'INF';
IF (result = '') THEN
IF (d-c*(b div a) = 0) THEN result := 'NO';
IF (result = '') THEN
IF (b mod a = 0) THEN Str(result, - b div a);
IF (result = '') THEN result := 'Ваще в непонятках';
WriteLn(result);
Похожие вопросы
- Как будет выглядеть программа решения квадратного уравнения ax^2 + bx + c = 0 (Паскаль)???
- Почему при делении дробных чисел пишет результат 0 на С++? x1=(b+pow(d,0.5))/2/a;
- Вопросик по Pascal. Есть переменные A,B,C,D. Как сделать так, чтобы при вводе A выводилось цифра 1, B - 2, C-3, D-4?
- Решение нелинейного уравнения 3^2+2x-3=0
- Програмисты, помогите! В Турбо Паскаль составить программу для решения квадратного уравнения(ax^2+bx=c)
- Помогите написать программу на С++: Заданы отрезки a,b,c,d. Проверить, могут ли они служить сторонами прямоугольника
- Уравнение a*x+b*y=c
- Работу программы проверить для a = 0,1; b = 1,0; h = 0,1; значение параметра n выбрать в зависимости от задания. Pascal
- (ax−1)(bx−1) < 0 на паскаль
- Помогите с Pascal 7.0!Кто чем может!