Ver Mensaje Individual
  #13  
Antiguo 22-07-2017
Juampi Juampi is offline
Miembro
NULL
 
Registrado: may 2017
Posts: 14
Reputación: 0
Juampi Va por buen camino
I'm back!

Buenas, no me conectaba desde el 29/5, hacía rato no me daba una vuelta por aquí. Por distintos motivos la calculadora la dejé en stand by pero esta semana la retomé y les quería pedir una mano porque estoy trancado.

Lo que me pasa es lo siguiente, hago múltiples operaciones y me dan todas ok hasta que hago la siguiente combinación:

5 + 5 - 1 x 2 / 2.

Que de forma correcta (igual que la calculadora de Windows que es la que quiero emular, jeje) me da 9.

5 + 5 = 10
10 - 1 = 9
9 x 2 = 18
18 / 2 = 9

Pero la siguiente operación que hago después de esa secuencia me da mal. Ejemplo hago 5 x 5 y me da 24, 5 + 5 me da 9, 6 x 6 me da 35, 9 x 9 me da 80. Si, como podrán ver, me da uno menos del resultado correcto. Viendo eso sería sencillo identificar el problema pero no me doy cuenta que puede estar mal. Si teóricamente después de apretar el botón = vuelvo todo a cero, sería como cerrar y volver a ejecutar la calculadora (aunque evidentemente no lo es).

Es más, por las dudas también aprieto el botón C que lo que hace es "poner todo en cero", y nada, hasta que no cierre la calculadora seguirá dando un número menos.

Probando hice otra operación, en este caso 5 + 10 - 2 x 2 / 2 = 13 (correcto). Todo lo que hago luego de eso me da DOS números menos que lo correcto. Ejemplo 5 x 5 me da 23.

Les dejo lo que yo entiendo que necesitarían ver de este código para que puedan decirme donde la estoy macaneando y un link al .exe de la calculadora (no se rían, está en fase ultra beta, jaja).

Les dejo la declaración de variables, el form on create, el botón igual, el botón +, el botón C y un número, en este caso el 1.

Cita:
private
{ private declarations }
public
{ public declarations }
var res, ultNro: integer;
nros: array [0..9] of integer;
op: array [0..9] of string;
nro: string;
sobreescribo, borroLog : boolean;

end;

____________________________________________________________________________________________________ ________________________________________________________

{ TForm1 }

{--- FORM ON CREATE ---}

procedure TForm1.FormCreate(Sender: TObject);
begin
ultNro := 0;
sobreescribo := false;
borroLog := false;
end;

____________________________________________________________________________________________________ ________________________________________________________

{--- BOTÓN IGUAL (=) ---}

procedure TForm1.btnIgualClick(Sender: TObject);

var i: integer;

begin

i := 0;

if display.text = '' then
begin
display.text := '0'
end;

nros[ultNro] := StrToInt(display.text);

if lbLog.caption = '' then
begin
display.text := IntToStr(nros[ultNro]);
display.setFocus;
end;

for i := 0 to ultNro do
begin

{S U M A (+)}
if op[i] = '+' then
begin
if i = 0 then
begin
res := nros[i] + nros[i + 1];
end

else
begin
res := res + nros[i + 1];
end
end

{R E S T A (-)}

else if op[i] = '-' then
begin
if i = 0 then
begin
res := nros[i] - nros[i + 1];
end

else
begin
res := res - nros[i + 1];
end
end

{M U L T I P L I C A C I Ó N (X)}

else if op[i] = 'X' then
begin
if i = 0 then
begin
res := nros[i] * nros[i + 1];
end

else
begin
res := res * nros[i + 1];
end
end

{D I V I S I Ó N (/)}

else if op[i] = '/' then
begin
if i = 0 then
begin
res := nros[i] DIV nros[i + 1];
end

else if nros[i] = 0 then
begin
display.text := 'No se puede dividir entre 0';
display.setFocus();
btnPercentage.enabled := false;
button16.enabled := false;
button17.enabled := false;
button1.enabled := false;
button2.enabled := false;
btnComa.enabled := false;
btnSuma.enabled := false;
btnResta.enabled := false;
btnMultiplicacion.enabled := false;
btnDivision.enabled := false;
ultNro := 0;
end

else

begin
res := res DIV nros[i + 1];
end
end

else
begin
res := res;
end
end;

lbLog.caption := '';
display.text := IntToStr(res);
sobreescribo := true;
borroLog := true;
ultNro := 0;

end;

____________________________________________________________________________________________________ ________________________________________________________

{--- BOTÓN SUMA (+) ---}

procedure TForm1.btnSumaClick(Sender: TObject);

begin

if display.text = '' then
begin
display.text := '0'
end;

display.setFocus;

nros[ultNro] := StrToInt(display.text);
op[ultNro] := '+';

if lbLog.caption = '' then
begin
lbLog.caption := IntToStr(nros[ultNro]) + op[ultNro];
end

else
begin
lbLog.caption := lbLog.caption + IntToStr(nros[ultNro]) + op[ultNro];
end;

ultNro := ultNro + 1;
sobreescribo := true;

end;

____________________________________________________________________________________________________ ________________________________________________________

{--- BOTÓN BORRAR TODO (C) ---}

procedure TForm1.btnCClick(Sender: TObject);
begin
btnPercentage.enabled := true;
button16.enabled := true;
button17.enabled := true;
button1.enabled := true;
button2.enabled := true;
btnComa.enabled := true;
btnSuma.enabled := true;
btnResta.enabled := true;
btnMultiplicacion.enabled := true;
btnDivision.enabled := true;
display.text := '0';
display.setFocus;
lbLog.caption := '';
ultNro := 0;
sobreescribo := false;
end;

____________________________________________________________________________________________________ ________________________________________________________

{--- BOTÓN UNO (1) ---}

procedure TForm1.btn1Click(Sender: TObject);
begin

if borroLog then
begin
lbLog.caption := '';
end;

if (sobreescribo) or (display.text = '0') or (display.text = '') then
begin
display.text := '1';
end

else
begin
nro := display.text;
display.text := '1';
display.text := nro + display.text;
end;

sobreescribo := false;
borroLog := false;

end;
Aquí el link para descargar el .exe

drive.google.com/open?id=0B2s4ogym-XembWY5Vl8tV2tBcEE

Si les sirve más el proyecto completo les dejo el link para descargar el rar.

Aclaraciones:

*Por el momento funciona solo haciendo click con el mouse, ya aprenderé como hacer para que los botones del teclado accionen (con animación incluida es mi idea, no sé si es posible) los botones de la calculadora.

*Los únicos botones que andan son los números, los signos de +, -, X, /, el de borrar todo (C), el = y el de borrar de a uno (<).

Desde ya muchas gracias.
Responder Con Cita