Другие языки программирования и технологии

Проверьте пожалуйста правильно ли я написал разветвляющийся алгоритм в delphi

procedure TForm1.Button1Click(Sender: TObject);
var z, f:real;
begin
z:=StrToFloat(Edit1.Text);
If (z>20) or (z=20)
then
begin
f:=0;
Label1.Caption:='z='+floatToStr(z)+'f='+FloatToStr(f)
end
else
If (5<z) or (5=z) and (z<20)
then
begin
f:=sqr(z);
Label1.Caption:='z='+FloatToStr(z)+'f='+FloatToStr(f)
end
else
If (z<5) or (z=5)
then
begin
f:=sqr(z);
Label1.Caption:='z='+FloatToStr(z)+'f='+FloatToStr(f);
end;
end;

end.
Anti Dmx
Anti Dmx
73
If (z>20) or (z=20)
Заменяем на
If (z>=20)
Илья Мальцев
Илья Мальцев
96 856
Лучший ответ
Anti Dmx ааа понял, спасибо
Будем считать, что в последней строке должно быть вот так: „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“?

Похожие вопросы