################################################################# # Ejemplos de las estructuras de control (3) # # FOR # ################################################################# # Hacemos que nuestro archivo use Ruby require 'rubygems' ################################################################# # Ejemplos de la estructura: # # FOR # # # # for variable [, variable2, ...] in expresion [do] # # sentencias del bucle # # end # ################################################################# # En anteriores ejemplos hemos visto que podemos manejar cadenas # de texto, y hacer comparaciones de texto y números, ahora vamos # a ver como podemos repetir algo que queremos con este otro bucle. # RECORDATORIO # Tenemos que saber que existen lo que se llaman operadores de # comparación, que son: # x < y # Comprueba si 'x' es menor que 'y' # x <= y # Comprueba si 'x' es menor o igual que 'y' # x > y # Comprueba si 'x' es mayor que 'y' # x >= y # Comprueba si 'x' es mayor o igual que 'y' # x == y # Comprueba si 'x' es igual que 'y' # x != y # Comprueba si 'x' es distinto que 'y' # Definimos lo que ya hemos visto que se llaman arrays, que son un # tipo de variable que puede contener varios elementos, y estos elementos # pueden ser arrays de nuevo. Por ejemplo un array que tiene animales y # los sonidos que hacen, y creamos un bucle while que ya hemos visto # que nos pregunta que animal elegimos y nos dice el sonido que hace. Animal_Sonido = [["perro", "gato", "vaca"],["guau","miauu", "muuuu"]] opcion=-1 while opcion != 0 do puts "Escribe el número de uno de estos animales" puts "\t0 Para continuar los ejemplos." puts "\t1 -> Sonido del perro." puts "\t2 -> Sonido del gato." puts "\t3 -> Sonido de la vaca." puts "Escoge una opcion" opcion = gets.chomp opcion = opcion.to_i if opcion == 1 puts "El " << Animal_Sonido[0][0] << " hace: " << Animal_Sonido[1][0] elsif opcion == 2 puts "El " << Animal_Sonido[0][1] << " hace: " << Animal_Sonido[1][1] elsif opcion == 3 puts "El " << Animal_Sonido[0][2] << " hace: " << Animal_Sonido[1][2] else puts "Continuamos con los ejemplos." system("sleep 1") end end # Ya sabéis como funciona estos bucles, ¿verdad? Pues ahora vamos a ver # como podemos recorrer en lugar de 1 array, 2 arrays a la vez, tal que # uno de ellos tiene los nombres de los animales y el otro tiene los # sonidos que hacen, así que definimos los arrays. animal = ["perro", "gato", "vaca"] sonido = ["guau","miauu", "muuuu"] for i in 0 .. animal.size-1 do puts "El animal #{animal[i]} hace: #{sonido[i]}" sleep 1 end # Bien ahora en este ejemplo podemos ver como insertar elementos en un # array valor=0 vector=[] for i in 0..2 do puts "Introduce algo: " vector << gets.chomp end puts vector # Y también podemos eliminar elementos, para eliminar elementos, podemos # eliminar el último elemento que hay en el array, bien dándole la # posición del elemento que queremos borrar o por último en lugar de dar # la posición, damos el contenido de la posición, tres ejemplos: # # Eliminamos el último elemento a=vector.pop puts a # Con la orden anterior el último elemento lo guardamos en a vector << a # Eliminamos el elemento de una posición en concreto: puts "\tElige una posición de un elemento a borrar" print "Posición->" for i in 0..vector.size-1 do print "\t #{i}" end puts "" print "Elemento->" for i in 0..vector.size-1 do print "\t #{vector[i]}" end puts "" puts "La posición que quieres borrar es..." pos = gets.chomp pos = pos.to_i # El dato que hemos introducido se introduce # como si fuera texto, así que si lo queremos # pasar a un número usamos la función .to_i vector.delete_at(pos) #Eliminamos el dato puts "\nEl nuevo array es:" print "Posición->" for i in 0..vector.size-1 do print "\t #{i}" end puts "" print "Elemento->" for i in 0..vector.size-1 do print "\t #{vector[i]}" end puts "" # Eliminamos un elemento pero dando el contenido. puts "\tElige una posición de un elemento a borrar" print "Posición->" for i in 0..vector.size-1 do print "\t #{i}" end puts "" print "Elemento->" for i in 0..vector.size-1 do print "\t #{vector[i]}" end puts "" puts "La contenido que quieres borrar es..." contenido = gets.chomp vector.delete(contenido) #Eliminamos el dato puts "\nEl nuevo array es:" print "Posición->" for i in 0..vector.size-1 do print "\t #{i}" end puts "" print "Elemento->" for i in 0..vector.size-1 do print "\t #{vector[i]}" end puts "" # Si os habéis dado cuenta, hasta ahora recorremos los arrays mediante # las posiciones que tiene, pero también podemos recorrerlos mediante # el contenido de cada posición, por ejemplo: animal = ["perro", "gato", "vaca"] numero=0 for contenido in animal do puts "Animal #{numero+1}-> #{contenido}" numero = numero + 1 end ################################################################# # UN EJEMPLO # ################################################################# # # Vamos a ir pidiendo por teclado una serie de números tantos como # queráis, por ejemplo 10 datos. Ahora todos estos números los vamos # a guardar en un array y vamos ir mostrando por pantalla para # cada número su cuadrado. Como sabréis el cuadrado de un número # es el número multiplicado consigo mismo, por ejemplo el cuadrado de # 2 es 2*2 = 4, el de 3 es 3*3=9, etc. # Y para terminar el ejemplo estos cuadrados los vamos a guardar en # otro array. numeros = [] # Con esto definimos un array vacío sin datos cuadrados = [] for i in 0..9 do print "Introduce un número:" numeros << gets.chomp.to_i puts "" end for i in 0..9 do el_cuadrado_de = numeros[i] * numeros[i] puts "El cuadrado de #{i} es: #{el_cuadrado_de}" cuadrados << el_cuadrado_de end ################################################################# # EJERCICIOS # ################################################################# # Así que ahora, haced estos ejercicios que están a continuación: # # 1.- Define un array vacío, y que luego a continuación compruebe # si está vacío pida un número de elementos a insertar, y que pida # esos elementos para introducirlos. # PISTA: mivector.empty? Significa que comprueba si está vacío o no. # 2.- Cread un array el que tenéis que rellenar con números escritos # desde el teclado que se van pidiendo, y así hasta un total de 10 # números. Una vez lo tengáis completo, usad la función .sort! con el # array y mostradlo por pantalla el array de números ordenados. # PISTA: mivector.sort! ordena los elementos # 3.- Crea un array para almacenar los nombres de una serie de # personas, otro array para almacenar los apellidos de estas personas, # y un tercer array para almacenar las edades. Una vez los tengas creados # haz un bucle FOR que se repita de 0 a 4 para que pida esos datos y los # almacene en cada array. Y para terminar el ejercicio que muestre # los elementos de los vectores tal que aparezca en pantalla algo como: # "Nombre Apellidos Edad" # "Serafín Vélez Barrera 27" # "Fco Javier Lucena Lucena 24" # 4.- Ahora con los arrays creados anteriormente como tienen datos, # y son los nombre, apellidos y edad, pues leeis de teclado un nombre y # mediante un bucle FOR recorreis el vector de nombres y comprobáis si # existe, en caso de que exista debe mostrar también sus apellidos y su # edad. ################################################################# # # # FIN # # # ################################################################# ############################################################################## # Copyright (c) 2011 - Serafín Vélez Barrera - Oficina de Software Libre # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . ##############################################################################