Паскаль: типи дійсних, оператори розгалуження, функції та їх виклики, процедури, під задачі
if d>0 then
begin x1:=(-b+sqrt(d))/(2*a); x2:=(-b-sqrt(d))/(2*a) end
else
if d=0 then x1:=-b/(2*a)
Як бачимо, після слова then записано складений, а після слова else – оператор розгалуження в скороченій формі.
Оформимо алгоритм обчислення коренів у вигляді програми:
program roots(input, output);
var a, b, c: real; x1, x2: real;
begin
{1} readln(a,b,c); {припускаємо, що a<>0! }
{2} d:=b*b-4*a*c;
{3} if d>0 then
begin
x1:=(-b+sqrt(d))/(2*a);
x2:=(-b-sqrt(d))/(2*a)
end
else
if d=0 then x1:=-b/(2*a)
end.
Якщо при виконанні цієї програми задати значення змінних a, b, c, наприклад, відповідно 1, 3, 2, то справджується d>0, і обчислюються x1 і x2. Якщо задати значення 1, 2, 3, то умова d>0 хибна, обчислюється умова d=0, її значенням є false, і на цьому все закінчується. При значеннях 1, 2, 1 умова d=0 істинна, і обчислюється лише x1.
До програми слід додати оператори виведення, щоб вона не була занадто "мовчазною". Це залишається як вправа.
І останнє зауваження щодо структури операторів розгалуження. Розглянемо такий оператор:
if z>0 then if z>5 then k:=2 else k:=1
Хибності якої умови, z>0 чи z>5, відповідає else-гілка? Тобто чи є оператор