Tag Archive for sin embargo

Una introducción a Automatas finitos deterministicos (Maquinas de estado)

Screen Shot 2013-07-10 at 18.37.07

En este tutorial haremos una pequeña introducción a los automatas finitos deterministicos, esto quiere decir que hablamos de maquinas de estado donde los estados siguientes a un estado actual estan predeterminados sin equivocación alguna. Para ello he preparado el siguiente video que espero les pueda servir para comprenderlo de una manera sencilla.

Codigo fuente (ejemplo de automata finito):

Implementación del siguiente automata para evaluar cadenas de numeros binarios (1 y 0 ).

Screen Shot 2013-07-10 at 18.37.07
El siguiente codigo esta en Java, sin embargo el concepto deberia ser valido para implementarse en otros lenguajes.

public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		int[] input = {1,0,0,0,0};
		int inicio = 1;
		int finalizar = 1;
		int actual = inicio;

		boolean fin = false;

		int contador = 0;
		while(fin==false)
		{
			if(contador > input.length-1)
			{
				fin = true;
				break;
			}
			if(actual==1)
			{
				if(input[contador]==1)
				{
					actual=1;
				}
				if(input[contador]==0)
				{
					actual=2;
				}
				contador++;
				continue;
			}
			if(actual==2)
			{
				if(input[contador]==1)
				{
					actual=2;
				}
				if(input[contador]==0)
				{
					actual=1;
				}
				contador++;
				continue;
			}
		}

		if(actual==finalizar)
		{
			System.out.println("La cadena es correcta");
		}
		else
		{
			System.out.println("La cadena es incorrecta");
		}

	}

}

 

If – Unless en Ruby.

Definitivamente si has programado en otros lenguajes estarás familiarizado con la sentencia if, sin embargo, la instrucción unless probablemente te parezca interesante así que te invito a seguir leyendo el artículo.

La instrucción if permite evaluar una operación lógica y en base al resultado ejecutar ciertas instrucciones u otras, en la vida real es como tomar una decisión y elegir entre dos caminos.

La estructura de la sentencia if es la siguiente:

 if condicion
   #Conjunto de instrucciones a realizar
 end

Donde como sabes, “condicion” será reemplazado con una operación lógica, y el comentario “#Conjunto de instr…” se reemplazará con las sentencias de código que quieras que se ejecuten si se cumple la condición.

Los lenguajes de programación dan la facilidad de también ejecutar algo si la condición no se cumple, esto a través de la instrucción else. Veamos la estructura:

if condicion
   #Se cumplio la condicion
else
   #No se cumplio la condicion
end

Como verás, en este caso sustituyes el comentario “No se cumplio…” por las instrucciones de código a ejecutar si no se cumple la condición.

Unless.

En programación como en matemáticas existe el operador ! o NOT, que básicamente invierte la respuesta de una operación lógica, es decir, si la operación es verdadera la vuelve falsa y si es falsa la vuelve verdadera, este operador se utiliza mucho cuando queremos que se ejecuten instrucciones cuando NO se cumpla una condición, ejemplo:

if not div == 0
 puts 5/div
end

En el ejemplo anterior evaluamos que el valor entre el que dividimos no sea 0, para que no mande un error, y para ello utilizamos el operador NOT. Todo esto se menciona porque en Ruby existe la instrucción UNLESS, que literalmente cumple la función del operador NOT, veamos el mismo ejemplo anterior.

unless div == 0
 puts 5/div
end

Unless ejecuta las instrucciones si la condición es falsa, literalmente dice ejecuta esto A MENOS QUE esta condición sea verdadera, a mi parecer bastante práctico y más claro.

Con esto concluimos este artículo, en el siguiente hablaremos de la sentencia case.

Expresiones booleanas y operadores lógicos

