Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Bibliotecas de código fuente (https://www.clubdelphi.com/foros/forumdisplay.php?f=53)
-   -   Problemas con Calculadora en Delphi (https://www.clubdelphi.com/foros/showthread.php?t=90615)

jhony2201 27-07-2016 13:01:01

Problemas con Calculadora en Delphi
 
Buenos días a todos, soy nuevo en el Club,mi nombre es Juan Marcelo, soy estudiante y vivo en Salta Argentina, como actividad nos dieron que hagamos una calculadora.
Estoy teniendo un problema con el cambio de signo +-, e probado con algunos códigos y no logro hacer que funcione correctamente.
En el código que esta más abajo, la calculadora coloca el signo menos y lo saca; pero al realizar una operación por ejemplo:
12+(-6) me arroja como resultado 0. No se cual es el error. Si alguien me puede ayudar a resolver este problema.
Desde ya muchas gracias.

Código de la calculadora:

Código Delphi [-]
unit UCalculadora;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    lblvisor: TLabel;
    btn1: TButton;
    btn2: TButton;
    btn3: TButton;
    btn4: TButton;
    btn5: TButton;
    btn6: TButton;
    btn7: TButton;
    btn8: TButton;
    btn9: TButton;
    btn0: TButton;
    btn11: TButton;
    btn12: TButton;
    btn13: TButton;
    btn14: TButton;
    btn15: TButton;
    btn10: TButton;
    btn16: TButton;
    btn17: TButton;
    btn18: TButton;
    btn19: TButton;
    btn21: TButton;
    btn22: TButton;
    procedure btn0Click(Sender: TObject);
    procedure btn15Click(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure btn10Click(Sender: TObject);
    procedure btn11Click(Sender: TObject);
    procedure btn12Click(Sender: TObject);
    procedure btn13Click(Sender: TObject);
    procedure btn14Click(Sender: TObject);
    procedure btn16Click(Sender: TObject);
    procedure btn17Click(Sender: TObject);
    procedure btn18Click(Sender: TObject);
    procedure btn19Click(Sender: TObject);
    procedure btn21Click(Sender: TObject);
    procedure btn22Click(Sender: TObject);


    private
    { Private declarations }
    op1,op2,op3:Extended;
    op:Integer;
    estadovisor:Boolean;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btn0Click(Sender: TObject);
begin
     if (Sender is TButton) and (lblvisor.Caption='0') then
      lblvisor.Caption:=(sender as TButton).Caption
      else if not estadovisor then
     lblvisor.Caption:=lblvisor.Caption+ (sender as TButton).Caption
     else
         begin
         lblvisor.Caption:=(Sender as TButton).Caption;
         estadovisor:=False;
         end;
end;

procedure TForm1.btn10Click(Sender: TObject);
begin
    op2:=StrToFloat(lblvisor.Caption);
     case op of
     0:lblvisor.Caption:= FloatToStr(op1+op2);
     1:lblvisor.Caption:= FloatToStr(op1-op2);
     2:lblvisor.Caption:= FloatToStr(op1*op2);
     3: if op2<>0 then lblvisor.Caption:= FloatToStr(op1/op2);
     4: lblvisor.Caption:= FloatToStr(Sqr(op1));
     5: lblvisor.Caption:= FloatToStr(1/op1);
     6: lblvisor.Caption:= FloatToStr((op1*op2)/100);
     7: lblvisor.Caption:= FloatToStr(Sqrt(op1));

end;
end;

procedure TForm1.btn11Click(Sender: TObject);
begin
op1:=StrToFloat(lblvisor.Caption);
op:=0  ;
estadovisor:=True;
end;

procedure TForm1.btn12Click(Sender: TObject);
begin
 op1:=StrToFloat(lblvisor.Caption);
 op:=1;
estadovisor:=True;
end;

procedure TForm1.btn13Click(Sender: TObject);
begin
    op1:=StrToFloat(lblvisor.Caption);
 op:=2;
estadovisor:=True;
end;

procedure TForm1.btn14Click(Sender: TObject);
begin
  op1:=StrToFloat(lblvisor.Caption);
 op:=3;
estadovisor:=True;
end;

procedure TForm1.btn15Click(Sender: TObject);
begin
    if Pos (',', lblvisor.Caption)=0 then
    lblvisor.Caption:=lblvisor.Caption+',';

end;

procedure TForm1.btn16Click(Sender: TObject);
begin
      lblvisor.Caption:='0';
      op1:=0;
      op2:=0;
      op:=-1;
end;

procedure TForm1.btn17Click(Sender: TObject);
begin
   op1:=StrToFloat(lblvisor.Caption);
 op:=4;
estadovisor:=True
end;

procedure TForm1.btn18Click(Sender: TObject);
begin
    op1:=StrToFloat(lblvisor.Caption);
 op:=5;
estadovisor:=True
end;

procedure TForm1.btn19Click(Sender: TObject);
begin
     op1:=StrToFloat(lblvisor.Caption);
 op:=6;
estadovisor:=True
end;

procedure TForm1.btn21Click(Sender: TObject);
begin
    op1:=StrToFloat(lblvisor.Caption);
 op:=7;
estadovisor:=True
end;

procedure TForm1.btn22Click(Sender: TObject);
begin
   op1:=StrToFloat(lblvisor.Caption);
   if op1<> 0 then
   lblvisor.Caption:= FloatToStr(op1*(-1));
estadovisor:=True
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
           estadovisor:=False;
end;


end.

fredo 27-07-2016 17:41:48

si te doy la solucion te haria la tarea... te recomiendo uses el debug que tiene delphi y monitorea que pasa en las variables, para ello agrega break points, y avanza el programa con F8 o F7 segun si quieres o no profundizar en el debug, F9 si quieres que siga normal... con eso si no lo pillas es grave para tu futuro como desarrollador XD

jhony2201 28-07-2016 01:44:17

Gracias Fredo por el consejo.

jhony2201 28-07-2016 01:45:44

Algún otro consejo? Y por favor alguna pista.

Ñuño Martínez 01-08-2016 10:32:04

Cita:

Empezado por jhony2201 (Mensaje 507228)
Algún otro consejo?

Usa nombres descriptivos. "Button12" no dice mucho aparte de que es un botón. "BtnSuma", por otro lado, indica cuál es el objeto de dicho botón.

En cuando al por qué no hace bien la operación, no estoy seguro. ¿Has comprobado, fehacientemente, que el botón "+/-" funciona correctamente? ¿El fallo sólo ocurre con números negativos implicados? ¿Qué dice el depurador que pasa?


La franja horaria es GMT +2. Ahora son las 00:20:00.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi