4 – Booleanos y condicionales

1. Resolución del ejercicio del capítulo anterior

Hola, bienvenido de nuevo a Programar mola con Visual Studio donde puedes seguir éste curso de programación en C# con Visual Studio y .NET Framework 4.5.

Antes de empezar con nuevo temario vamos a resolver el ejercicio que planteamos en el capítulo anterior, recordemos el enunciado:

Una persona te dice que tiene un huerto con cinco parcelas, en la primera cultiva lechugas, en la segunda cultiva zanahorias, en la tercera planta cebollas, la cuarta la tiene vacía y en la quinta tiene puerros.

Un día viene una chica a comprarle unas hortalizas, y en la lista de la compra tiene apuntado comprar 3 zanahorias, 1 cebolla y 2 lechugas.

Escribe el código necesario para calcular el número de hortalizas totales (un número entero) que le quedarán al payés una vez haya realizado la venta. Utiliza como mínimo un array.

Solución:

Bueno, si has seguido el último capítulo habrás visto que es prácticamente una copia del ejemplo de las monedas pero con hortalizas y lo habrás resulto con relativa facilidad. Si no es así no seas tímido y déjame en los comentarios todas tus dudas y preguntas que estaré encantado de contestar 🙂

El enunciado nos habla de 5 parcelas, lo cual ya es una pista de que necesitaremos un array de 5 elementos. La primera posición (la cero) la usaremos para las lechugas, en la segunda zanahorias, después cebollas, en la cuarta no pondremos nada y en la quinta los puerros.

Aquí he sido un poco cabrón y he hecho una pequeña trampa, no te he dicho cuantas hortalizas tiene el payés. Si te fijas bien el enunciado te pide el código para calcular el número final de hortalizas por lo que cuantas tenemos al principio es un dato que no nos hace falta y lo podemos obviar, por tanto la declaración de nuestro array quedaría así:

1.resol.array

Lo que sí que nos dice el enunciado es el número de hortalizas que compra una chica, por lo que podemos realizas las restas en las casillas correspondientes.

2.resol.array

Y éste es el código completo que, dado un array de 5 elementos (que representa al huerto) calcula el número final de hortalizas que quedarán. Ahora te puede parecer raro, pero ya verás que eso de trabajar con cosas que no sabes que valor tienen va a ser nuestro pan de cada día, de hecho si has estudiado algo de matemáticas te sonará de algo… lo llaman incógnitas y suele representarse con una letra X.

2. Contenido del capítulo

Llevamos solo 3 cápitulos (4 con éste) y ya hemos aprendido un montón de cosas, en ésta sesión vamos a ver lo siguiente:

  • Booleanos
    • Números booleanos
    • Operadores lógicos
    • Condicionales
  • Resolución de un ejercicio de ejemplo
  • Resumen
  • Enunciado del ejercicio para la próxima entrada.

Como siempre, voy a dar por sentado que los conceptos del capítulo anterior están claros. Si no es así te animo a pegarle un repaso o a dejarme tus consultas en los comentarios.

De hecho me está dando miedo ir demasiado rápido o dar cosas de más por supuestas. Si te cuesta seguirme el ritmo, si crees que me dejo cosas o que necesitas más detalles no seas tímido y déjame tus sugerencias en los comentarios, te prometo que no muerdo. Prefiero que me digas “Eh tio, no me entero de una mierda” a que dejes el curso, dame un toque y te explico lo que necesites saber.

3. Booleanos

Si recuerdas bien hemos visto tres tipos básicos de datos: enteros o int (1, 2, -35, 20190320101, …), decimales o float (1.3, 34.231234, -0.33329099999, …) y texto o string (“hola”, “adios”). Pues bien, ahora vamos a hacer un nuevo amigo, quizás el amigo más importante de todos: el booleano.

¡¡¡ALERTA CULTURAL!!!

Por si no te acuerdas, lo bloques de alerta cultural te los puedes saltar si te aburren o simplemente te da palo leerlo. Creo que son interesantes y que te pueden ser de utilidad pero en serio, si estas cosas te aburren busca el final y sigue con el capítulo desde ahí que no pasa absolutamente nada.

El álgebra de Boole es un campo de las mátemáticas que define un conjunto de estructuras y operaciones básicas. Toda la computación que tenemos hoy en día se basa en eso… casi nada ¿eh?

Los ordenadores, por dentro, si pillas in microscopio y lo incrustas en el microprocesador, a nivel físico hacen esto, álgebra de Boole. Es como decir que tu pisas el acelerador y el coche se mueve y el paisaje avanza, eso es gracias a un motor que hace su magia por dentro… pues aquí algo parecido. Tu mueves el ratón y el cursor responde gracias al álgebra de Boole (entre otras cosas).

Por hacer un resumen y ponerlo fácil el álgebra de Boole se compone (entre otros) de los siguientes operadores: AND, OR, NOT e IF. Eso son los operadores, y los operandos son lo que conocemos como números booleanos.

