Root /ArchiveAbout
()

Линейное и квадратное уравнения, система уравнений

Линейное и квадратное уравнения, система уравнений

На этой странице дано решение примеров 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.

$1 $2Begin39. Найти корни квадратного уравнения 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

**type** real;: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308

**type** real;: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308

**type** real;: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308

Второй вариант решения задачи 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

**type** real;: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308

**type** real;: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308

**type** real;: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308

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.

$1 $2