Comunidad de diseño web y desarrollo en internet online

Comparar 5 variables y encontrar la de mayor valor

Citar            
MensajeEscrito el 01 Sep 2011 09:25 pm
Ojala me puedan ayudar, tal vez es muy basico pero es que apenas lo estoy aprendiendo

Tengo una serie de 6 variables que de acuerdo a la selección del usuario por medio de botones van incrementando con contadores, dejandome al final 6 variables con diferentes valores numéricos
Dependiendo de la variable que haya tenido el valor más alto se realizara un gotoandplay, diferente en cada uno de los casos.

mi solicitud es:
una serie de IF's comparando por parejas me podria dar hasta el final la variable con mayor valor
existe alguna rutina que pueda facilitar el comparativo de las 6 variables?

Por kermidor

5 de clabLevel



 

chrome
Citar            
MensajeEscrito el 01 Sep 2011 09:37 pm
Lo mejor que se me ocurre es meterlas en un Array (yo lo he llamado variables) y hacer lo siguiente

Código ActionScript :

mayor = variables[0]
for(i=0;i<variables.length;i++){
     if(variables[i]>mayor){
          mayor = variables[i]
     }
}

Por Cagarnera

Claber

158 de clabLevel



 

firefox
Citar            
MensajeEscrito el 01 Sep 2011 09:43 pm
Tienes que meter todos los valores en un array y después lo ordenas. Por ejemplo:

Código ActionScript :

var arr:Array = [34, 65,76,34,64,46,23]
arr.sort()
trace("Mas bajo "+arr[0]);
trace("Mas alto "+arr[arr.length-1]);


En tu caso, suponiendo que las variables se llamen pt1 a pt5, sería

Código ActionScript :

var arr:Array = [pt1, pt2, pt3, pt4, pt5]


Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 01 Sep 2011 10:16 pm
Gracias

entiendo esta parte va asi
var arr:Array = [pt1, pt2, pt3, pt4, pt5]
arr.sort()

la siguiente parte entiendo que me "imprime" el valor mas alto de los numero y la linea siguiente el menor.

