Будем считать, что в последней строке должно быть вот так: „z<5“.
Во-первых, условие z≥20 отсекает уже разбивает числа на два лагеря: те, которые соответствуют данному условию и те, которые не.
Следовательно не нужно в секции „иначе“ делать проверку на z<20.
Иначе говоря, весь интервал действительных чисел (–∞…+∞) разбивается на два интервала (–∞…20) и [20…+∞).
А после второго условия, где z≥5, снова происходит разбиение уже части действительных чисел (–∞…20) на два интервала (–∞…5) и [5…20),
где второй интервал соответствует условию 5≤z<20, а интервал (–∞…5) — это то, что осталось для „иначе“.
Во-вторых, перенос then на следующую строку как бы разбивает условный оператор.
Гораздо красивее и понятнее, если он выглядит „классически“.
Типа:
if [условный оператор] then
[операторы, которые соответствуют условию]
else
[операторы, которые не соответствуют условию];
против вашей записи:
if [условный оператор]
then
[операторы, которые соответствуют условию]
else
[операторы, которые не соответствуют условию];
Здесь даже не понятно, как оформить отступ для „then“…
В-третьих, зачем у вас в каждой операторной скобке происходит одно и то-же действие „Label1.Caption …“?
Если его вынести в конец кода (за условные операторы), то операторные скобки окажутся лишними!
И код сократится как минимум на 8 строк…
P.S. А ещё у вас вместо √z находится z² в последнем условии…
Ну и зачем обратное преобразование „FloatToStr(z)“, если можно тупо взять исходное „Edit1.Text“?
