Во-первых - не имейте моду писать всё в одну строчку. Сейчас Вы в этом убедились, поскольку не можете найти ошибку. Объясняю, как надо:
if <условие> then
// оператор
Никаких if <условие> then // оператор, - забудьте про это навсегда.
Это Вам не тернарный оператор <условие> ? <оператор_при_true> : <оператор_при_false>.
Во-вторых - Вы засовываете логическую переменную в блок условия. Объясняю:
if D > 0 then
x1 := ... and x2 := ...
Вы не можете таким образом объявлять переменные. Каждое действие - в новой строке, а также должно оканчиваться точкой с запятой. Как должно быть написано правильно:
if D > 0 then
begin
x1 := ...
x2 := ...
end // здесь точка с запятой не нужна, поскольку далее следует блок else
else
if D = 0 then
x := ... // здесь тоже запятая не нужна
else
write('...');
В-третьих - обезопасьте себя и поставьте порядок операций в поиске корней дискриминанта:
x1 := (-b + sqrt(D)) / (2*a) // без скобок выполнится деление на 2, а потом умножение на a
Так же стоит сделать и с x := ...
Если ошибка не пропадает - пишите в комментариях её описание (ошибки).
Answers & Comments
Во-первых - не имейте моду писать всё в одну строчку. Сейчас Вы в этом убедились, поскольку не можете найти ошибку. Объясняю, как надо:
Никаких if <условие> then // оператор, - забудьте про это навсегда.
Это Вам не тернарный оператор <условие> ? <оператор_при_true> : <оператор_при_false>.
Во-вторых - Вы засовываете логическую переменную в блок условия. Объясняю:
Вы не можете таким образом объявлять переменные. Каждое действие - в новой строке, а также должно оканчиваться точкой с запятой. Как должно быть написано правильно:
В-третьих - обезопасьте себя и поставьте порядок операций в поиске корней дискриминанта:
Так же стоит сделать и с x := ...
Если ошибка не пропадает - пишите в комментариях её описание (ошибки).