lo que necesito es que si pt1 es el mas grande gotoandplay frame("pt1")
si el mas grande fue pt5 entonces gotoandplay frame("pt5)

creo que mas o menos tengo la idea pero como podría escirbirlo que funcione

Por kermidor

5 de clabLevel



 

chrome
Citar            
MensajeEscrito el 01 Sep 2011 10:29 pm
Si quieres ir al mas grande haces

gotoAndPlay(arr[arr.length-1]);

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 01 Sep 2011 10:32 pm
Gracias, lo pruebo y comento

Por kermidor

5 de clabLevel



 

chrome
Citar            
MensajeEscrito el 02 Sep 2011 09:50 am
¿Pero de esa manera no se hacen muchos más cálculos? No creo que sea necesario ordenar el array si solo le interesa el número mayor

Por Cagarnera

Claber

158 de clabLevel



 

firefox
Citar            
MensajeEscrito el 02 Sep 2011 11:01 am

Cagarnera escribió:

¿Pero de esa manera no se hacen muchos más cálculos? No creo que sea necesario ordenar el array si solo le interesa el número mayor


Eso iba a decir yo. Si ordenas el array haces muchos más cálculos de los necesarios.

Creo que la mejor opción es usar el bucle for del principio en estos casos... es lo más eficiente (porque sólo se quiere la más alta).

Por nestorrente

1010 de clabLevel

10 tutoriales

 

Vigo

firefox
Citar            
MensajeEscrito el 02 Sep 2011 06:03 pm
Si lo que te interesa es sólo el valor de la variable, se puede utilizar:

Código ActionScript :

mayor=Math.max(variable1, variable2, variable3..);

Y si lo que te interesa es la variable en sí para hacer algo:

Código ActionScript :

if (variable1==Math.max(variable1, variable2, variable3..)) {
Lo que quieras...;
}
if (variable2==Math.max(variable1, variable2, variable3..)) {
Lo que quieras2...;
}

Con esta comprobación sabrias que variable es la mayor de todas.
Un saludo.

Por evilactiviti

27 de clabLevel



Genero:Masculino  

msie
Citar            
MensajeEscrito el 02 Sep 2011 06:11 pm
Math.max, buen punto, me olvidaba de eso
Igual si necesitas máximo y mínimo (entonces ya deberías usar Math.max y Math.min) el sort es una opción mas económica, ya que te ahorras un listado

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 02 Sep 2011 09:31 pm
Muchas gracias, excelentes respuestas, ya quedo lo hice con la opcion

if (variable1==Math.max(variable1, variable2, variable3..)) {
Lo que quieras...;
}

solo me resta un detalle, apenas estoy aprendiendo pero con la ayuda que aqui se encuentra la verdad se facilita

la accion final se decide del resultado de 10 preguntas con 5 opciones cada una, la respuesta que mas se repite en cada pregunta es la que define la accion final

el problema que me resta es que no deja llegar a la pregunta 10, despues de la pregunta 9 da la accion que mas se repitio dentro de las 9 preguntas, el codigo de los IF´s esta dentro del frame de la pregunta 10 por lo que yo supondria que primero haria la pregunta y luego decide, pero no lo hace asi, se salta la pregunta, que creen que me este fallando?

Por kermidor

5 de clabLevel



 

chrome
Citar            
MensajeEscrito el 02 Sep 2011 09:42 pm
Esto es lo que tengo en el frame de la pregunta 10

---------------------------------------------------------------------------
stop ();
function pregunta10a(event:MouseEvent):void {
var1++;
}
opcionapreg10.addEventListener(MouseEvent.CLICK, pregunta10a);


function pregunta10b(event:MouseEvent):void {
var2++;
}
opcionbpreg10.addEventListener(MouseEvent.CLICK, pregunta10b);


function pregunta10c(event:MouseEvent):void {
var3++;
}
opcioncpreg10.addEventListener(MouseEvent.CLICK, pregunta10c);


function pregunta10d(event:MouseEvent):void {
var4++;
}

opciondpreg10.addEventListener(MouseEvent.CLICK, pregunta10d);


function pregunta10e(event:MouseEvent):void {
var5++;
}
opcionepreg10.addEventListener(MouseEvent.CLICK, pregunta10e);


function pregunta10f(event:MouseEvent):void {
var6++;
}
opcionfpreg10.addEventListener(MouseEvent.CLICK, pregunta10f);



if (var1==Math.max(var1, var2, var3, var4, var5, var6)) {
gotoAndPlay("action1");}
if (var2==Math.max(var1, var2, var3, var4, var5, var6)) {
gotoAndPlay("action2"); }
if (var3==Math.max(var1, var2, var3, var4, var5, var6)) {
gotoAndPlay("action3"); }
if (var4==Math.max(var1, var2, var3, var4, var5, var6)) {
gotoAndPlay("action4"); }
if (var5==Math.max(var1, var2, var3, var4, var5, var6)) {
gotoAndPlay("action5"); }
if (var6==Math.max(var1, var2, var3, var4, var5, var6)) {
gotoAndPlay("action6"); }

Por kermidor

5 de clabLevel



 

chrome
Citar            
MensajeEscrito el 03 Sep 2011 03:19 pm
Eso es normal, el stop() te para el avance del cabezal de lectura pero no la reproducción del código, por eso te hace la comparación en el 10 sin haber dado a ninguno de los botones. Una solución es mover la comprobación al Frame 11, despues de que haya formulado las 10 preguntas. Otro pequeño consejo, no es necesario escribir una función ni añadir los listeners en cada frame, utilizando un mismo nombre para los botones y añadiendo los listeners y las funciones en el primer frame, el resultado es el mismo.

Un saludo.

Por evilactiviti

27 de clabLevel



Genero:Masculino  

msie
Citar            
MensajeEscrito el 06 Sep 2011 03:58 am
Muchas gracias, al final ya quedo con ayuda de todos ustedes
a seguir practicando y avanzando

Por kermidor

5 de clabLevel



 

chrome

 

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