Ruby nos provee distintas instrucciones para resolver un problema, queda en manos del programador seleccionar cual es la más expresiva.
Si bien con la instrucción while podemos resolver cualquier problema repetitivo veremos que Ruby nos ofrece un gran cantidad de formas para repetir bloques de instrucciones.
En este concepto introducimos el ciclo infinito llamado loop.
loop do [bloque a repetir] end
En principio todo lo contenido entre las palabras claves loop y end se repetirá en forma infinita, pero nosotros podemos disponer una instrucción condicional que cuando sea verdadera proceda con la palabra clave break a terminar el ciclo loop y continúe con la siguiente instrucción fuera de la estructura repetitiva.
Escribir un programa que solicite la carga de un número entre 0 y 999, luego nos muestre un mensaje de cuántos dígitos tiene el mismo. Finalizar el programa cuando se cargue el valor 0 (emplear el ciclo repetitivo loop do)
loop do print "Ingrese un valor entre 0 y 999 (0 finaliza):" valor = gets.to_i if valor == 0 break end if valor >= 100 puts "Tiene 3 digitos." else if valor >= 10 puts "Tiene 2 digitos." else puts "Tiene 1 digito." end end end
En este problema no sabemos cuantos valores ingresará el operador.
Cuando ingrese el valor 0 se debe terminar la carga de valores.
Disponemos el ciclo repetitivo loop do donde en su interior se carga un valor entero por teclado y se verifica primero con un if si el valor es cero procediendo a abortar la estructura repetitiva mediante la palabra clave break:
loop do print "Ingrese un valor entre 0 y 999 (0 finaliza):" valor = gets.to_i if valor == 0 break end
Si el valor ingresado no es 0 mediante una serie de if verificamos si tiene 1, 2 o 3 dígitos el valor ingresado:
if valor >= 100 puts "Tiene 3 digitos." else if valor >= 10 puts "Tiene 2 digitos." else puts "Tiene 1 digito." end end
Tener en cuenta que un loop do finaliza con un end.
Escribir un programa que solicite la carga de números por teclado, obtener su promedio. Finalizar la carga de valores cuando se ingrese el valor 0 (utilizar el ciclo loop do)
suma = 0 cant = 0 loop do print "Ingrese un valor (0 para finalizar):" valor = gets.to_i if valor == 0 break end suma = suma + valor cant = cant + 1 end if cant != 0 promedio = suma / cant print "El promedio de los valores ingresados es:",promedio else print "No se ingresaron valores." end
El contador cant DEBE inicializarse antes del ciclo, lo mismo que el acumulador suma.
El promedio se calcula siempre y cuando el contador cant sea distinto a 0, ya que no existe la división por 0El ciclo infinito loop do finaliza cuando el operador ingresa el valor 0:
loop do print "Ingrese un valor (0 para finalizar):" valor = gets.to_i if valor == 0 break end
Solo se suma y cuenta cuando se ingresa un valor distinto a cero:
suma = suma + valor cant = cant + 1
Realizar un programa que permita ingresar el peso (en kilogramos) de piezas. El proceso termina cuando ingresamos el valor 0. Se debe informar:
a) ¿Cuántas piezas tienen un peso entre 9.8 Kg. y 10.2 Kg.?, ¿Cuántas con más de 10.2 Kg.? y ¿Cuántas con menos de 9.8 Kg.?
b) La cantidad total de piezas procesadas.
Utilizar el ciclo loop do
cant1 = 0 cant2 = 0 cant3 = 0 loop do print "Ingrese el peso de la pieza (0 pera finalizar):" peso = gets.to_f if peso == 0 break end if peso > 10.2 cant1 = cant1 + 1 else if peso >= 9.8 cant2 = cant2 + 1 else if peso > 0 cant3 = cant3 + 1 end end end end suma = cant1 + cant2 + cant3 print "Piezas procesadas: ", suma, "\n" print "Piezas aptas: ", cant2, "\n" print "Piezas con un peso superior a 10.2: ", cant1, "\n" print "Piezas con un peso inferior a 9.8: ", cant3
Definimos 3 contadores:
cant1 = 0 cant2 = 0 cant3 = 0
Dentro del ciclo repetitivo se carga el peso de una pieza y verificamos con un if si se terminó el ingreso de pesos al cargar el 0:
loop do print "Ingrese el peso de la pieza (0 pera finalizar):" peso = gets.to_f if peso == 0 break end
Todos los pesos distintos a 0 se verifican en que rango se encuentran para incrementar el contador respectivo:
if peso > 10.2 cant1 = cant1 + 1 else if peso >= 9.8 cant2 = cant2 + 1 else if peso > 0 cant3 = cant3 + 1 end end end
Fuera del ciclo repetitivo procedemos a sumar los 3 contadores que nos genera la cantidad total de piezas procesadas:
suma = cant1 + cant2 + cant3 print "Piezas procesadas: ", suma, "\n"
Mostramos también la cantidad de piezas aptas y las que tienen pesos superiores e inferiores a los márgenes definidos:
print "Piezas aptas: ", cant2, "\n" print "Piezas con un peso superior a 10.2: ", cant1, "\n" print "Piezas con un peso inferior a 9.8: ", cant3
Estado de la cuenta 'Acreedor' si el saldo es >0. 'Deudor' si el saldo es <0. 'Nulo' si el saldo es =0.b) La suma total de los saldos acreedores.
ejercicio042.rb suma = 0 loop do print "Ingrese un valor (9999 para finalizar):" valor = gets.to_i if valor == 9999 break end suma = suma + valor end print "El valor acumulado es ", suma, "\n" if suma == 0 print "El valor acumulado es cero." else if suma > 0 print "El valor acumulado es positivo." else print "El valor acumulado es negativo." end end ejercicio043.rb suma = 0 loop do print "Ingrese numero de cuenta:" cuenta = gets.to_i if cuenta < 0 break end print "Ingrese saldo:" saldo = gets.to_f if saldo > 0 puts "Saldo Acreedor." suma = suma + saldo else if saldo < 0 puts "Saldo Deudor." else puts "Saldo Nulo." end end end print "Total de saldos Acreedores:", suma