Ir ao conteúdo
  • Cadastre-se

Pascal/Delphi Calculadora - BUG ao finalizar o programa "end."


Visitante

Posts recomendados

Bom dia

Quando executo o programa abaixo, buga no "end." e aparece a seguinte mensagem de erro: "BEGIN expected but END found". Porquê?

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    edt1: TEdit;
    lbl1: TLabel;
    edt2: TEdit;
    lbl2: TLabel;
    edt3: TEdit;
    btn1: TButton;
    btn2: TButton;
    btn3: TButton;
    btn4: TButton;
    btn5: TButton;
    procedure btn1Click(Sender: TObject);
    procedure btn2Click(Sender: TObject);
    procedure btn3Click(Sender: TObject);
    procedure btn4Click(Sender: TObject);
    procedure btn5Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

var
  resultadoFinal: Integer;
procedure TForm1.btn1Click(Sender: TObject);
procedure btn2Click(Sender: TObject);
procedure btn3Click(Sender: TObject);
procedure btn4Click(Sender: TObject);
procedure btn5Click(Sender: TObject);
var
  numero1, numero2: Integer;
  begin
    numero1 := StrToInt(edt1.Text);
    numero2 := StrToInt(edt2.Text);
    resultadoFinal := numero1 + numero2;
    edt3.Text := IntToStr(resultadoFinal);
  end;
end.

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
7 horas atrás, Chato disse:

Quando executo o programa abaixo, buga no "end." e aparece a seguinte mensagem de erro: "BEGIN expected but END found". Porquê?

 

Seria mais interessante ter postado o erro completo. Provavelmente deve indicar em qual linha está o erro.

 

Eu não tenho Delphi no computador, e nem tenho experiência nele... mas creio que seja semelhante ao Pascal... no caso, deve está faltando implementar as procedure  lá no implementation, ou seja, na interface você deixa tudo aquilo que é "visto" por quem usar a unit, já no implementation, você NECESSARIAMENTE TEM QUE implementar todas as procedure e function que estão na interface... Até porque não faz sentido "deixar disponível" algo que não existe.

 

No seu código, só implementou btn5Click.

 

Para tentar compilar, teste algo assim:

IMPLEMENTATION

{$R *.dfm}
var //variáveis locais
  resultadoFinal: Integer;
procedure TForm1.btn1Click(Sender: TObject);
  begin
  
  end;

//OBSERVAÇÃO: aqui talvez seja "TForm1.btn2Click(Sender: TObject);" (para os outros idem)
procedure btn2Click(Sender: TObject); 
  begin
  
  end;
  
procedure btn3Click(Sender: TObject);
  begin
  
  end;
  
procedure btn4Click(Sender: TObject);
  begin
  
  end;
  
procedure btn5Click(Sender: TObject);
  var
    numero1, numero2: Integer;
  begin
    numero1 := StrToInt(edt1.Text);
    numero2 := StrToInt(edt2.Text);
    resultadoFinal := numero1 + numero2;
    edt3.Text := IntToStr(resultadoFinal);
  end;
  
end.

 

No aguardo.

adicionado 8 minutos depois

Talvez, também (além da implementação das proceuure), antes da última linha precise de um begin. Não sei dizer. Algo assim:

procedure btn5Click(Sender: TObject);
  var
    numero1, numero2: Integer;
  begin
    numero1 := StrToInt(edt1.Text);
    numero2 := StrToInt(edt2.Text);
    resultadoFinal := numero1 + numero2;
    edt3.Text := IntToStr(resultadoFinal);
  end;
  
begin
end.

 

PS: a depender, apenas insira esse begin antes do end. lá do seu código original (sem implementar as procedure) para ver se funciona.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Código antes de ser compilado:
 

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    edt1: TEdit;
    lbl1: TLabel;
    edt2: TEdit;
    lbl2: TLabel;
    edt3: TEdit;
    btn1: TButton;
    btn2: TButton;
    btn3: TButton;
    btn4: TButton;
    btn5: TButton;
    procedure btn1Click(Sender: TObject);
    procedure btn2Click(Sender: TObject);
    procedure btn3Click(Sender: TObject);
    procedure btn4Click(Sender: TObject);
    procedure btn5Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

