• Domingo 28 de Abril de 2024, 12:56

Autor Tema:  While y OR  (Leído 2866 veces)

Serj

  • Nuevo Miembro
  • *
  • Mensajes: 24
    • Ver Perfil
While y OR
« en: Sábado 24 de Julio de 2010, 17:30 »
0
Hola!

Seguro que es una tonteria de problema, pero necesito que la funcion while tenga dos condiciones, y que no se tengan que cumplir las dos a la vez, solo una o la otra.
Las condiciones son:

Rango.Value2!=null;
alarmaxux!=1;

Lo he intentado asi pero no me sale bien.

while (Rango.Value2!=null || alarmaxux!=1)
{
}

Alguien me puede ayudar?

Un saludo y gracias!

gerloxxx

  • Miembro MUY activo
  • ***
  • Mensajes: 121
    • Ver Perfil
Re: While y OR
« Respuesta #1 en: Sábado 24 de Julio de 2010, 18:47 »
0
Pues yo lo veo bien, el or con uno que sea verdadero entra, la unica forma que no entrara a ese while, es cuando los dos son false

saludos

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: While y OR
« Respuesta #2 en: Sábado 24 de Julio de 2010, 18:53 »
0
Me temo que el operador logico XOR (or exclusivo) no existe en C#. Es por eso que no obtienes el resultado que deseas.

Aunque se me ocurre que podrias simular su funcionamiento por medio de banderas. A continuacion te dejo un ejemplo de como lo podrias implementar:

Código: C#
  1.  
  2. bool ban = false;
  3. if (Rango.Value2!=null)
  4. {
  5.   if (alarmaxux==1)
  6.      ban = true;
  7.   else
  8.      ban = false;
  9. }
  10. else
  11.   if (alarmaxux != 1)
  12.      ban = true;
  13.   else
  14.       ban = false;
  15. // Si ban es verdadero, significa que solo se cumplio
  16. // una de las dos condiciones
  17. while (ban == true)
  18. {
  19. // Aqui iria el codigo que quieres dentro del ciclo while
  20. // y tendrias que actualizar la bandera con el codigo
  21. // de arriba tal como lo pongo
  22. if (Rango.Value2!=null)
  23. {
  24.   if (alarmaxux==1)
  25.      ban = true;
  26.   else
  27.      ban = false;
  28. }
  29. else
  30.   if (alarmaxux != 1)
  31.      ban = true;
  32.   else
  33.       ban = false;
  34. }
  35.  
  36.  

Saludos :)

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

Serj

  • Nuevo Miembro
  • *
  • Mensajes: 24
    • Ver Perfil
Re: While y OR
« Respuesta #3 en: Sábado 24 de Julio de 2010, 20:55 »
0
Hola!

Muchas gracias a los dos.

Asi que el simbolo || es XOR???
PEnsando en mi programa, tambien podria ser OR.
Como seria el simbolo??

tannke

  • Miembro MUY activo
  • ***
  • Mensajes: 152
  • Nacionalidad: es
    • Ver Perfil
Re: While y OR
« Respuesta #4 en: Lunes 26 de Julio de 2010, 18:28 »
0
cito:
Cita de: "Serj"
Asi que el simbolo || es XOR???
No.
Vuelvo a citar:
Cita de: "ProfesorX"
Me temo que el operador logico XOR (or exclusivo) no existe en C#. Es por eso que no obtienes el resultado que deseas.

Por lo tanto || és OR.

Otra manera de simular el XOR podria ser:

Código: C#
  1.  
  2. while ((Rango.Value2 == null && alarmaxux != 1) || (Rango.Value2 != null && alarmaxux ==1 ) )
  3. {
  4. }
  5.  

un saludo

Amilius

  • Miembro HIPER activo
  • ****
  • Mensajes: 665
    • Ver Perfil
Re: While y OR
« Respuesta #5 en: Martes 27 de Julio de 2010, 01:03 »
0
El gorro de gnomo es el operador XOR.  :)

Código: C#
  1.  
  2.         static void Main(string[] args)
  3.         {
  4.             int a, b;
  5.             bool x, y;
  6.             for (int i = 0; i < 4; i++)
  7.             {
  8.                 a = i & 1;
  9.                 b = i >> 1;
  10.                 x = a == 1;
  11.                 y = b == 1;
  12.                 Console.WriteLine("{0} xor {1} = {2}", a, b, a ^ b);
  13.                 Console.WriteLine("{0} xor {1} = {2}", x, y, x ^ y);
  14.             }
  15.         }
  16.  
  17.  

tannke

  • Miembro MUY activo
  • ***
  • Mensajes: 152
  • Nacionalidad: es
    • Ver Perfil
Re: While y OR
« Respuesta #6 en: Martes 27 de Julio de 2010, 15:11 »
0
Cita de: "Amilius"
El gorro de gnomo es el operador XOR. :)
+1

Tienes toda la razón! Habria jurado que no existía, hasta me hicistes desempolvar el libro de programación, jejejej. Supongo que la falta de costumbre en usarlo (creo que nunca lo utilicé).

Un Saludo

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: While y OR
« Respuesta #7 en: Martes 27 de Julio de 2010, 19:27 »
0
Cita de: "Amilius"
El gorro de gnomo es el operador XOR.  :)

Temo que estas equivocado en parte, y acertado en parte.

El simbolo ^ es el operado XOR pero solo para operaciones de bits, y en este caso necesitamos XOR para operaciones logicas y tal como mencione en un mensaje anterior, el operador logico XOR no existe.

Por eso en realidad ^ no sirve para el problema mencionado arriba donde necesitamos un operador logico.

Repasando

Operadores de bits

& and
| or
! not
^ XOR

operadores logicos
&& and
|| or
! not

Asi que para el problema que esta mencionado en el primer mensaje solo sirve mi solucion y la solucion de tannke

Saludos :)

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

tannke

  • Miembro MUY activo
  • ***
  • Mensajes: 152
  • Nacionalidad: es
    • Ver Perfil
Re: While y OR
« Respuesta #8 en: Martes 27 de Julio de 2010, 20:16 »
0
El libro que yo tengo no dice eso (Microsoft C# Curso de programacion, de Fco. Javier Ceballos) para el que lo tenga, pagina 74:
Operadores lógicos:     && o & (AND),    || o | (OR),     !(NOT),     ^(XOR)

Operadores a nivel de bits:     &(AND),     |(OR),     ^(XOR),     <<(Carry izq.),     >>(carry der.)

test porque ya no sabia que pensar

Código: C#
  1. static void Main(string[] args)
  2.         {
  3.            
  4.             //provando XOR (amos a ver)
  5.  
  6.             string Value2;
  7.             int alarmaxux;
  8.  
  9.             //voy a provar los 4 casos posibles
  10.  
  11.             Value2 = null;
  12.             alarmaxux = 1;
  13.             if (Value2 != null ^ alarmaxux != 1) Console.WriteLine("string en nulo y int en 1");
  14.  
  15.  
  16.             Value2 = null;
  17.             alarmaxux = 5;
  18.             if (Value2 != null ^ alarmaxux != 1) Console.WriteLine("string en nulo y int diferente de 1");
  19.  
  20.  
  21.             Value2 = "No nulo";
  22.             alarmaxux = 1;
  23.             if (Value2 != null ^ alarmaxux != 1) Console.WriteLine("string NO nulo y int en 1");
  24.  
  25.  
  26.             Value2 = "No nulo";
  27.             alarmaxux = 5;
  28.             if (Value2 != null ^ alarmaxux != 1) Console.WriteLine("string NO nulo y int diferente de 1");
  29.  
  30.  
  31.             Console.ReadLine();
  32.         }
  33.  

Amilius

  • Miembro HIPER activo
  • ****
  • Mensajes: 665
    • Ver Perfil
Re: While y OR
« Respuesta #9 en: Sábado 31 de Julio de 2010, 01:27 »
0
Cita de: "ProfesorX"
...
Por eso en realidad ^ no sirve para el problema mencionado arriba donde necesitamos un operador logico.
...

De hecho XOR es siempre un operador lógico que trabaja a nivel de bits. Son las características del lenguaje las que hacen transparente su aplicación como operador para el tipo bool y tipos enteros. La gracia del tipo bool es que fuerza a que sus valores sean 0 o 1, en C# no puedes hacer un casting de entero a bool, tienes que usar un operador que retorna un valor bool: "bool b = i != 0;". En C++ puedes hacer el casting de un entero a bool y el compilador generará código para que el tipo bool contenga 0 si el entero es 0 o 1 si no es cero. Sin embago en C++ es recomendable usar la misma forma de c#: "bool b = i != 0;" para evitar un Warning de nivel 4, además de hacer explícito el hecho que la variable b contiene 0 si i es 0 o 1 si i no es 0.