Unit1.pas (72): «END» ожидается, но «ELSE» найден - PullRequest
0 голосов
/ 02 мая 2020
begin
  D:=StrToFloat(Edit1.Text);
if (Edit1.Text <= '3' ) And (Edit2.Text >= '1') and (Edit3.Text = '1' ) then
  begin
  Edit4.Text := '6,3' ;
  Edit5.Text := '11-12';
  Edit6.Text := '60';
  Edit7.Text := '100';
  end
else
  begin
  if(Edit1.Text <= '3' ) And (Edit2.Text >= '1') and (Edit3.Text = '2' ) then
  Edit4.Text := '3,2' ;
  Edit5.Text := '9-10';
  Edit6.Text := '25';
  Edit7.Text := '40'
  end
else
  begin
  if(Edit1.Text <= '3' ) And (Edit2.Text >= '1') and (Edit3.Text = '3' ) then
  Edit4.Text := '1,6' ;
  Edit5.Text := '8-9';
  Edit6.Text := '25';
  Edit7.Text := '40';
  end
end;

У меня возникли проблемы при определении проблемы оператора if else Delphi 7 [Ошибка] Unit1.pas (73): ';' ожидается, но «НАЧАЛО» обнаружена ошибка.

1 Ответ

2 голосов
/ 02 мая 2020

Ваш код не соответствует begin..end парам. Исправьте отступ, и вы увидите это более четко:

begin
  D:=StrToFloat(Edit1.Text);
  if (Edit1.Text <= '3' ) And (Edit2.Text >= '1') and (Edit3.Text = '1' ) then
  begin
    Edit4.Text := '6,3' ;
    Edit5.Text := '11-12';
    Edit6.Text := '60';
    Edit7.Text := '100';
  end
  else
  begin
    if (Edit1.Text <= '3' ) And (Edit2.Text >= '1') and (Edit3.Text = '2' ) then
      Edit4.Text := '3,2';
    Edit5.Text := '9-10';
    Edit6.Text := '25';
    Edit7.Text := '40'
  end
  else
  begin
    if(Edit1.Text <= '3' ) And (Edit2.Text >= '1') and (Edit3.Text = '3' ) then
      Edit4.Text := '1,6' ;
    Edit5.Text := '8-9';
    Edit6.Text := '25';
    Edit7.Text := '40';
  end

У вас ошибочная последовательность if..else..else.

Я предполагаю, что вы хотели сделать что-то более похожее на это:

begin
  D := StrToFloat(Edit1.Text);
  if (Edit1.Text <= '3') And (Edit2.Text >= '1') and (Edit3.Text = '1') then
  begin
    Edit4.Text := '6,3' ;
    Edit5.Text := '11-12';
    Edit6.Text := '60';
    Edit7.Text := '100';
  end
  else if (Edit1.Text <= '3') And (Edit2.Text >= '1') and (Edit3.Text = '2') then
  begin
    Edit4.Text := '3,2';
    Edit5.Text := '9-10';
    Edit6.Text := '25';
    Edit7.Text := '40'
  end
  else if (Edit1.Text <= '3' ) And (Edit2.Text >= '1') and (Edit3.Text = '3') then
  begin
    Edit4.Text := '1,6' ;
    Edit5.Text := '8-9';
    Edit6.Text := '25';
    Edit7.Text := '40';
  end
  ...

Что может быть несколько упрощено для удаления избыточных сравнений:

begin
  D := StrToFloat(Edit1.Text);
  if (Edit1.Text <= '3') And (Edit2.Text >= '1') then
  begin
    if (Edit3.Text = '1') then
    begin
      Edit4.Text := '6,3' ;
      Edit5.Text := '11-12';
      Edit6.Text := '60';
      Edit7.Text := '100';
    end
    else if (Edit3.Text = '2') then
    begin
      Edit4.Text := '3,2';
      Edit5.Text := '9-10';
      Edit6.Text := '25';
      Edit7.Text := '40'
    end
    else if (Edit3.Text = '3') then
    begin
      Edit4.Text := '1,6' ;
      Edit5.Text := '8-9';
      Edit6.Text := '25';
      Edit7.Text := '40';
    end
    ...
  end
  ...

Также обратите внимание, что вы не можете использовать такие операторы, как <= и >= для сравнения строк как будто они были числами. Вы должны сначала преобразовать строковые значения в цифры c. Что вы, кажется, уже знаете, используя StrToFloat(), но впоследствии вы игнорируете это значение. Попробуйте что-то вроде этого:

begin
  D1 := StrToFloat(Edit1.Text);
  D2 := StrToFloat(Edit2.Text);
  D3 := StrToFloat(Edit3.Text); 
  if (D1 <= 3) And (D2 >= 1) then
  begin
    if (D3 = 1) then
    begin
      Edit4.Text := '6,3' ;
      Edit5.Text := '11-12';
      Edit6.Text := '60';
      Edit7.Text := '100';
    end
    else if (D3 = 2) then
    begin
      Edit4.Text := '3,2';
      Edit5.Text := '9-10';
      Edit6.Text := '25';
      Edit7.Text := '40'
    end
    else if (D3 = 3) then
    begin
      Edit4.Text := '1,6' ;
      Edit5.Text := '8-9';
      Edit6.Text := '25';
      Edit7.Text := '40';
    end
    ...
  end
  ...
...