3.1.5. Operadores lógicos: &&, ||, !
Estas condiciones se puede encadenar con "y", "o", etc., que se indican de la siguiente forma
Operador Significado
&& Y
|| O
! No
De modo que podremos escribir cosas como
if ((opcion==1) && (usuario==2)) ... if ((opcion==1) || (opcion==3)) ... if ((!(opcion==opcCorrecta)) || (tecla==ESC)) ...
Ejercicios propuestos:
- Crear un programa que pida una letra al usuario y diga si se trata de una vocal.
- Crear un programa que pida al usuario dos números enteros y diga "Uno de los números es positivo", "Los dos números son positivos" o bien "Ninguno de los números es positivo", según corresponda.
- Crear un programa que pida al usuario tres números reales y muestre cuál es el mayor de los tres.
- Crear un programa que pida al usuario dos números enteros cortos y diga si son iguales o, en caso contrario, cuál es el mayor de ellos.
- Crear un programa que pida al usuario su nombre, y le diga "Hola" si se llama "Juan", o bien le diga "No te conozco" si teclea otro nombre.
3.1.6. El peligro de la asignación en un "if"
Cuidado con el operador de igualdad: hay que recordar que el formato es "if (a==b)" Si no nos acordamos y escribimos "if (a=b)", estamos intentando asignar a "a" el valor de "b".
En algunos compiladores de lenguaje C, esto podría ser un problema serio, porque se considera válido hacer una asignación dentro de un "if" (aunque la mayoría de compiladores modernos nos avisarían de que quizá estemos asignando un valor por error). En el caso del lenguaje C#, la "condición" debe ser algo cuyo resultado sea "verdadero" o "falso" (un dato de tipo "bool"), de modo que obtendríamos un mensaje de error "Cannot implicitly convert type 'int' to 'bool'" (no puedo convertir un "int" a "bool"), en casos como el del siguiente programa:
/*---------------------------*/ /* Ejemplo en C# nº 16: */ /* ejemplo16.cs */ /* */ /* Condiciones con if (7) */ /* comparacion incorrecta */ /* */ /* Introduccion a C#, */ /* Nacho Cabanes */ /*---------------------------*/ using System; public class Ejemplo16 { public static void Main() { int numero; Console.WriteLine("Introduce un número"); numero = Convert.ToInt32(Console.ReadLine()); if (numero = 0) Console.WriteLine("El número es cero."); else if (numero < 0) Console.WriteLine("El número es negativo."); else Console.WriteLine("El número es positivo."); } }
3.1.7. Comparaciones y variables de tipo "bool"
En muchas ocasiones, cuando las condiciones que aparecen dentro de un "if" sean complejas, el programa resultará más legible si empleamos variables de tipo "bool" (verdadero o falso), de forma que ciertos fragmentos de nuestro programa no sean "if ((vidas==0) || (tiempo == 0) || ((enemigos ==0) && (nivel == ultimoNivel)))" sino simplemente "if (partidaTerminada) ..."
A las variables "bool" se les da un valor casi como a cualquier otra variable, con la diferencia de que en la parte derecha de la asignación aparece "true" , "false" o una comparación, así:
partidaTerminada = false; partidaTerminada = (enemigos ==0) && (nivel == ultimoNivel); if (vidas ==0) partidaTerminada = true;
Lo emplearemos a partir de ahora en los fuentes que usen condiciones un poco complejas. Un ejemplo que pida una letra y diga si es una vocal, una cifra numérica u otro símbolo, usando variables "bool" podría ser:
/*---------------------------*/ /* Ejemplo en C# nº 17: */ /* ejemplo17.cs */ /* */ /* Condiciones con if (8) */ /* Variables bool */ /* */ /* Introduccion a C#, */ /* Nacho Cabanes */ /*---------------------------*/ using System; public class Ejemplo17 { public static void Main() { char letra; bool esVocal, esCifra; Console.WriteLine("Introduce una letra"); letra = Convert.ToChar(Console.ReadLine()); esCifra = (letra >= '0') && (letra <='9'); esVocal = (letra == 'a') || (letra == 'e') || (letra == 'i') || (letra == 'o') || (letra == 'u'); if (esCifra) Console.WriteLine("Es una cifra numérica."); else if (esVocal) Console.WriteLine("Es una vocal."); else Console.WriteLine("Es una consonante u otro número."); } }