Salida y entrada de datos en consola con Ruby

El kernel de Ruby carga consigo una buena cantidad de métodos entrada salida, conocidos también como métodos I/O (por Input/Output), entre ellos tenemos gets, put, print, printf, putc y algunos otros que están más relacionados con el manejo de archivos, tópico que veremos más adelante en el curso.

En este artículo veremos algunos de ellos, cabe mencionar que éstos métodos, como su nombre lo indica, sirven para recibir o imprimir datos a través de la consola para interactuar con el usuario.

El más sencillo tiene que ser print, de hecho print es una impresión sencilla, si ejecutas el siguiente programa en tu consola, deberás ver el mensaje en ella:

print "Hola mundo"

Si ejecutaras dos veces la anterior instrucción, notarías que el texto sale pegado, a menos que dentro de las mismas cadenas coloque espacios. En realidad la mayoría de las veces requerimos de que cada impresión de pantalla salga en una línea diferente de la consola, y eso es precisamente lo que hace puts.

puts "Hola"
puts "mundo"

Ahora bien, si ejecutas el programa anterior, verás cada impresión en una línea de la consola diferente.

Para terminar con las impresiones de pantalla, veamos algo con lo que los programadores en C, se sentirán más cómodos, se llama printf y funciona así:

name = "Uriel"
edad = 18
printf "Me llamo %-10s y tengo %3d", name, edad

El ejemplo anterior imprimirá mi nombre con máximo 10 caracteres y mi edad en máximo 3 dígitos, %d es para enteros, %s para cadenas y %f para flotantes.

Ahora bien veamos como aceptar datos del usuario desde la consola:

nombre = gets

Creo que no podría ser más sencillo, el método gets es el que nos permite recibir información del usuario, gets, siempre recibe una cadena y termina de recopilar la información cuando existe un salto de línea. El problema con gets es que devuelve una cadena que si ingreso mi nombre se vería así “Uriel \n” lo cual no es del todo bueno, pero tiene solución y es a través del método chomp.

nombre = gets.chomp

Después de chomp, mi nombre regresaría algo así “Uriel”.

Por último, me parece un excelente momento para que probemos un programa más concreto, creemos uno que nos salude:

print "Dime tu nombre: "
nombre = gets.chomp
puts "Hola #{nombre}, un gusto conocerte"

Del código anterior, lo único que no hemos visto es el operador #{} y me parece un excelente momento para explicarlo, leyendo el código podrás notar que es el operador de concatenación en Ruby, así pues, cuando necesites combinar el valor de una variable con una cadena, deberás colocar la variable dentro de las llaves del operador anterior.

Bien, con eso quedamos con los métodos de entrada salida y pasaremos en el siguiente artículo a estudiar los arreglos en Ruby.

Ciclo While en Ruby

Una vez nos hemos adentrado en los ciclos no podemos olvidarnos de uno de los más utilizados, el ciclo While, de nuevo, si no has programado antes, necesitas saber que ésta es una especie de ciclo que se repite mientras una condición se cumple.

La sintaxis del ciclo while en Ruby es bastante parecida a la de otros lenguajes, veamos el ejemplo:

it = 1
while i < 10
   puts it
   it += 1
end

El ciclo anterior irá de 1 a 9, cómo verás, entra al ciclo siempre y cuando la condición que se encuentra al lado de la palabra while se cumple, en este caso i<10.

Bastante sencillo ¿no? Lo interesante será combinarlo con valores que el usuario ingrese, ya que generalmente, éste ciclo se utiliza cuando no sabemos cuántas veces se necesitará repetir un bloque de código.

Cabe recalcar que las palabras que modifican un ciclo for también aplican para el ciclo while, éstas son redobreaknext, si necesitas saber más al respecto revisa el artículo anterior de éste curso.

Por ahora todo ha sido muy común, cosa extraña pensando que Ruby es uno de los lenguajes con sintaxis más peculiar, éste artículo también presenta una variante interesante del ciclo while, peculiar de Ruby, y es el ciclo until.

Until, se trata del inverso de while, es decir, un ciclo que se ejecuta siempre y cuando la condición sea FALSA, veamos el ejemplo anterior pero usando ahora until:

it = 1
until i > 9
   puts it
   it += 1
end

De nuevo el ciclo iterará de 1 a 9, nota cómo cambiamos el operador < por el >, es decir el inverso, de modo que el ciclo se itera siempre y cuando i no sea mayor que 9.

Algunos conocedores se estarán preguntando, qué pasa con la variante do… while, en Ruby no hay algo como tal, pero bien se puede hacer uno basado en el poder de los bloques, veamos el ejemplo:

