Vimos en el concepto anterior que un método resuelve una parte de nuestro algoritmo.
Tenemos por un lado la declaración del método por medio de un nombre y el algoritmo del método seguidamente. Luego para que se ejecute el método lo llamamos desde el bloque principal de nuestro programa.
Ahora veremos que un método puede tener parámetros para recibir datos. Los parámetros nos permiten comunicarle algo al método y lo hace más flexible.
Confeccionar una aplicación que muestre una presentación en pantalla del programa. Solicite la carga de dos valores y nos muestre la suma. Mostrar finalmente un mensaje de despedida del programa.
def mostrar_mensaje(mensaje) puts "*" * 80 puts mensaje puts "*" * 80 end def carga_suma print "Ingrese el primer valor:" valor1 = gets.to_i print "Ingrese el segundo valor:" valor2 = gets.to_i suma = valor1 + valor2 puts "La suma de los dos valores es: #{suma}" end # programa principal mostrar_mensaje "El programa calcula la suma de dos valores ingresados por teclado." carga_suma mostrar_mensaje "Gracias por utilizar este programa"
Ahora para resolver este pequeño problema hemos planteado un método llamado mostrar_mensaje que recibe un parámetro y lo muestra en pantalla, además de mostrar dos líneas con asteriscos
Los parámetros van seguidos del nombre del método pudiendo ir encerrados entre paréntesis o no (y en el caso de tener más de un parámetro los mismos deben ir separados por coma):
def mostrar_mensaje(mensaje) puts "*" * 80 puts mensaje puts "*" * 80 end
Un parámetro podemos imaginarlo como una variable que solo se puede utilizar dentro del método.
Ahora cuando llamamos al método mostrar_mensaje desde el bloque principal de nuestro programa debemos pasar una variable o un valor:
mostrar_mensaje "Gracias por utilizar este programa"
El String que le pasamos: "El programa calcula la suma de dos valores ingresados por teclado." lo recibe el parámetro del método.
Un método con parámetros nos hace más flexible el mismo para utilizarlo en distintas circunstancias. En nuestro problema el método mostrar_mensaje lo utilizamos tanto para la presentación inicial de nuestro programa como para mostrar el mensaje de despedida. Si no existieran los parámetros estaríamos obligados a implementar dos métodos como vimos en el concepto anterior.
Confeccionar un método que reciba tres enteros y nos muestre el mayor de ellos. La carga de los valores hacerlo por teclado.
def mostrar_mayor(v1, v2, v3) print "El valor mayor de los tres numeros es:" if v1>v2 && v1>v3 puts v1 elsif v2>v3 puts v2 else puts v3 end end def cargar print "Ingrese el primer valor:" valor1 = gets.to_i print "Ingrese el segundo valor:" valor2 = gets.to_i print "Ingrese el tercer valor:" valor3 = gets.to_i mostrar_mayor valor1,valor2,valor3 end # programa principal cargar
Es importante notar que un programa en Ruby no se ejecuta en forma lineal los métodos definidos en el archivo *.rb sino que arranca en la zona del bloque principal. En nuestro ejemplo se llama primero el método "cargar", este método no tiene parámetros.
El método cargar solicita el ingreso de tres enteros por teclado y llama al método mostrar_mayor y le pasa a sus parámetros las tres variable enteras valor1, valor2 y valor3.
El método mostrar_mayor recibe en sus parámetros v1, v2 y v3 los valores cargados en las variables valor1, valor2 y valor3.
Los parámetros son la forma que nos permite comunicar el método cargar con el método mostrar_mayor.
Dentro del método mostrar_mayor no podemos acceder a las variable valor1, valor2 y valor3 ya que son variables locales del método cargar.
La definición mostrar_mayor debe estar escrita antes de la definición del método cargar que es donde la llamamos.
Otra cosa importante es notar que en la sección del programa principal solo llamamos al método cargar, es decir que en esta zona no es obligatorio llamar a cada una de los métodos que definimos.
Hemos utilizado una variante del comando if/else en el método mostrar_mayor.
Cuando tenemos varios if anidados es común utilizar en Ruby el comando if/ elsif
Logramos con esta variante de if hacer más legible el algoritmo.
Desarrollar un programa que permita ingresar el lado de un cuadrado. Luego preguntar si quiere calcular y mostrar su perímetro o su superficie.
def mostrar_perimetro(lado) per = lado * 4 puts "El perimetro es #{per}" end def mostrar_superficie(lado) sup = lado * lado puts "La superficie es #{sup}" end def cargar_dato() print "Ingrese el valor del lado de un cuadrado:" la = gets.to_i print "Quiere calcular el perimetro o la superficie[ingresar texto: perimetro/superficie]?" respuesta = gets.chomp if respuesta=="perimetro" mostrar_perimetro la end if respuesta=="superficie" mostrar_superficie la end end # programa principal cargar_dato
Definimos dos métodos que calculan y muestran el perimetro por un lado y por otro la superficie:
def mostrar_perimetro(lado) per = lado * 4 puts "El perimetro es #{per}" end def mostrar_superficie(lado) sup = lado * lado puts "La superficie es #{sup}" end
El tercer método permite cargar el lado del cuadrado e ingresar un String que indica que cálculo deseamos realizar si obtener el perímetro o la superficie. Una vez que se ingresó la variable respuesta procedemos a llamar al método que efectúa el calculo respectivo pasando como dato la variable local "la" que almacena el valor del lado del cuadrado.
Los parámetros son la herramienta fundamental para pasar datos cuando hacemos la llamada a una función.
cadena.each_char do |caracter| ........ end
ejercicio103.rb def cantidad_vocales(cadena) cant=0 cadena.each_char do |caracter| if caracter=="a" || caracter=="e" || caracter=="i" || caracter=="o" || caracter=="u" cant = cant + 1 end end puts "Cantidad de vocales de la palabra #{cadena} es #{cant}" end # bloque principal cantidad_vocales "hola" cantidad_vocales "administracion" cantidad_vocales "correr" ejercicio104.rb def ordenar_imprimir(v1, v2, v3) if v1<v2 && v1<v3 if v2<v3 print v1, "-", v2, "-", v3 else print v1, "-", v3, "-",v2 end elsif v2<v3 if v1<v3 print v2, "-", v1, "-", v3 else print v2, "-", v3, "-", v1 end elsif v1<v2 print v3, "-", v1, "-", v2 else print v3, "-", v2, "-", v1 end end def cargar() print "Ingrese primer valor:" num1 = gets.to_i print "Ingrese segundo valor:" num2 = gets.to_i print "Ingrese tercer valor:" num3 = gets.to_i ordenar_imprimir num1, num2, num3 end # bloue principal cargar