Comunidad de diseño web y desarrollo en internet online

Calculadora que no suma

Citar            
MensajeEscrito el 18 Mar 2006 10:22 pm
Pues bueno, puse este código para una pequeña calculadora en flash con los botones del teclado numérico. Estoy orgulloso de que me haya salido casi todo, pero no mucho del código en si, creo que podría haberlo compactado mucho más.

Código :

stop();
//*****************************************************
//0º- Inizializar variables
//*****************************************************
/* Operandos */
var a;
var b;
var c;
// Operaciones
var Operando = 0;
/* Suma=1; Resta=2; Multiplicación=3; División = 4 */
var OperaciónSC = false;
var OperaciónSC2 = false;
var OperaciónC = false;
var Operación_Completa = false;
var OOC = false;
Texto.restrict = "0-9 .";
Texto.maxChars = 15;
//****************************************************
//1º- Programa
//****************************************************
this.onEnterFrame = function() {
   Cálculo.call();
   if (OperaciónSC == true) {
      OperaciónSemiCompleta.call();
   }
   if (OperaciónSC2 == true) {
      OperaciónSemiCompleta2.call();
   }
   if (Operación_Completa == true) {
      Operación.call();
   }
   if (OOC) {
      Completa.call();
   }
};
//*****************************************************
//2º- Funciones
//*****************************************************
/* 1º- Cálculo */
Cálculo = function () {
   if (Operando == 0) {
      if (Key.isDown(107)) {
         Operando = 1;
      }
      if (Key.isDown(109)) {
         Operando = 2;
      }
      if (Key.isDown(106)) {
         Operando = 3;
      }
      if (Key.isDown(111)) {
         Operando = 4;
      }
      if (Operando != 0) {
         OperaciónSC = true;
      }
   }
};
/* 2º-Operación Semi Completa 1 y 2 */
OperaciónSemiCompleta = function () {
   if(OperaciónSC == true){
   a = Texto.text;
   Texto.text = "";
   OperaciónSC = false;
   OperaciónSC2 = true;
   }
};
OperaciónSemiCompleta2 = function () {
   if (Key.isDown(Key.ENTER)) {
      OperaciónC = true;
      b = Texto.text;
      Texto.text = "";
      Operación_Completa = true;
      OperaciónSC2 = false;
   }
};
Operación = function () {
   if (Operando == 1) {
      c = a += b;     // AQUÍ ESTÁ EL PROBLEMA (CREO)
      Operando = 0;
      Texto.text = c;
   }
   if (Operando == 2) {
      c = a -= b;
      Operando = 0;
      Texto.text = c;
   }
   if (Operando == 3) {
      c = a*= b;
      Operando = 0;
      Texto.text = c;
   }
   if (Operando == 4) {
      c = a /= b;
      Operando = 0;
      Texto.text = c;
   }
   if(Operando == 0){
      OOC = true;
   }
};
Completa = function () {
   Texto.text = c;
   OOC = false;
   OperaciónSC = false;
   Operación_Completa = false;
   Operando = 0;
};


Bueno, ese es el problema, depende de la tecla de operación que pulsas cambia una variable (Operando) que después determina que tiene que hacer con a y b para dar c (El resultado vamos), y me funciona perfectamente con todas las operaciones menos con la suma. Al parecer no suma a y b, si no que pone primero a y luego la b, con lo que si sumas 2 y 2 tendras dos preciosos patitos (Como en el colegio :love: xD)

¿En qué falla? ¿Qué debería poner para que sumara a y b?

Por Neodivert

15 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 18 Mar 2006 10:48 pm
Solo mirando por encima...
la sentencia: if (OperaciónSC == true) se peude reemplazar por if (OperaciónSC)

Las variables booleanas no necesitan igualarse a nada...

Y cuando tenes más de un if....mejor usa switch () {
}
Mira en el help como se usa..es facil de entender.

Por La_Gata

123 de clabLevel



 

msie
Citar            
MensajeEscrito el 18 Mar 2006 11:00 pm
Se me ocurrio otra cosa:

La funcion cálculo, pienso que funcionaría asi:

Código :

Cálculo = function () {
   if (Operando == 0) {
      Operando=Key.isDown(107)+Key.isDown(109)*2+Key.isDown(106)*3+Key.isDown(111)*4
   }else{
   OperaciónSC = true;
      }
};

Y en todas los if que tenes valores booleranos, hace lo mismo, usa una fórmula en vez del if.

no se...se me ocurrió...

Por La_Gata

123 de clabLevel



 

msie
Citar            
MensajeEscrito el 18 Mar 2006 11:10 pm
Muchas gracias por la ayuda, pero (No te lo tomes a mal, no es mi intencion), ¿no me sabrías decir por que no suma a y b?

Por Neodivert

15 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 19 Mar 2006 05:28 am
por que el a y el b dentro de la funcion pertenecen a la funcion.

si quieres que dichas variables se sumen las deves declarar como del root o globales.

Por J

148 de clabLevel



 

firefox
Citar            
MensajeEscrito el 19 Mar 2006 03:13 pm
Pero de ser así, ¿no se supone que no me haría el resto de las operaciones? :? Por que restar, multiplicar y dividir lo hace perfectamente y con las mismas variables a y b. Y el problema viene dado en que en el c = a+= b; da "a" seguido de "b" en vez de sumar ambos valores.

Por Neodivert

15 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 19 Mar 2006 03:55 pm
Lo que pasa es que las variables a y b las trata como texto y por eso las concatena: "2" + "2" = "22".
Tienes que forzar la conversion de tipos. P.ej.: Number( a ) + Number( b );

Saludos !! 8)

Por Gengis

27 de clabLevel



 

Córdoba(España)

firefox
Citar            
MensajeEscrito el 19 Mar 2006 04:02 pm
Gracias, podedoso amo y señor. :love: (Que viene a ser muchas gracias xD), y a todos los que me ayudaron en este post. ;)

Por Neodivert

15 de clabLevel



Genero:Masculino  

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.