Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: nolasco281 en 11 Junio 2014, 05:01 am



Título: Como dar importancia al codigo(Solucionado)
Publicado por: nolasco281 en 11 Junio 2014, 05:01 am
Hola como esta.

Tengo una gran duda y como dice el titulo es que no se como darle importancia a mi codigo

es decir tengo un boton, ese boton tiene varias instrucciones pero no quiero que se ejecuten todas al mismo tiempo.

explico cree el evento clik cuando se preciona ese boton se realizan todas las intrucciones y eso es lo que no querio que pase

Ejemplo

Código
  1.                //Codigo dentro del boton
  2.                if(ArregloN1 == true)
  3.                {
  4.                     //Haga esto
  5.                }
  6.                //Si el if se cumple que no siga ejecutando el codigo que sique del la funcion o sea el  
  7.                //else if
  8.  
  9.                //.... Codigo que no se ejecutaria si se cumpliese el if
  10.                else if (ArregloN2 = true)
  11.                {
  12.                    //Haga esto
  13.                }
  14.                //Si el primer if no se cumplio se evalua el else if y si este cumple no siga con lo demas
  15.  
  16.                //.... Codigo que no se ejecutaria si se cumpliese el else if
  17.  

Ese es un ejemplo de lo que trato de hacer daler importancia al codigo que quiero que se ejecute.

Otra forma de decirlo por si me dicen que use un switch es si tengo.

Código
  1.                 //Codigo del boton
  2.                 switch(Opcion1) //lo que recibe
  3.                 {
  4.                        Caso1:
  5.                         //Codigo o instrucciones
  6.                         break;
  7.  
  8.                        Caso2:
  9.                         //Codigo o instrucciones
  10.                         break;
  11.                 }
  12.                 //Que finalice si hay codigo abajo
  13.  
  14.                  //No deberia de ejecutarse si se ejecuto el primer switch, pero si no es a si
  15.                  //Se deberia de ejecutar el switch con la Opcion2
  16.                  switch(Opcion2) //lo que recibe
  17.                  {
  18.                        Caso1:
  19.                         //Codigo o instrucciones
  20.                         break;
  21.  
  22.                        Caso2:
  23.                         //Codigo o instrucciones
  24.                         break;
  25.                 }
  26.                 //Que finalice si se ejecuto este  switch y no siga con lo demas de abajo
  27.  
  28.                //.....
  29.  

Espero darme a entender.

Muchas gracias. Saludos


PD: por mientras escribia el hilo, se me ocurrio usar un break al final de la instruccion pero no se si funcione o si, se saldra del metodo. probando comento si me funcina. Si tienen alguna idea se los gradeceria. Saludos

No no me funciono ya que para usar el break debe estar en un loob o switch.



Me respondo despues de estar buscando encontre como salir de un metodo si se ejecuta solo una instruccion.

Comparto la solucion y es poner un return en la intruccion que se desea y no se sique ejecutando el codigo de metodo que sigue.

  
Código
  1. //Codigo dentro del boton
  2.               if(ArregloN1 == true)
  3.               {
  4.                    //Haga esto
  5.                    return; //Si entrentra aca el codigo de abajo o el else if no se ejecuta
  6.               }
  7.               //Si el if se cumple que no siga ejecutando el codigo que sique del la funcion o sea el  
  8.               //else if
  9.  
  10.               //.... Codigo que no se ejecutaria si se cumpliese el if
  11.               else if (ArregloN2 = true)
  12.               {
  13.                   //Haga esto
  14.                   return;
  15.               }
  16.               //Si el primer if no se cumplio se evalua el else if y si este cumple no siga con lo demas
  17.  
  18.               //.... Codigo que no se ejecutaria si se cumpliese el else if
  19.  

si alquien me puede explicar por que pasa esto segun leei

Cita:
En tal caso, una instrucción return puede utilizarse para la rama de un bloque de control de flujo y el método de la salida y simplemente se utiliza como este: return.


Título: Re: Como dar importancia al codigo
Publicado por: engel lex en 11 Junio 2014, 07:43 am
basicamente la funcion de "return" es devolver el resultado de la función, pero esta solo puede devolverlo saliendo de la misma... en pocas palabras corta en seco la función para retornar el valor

ej...

Código
  1. int numero (int a, int b){
  2. return a + b;
  3. return a*a;
  4. if(a>0){
  5.  b=a;
  6.  a = a/(a-b); // -> a/0
  7. }
  8. }