El número booleano es la estructura más simple de todas, el bit. El bit es la base de todo el sistema binario con el que trabajan los ordenadores y su valor puede ser 1 o 0… sí sí, en serio, un “uno” o un “cero”.

¡¡¡FIN DE LA ALERTA CULTURAL!!!

3.1. Declaración

Para simplificar y no aburriros diremos que un booleano solo puede valer “cierto” o “falso” y en C# se declara así:

3.bools

Hemos instanciado dos booleanos llamados “b_si” y “b_no” donde el primero es cierto y el segundo es falso.

Ahora toca operar con ellos, con los enteros y los floats operábamos matemáticamente con sumas, restas, etc… Con los floats se opera lógicamente. No te me asustes que es muy fácil.

3.2. Operaciónes lógicas

Vamos a ver 4 tipos de operaciones lógicas: AND, OR, NOT e IF.

3.2.1. AND

El AND es un operador de conjunción y en castellano lo podríamos leer como Y, como por ejemplo “x Y z”. Con los operadores lógicos se trabaja a nivel de cierto o falso y el resultado de una operación con AND requiere que todos sus operandos sean cierto para que el resultado sea cierto. Como esto que acabo de decir apenas se entiende veamos el siguiente ejemplo:

4.and

 ¿Lo ves? La única manera de que el resultado de x Y z sea cierto es que tanto x como z sean ciertos. Esto en C# lo escribiríamos así:

5.and_csharp

¿Que resultado tendrá un AND? Solo con que un elemento sea falso ya sabremos que es falso.

3.2.2. OR

Tenemos por otro lado el OR, la disjunción, que se puede leer como “Ó” y que hace justo lo contrario, solo conque uno de los operandos sea cierto el resultado es cierto:

6.or

Que en C# sería así:

7.or_csharp

¿Que resultado tendrá el OR? Solo conque uno de sus elementos sea cierto ya sabremos que será cierto.

3.2.3. NOT

El NOT es la negación, es tan tonto como invertir el resultado. NOT Cierto es Falso y NOT Falso es cierto. En C# sería así:

8.not_csharp

Y si NOT Cierto = Falso y NOT Falso = Cierto… que es ¿NOT NOT Cierto? Pues si lo haces por partes te queda que NOT NOT Cierto = NOT Falso = Cierto… no te preocupes que no suele ser tan complicado… de hecho si te aparece alguna cosa así seguramente has metido la pata por alguna parte o simplemente se puede simplificar.

3.2.4. IF

El IF es la forma que tienen los operadores lógicos de manejar cláusulas condicionales y pueden leerse en castellano como un SI condicional, por ejemplo:
SI b es cierto ENTONCES haces esto, SINO haces lo otro.

Esto en C# sería de la siguiente forma:

9. if

Vamos a darle la vuelta, para que veas que esta cosa tan tonta se puede hacer “del revés”.

10.if2

¿Lo ves? Es fácil ver que es lo mismo pero dado la vuelta. En multitud de ocasiones te preguntarás si hacerlo de una forma o de otra y la verdad es que no existe respuesta, hazlo como te salga de los huevos / ovarios. Mientras lo veas claro y te sientas cómodo yo ya me doy por satisfecho, de hecho muchas veces te preguntarás cual es la forma correcta y, a no ser que el impacto en el rendimiento sea crítico, la respuesta suele ser siempre la misma: tu comodidad como programador manda, sobretodo si no tienes un jefe al que rendir cuentas de tus decisiones 😉

Ya que estamos, voy a enseñarte un pequeño truco:

11.if3

¡Hostias! Esto es la pereza absoluta hecha condicional. Preguntar a un condicional si una cosa “es cierta” es lo mismo que preguntarle simplemente si una cosa “es”, ya irás viendo que me gusta ir reduciendo las cosas a la mínima expresión, a menos líneas y menos letras más limpio y fácil de mantener. Recuerda siempre que el número de errores de un programa es directamente proporcional (yo diría que exponencialmente) a su número de líneas por lo que te recomiendo que abraces la pereza de escribir lo mínimo posible.

Y ya que estamos perezosos… ¿como se le da la vuelta a esto? Veamos:

12.if4

Ale, se le casca una exclamación delante y listos. Recuerda que la exclamación es la forma que tiene C# de hacer un NOT, así que lo que estamos preguntando es si una cosa “no es”, lo cual es lo mismo que preguntar si “es falsa” o si una cosa “no es cierta”.

5. Resolución de un ejercicio de ejemplo

Bueno, llegados a éste punto quiero poner en práctica lo que hemos aprendido, porque la teoría sin práctica no sirve de una puta mierda y, seamos sinceros, si es la primera vez que ves algo parecido a ésto te estarás haciendo un cacao mental de la hostia. Empecemos con un enunciado muy fácil.

