Составить подпрограмму решения квадратного уравнения - Turbo Pascal (33562)
Формулировка задачи:
Помогите пожалуйста.
Составить подпрограмму решения квадратного уравнения ах2 +bx +c = 0.
Решение задачи: «Составить подпрограмму решения квадратного уравнения»
textual
Листинг программы
var a, b, c, ds, x1, x2 : real; procedure Solve(var n1, n2 : real); begin n1 := (-b + sqrt(ds)) / (2 * a); n2 := (-b - sqrt(ds)) / (2 * a); end; function D(n1, n2, n3 : real) : real; begin D := sqr(n2) - 4 * n1 * n3; end; begin repeat writeln('введите коэффициенты квадратного уравнения'); readln(a, b, c); if (a = 0) and (b = 0) then if (c = 0) then begin writeln('уравнение имеет бесконечное количество корней'); exit end else begin writeln('данное выражение - неверное тождество'); exit end; until (a <> 0) or (b <> 0); {проверяем чтобы вообще были неизвестные} ds := D(a, b, c); if a = 0 then writeln('уравнение не является квадратным, его корень : ', (-c / b):6:2) else if ds < 0 then writeln('вещественных корней нет') else begin Solve(x1, x2); if ds = 0 then writeln('корни квадратного уравниеия: ', x1:6:2, ' кратности 2') else writeln('корни квадратного уравниеия: ', x1:6:2, x2:6:2) end; readln end.
Объяснение кода листинга программы
- Объявляются переменные a, b, c, ds, x1, x2 типа real.
- Создается процедура Solve, которая принимает два аргумента n1 и n2 типа real.
- Внутри процедуры n1 присваивается значение (-b + sqrt(ds)) / (2 a), а n2 присваивается значение (-b - sqrt(ds)) / (2 a).
- Создается функция D, которая принимает три аргумента n1, n2 и n3 типа real.
- Внутри функции D вычисляется значение D = sqr(n2) - 4 n1 n3.
- В основной программе происходит цикл, в котором пользователю предлагается ввести коэффициенты квадратного уравнения.
- Проверяется, что все коэффициенты не равны нулю. Если хотя бы один из них равен нулю, то выводится сообщение об этом и программа завершается.
- Вычисляется значение D с использованием введенных коэффициентов.
- Если a = 0, то выводится сообщение о том, что уравнение не является квадратным, и выводится корень уравнения, если он существует.
- Если ds < 0, то выводится сообщение о том, что вещественных корней нет.
- Если ds = 0, то выводится сообщение о том, что уравнение имеет корни кратности 2, и выводятся значения x1 и x2.
- Программа заканчивается после чтения следующего ввода от пользователя.