Ver Mensaje Individual
  #5 (permalink)  
Antiguo 21/03/2013, 04:09
Avatar de dontexplain
dontexplain
 
Fecha de Ingreso: junio-2012
Mensajes: 536
Antigüedad: 12 años, 5 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