var
  resultadoFinal: Integer;
procedure TForm1.btn1Click(Sender: TObject);
  begin

  end;
procedure TForm1.btn2Click(Sender: TObject);
  begin

  end;
procedure TForm1.btn3Click(Sender: TObject);
  begin

  end;
procedure TForm1.btn4Click(Sender: TObject);
  begin

  end;
procedure TForm1.btn5Click(Sender: TObject);

  var
    numero1, numero2: Integer;
  begin
    numero1 := StrToInt(edt1.Text);
    numero2 := StrToInt(edt2.Text);
    resultadoFinal := numero1 + numero2;
    edt3.Text := IntToStr(resultadoFinal);
  end;
end.

Código após ser compilado:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    edt1: TEdit;
    lbl1: TLabel;
    edt2: TEdit;
    lbl2: TLabel;
    edt3: TEdit;
    btn1: TButton;
    btn2: TButton;
    btn3: TButton;
    btn4: TButton;
    btn5: TButton;
    procedure btn5Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

var
  resultadoFinal: Integer;
procedure TForm1.btn5Click(Sender: TObject);

  var
    numero1, numero2: Integer;
  begin
    numero1 := StrToInt(edt1.Text);
    numero2 := StrToInt(edt2.Text);
    resultadoFinal := numero1 + numero2;
    edt3.Text := IntToStr(resultadoFinal);
  end;
end.

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
2 minutos atrás, Chato disse:

@Simon Viegas Fiz o que me aconselhou e compilou, porém, ele elimina as linhas deixando somente a:

 

Pode ser que ele identifique que está vazio... daí, elimina. Não manjo de Delphi. Vai fazendo alguns testes e vendo como se comporta. :)
 

 

 

obs.: os códigos estão invertidos entre si?

 

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Simon Viegas invertidos, como assim?
O código fica do jeito que fica como eu coloquei acima.

Mas vou realizando testes.

adicionado 5 minutos depois

Ah, pera um instante.
No comentário acima eu troquei a ordem dos códigos sem querer.

Vou consertá-los

adicionado 11 minutos depois
33 minutos atrás, Chato disse:

Código antes de ser compilado:
 


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    edt1: TEdit;
    lbl1: TLabel;
    edt2: TEdit;
    lbl2: TLabel;
    edt3: TEdit;
    btn1: TButton;
    btn2: TButton;
    btn3: TButton;
    btn4: TButton;
    btn5: TButton;
    procedure btn1Click(Sender: TObject);
    procedure btn2Click(Sender: TObject);
    procedure btn3Click(Sender: TObject);
    procedure btn4Click(Sender: TObject);
    procedure btn5Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

var
  resultadoFinal: Integer;
procedure TForm1.btn1Click(Sender: TObject);
  begin

  end;
procedure TForm1.btn2Click(Sender: TObject);
  begin

  end;
procedure TForm1.btn3Click(Sender: TObject);
  begin

  end;
procedure TForm1.btn4Click(Sender: TObject);
  begin

  end;
procedure TForm1.btn5Click(Sender: TObject);

  var
    numero1, numero2: Integer;
  begin
    numero1 := StrToInt(edt1.Text);
    numero2 := StrToInt(edt2.Text);
    resultadoFinal := numero1 + numero2;
    edt3.Text := IntToStr(resultadoFinal);
  end;
end.

Código após ser compilado:


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    edt1: TEdit;
    lbl1: TLabel;
    edt2: TEdit;
    lbl2: TLabel;
    edt3: TEdit;
    btn1: TButton;
    btn2: TButton;
    btn3: TButton;
    btn4: TButton;
    btn5: TButton;
    procedure btn5Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

var
  resultadoFinal: Integer;