it = 1
begin
   puts it
   it += 1
end while i < 10

En el caso anterior, el bloque encerrado por las palabras reservadas begin end, se ejecuta una vez, posteriormente evalúa la condición y decide si debe repetirse de nuevo.

Bien, con esto terminamos el análisis de los ciclos, en el siguiente artículo veremos entrada y salida de datos con Ruby.

Sentencias If/else en C – toma de decisiones

En C también tenemos un metodo muy sencillo para tomar decisiones dentro de nuestro programa, por ejemplo, ¿Que pasaría si yo quiero ejecutar una pieza de codigo si una variable llamada X vale mas de 10, y otra si vale menos? Esto se hace con la sentencia if.

Sintaxis de If en C

La sintaxis es la siguiente:

if(expresion)
{
   /* Ejecutar codigo si la expresion es verdadera*/
}

Donde “expresion” es el resultado de una operación logica que solo puede tener como resultado verdadero o falso (true o false).

Por ejemplo, en el siguiente codigo evaluamos una variable, si esta es mayor a 10, imprimiremos un mensaje.

int x = 15;
if(x > 10)
{
  printf("La variable X es mayor a 10.\n");
}

En el ejemplo se ve claramente que al declarar x se le asigna el valor de 15, y posteriormente lo evaluamos, el resultado del programa naturalmente debera mostrar el mensaje “La variable X es mayor a 10″ puesto que esta expresión es verdadera.

Video tutorial de la sentencia if en lenguaje C

Tomando una ruta alternativa con else

En dado caso que queramos ejecutar un codigo alternativo si la expresión evaluada con if es incierta, tenemos la sentencia else que nos permite hacerlo.

Para ello tomemos el siguiente ejemplo, similar al anterior evaluamos si una variable x es mayor a 10, pero en este caso como esto no será así, desplegaremos un codigo alternativo encerrado entre las llaves del “else”.

int x = 5;
if(x > 10)
{
  printf("La variable X es mayor a 10.\n");
}
else
{
    printf("La variable X NO es mayor a 10.\n");
}

Como resultado de este ejemplo imprimriamos el mensaje “La variable X NO es mayor a 10″.

Espero que este tutorial haya sido de su utilidad, esten al pendiente de los proximos.

Variables y tipos de datos en C

Una variable en C es un espacio que reservamos en memoria para poder guardar información, las variables se utilizan a menudo para guardar números  caracteres, entre otros tipos de datos,  no solo en C si no en cualquier lenguaje de programación. En C cada variable (espacio reservado en memoria) puede utilizarse para guardar información, y dicha información se representa por medio de un tipo de dato especifico, que determina como la interpretará el lenguaje en sí.

Tipos de datos en C

En lenguaje C tenemos en general 4 grandes tipos de datos, estos son los basicos, enumerados, voids, y derivados. En este tutorial basico veremos cuales son los tipos basicos, que se conforman de aquellos datos que suelen ser enteros o de tipo flotante. También es importante saber que dependiendo de cada tipo unico de dato, dependerá el espacio que ocupará en memoria, es decir que existen tipos de datos mas pesados que otros, y su uso consume mas memoria cada vez que se crea una variable.

Tipos de datos basicos (numericos y caracteres):

A continuación esta tabla muestra los tipos de datos y el rando de valores que puede tomar, algunos varian dependiendo del tipo de maquina en el que se desarrolle, si es 16 bits, 32 bits, o 64 bits, algunos tipos de datos pueden variar su rango de valores y tamaño.

Tipo Tamaño en memoria Valores posibles Descripción
char 1 byte -128 a 127 o 0 a 255  Guarda caracteres del codigo ASCII
int 2 or 4 bytes -32,768 a 32,767 o -2,147,483,648 a 2,147,483,647 Guarda numeros enteros,
float 4 bytes 1.2E-38 a 3.4E+38  Guarda numeros decimales con precisión de 6 digitos decimales
short 2 bytes -32,768 a 32,767  Guarda numeros enteros con menor capacidad de almacenamiento(y rango) que int
double 8 bytes 2.3E-308 a 1.7E+308  Igual que Float pero con mayor precisión (hasta 15 digitos decimales) y mayor rango
long 4 bytes -2,147,483,648 a 2,147,483,647  Guarda numeros enteros con mayor capacidad de almacenamiento que int
long double 10 bytes 3.4E-4932 to 1.1E+4932  Mucho mayor precisión en calculo decimal, incluso mayor que double (hasta 19 digitos decimales)

El siguiente video muestra una introducción y ejemplos a los tipos de datos en lenguaje C, espero con esto nos demos una mejor idea de este concepto.

Video tipos de datos en C