entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

-1voto

End But "." expectederror en delphi

Hola,

Me da este error compilando el codigo [Error] Unit1.pas(42): ';' expected but 'ELSE' found. Linea 42 la del else con el end.

Realmente nose que se me esta escapando. alguna ayuda?

procedure TForm1.ComboBox1Change(Sender: TObject);
var

  A, B, C, D: integer;
begin
  B := StrToInt(Edit1.Text);
  A := StrToInt(ComboBox1.Text);
  C := B - A;
  if StrToInt(Edit1.Text) < (40)
  then
  D := StrToInt(Edit1.Text);
  Edit1.Text := IntToStr((C + A)- D)
  end
  else
  For A := 1 to 10 do
  begin
    Edit1.Text := IntToStr(C);

end;
end.

4 Respuestas

1voto

Nekeniehl Puntos350

No tengo mucha idea de Delphi, para que te voy a engañar, pero:

1.- Cuando tienes más de una instrucción en una estructura de control condicional debes encapsular con begin y end el bloque de código.

2.- No cierras instrucción en Edit1.Text := IntToStr(( C+ A ) -D);

Espero haberte ayudado =D

0voto

Leonardo-Tadei Puntos227320

En Object Pascal, las sentencias THEN y ELSE soportan solo una línea de código. Si querés tener más de una línea, debés generar un bloque de código con BEGIN ... END.

En tu caso, quedaría así:

procedure TForm1.ComboBox1Change(Sender: TObject);
var
  A, B, C, D: integer;
begin
  B := StrToInt(Edit1.Text);
  A := StrToInt(ComboBox1.Text);
  C := B - A;
  if StrToInt(Edit1.Text) < (40)
  then begin
  D := StrToInt(Edit1.Text);
  Edit1.Text := IntToStr((C + A)- D)
  end
  else
  For A := 1 to 10 do
  begin
    Edit1.Text := IntToStr(C);
end;
end.

También tenés el mismo problema en el ELSE, pero funciona, porque el bucle FOR define un bloque de código, con lo que el ELSE parece tener más de una línea bloque, pero tiene solo un bloque.

Yo siempre, por tranquilidad, le agrego el BEGIN ... END aunque sea solo una línea, para que si me hace falta agregar una más tarde, no cometer un error semántico sin darme cuenta.

0voto

Bleach Puntos140

Además de lo que ha comentado los compañeros en el begin del for que hay después del else falta un end

0voto

gonnotda Puntos770

El tienes un problema con los BEGIN y END, el código debe quedar así:

procedure TForm1.ComboBox1Change(Sender: TObject);
var
  A, B, C, D: integer;
begin
  B := StrToInt(Edit1.Text);
  A := StrToInt(ComboBox1.Text);
  C := B - A;
  if StrToInt(Edit1.Text) < (40) then
  begin
    D := StrToInt(Edit1.Text);
    Edit1.Text := IntToStr((C + A)- D)
  end
  else
    For A := 1 to 10 do
      Edit1.Text := IntToStr(C);
end;
end.

Recuerda que es mejor ser disciplinado y aplicar un estilo uniforme a la hora distinguir las instrucciones del mismo nivel o las que están en otro (separar por TABS o espacios en blanco)

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta