No todos los problemas pueden resolverse empleando estructuras secuenciales. Cuando hay que tomar una decisión aparecen las estructuras condicionales.
En nuestra vida diaria se nos presentan situaciones donde debemos decidir.
¿Elijo la carrera A o la carrera B?
¿Estudio el lenguaje Ruby o el lenguaje Python?
¿Me pongo este pantalón?
Para ir al trabajo, ¿elijo el camino A o el camino B?
Al cursar una carrera, ¿elijo el turno mañana, tarde o noche?
Por supuesto que en un problema se combinan estructuras secuenciales y condicionales.
Cuando se presenta la elección tenemos la opción de realizar una actividad o no realizar ninguna.
Representación gráfica:
Podemos observar:
El rombo representa la condición. Hay dos opciones que se pueden tomar. Si la condición da verdadera se sigue el camino del verdadero, o sea el de la derecha, si la condición da falsa se sigue el camino de la izquierda.
Se trata de una estructura CONDICIONAL SIMPLE porque por el camino del verdadero hay actividades y por el camino del falso no hay actividades.
Por el camino del verdadero pueden existir varias operaciones, entradas y salidas, inclusive ya veremos que puede haber otras estructuras condicionales.
Ingresar el sueldo de una persona, si supera los 3000 mostrar un mensaje en pantalla indicando que debe abonar impuestos.
Podemos observar lo siguiente: Siempre se hace la carga del sueldo, pero si el sueldo que ingresamos supera 3000 se mostrará por pantalla el mensaje "Esta persona debe abonar impuestos", en caso que la persona cobre 3000 o menos no aparece nada por pantalla.
puts "Ingrese el sueldo" sueldo = gets.to_f if sueldo > 3000 puts "Esta persona debe abonar impuestos" end
La palabra clave "if" indica que estamos en presencia de una estructura condicional; seguidamente disponemos la condición.
Ejecutando el programa e ingresando un sueldo superior a 3000. Podemos observar como aparece en pantalla el mensaje "Esta persona debe abonar impuestos", ya que la condición del if es verdadera:
Volvamos a ejecutar el programa y carguemos un sueldo menor o igual a 3000. No debe aparecer mensaje en pantalla.
Recordar que todas las palabras claves en Ruby se escriben en minúscula, luego las palabras if y end deben ir en minúsculas.
Es conveniente agregar dos espacios en blanco para las instrucciones que se disponen dentro de un if, esto ayuda a la lectura del programa por parte del programador:
if sueldo > 3000 puts "Esta persona debe abonar impuestos" end
En programas grandes si no dejamos esos espacios es muy difícil hacer cambios al mismo ya que es complicado entenderlo.
Cuando se presenta la elección tenemos la opción de realizar una actividad u otra. Es decir tenemos actividades por el verdadero y por el falso de la condición. Lo más importante que hay que tener en cuenta que se realizan las actividades de la rama del verdadero o las del falso, NUNCA se realizan las actividades de las dos ramas.
Representación gráfica:
En una estructura condicional compuesta tenemos entradas, salidas, operaciones, tanto por la rama del verdadero como por la rama del falso.
Realizar un programa que solicite al operador ingresar dos números y muestre por pantalla el mayor de ellos.
Se hace la entrada de num1 y num2 por teclado. Para saber cual variable tiene un valor mayor preguntamos si el contenido de num1 es mayor (>) que el contenido de num2, si la respuesta es verdadera vamos por la rama de la derecha e imprimimos num1, en caso que la condición sea falsa vamos por la rama de la izquierda (Falsa) e imprimimos num2.
Como podemos observar nunca se imprimen num1 y num2 simultáneamente.
Estamos en presencia de una ESTRUCTURA CONDICIONAL COMPUESTA ya que tenemos actividades por la rama del verdadero y del falso.
puts "Ingrese primer valor" num1 = gets.to_i puts "Ingrese segundo valor" num2 = gets.to_i if num1 > num2 puts num1 else puts num2 end
Cotejemos el diagrama de flujo y la codificación y observemos que hasta la palabra clave else representa la rama del verdadero y después de esta hasta la palabra clave end representa la rama del falso.
Ejecutamos el programa, si hubo errores sintácticos los corrijamos y carguemos dos valores, como por ejemplo:
Ingrese el primer valor 10 Ingrese el segundo valor 4 10
Si ingresamos los valores 10 y 4 la condición del if retorna verdadero y ejecuta el primer bloque.
Un programa se controla y corrige probando todos sus posibles resultados.
Ejecutemos nuevamente el programa e ingresemos:
Ingrese el primer valor 10 Ingrese el segundo valor 54 54
Cuando a un programa le corregimos todos los errores sintácticos y lógicos ha terminado nuestra tarea y podemos entregar el mismo al USUARIO que nos lo solicitó.
En una condición deben disponerse únicamente variables, valores constantes y operadores relacionales.
> (mayor) < (menor) >= (mayor o igual) <= (menor o igual) == (igual) != (distinto)
+ (más) - (menos) * (producto) / (división) % (resto de una división) Ej.: x=13%5; {se guarda 3} ** (Potencia)
Hay que tener en cuenta que al disponer una condición debemos seleccionar que operador relacional se adapta a la pregunta.
Ejemplos:
Se ingresa un número multiplicarlo por 10 si es distinto a 0. (!=) Se ingresan dos números mostrar una advertencia si son iguales. (==)
Los problemas que se pueden presentar son infinitos y la correcta elección del operador sólo se alcanza con la práctica intensiva en la resolución de problemas.
ejercicio010.rb puts "Ingrese primer valor" num1 = gets.to_i puts "Ingrese segundo valor" num2 = gets.to_i if num1 > num2 suma = num1 + num2; diferencia = num1 - num2; puts "La suma de los dos valores es" puts suma puts "La diferencia de los dos valores es" puts diferencia else producto = num1 * num2; division = num1 / num2; puts "El producto de los dos valores es" puts producto puts "La division de los dos valores es" puts division end ejercicio011.rb puts "Ingrese primer nota" nota1 = gets.to_i puts "Ingrese segunda nota" nota2 = gets.to_i puts "Ingrese tercer nota" nota3 = gets.to_i promedio = (nota1 + nota2 + nota3) / 3 if promedio >= 7 puts "Promocionado" end ejercicio012.rb puts "Ingrese un valor entero de 1 o 2 digitos" num = gets.to_i if num < 10 puts "Tiene un digito" else puts "Tiene dos digitos" end