NVMND

Iniciado por yan.exe, 11 Junio 2017, 06:22 AM

0 Miembros y 1 Visitante están viendo este tema.

yan.exe

NVMND

Serapis

#1
Para resolver esos asuntos, se adjunta información que se actualiza cuando cambia.

Así sería útil por ejemplo disponer de un a enumeración sociada con cada operación.

Enumeracion Operaciones
 Ninguno = -2 // ningún operador ha sido seleccionado aún.
 Borrar = -1  //para borrar todo, incluído los operandos.
 Resultado = 0
 Suma =1
 Resta = 2
 Multiplica = 3
 Divide = 4
 ...
Fin enumeracion
// Ovbiamente los nombres y valores asigna los que sean de tu preferencia,
o según el código permita simplificarlo...


Se debe tener una variable donde guardar la operación ...
Variable Op de tipo Operaciones

Ahora cuando se pulse el botón correspondiente (o la opción, según sea el caso), simplemente actualizas el dato de la variable Op con el operador que le corresponde:

Si tienes un botón y cada uno con su código....
BotonSuma_Pulsado(parametros...)
    Op = Suma
Fin BotonPulsado

BotonResultado_Pulsado(parametros...)
    Op = Resultado
Fin BotonPulsado


Si tienes opciones (o botones), pero todos derivan el evento al mismo manejador...
OpcionSuma_Seleccionado, OpcionResta_Seleccionado, OpcionResultado_Seleccionado, .... (parametros...)
   Seleccionar Opcion.name <---- diferenciamos en este caso el operador, según el nombre del control seleccionado.
       caso "OpcionSuma"
           Op = Suma
      caso "OpcionResta"
           Op = Resta    
      Caso "OpcionResultado"
          Op = resultado          
      Caso ....
          ...
   Fin Seleccion
Fin OpcionSeleccionado  


Finalmente haces los cálculos:
Funcion Calcular(Var1, Var2, Op)
    Seleccionar Op
           caso Suma
                Var1 = Var1 + Var2
           Caso Resta
                Var1 = Var1 - Var2
           ....
              ....
            Caso Resultado
                 Mostrar Var1
     Fin Seleccion
     Devolver Var1
Fin funcion


Naturalmente este modo exige tener disponibles los operandos antes de calcular. Y en cambio no impone nada respecto del orden en que se obtienen...

...Cuando sería más acorde que se siga el orden natural en que se hacen las operaciones:
1º introducir un operando, luego el operador, luego el 2º operando, Tras esto se mandaría a calcular...
Y entonces luego como el resultado de operar con ambos operandos se reúnen en el primero, tras aplicar un operador, vuelves a tener disponible poder introducir otro operador y otro operando.

Solo si se pulsa el "=", entonces muestras el resultado que se almacena en Var1...
Y si se pulsa el de 'Borrar', dejas desierto ambos operandos y el operador.

Puede ser distinto y más o menos eficiente, pero como no has dado apenas detalles, no es conveniente extenderse ni más ni de otro modo.

-------------------------------------------------------------------
p.d.: Me explico mejor, que si no puede quedar confuso:
- Si se introducen en orden: operando1 + operador + operando2 , se hace necesario que el cáclulo se ejecute tras pulsar un nuevo operador, sea cual sea, pero antes de almacenar éste. Y entonces es preciso cambiarel código (pongo por ejemplo el de un botón) así:

BotonSuma_Pulsado(parametros...)
    Si Op es mayor o igual a 0
       Var1 =  Calcular(Var1, Var2, Op)
   Fin si

   Op = Suma
Fin BotonPulsado

Así puede seguirse añadiendo más operandos y más operadores.

- Pero si no se introducen en orden, será preciso que cuando se pulsa un operador el operador se actualiza, y solo cuando el operador sea "=", es cuando se procede a realizar el cálculo, incluso aunque no se hayan introducido uno o los dos operandos, pues se enteinde en ese caso que vale/n 0. y el código sería más bien:::

  OpcionSuma_Seleccionado, OpcionResta_Seleccionado, OpcionResultado_Seleccionado, .... (parametros...)
   Seleccionar Opcion.name <---- diferenciamos en este caso el operador, según el nombre del control seleccionado.
       caso "OpcionSuma"
           Op = Suma
      caso "OpcionResta"
           Op = Resta                      
      Caso ....
          Op = ...
      Caso "OpcionResultado"
          Var1 = Calcular(Var1, Var2, Op) <----- Aquí el cambio sustancial...
   Fin Seleccion
Fin OpcionSeleccionado  

MAFUS

La pregunta, ahora borrada era como se podía conocer desde un form el estado de unos radio buttons ubicados en otro.

Serapis

No exactamente Mafus... ese era solo el título del hilo...

...pero luego en las explicaciones simplemente trataba de hacer una especie de calculadora y por tanto debía resolver primero la lógica de la misma...

Probablemente después de haber resuelto la lógica del problema, hubiera sido preciso ver su código, para resolver la 2ª cuestión (que sería lo que señalaba el título).

En fin es común poner un título que dice una cosa y luego lo que se reclama es otra.

Supongo que el borrado podría obedecer o cubrir huellas, si resulta que es un trabajo de la escuela y temen que el profe busque y encuentre...

Sin embargo es de maleducados, no solo no responder, si no peor borrar el propio mensaje y el título.

MAFUS

Gracias por aclarar.
Por eso mismo había intentado recuperar el mensaje inicial, para que no quedara esto en un sin sentido.
En verdad esta gente que cuándo han solucionado su historia, o no, borran toda huella dejando el hilo cojo me dan coraje.

Becerra

Hola

Cita de: MAFUS en 12 Junio 2017, 19:13 PM
En verdad esta gente que cuándo han solucionado su historia, o no, borran toda huella dejando el hilo cojo me dan coraje.

La verdad que es una muy mala práctica y da coraje, sí. Conozco otro foro, hecho con vBulletin, en el que una vez un mensaje tiene respuesta ya no se puede modificar ni borrar. No sé si sería posible implementarlo con SMF.

Un saludo
Buenas preguntas obtienen mejores respuestas