Вирішити квадратне рівняння, завдання на pascal, програмування для початківців

Формулювання. Дано дійсні числа a. b і c. причому a відмінно від 0. Вирішити квадратне рівняння ax 2 + bx + c = 0 або повідомити про те, що дійсних рішень немає.

Рішення. З алгебри відомо, що:

Квадратне уравненіеax 2 + bx + c = 0, вираженіеD = b 2 - 4 ac - дискримінант:

- есліD> 0, має два рішення:. ;

- есліD = 0, має єдине рішення:;

- есліD <0, не имеет действительных решений.

Отже, нам необхідно обчислити дискримінант (заведемо для нього речову змінну d типу real) і в залежності від його значення організувати розгалуження. Спочатку потрібно перевірити, чи має рівняння дійсні рішення (для рішень заведемо змінні x 1 і x 2 типу real). Якщо так, і якщо дискримінант не дорівнює нулю, то обчислюємо обидва рішення за формулами, а якщо дискримінант дорівнює нулю, то обчислюємо єдине рішення. Якщо ж дійсних рішень немає, виводимо текстове повідомлення про це. Основний алгоритм можна проілюструвати наступною блок-схемою:

Вирішити квадратне рівняння, завдання на pascal, програмування для початківців

Три нерозшифрованих блоку є стандартні оператори виведення. Розберемо їх докладніше.

1) При виведенні двох коренів вираз буде виглядати наступним чином:

x1: = (-b + sqrt (d)) / 2 * a;

x2: = (-b - sqrt (d)) / 2 * a;

writeln ( 'x1 =', x1: 4: 2, ', x2 =', x2: 4: 2);

При цьому виводиться вираз буде виглядати так: 'x 1 = m. x 2 = n '. де синім кольором виділені однозначні текстові константи, які беруться зі списку аргументів writeln. червоним - обчислені значення x 1 і x 2. Причому коріння виведені в форматованому вигляді: число після першого двокрапки задає ширину поля виведення для змінної разом з точкою (при нестачі поля вона буде розширено програмою), а число після другого двокрапки - кількість виведених дробових знаків (його при роботі програми змінити не можна);

2) При виведенні одного кореня - все те ж саме, тільки виводиться один корінь:

3) При відсутності дійсних коренів виводимо повідомлення:

writeln ( 'No real solutions!');

В результаті внутрішній умовний оператор з тілом включно буде виглядати так:

if d <> 0 then begin

x1: = (-b + sqrt (d)) / 2 * a;

x2: = (-b - sqrt (d)) / 2 * a;

writeln ( 'x1 =', x1: 4: 2, ', x2 =', x2: 4: 2)