Como en todos los lenguajes, Ruby tiene variables booleanas y operadores lógicos para el manejo de instrucciones de control, como el if, el switch y los ciclos. En realidad, en Ruby existen los objetos booleanos, es decir incluso este tipo de dato es un objeto en Ruby. Déjame explicarte esto claramente porque puede ser un poco confuso, en Ruby existen dos clases peculiares TrueClass y FalseClass, son clases muy peculiares porque tú no puedes crear objetos a partir de esas clases, de hecho, en el lenguaje sólo hay un objeto de la clase TrueClass y es el objeto True, del mismo modo la clase FalseClass sólo es la instancia de un objeto, False. Lo anterior puede parecer un poco confuso, ya que en lenguajes como JAVA true y false son palabras reservadas del lenguaje, y no objetos, como en Ruby, sin embargo su uso es similiar, así que no te preocupes por eso. Veamos a través de un ejemplo cómo es que funcionan los objetos True y False de Ruby.

  if True 
    puts "Esto siempre se ejecuta porque True siempre adopta el valor verdadero de un booleano"
  end
  if False
    puts "Esto nunca se ejecutara porque False siempre adopta el valor falso de un booleano"
  end

El ejemplo, creo expresa el funcionamiento de cada uno de ellos, aunque en realidad no es práctico. Antes de pasar a las expresiones lógicas, cabe mencionar que sólo dos clases son falsas en Ruby, es decir, cumplen un valor falso en un boolean, éstas son FalseClass y NilClass, hablaremos del objeto Nil más adelante en el curso. Operadores Lógicos. Si has programado en cualquier lenguaje, seguro estás familiarizado con las operaciones lógicas, que básicamente son expresiones que sólo pueden retornar un valor booleano verdadero cuando se cumple una condición, o un valor booleano falso cuando no se cumple la condición, en el caso particular de Ruby, sería retornar el objeto True y el objeto False respectivamente. Cabe apuntar que la condición a evaluar está dada por ciertos operadores, en este tutorial veremos los siguientes.

  • “< ” Menor que, evalúa si el objeto de la derecha es menor que el de la izquierda. Ejemplo:
     if 2<3 puts "2 es menor que 3"
  • “> ” Mayor que, evalúa si el objeto de la derecha es mayor que el de la izquierda. Ejemplo:
     if 3>2 puts "3 es mayor que 2"
  • “and/&& ” Se puede usar “&&” y “and”, ambos cumplen la función de retornar True cuando dos condiciones son True.
     if 2<3 and 3>2 puts "Retorna True :)"
  • “or/&& ” Se puede usar “||” y “or”, ambos cumplen la función de retornar True cuando una de dos condiciones es True, o ambas son True.
     if 2<3 or 3>2 puts "Alguna de las dos condiciones se cumplio"

Como anotación en los operadores and y or, te recomiendo usar las palabras en lugar de los símbolos || y &&. Como ves son los operadores básicos, no tomamos en cuenta el operador de negación porque en el siguiente artículo conocerás la contraparte de la instrucción if. En general estas operaciones, como te mencionaba, se usan para controlar el flujo de la aplicación, pero puede usarse para asignación de valores, ejecutar excepciones y más. Por ahora lo dejaremos en lo básico y comenzaremos usándolas con instrucciones de control en los siguientes tutoriales.

Hola mundo! – primer programa en Python

En este tutorial haremos nuestro primer programa en Python, un simple y sencillo “Hola mundo” para comenzar, veremos que sencillo es programar con una sintaxis realmente simple.

Para hacer nuestro primer programa necesitaras un editor de texto, crea un archivo y llamalo “hola.py“, la extensión .py es muy importante, ya que nos indica que este sera un programa escrito en lenguaje Python.

Ahora escribe el siguiente codigo:

print "hola python!!";

 

Lo siguiente que debes hacer es guardar este archivo (naturalmente con su extensión .py) y ejecutarlo.

Si ya tienes Python instalado y configurado haz lo siguiente.

Simplemente entra en tu terminal de comandos, accede al directorio donde haz guardado el archivo y escribe lo siguiente.

python hola.py

Una vez hecho esto veras en pantalla  el resultado “hola python!!” pues este primer programa solo imprime un mensaje de texto en pantalla, sin embargo ya haz hecho tu primer programa en Python!!