9 - Variables de tipo Strings

Hasta este momento hemos visto como definir variables enteras y flotantes. Realizar su carga por asignación y por teclado.

Para iniciarlas por asignación utilizamos el operador =

#definición de una variable entera
cantidad = 20
#definición de una variable flotante
altura = 1.92

Como vemos el intérprete de Ruby diferencia una variable flotante de una variable entera por la presencia del caracter punto.

Para realizar la carga por teclado utilizando gets y debemos llamar al método to_i o to_f para convertir el dato devuelto por gets:

cantidad = gets.to_i
altura = gets.to_f

A estos dos tipos de datos fundamentales (enteros y flotantes) se suma un tipo de dato muy utilizado que son las cadenas de caracteres (String)

Una cadena de caracteres está compuesta por uno o más caracteres. También podemos iniciar una cadena de caracteres por asignación o ingresarla por teclado.

Inicialización de una cadena por asignación:

# definición e inicio de una cadena de caracteres
dia = "lunes"

Igual resultado obtenemos si utilizamos la comilla simple:

# definición e inicio de una cadena de caracteres
dia = 'lunes'

Solo podemos agregar comandos como el salto de línea \n cuando utilizamos comillas dobles.

Para la carga por teclado de una cadena de caracteres utilizamos el método gets que retorna los caracteres ingresados por teclado más el salto de línea (\b):

nombre = gets

Lo más común es que no necesitemos que quede almacenando en la variable nombre el salto de línea (\n) por lo que llamando al método chomp nos retorna la cadena cargada pero sin el salto de línea:

nombre = gets.chomp

Problema 1:

Realizar la carga por teclado del nombre, edad y altura de dos personas. Mostrar por pantalla el nombre de la persona con mayor altura.

Programa: ejercicio044.rb

puts "Datos de la primer persona"
print "Ingrese nombre:"
nombre1 = gets.chomp
print "Ingrese la edad:"
edad1 = gets.to_i
print "Ingrese la altura Ej 1.75:"
altura1 = gets.to_f
puts "Datos de la segunda persona"
print "Ingrese nombre:"
nombre2 = gets.chomp
print "Ingrese la edad:"
edad2 = gets.to_i
print "Ingrese la altura Ej 1.75:"
altura2 = gets.to_f
print "La persona mas alta es:"
if altura1 > altura2
  puts nombre1
else
  puts nombre2
end

Para la carga de un String y que no quede almacenado el salto de línea tenemos el siguiente código:

nombre1 = gets.chomp

Para mostrar por pantalla lo hacemos en forma similar a las variables enteras y float por medio de los métodos puts y print:

  puts nombre1

Problema 2:

Realizar la carga de dos nombres por teclado. Mostrar cual de los dos es mayor alfabéticamente o si son iguales.

Programa: ejercicio045.rb

print "Ingrese el primer nombre:"
nombre1 = gets.chomp
print "Ingrese el segundo nombre:"
nombre2 = gets.chomp
if nombre1 == nombre2
  print "Ingresó dos nombre iguales"
else
  if nombre1 > nombre2
    print nombre1, " es mayor alfabéticamente"
  else
    print nombre2, " es mayor alfabéticamente"
  end
end

Cuando trabajamos con cadenas de caracteres al utilizar el operador > estamos verificando si una cadena (String) es mayor alfabéticamente a otra (esto es distinto a cuando trabajamos con enteros o flotantes)

Por ejemplo "luis" es mayor a "jose" porque la 'j' se encuentra más adelante en el abecedario que la 'l'.

Problema 3:

Realizar la carga de enteros por teclado. Preguntar después que ingresa el valor si desea cargar otro valor debiendo el operador ingresar la cadena "si" o "no" por teclado.
Mostrar al final la suma de los valores ingresados.

Programa: ejercicio046.rb

opcion="si"
suma=0
while opcion=="si"
  print "Ingrese un valor:"
  valor = gets.to_i
  suma = suma + valor
  print "Desea cargar otro numero (si/no):"
  opcion = gets.chomp
end
print "La suma de valores ingresados es ", suma

Para resolver este problema hemos inicializado una variable de tipo cadena de caracteres (también se las llama variables de tipo String) con el valor "si", esto hace que la condición del while se verifique verdadera la primera vez. Dentro del while luego de cargar el valor entero se pide la carga por teclado que confirme si desea cargar otro valor, en caso que cargue el String "si" el ciclo repetitivo while se vuelve a repetir.

El ciclo se corta cuando el operador carga un String distinto a "si".

Es importante notar que el String "si" es distinto al String "Si", es decir las mayúsculas no tienen el mismo valor alfabético que las minúsculas (después veremos que podemos convertir mayúsculas a minúsculas y viceversa)

Problema propuesto

  • Realizar la carga de dos nombres de personas distintos. Mostrar por pantalla luego ordenados en forma alfabética.
Solución
ejercicio047.rb

print "Ingrese el primer nombre:"
nombre1 = gets.chomp
print "Ingrese el segundo nombre:"
nombre2 = gets.chomp
puts "Listado alfabetico:"
if nombre1 < nombre2
  puts nombre1
  puts nombre2
else
  puts nombre2
  puts nombre1
end