Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: nolasco281 en 3 Junio 2014, 19:03 pm



Título: Reducir if (Solucionado)
Publicado por: nolasco281 en 3 Junio 2014, 19:03 pm
Hola como estan.

quiero saber si hay alguna forma de reducir este codigo ya que esto me parace un poco exagerado estuve pensado como hacerlo con while o con un for pero el problema es que cuando se preciona soble el boton esto quivale a un click y click va aumentando de uno en uno.

osea cuando la variable click es igual a uno se habilita un label que esta oculto y asi susesivamente.

pero me parecen demasiados if y si click llega a 100 o 1000 se tendran que crear tantos if como clicks haya echo el usuario

Código
  1. colaOb.insert(click);
  2.  
  3.        if(click == 1)
  4.        {
  5.            //Hace visible un label
  6.        }
  7.        else if (click == 2)
  8.        {
  9.            //Hace visible un label
  10.  
  11.        }
  12.        else if (click == 3)
  13.        {
  14.            //Hace visible un label
  15.        }
  16.        else if (click == 4)
  17.        {
  18.           //Hace visible un label
  19.        }
  20.        else if (click == 5)
  21.        {
  22.           //Hace visible un label
  23.        }
  24.        else if (click == 6)
  25.        {
  26.            //Hace visible un label
  27.        }
  28.  
  29.        //Asi sique trece veces mas
  30.  
  31.        cout << colaOb; //Verifica que en cosola el insertar en cola vaya bien

Mil gracias saludos


Título: Re: Reducir if
Publicado por: Eternal Idol en 3 Junio 2014, 19:12 pm
Si todos esos valores deben hacer lo mismo y se encuentran en un rango consecutivo hace un if cuya comprobacion sea ( (click > X) && (click < X) ); obviamente X debe ser reemplazado por los limites del rango.


Título: Re: Reducir if
Publicado por: engel lex en 3 Junio 2014, 19:16 pm
puedes usar switch
Código
  1. switch variable{
  2.    case 1:
  3.        //algo
  4.        break;
  5.    case 2:
  6.        //algo
  7.        break;
  8.    default:
  9.        //si no cumple ninguna de las condiciones anteriores
  10.        break;
  11. }


Título: Re: Reducir if
Publicado por: ivancea96 en 3 Junio 2014, 19:30 pm
Haces visible un label. Quizás metiendo esos labels en un array, y accediendo a ellos mediante labels[click] te valga.


Título: Re: Reducir if
Publicado por: nolasco281 en 3 Junio 2014, 20:11 pm
hola  contestando primero a Eternal Idol creo que entedi la idea el problema es que son label distintos los que se deben de activar segun valla incrementado click.


Código
  1. if ((click >0) && (click < 30))
  2.        {
  3.           lblCliente13 //Se hace visible este label Cuando Click es 1
  4.            lblCliente14 //Se hace visible este label Cuando Click es 2
  5.            lblCliente15 //Se hace visible este label Cuando Click es 3
  6.            lblCliente16 //Se hace visible este label Cuando Click es 4
  7.            lblCliente17 //Se hace visible este label Cuando Click es 5
  8.            lblCliente18 //Se hace visible este label Cuando Click es 6
  9.            lblCliente19 //Se hace visible este label Cuando Click es 7
  10.        }
  11.  
Contestando a engel lex en caso de que use swicth deberia crear tantos case como clicks solo que estarian contenidos dentro de un solo switch
seria casi como usar if.

intentare lo que indica ivancea96 gracias a todos por comentar
ahora que lo pienso

Haces visible un label. Quizás metiendo esos labels en un array, y accediendo a ellos mediante labels[click] te valga.

pero como sabria que label es el que se va a volver visible por medio del click que reciva el array?
lo intentare ahora

Gracias por contestar a todos. Saludos


Título: Re: Reducir if
Publicado por: ivancea96 en 3 Junio 2014, 20:47 pm
Código
  1. if ((click >0) && (click < 30))
  2.        {
  3.           lblCliente13 //Se hace visible este label Cuando Click es 1
  4.            lblCliente14 //Se hace visible este label Cuando Click es 2
  5.            lblCliente15 //Se hace visible este label Cuando Click es 3
  6.            lblCliente16 //Se hace visible este label Cuando Click es 4
  7.            lblCliente17 //Se hace visible este label Cuando Click es 5
  8.            lblCliente18 //Se hace visible este label Cuando Click es 6
  9.            lblCliente19 //Se hace visible este label Cuando Click es 7
  10.        }
  11.  

Cogiendo eso de ejemplo:

labels[click+12]

Como lvlCliente13 se hace visible cuando Click es 1, pues 12+1 da 13.

Antes claro, tendrías que meter las labels en el array o vector o lo que quieras.

No se si entendí muy bien, así que ya dirás.


Título: Re: Reducir if
Publicado por: eferion en 4 Junio 2014, 08:24 am
Y no sería más facil mapear los label usando un vector??

Código
  1. std::vector< Label* > labels;
  2. labels.push_back( label1 );
  3. labels.push_back( label2 );
  4.  
  5. // ...
  6.  
  7. if ( ( click > 0 ) && ( click <= labels.size( ) ) )
  8.  labels[ click ]->hide( );
  9.  


Título: Re: Reducir if
Publicado por: vangodp en 4 Junio 2014, 13:21 pm
Código
  1.    int x = 1;
  2.    int click = 0;
  3.    colaOb.insert(click);
  4.    click = click -1;        // si el problema es que al hacer click click es igual a 2 clicks le quitas uno XD
  5.    while ( clik == x ){
  6.        colaOb.insert(click);
  7.        click = click - 1;   // si el problema es que al hacer click click es igual a 2 clicks le quitas uno XD
  8.        mostrar ( label, x);
  9.        cout << colaOb; //Verifica que en cosola el insertar en cola vaya bien        
  10.        x++;
  11.        if ( click == 30)
  12.            0 = 0;
  13.    }
  14.  

el propio click puede ser indice si le quitas un click ni hace falta la x XD
si un click es igual a 2 le quitas uno en seguida antes de hacer comprobaciones XD  :laugh:
Es solo una idea XD
Es un click click - 1click   :¬¬


Título: Re: Reducir if
Publicado por: nolasco281 en 5 Junio 2014, 00:18 am
Hola queria comentar que despues de estar  tratando me funciono

hice un poco de lo que comenta ivancea96 y eferion cree una instancia de los labels despues pase a todos los labes que tenia creados a un vector como comenta eferion y luego los llame de la forma que comenta ivancea96


Gracias a todos un poco de ayuda y pensar de que forma te puede servir es genial.

Gracias a todos saludos y muchas gracias por la ayuda.