al llamar a la función, solo se ejecutará a+b, el resto existe, pero como hay un return nunca será tocado


Título: Re: Como dar importancia al codigo
Publicado por: eferion en 11 Junio 2014, 08:52 am
Si tu idea es ejecutar una serie de tareas aleatorias según un orden de importancia aleatorio, puedes optar por poner cada tarea en una función o clase (según estés en C o C++). Entonces cargas las tareas a ejecutar en un vector en el que se indique también la prioridad de cada tarea.

Al ejecutar el método que controla la pulsación del botón ordenas las tareas por prioridad y las vas ejecutando una a una.


Título: Re: Como dar importancia al codigo
Publicado por: nolasco281 en 11 Junio 2014, 18:18 pm
Hola

Gracias por la explicacion.

ahora bien imaginemos que tengo un boton

Código
  1. Boton
  2. {
  3.   tipo arreglo1 [] = {A1, A2, A3}
  4.   tipo arreglo2 [] = {B1, B2, B3}
  5.  
  6.    if(Dato obtinedo1 == arreglo1)  //Es decir si el dato obtenido es igual al del arreglo
  7.    {
  8.       //Haga las siquientes instrucciones
  9.       return; //salir del metodo
  10.    }
  11.  
  12.    else if(DatoObtenido2 == arreglo2)
  13.    {
  14.       //Haga las siquientes instrucciones
  15.       return; //Salir del metodo
  16.    }  
  17. }
  18.  

Ahora bien si el dato que obtengo es B3 y los datos B son de mayor prioridad que los datos A.

entoces se ejecutara el else if para ejecutar las instrucciones que contenga.

si obtengo dos datos primero uno para DatoObtenido1 y despues uno para DatoObtenido2
se ejecutara primero el primer if ya que cumple con el if pero la prioridad deberia de ser B y despues A

No se como hacer eso ya que menciona crear una funcion lo he intentado de la siquiente manera

El problema que tengo es que al hacer eso, nunca entra al if de la funcion pero igual se ejecutaria primero la FuncionA y luego la FuncionB al apretar el boton

Código
  1. Boton
  2. {
  3.   FuncionA;
  4.   FuncionB; //Prioridad funcion B no importa en que parte se encuentre
  5. }
  6.  
  7. public void FuncionA()
  8. {
  9.    if(Dato obtinedo1 == arreglo1)  //Es decir si el dato obtenido es igual al del arreglo
  10.    {
  11.       //Haga las siquientes instrucciones
  12.       return; //salir del metodo
  13.    }
  14. }
  15.  
  16. public void FuncionB()
  17. {
  18.   if(DatoObtenido2 == arreglo2)
  19.    {
  20.       //Haga las siquientes instrucciones
  21.       return; //Salir del metodo
  22.    }  
  23. }

No entiendo muy bien los vectores he tratado y leido pero no capto bien la idea que indica eferion de mandar varias funciones a un vector y darles orden de prioridad en el vector. Si pueden ayudarme con alguna idea que se les ocurra de como hacerlo.

o algun ejemplo que muestre como hacer algo asi. estaria muy agredecido.

Saludos muchas gracias por tomarse el tiempo a los dos y a los demas.

Gracias.


Título: Re: Como dar importancia al codigo
Publicado por: JorgeEMX en 11 Junio 2014, 21:04 pm
Para que necesitas intercambiar la prioridad sobre qué vector comparar? Siempre será de la forma: Primer prioridad B, Después A, Después B, Después A... y así sucesivamente?


Título: Re: Como dar importancia al codigo
Publicado por: nolasco281 en 11 Junio 2014, 22:28 pm
Hola gracias por responder.

Mientras haya un dato obtenido que sea B se va a ejecutar B si nunca se obtiene una dato B se ejecutara A.

Saludos


Título: Re: Como dar importancia al codigo
Publicado por: JorgeEMX en 11 Junio 2014, 22:40 pm
Meh, te estás quebrando la cabeza.. acabas de decir la lógica que necesitas. Haces esas comparaciones sobre un vector y ejecuta la función que corresponda a B y si no, la función A.

Y ya que eres celoso del código, es todo lo que se te puede apoyar.


Título: Re: Como dar importancia al codigo
Publicado por: eferion en 11 Junio 2014, 22:42 pm
Dicho con código:

