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