PDA

Ver la Versión Completa : Problemas con Calculadora en Delphi


jhony2201
27-07-2016, 13:01:01
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:

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
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?