Código
  1. Boton
  2. {
  3.   tipo arreglo1 [] = {A1, A2, A3}
  4.   tipo arreglo2 [] = {B1, B2, B3}
  5.  
  6.    if(DatoObtenido2 == arreglo2)
  7.    {
  8.       //Haga las siquientes instrucciones
  9.       return; //Salir del metodo
  10.    }
  11.    else if(Dato obtinedo1 == arreglo1)  //Es decir si el dato obtenido es igual al del arreglo
  12.    {
  13.       //Haga las siquientes instrucciones
  14.       return; //salir del metodo
  15.    }
  16. }


Título: Re: Como dar importancia al codigo
Publicado por: JorgeEMX en 11 Junio 2014, 22:44 pm
+1 @eferion


Título: Re: Como dar importancia al codigo
Publicado por: nolasco281 en 11 Junio 2014, 23:22 pm
Hola creo que no me di a entender muchas gracias, de todos modos y con respecto a que si soy celoso con el codigo para nada estoy tratando de pasar un ejemplo de java a c++ y mejorarlo si puedo.

Ademas que no soy de las personas que le gusta que le hagan las cosas si me dan una idea eso me vasta y les hagradesco a todos por esas ideas.

En cuanto a lo que comenta eferion
solo cambio la posicion de los if pero el objetivo era que no importara donde se encontrara el B siempre se ejecutara primero el B

Muchas gracias a todos por sus repuestas dare por cerrado el tema y si logro hacerlo lo comento por si le sirve a alquien.

y gracias por tomarce el tiempo Saludos a todos.

Y muchas gracias de nuevo.


Título: Re: Como dar importancia al codigo
Publicado por: eferion en 11 Junio 2014, 23:38 pm
Si quieres que se ejecute primero B sin importar su posición tienes que implementar algún sistema de cola con prioridades:

Código
  1. // Funciones.
  2. // Podrian usar argumentos sin problemas haciendo un par de cambios
  3. void funcionA( )
  4. {
  5.  // ...
  6. }
  7.  
  8. void funcionB( )
  9. {
  10.  // ...
  11. }
  12.  
  13. // Definicion de la estructura
  14. typedef struct
  15. {
  16.  int prioridad;
  17.  void (*funcion)(void);
  18. } tarea;
  19.  
  20. // Declaracion y llenado de la cola (tambien se puede hacer dinamicamente )
  21. tarea tareas[2];
  22. tareas[0].prioridad = 1;
  23. tareas[0].funcion = &funcionA;
  24. tareas[1].prioridad = 2;
  25. tareas[2].funcion = &funcionB;
  26.  
  27. // Ordenar las tareas
  28. // Los bucles en este caso concreto son ridiculos, estan puestos para generalizar
  29. for ( i = 0; i < 1; i++ )
  30. {
  31.  for ( j = 1; j < 2; j++ )
  32.  {
  33.    if ( tareas[ i ].prioridad < tareas[ j ].prioridad )
  34.    {
  35.      tarea temp = tareas[ i ];
  36.      tareas[ i ] = tareas[ j ];
  37.      tareas[ j ] = tareas[ i ];
  38.    }
  39. }
  40.  
  41. // Ejecucion por orden
  42. Boton
  43. {
  44.  for ( i = 0; i < 2; i++ )
  45.    tareas[ i ].funcion( );
  46. }

Con lo vago de tu código es complicado hacer una aproximación mayor.

Un saludo.


Título: Re: Como dar importancia al codigo
Publicado por: nolasco281 en 11 Junio 2014, 23:56 pm
Gran idea no se me habia ocurrido usar colas y dalerle prioridad como indicas ya que como son FIFO
Grande te comeno se lo soluciono hoy de esa manera  ;-)

Muchas gracias. Saludos.



Gracias  ;-)

solo cambie de lugar algunas cosas y no dio problema mil gracias no hay forma de agradecer enserio
solo me toca agradecer y muchos saludos.

Código
  1. // Declaracion y llenado de la cola (tambien se puede hacer dinamicamente )
  2. tarea tareas[2];
  3. tareas[0].prioridad = 1;
  4. tareas[0].funcion = &funcionA;
  5. tareas[1].prioridad = 2;
  6. tareas[2].funcion = &funcionB;

funciono solo le di la prioridad a la funcion como indicas y funciono perfecto gracias enorme idea.

Saludos a todos.