Почему некорректно работает программа на Delphi ?
Предложу свой вариант через массив:procedure TForm1.Button1Click(Sender: TObject);
var
  rect: array[0..2] of real;
  tmp, p, s: real;
  i: integer;
begin
  rect[0] := StrToFloat(Edit1.Text);
  rect[1] := StrToFloat(Edit2.Text);
  rect[2] := StrToFloat(Edit3.Text);

  if (rect[0] = rect[1]) and (rect[1] = rect[2]) then
    begin
      label1.Caption := 'Равносторонний';
      Exit;
    end;
  if (rect[0] = rect[1]) or (rect[1] = rect[2]) or (rect[0] = rect[2]) then
    begin
      label1.Caption := 'Равнобедренный';
      Exit;
    end;

  //сортируем массив
  for i := 0 to 1 do
    begin
      tmp := rect[i + 1];
      if (rect[i] > rect[i + 1]) then
        begin
          rect[i + 1] := rect[i];
          rect[i] := tmp;
        end;
    end;
  if (rect[0] > rect[1]) then
        begin
          tmp := rect[1];
          rect[1] := rect[0];
          rect[0] := tmp;
        end;

  if (sqrt(rect[0] * rect[0] + rect[1] * rect[1]) = rect[2]) then
    begin
      label1.Caption := 'Прямоугольный';
      Exit;
    end;

  if (rect[0] * rect[0] + rect[1] * rect[1] > rect[2] * rect[2]) then
    begin
      label1.Caption := 'Тупоугольный';
      p := (rect[0] + rect[1] + rect[2]) / 2;
      s := sqrt(p * (p - rect[0]) * (p - rect[1]) * (p - rect[2]));
      label1.Caption := 'Площадь: ' + FloatToStr(s) + #13;
      for i := 0 to 2 do
        label1.Caption := label1.Caption + FloatToStr(rect[i]) + #13;
      Exit;
    end;
end;
Предложу свой вариант через массив:procedure TForm1.Button1Click(Sender: TObject);
var
  rect: array[0..2] of real;
  tmp, p, s: real;
  i: integer;
begin
  rect[0] := StrToFloat(Edit1.Text);
  rect[1] := StrToFloat(Edit2.Text);
  rect[2] := StrToFloat(Edit3.Text);

  if (rect[0] = rect[1]) and (rect[1] = rect[2]) then
    begin
      label1.Caption := 'Равносторонний';
      Exit;
    end;
  if (rect[0] = rect[1]) or (rect[1] = rect[2]) or (rect[0] = rect[2]) then
    begin
      label1.Caption := 'Равнобедренный';
      Exit;
    end;

  //сортируем массив
  for i := 0 to 1 do
    begin
      tmp := rect[i + 1];
      if (rect[i] > rect[i + 1]) then
        begin
          rect[i + 1] := rect[i];
          rect[i] := tmp;
        end;
    end;
  if (rect[0] > rect[1]) then
        begin
          tmp := rect[1];
          rect[1] := rect[0];
          rect[0] := tmp;
        end;

  if (sqrt(rect[0] * rect[0] + rect[1] * rect[1]) = rect[2]) then
    begin
      label1.Caption := 'Прямоугольный';
      Exit;
    end;

  if (rect[0] * rect[0] + rect[1] * rect[1] > rect[2] * rect[2]) then
    begin
      label1.Caption := 'Тупоугольный';
      p := (rect[0] + rect[1] + rect[2]) / 2;
      s := sqrt(p * (p - rect[0]) * (p - rect[1]) * (p - rect[2]));
      label1.Caption := 'Площадь: ' + FloatToStr(s) + #13;
      for i := 0 to 2 do
        label1.Caption := label1.Caption + FloatToStr(rect[i]) + #13;
      Exit;
    end;
end;