На этой странице дано решение примеров Begin38 - Begin40 из задачника Абрамяна, в которых рассматриваются решение простейших уравнений и систем: линейное, квадратное и система линейных уравнений с двумя неизвестными.
Begin38. Решить линейное уравнение A·x + B = 0, заданное своими коэффициентами A и B (коэффициент A не равен 0).
В программе нет проверки на вводимость, и если вы введете число A=0, то в 10 строке произойдет деление на 0. Поэтому нужно вводить не равное 0 число А.
var
A, B, x: real;
begin
writeln('Введите коэффициенты A и B (A <> 0):');
write(' A = ');
readln(A); { <-- вводим А }
write(' B = ');
readln(B); { <-- вводим B }
x := - B / A; { <== находим решение }
writeln;
{ Выводим результат с 4-значной точностью: }
writeln('x = ', x:0:4);
readln
end.
**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308 Begin39. Найти корни квадратного уравнения A·x2 + B·x + C = 0, заданного своими коэффициентами A, B, C (коэффициент A не равен 0), если известно, что дискриминант уравнения положителен. Вывести вначале меньший, а затем больший из найденных корней. Корни квадратного уравнения находятся по формуле
x1,2 = (−B ± D1/2)/(2·A),
где D — дискриминант, равный B2 − 4·A·C.
Как и в предыдущей программе, здесь нет проверки на то, чтобы А был не равным 0, и то, чтобы дискриминант был положительным. В противном случае или выдаст ошибку, или корни будут равные. К тому же, если A < 0, то первый корень (в формуле D со знаком минус) будет большим, а не меньшим.
var
A, B, C, D, x: real;
begin
write('A = ');
readln(A); { <-- вводим А≠0 }
write('B = ');
readln(B); { <-- вводим B }
write('C = ');
readln(C); { <-- вводим C }
writeln;
D := sqr(B) - 4 * A * C; { <== вычисляем дискриминант }
writeln('Результат:');
x := (- B - sqrt(D)) /(2 * A); { <== первый корень }
writeln(' x1 = ', x:0:4);
x := (- B + sqrt(D)) /(2 * A); { <== второй корень }
writeln(' x2 = ', x:0:4);
readln
end.
**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308**function** Sqr(x: real): real;
: Возвращает квадрат числа x.**function** Sqrt(x: real): real;
: Возвращает квадратный корень числа x.**function** Sqrt(x: real): real;
: Возвращает квадратный корень числа x. Второй вариант решения задачи Begin39 выходит за рамки раздела Begin задачника Абрамяна, поскольку использует условный оператор и циклы с постусловием. Но его следует привести, так как этот способ учитывает проверку в случае неправильного ввода. Также сравните это решение с задачей Proc17.
var
A, B, C, D, x1, x2: real;
begin
writeln('Введите коэффициенты A, B и C:');
{ Далее в цикле с послеусловием будем вводить
коэффициент А до дех пор, пока А станет не равным 0: }
repeat
write(' A = ');
readln(A); { <-- вводим А }
until A <> 0; { <-- выходим из цикла, если А≠0 }
write(' B = ');
readln(B); { <-- вводим B }
{ На этом этапе будем вводить С и вычислять дискриминант D.
Поскольку по условию задачи нам нужен D > 0, то выход
из цикла осуществится при выполнении этого условия: }
repeat
write(' C = ');
readln(C); { <-- вводим C }
D := sqr(B) - 4 * A * C { <== вычисляем дискриминант }
until D > 0; { <-- выходим из цикла, если D > 0 }
{ Далее вычисляем корни: }
x1 := (- B - sqrt(D)) /(2 * A); { <== первый корень }
x2 := (- B + sqrt(D)) /(2 * A); { <== второй корень }
writeln;
writeln('Результат:');
{ Выводим корни в зависимости от знака A так,
чтобы первый корень был меньшим, а второй большим: }
if A > 0 then writeln(' x1 = ', x1:0:3, ' x2 = ', x2:0:3)
else writeln(' x1 = ', x2:0:3, ' x2 = ', x1:0:3);
readln
end.
**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308**function** Sqr(x: real): real;
: Возвращает квадрат числа x.**function** Sqrt(x: real): real;
: Возвращает квадратный корень числа x.**function** Sqrt(x: real): real;
: Возвращает квадратный корень числа x. Begin40. Найти решение системы линейных уравнений вида
A1·x + B1·y = C1,A2·x + B2·y = C2,
заданной своими коэффициентами A1, B1, C1, A2, B2, C2, если известно, что данная система имеет единственное решение. Воспользоваться формулами
x = (C1·B2 − C2·B1)/D, y = (A1·C2 − A2·C1)/D,
где D = A1·B2 − A2·B1.
var
A1, B1, C1, A2, B2, C2, D, x, y: real;
begin
writeln('Введите коэффициенты A1, B1, C1:');
readln(A1, B1, C1);
writeln('Введите коэффициенты A2, B2, C2:');
readln(A2, B2, C2);
D := A1 * B2 - A2 * B1; { <== Вычисляем определитель системы }
{ Вычисляем x и y: }
x := (C1 * B2 - C2 * B1) / D;
y := (A1 * C2 - A2 * C1) / D;
writeln;
writeln('Результат:');
writeln(' x = ', x:0:3);
writeln(' y = ', y:0:3);
readln
end.
**type** real;
: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308