procedure TForm1.btn5Click(Sender: TObject);

  var
    numero1, numero2: Integer;
  begin
    numero1 := StrToInt(edt1.Text);
    numero2 := StrToInt(edt2.Text);
    resultadoFinal := numero1 + numero2;
    edt3.Text := IntToStr(resultadoFinal);
  end;
end.

 

Olha de novo.
Consertei meu comentário.

Vou tentar agora a parada de colocar o begin antes do end com e sem as procedure.

adicionado 29 minutos depois

Tentei compilar mudando as ordens do código e etc, e os resultados foram os mesmos.
Quando compila, elimina as linhas deixando só os procedimentos do botão 5 da interface e da implementação.

E quando não compila é porque eu deixei um

  begin

  end;

na implementação do botão 5.
Quando retiro, o código compila mas, eliminando os outros procedimentos.

Link para o comentário
Compartilhar em outros sites

@Chato        para fazer os cálculos é dentro da procedure do button1 , e você colocou a var   três vezes , sendo que uma já é suficiente , então delete essas duas var que vem depois do $R*.dfm , e as procedure btn2,btn3,btn4,btn5  que estão dentro da procedure TForm1   e deixe apenas cinco botões e tres edit então seu código pode ser assim  :

unit calc3_funcinando_bem;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Edit3: TEdit;
    Edit2: TEdit;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  a,b,c : integer;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  a := strtoint(edit1.text);
  b := strtoint(edit2.text);
  c := a+b;
  edit3.Text := inttostr(c);  
end;

end.

e seu calculadora ficaria assim  :

1067065155_delphi7.thumb.JPG.466a3f5a70ba4080f6612745823f7b2a.JPG

Link para o comentário
Compartilhar em outros sites

@devair1010 Funcionou :D Muito obrigado!!

Agora o cálculo de soma não está sendo executado. Eu clico no botão para somar e ele não soma e nem mostra resultado. Porquê?

adicionado 3 minutos depois
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    edt1: TEdit;
    lbl1: TLabel;
    edt2: TEdit;
    lbl2: TLabel;
    edt3: TEdit;
    btn1: TButton;
    btn2: TButton;
    btn3: TButton;
    btn4: TButton;
    btn5: TButton;
    procedure btn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  numero1, numero2, resultadoFinal: Integer;
implementation

{$R *.dfm}
procedure TForm1.btn1Click(Sender: TObject);
begin
  numero1 := StrToInt(edt1.Text);
  numero2 := StrToInt(edt2.Text);
  resultadoFinal := numero1 + numero2;
  edt3.Text := IntToStr(resultadoFinal);
end;
end.

Esse é o meu código atual.

Link para o comentário
Compartilhar em outros sites

@devair1010 eu entendi e não entendi o que você explicou mas eu tentei fzr e acho q não consegui e modifiquei o código sem querer e eu peguei e resetei o código para como estava antes copiando e colando ao compilar, o Delphi me perguntou duas vezes algo que eu não li, só dei "Yes" nas duas vezes e compilou e ao testar o resultado, funcionou.

Eu não entendi bulhufas do que aconteceu mas, funcionou kk

adicionado 6 minutos depois

@devair1010 Aaahh sim, o que você me disse foi o que funcionou!
Agr que vi terminando meu código atribuindo aos outros botões o código correspondente!
No caso eu só precisei clicar duas vezes e daí eu compilei e funcionou!


MUito obrigado!!!!!!!!

adicionado 50 minutos depois

@Simon Viegas @devair1010 Podem me explicar uma forma de fazer exponenciação?
Da forma que eu to fazendo não dá certo, tentei de algumas formas e não obtive sucesso. Vou continuar tentando mas se puderem me dar alguma luz ^^

var
	numero1, numero2, resultadoFinal: Integer;
implementation  
	numero1 := StrToInt(edt1.Text);
	numero2 := StrToInt(edt2.Text);
	resultadoFinal := Power(numero1,numero2);
	edt3.Text := IntToStr(resultadoFinal);

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!