Tienes el trabajo más aburrido del mundo pero eres muy feliz… aunque eso no quita que sea tremendamente, enromemente, insufriblemente aburrido.
Tu trabajo consiste en estirar de dos palancas, cuando estiras de la palanca de la derecha creas billetes de 500€, cuando estiras de la palanca de la izquierda conviertes el billete de 500€ en dos billetes de 200€, un billete de 50€ y los 50€ restantes se desvían a las tarjetas black de los hijos de puta de Caja Madrid y aquí no ha pasado nada.

Teniendo en cuenta que un array de enteros de 3 posiciones (donde cada posición es para un tipo de billete diferente), escribe el código que realiza las operaciones en función de la palanca que estiras.

Bueno, tranquilo que es más fácil de lo que parece. Vamos a empezar declarando ese array que sale por ahí.

13.ejemplo1

Vale, tenemos un array de 3 posiciones como nos sugiere el enunciado y vamos a usar la posición 0 para los billetes de 50, la 1 para los de 200 y la 3 para los de 500… en realidad lo puedes hacer en el orden que os de la gana pero ésta me ha parecido la más lógico.

Ahora toca definir las palancas, lo único que necesitamos saber es si es derecha o es izquierda. Vamos a usar un booleano, lo vamos a llamar palancaDerecha y… ¡exacto! si es cierto es la palanca derecha y si es falso será la izquierda porque es la única que queda.

14.ejemplo2

Ahora nos toca montar el condicional, lo voy a hacer como en los ejemplos anteriores:

15.ejemplo3

 

He puesto el booleano a cierto para que no se me queje el compilador, obviamente sabemos que parte del código se va a ejecutar pero ya veremos más adelante que no suele ser así.
Voy a llenar los huecos con lo que pide el enunciado.

16.ejemplo4

 

Ésta parte se parece mucho a los ejercicios de capítulos anteriores así que me ahorro el explicarla, si tienes dudas pégale un vistazo al capítulo anterior o déjame un comentario y te echo una mano.
Aunque no lo pide el enunciado voy a añadir una línea que calcule la pasta final y voy a mostrarte el código completo.

17.ejemplo5

Te acuerdas de como se debuga ¿verdad? Pues dale caña al mono, pon un breakpoint sobre la delcaración del array, pulsa el play verde y ves pulsando la tecla F10. Verás como la ejecución avanza punto por punto, como entra en el primer condicional y como el resultado de “total” es 500.

18.ejemplo6

6. Resmuen.

Llegados a éste punto y si la cabeza no te ha estallado debería quedarte claro lo que es un booleano y como se utiliza.

Hemos visto que existen 4 operadores: AND, OR, NOT y IF. El AND mira que todos sean ciertos, el OR que solo uno lo sea, el NOT le da la vuelta y el IF nos permite tomar decisiones.
Dicho de carrerilla parece rápido y fácil, si te lo ha parecido bien por ti, si no tranquilo, a mi me costó mucho tiempo pillarlo pero con práctica todo se consigue.

7. Ejercicio

Vale, antes de poner el enunciado te pido perdón porque voy a ser un poco cabroncete. Quiero que le des al coco y pienses por ti mismo una forma de solucionarlo, con lo que hemos visto hasta ahora deberías ser capaz de hacerlo mirando solamente éste blog, pero te recomiendo encarecidamente que tires de “San Google” si te quedas bloqueado, en mi trabajo de cada día me encuentro constantemente con cosas que no tengo claro como resolver y el Sr. Google es mi mejor aliado.

Bien, allá vamos:

Aunque eres muy feliz están harto de tu aburrido trabajo, necesitas mayores retos y por fin ha llegado tu oportunidad. Tus jefes te han dado el ascenso que tanto te merecías y ahora tienes tres magníficas palancas para ti mismo. ¡¡¡TRES!!! Oh Dios mío, es un sueño hecho realidad. Dos palancas era una mierda pero TRES lo cambia todo… que maravilla… en fin, que me voy por las ramas…. la palanca de la derecha crea un billete de 500, la de la izquierda (al igual que antes) convierte un billete de 500 en dos de 200 y uno de 50. La misteriosa palanca del centro convierte un billete de 200 en uno de 100, y uno de 50… ya sabemos a donde va la pasta que sobra ¿no?

Puedes usar el mismo array que en el ejercicio de ejemplo. De hecho has de hacer lo mismo, pero para 3 palancas.

Pista:
Puedes basarte en la solución del ejercicio de ejemplo.
Busca la manera de poder tomar 3 decisiones, puedes crear tantas variables como necesites.
Puedes usar tantos condicionales como necesites.

Como siempre la respuesta en el próximo post.
Saludos y gracias por llegar hasta aquí.

¡Hasta la próxima!

Anuncios

2 comentarios en “4 – Booleanos y condicionales

  1. Respecto a la resolución del ejercicio del capitulo 3:
    cuando no inicializas una variable int o bool, éstas toman el valor de 0 y false, respectivamente?

    Me gusta

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s