Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] Condiciones sencillas

Estas en el tema de Condiciones sencillas en el foro de C/C++ en Foros del Web. ¿Es posible tener una variable con varios valores? Es decir, llamarle en este caso a la variable a(1,2,3) y cuando escriba cualquiera de los tres ...
  #1 (permalink)  
Antiguo 20/03/2013, 16:14
Avatar de boronix  
Fecha de Ingreso: enero-2013
Ubicación: España
Mensajes: 17
Antigüedad: 11 años, 3 meses
Puntos: 0
Pregunta Condiciones sencillas

¿Es posible tener una variable con varios valores? Es decir, llamarle en este caso a la variable a(1,2,3) y cuando escriba cualquiera de los tres me diga que es correcto y si por ejemplo pongo un 4 que me diga que esta mal. ¿Es posible? o deberia de hacer tres condiciones: la primera a==1, la segunda con a==2 y la tercera con a==3.
En el caso de que fuera posible, cual seria la forma correcta de hacerlo? Porque de la forma que tengo yo me parece q tengo mal.

if(a==1,2,3)
{
printf("Correcto");
}
else
{
printf("Incorrecto");
}

Antes de nada queria agradeceros a todos los forer@s que os molestais en contestar mis mensajes, ya que lo haceis de forma muy clara y no tengo que esperar 1 semana a la respuesta. Lo digo porque muchos estareis atareados y es un detalle que os molesteis en resolver dudas ajenas. Muchas gracias.
  #2 (permalink)  
Antiguo 20/03/2013, 16:49
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: Condiciones sencillas

Deberias poner una condicion para cada valor, o usar un switch

Código:
//con valores especificos correctos
switch(a) {
    case 1: case 2: case 3: {
        printf("OK");
    }
    break;
    default: {
        printf("ERR");
    }
}

//o con valores especificos incorrectos
switch(a) {
    case 4: {
        printf("ERR");
    }
    break;
    default: {
        printf("OK");
    }
}
Ten en cuenta que las variables reciben el nombre de variables por el echo de poder tener un valor variable, pero solo uno, de ahi que tengas que usar tantas condiciones como valores quieras contrastar.

Saludos
vosk
  #3 (permalink)  
Antiguo 20/03/2013, 17:16
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 4 meses
Puntos: 94
Respuesta: Condiciones sencillas

Por las dudas si el switch aun no lo entendes, con if seria:

Código C:
Ver original
  1. if(a==1|| a==2 || a==3) /* si "a" es alguno de los tres valores */
  2. {
  3.    printf("Correcto");
  4. }
  5. else
  6. {
  7.    printf("Incorrecto");
  8. }

Saludos
  #4 (permalink)  
Antiguo 20/03/2013, 17:26
 
Fecha de Ingreso: julio-2012
Mensajes: 375
Antigüedad: 11 años, 9 meses
Puntos: 28
Respuesta: Condiciones sencillas

No es imprescindible poner corchetes en los "case" de los switch.
  #5 (permalink)  
Antiguo 21/03/2013, 04:09
Avatar de dontexplain  
Fecha de Ingreso: junio-2012
Mensajes: 536
Antigüedad: 11 años, 10 meses
Puntos: 127
Respuesta: Condiciones sencillas

La combinación de operaciones boleanas en los if-elseif sólo es posible en lenguajes de alto nivel.

De momento sólo se me ocurre en python

Código Python:
Ver original
  1. a,b,c = 1,2,3
  2. if a == b == c: print "son iguales" # 1
  3. if a == b and b == c: print "son iguales" #1
  4.  
  5. if a in range(1,3): print "está en rango del 1 al 3" # 2
  6. if a == 1 or a == 2 or a == 3 : print "está en rango del 1 al 3" #2

En los lenguajes de bajo nivel como C (y C++) las comparaciones tienen que ser explícitas (dado que es ensamblador a alto nivel) porque la CPU sólo es capaz de realizar una operación boleana y numérica cada vez, y hasta donde sé ningún compilador permite unirlos sino que lo lee literalmente y crea una superestructura lógica de operaciones boleanas para procesador con saltos incrustados concretos que mueven el puntero de ejecución de un lado a otro, aunque sería una buena idea. Por ejemplo, puedes implementar esto, para hacer algo similar, pero usando funciones:

Código C++:
Ver original
  1. template <typename t, int n>
  2. bool in(int a, t (&b)[n])
  3. {
  4.     int size = sizeof(b) / sizeof(t);
  5.     int i = 0;
  6.     do
  7.     {
  8.         if (*(b+i) == a)
  9.         {
  10.             return true;
  11.         }
  12.         i++;
  13.     } while (i < size);
  14.  
  15.     return false;
  16. }
  17.  
  18. int main(){
  19.     int comp[] = {1,2,3,5,6}; // lista de números
  20.     if (in(6,comp))
  21.     {
  22.         cout << "el numero existe en la lista";
  23.     }
  24. return 0;
  25. }

En la función in con que uno de los valores del array sea igual al número se retorna un true, se continúa hasta el final, y si no se retornó finaliza en false. El template crea el tipo t con un número arbitrario de índices que pasa a la función por referencia directa (&) en lugar de como puntero.

Un saludo.
__________________
21añero.
HTML/CSS, PHP, JS/jQuery, Mysql; NodeJS/Socket.io (& V8); C++ ; Python (wxpy); Ensamblador.
Músico (clarinetista/pianista) y compositor

Última edición por dontexplain; 21/03/2013 a las 05:34

Etiquetas: condiciones, variable
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:27.