Hemos visto que los métodos pueden recibir parámetros. La comunicación entre métodos se produce mediante el envío de datos a través de los parámetros y el valor que retorna el método.
Hasta ahora hemos resuelto problemas enviando dato simples como enteros, flotantes y cadenas de caracteres. En este concepto veremos que un método puede recibir tanto datos simples como estructuras de datos de tipo Array y Hash.
Definir por asignación un arreglo de enteros en el bloque principal del programa. Elaborar tres métodos, el primero recibe el arreglo y retorna la suma de todos sus elementos, el segundo recibe el arreglo y retorna el mayor valor y el último recibe el arreglo y retorna el menor.
def sumarizar(arreglo) suma = 0 arreglo.each { |elemento| suma = suma + elemento} suma end def mayor(arreglo) arreglo.max end def menor(arreglo) arreglo.min end # bloque principal del programa arreglo = [10, 56, 23, 120, 94] print "Arreglo completo:" print arreglo, "\n" puts "La suma de todos su elementos es #{sumarizar(arreglo)}" puts "El mayor valor del arreglo es #{mayor(arreglo)}" puts "El menor valor del arreglo es #{menor(arreglo)}"
El método sumarizar recibe un parámetro, dentro del mismo lo recorremos mediante la llamada a each y accedemos a sus elementos y los sumamos:
def sumarizar(arreglo) suma = 0 arreglo.each { |elemento| suma = suma + elemento} suma end
Desde el bloque principal de nuestro programa llamamos a sumarizar enviando el dato retornado al método puts para que lo muestre:
puts "La suma de todos su elementos es #{sumarizar(arreglo)}"
De forma similar definimos los otros dos métodos que también reciben el arreglo y luego llamando a los métodos max y min obtenemos el mayor y menor elemento del arreglo :
def mayor(arreglo) arreglo.max end def menor(arreglo) arreglo.min end
Las llamadas a estos dos métodos desde el bloque principal es similar a cuando llamamos a sumarizar (como cada uno retorna un entero procedemos a llamarlos dentro del método puts):
puts "El mayor valor del arreglo es #{mayor(arreglo)}" puts "El menor valor del arreglo es #{menor(arreglo)}"
El nombre del Array que definimos en el bloque principal del programa es "arreglo":
arreglo = [10, 56, 23, 120, 94]
No hay ningún problema de definir dicha variable con el mismo nombre que el parámetro del método.
Definir en el bloque principal del programa un Array. Pasar a un método el arreglo y proceder a cargar por teclado 5 valores.
Definir otro método que reciba el arreglo y lo muestre por pantalla..
def cargar(arreglo) for x in 1..5 print "Ingrese un valor:" valor = gets.to_i arreglo << valor end end def imprimir(arreglo) arreglo.each {|elemento| print elemento, "-"} end # bloque principal del programa arreglo = [] cargar(arreglo) imprimir(arreglo)
En el bloque principal de nuestro programa definimos un Array vacío:
arreglo = []
Llamamos seguidamente al método cargar y le pasamos el Array que acabamos de definir:
cargar(arreglo)
Cuando en el método cargar modificamos agregamos elementos lo que sucede es que se están agregando elementos en el Array definido en el bloque principal del programa:
def cargar(arreglo) for x in 1..5 print "Ingrese un valor:" valor = gets.to_i arreglo << valor end end
Finalmente desde el bloque principal llamamos al método imprimir y le pasamos el Array ya cargado para que lo muestre:
imprimir(arreglo)
Definir en el bloque principal del programa un Hash. Pasar a un método el Hash y proceder a cargar como clave el nombre de un producto y como clave su precio.
Definir otro método que imprima todos los productos con un precio menor a un valor ingresado por teclado..
def cargar(productos) loop do print "Ingrese la descripción del producto:" descripcion = gets.chomp print "Ingrese el precio:" precio = gets.to_f productos[descripcion] = precio print "¿Desea ingresar otro producto [s/n]?" opcion = gets.chomp if opcion == "n" break end end end def consultar(productos) print "Ingrese un precio límite:" preciocon = gets.to_f productos.each do |descripcion, precio| if precio < preciocon puts "Producto: #{descripcion} con un precio #{precio}" end end end # bloque principal del programa productos = Hash.new cargar productos consultar productos
En el bloque principal definimos un Hash y se lo pasamos a los métodos cargar y consultar:
productos = Hash.new cargar productos consulta productos
arreglo = [3, 7, 8, 10, 2] multiplicar arreglo, 3
palabras = ["enero", "febrero", "marzo", "abril", "mayo", "junio"] puts "Palabra con mas caracteres: #{mas_caracteres(palabras)}"
ejercicio115.rb def multiplicar(arreglo, valor) arreglo.each {|elemento| puts "#{elemento} * #{valor} es #{elemento * valor}"} end # bloque principal del programa arreglo = [3, 7, 8, 10, 2] multiplicar arreglo, 3 ejercicio116.rb def mas_caracteres(palabras) mayor = palabras.length pala = palabras[0] palabras.each do |pal| if pal.length > mayor mayor = pal.length pala = pal end end return pala end # bloque principal del programa palabras = ["enero", "febrero", "marzo", "abril", "mayo", "junio"] puts "Palabra con mas caracteres: #{mas_caracteres(palabras)}" ejercicio117.rb def producto(arreglo) prod = 1 arreglo.each{|elemento| prod = prod * elemento} return prod end # bloque principal del programa arreglo = [10, 5, 2, 3] puts "El producto de todos los elementos del arreglo es #{producto(arreglo)}"