domingo, 26 de septiembre de 2010

Maquinas de Turing

Hola compañeros, les hablare sobre las maquinas de turing Una máquina de Turing:
es un modelo computacional que realiza una lectura/escritura de manera automática sobre una entrada llamada cinta, generando una salida en esta misma.
Es un autómata que se mueve sobre una secuencia lineal de datos.  En cada instante esta máquina puede leer un solo dato de la secuencia (generalmente un carácter) y realizar ciertas acciones en base a una tabla que tiene en cuenta su "estado" actual (interno) y el último dato leído.  Está la posibilidad de escribir nuevos datos en la secuencia;  recorrer la secuencia en ambos sentidos y cambiar de "estado" dentro de un conjunto finito de estados posibles.


En realidad la máquina de Turing es más una abstracción matemática que un dispositivo físico o mecánico.
El hecho que se le denomine "máquina" se debe a que su funcionamiento puede ser descrito en términos de operaciones individuales muy sencillas que sugieren una implementación real muy simple, lo que ha motivado que existan muchas versiones prácticas del mismo.

-Existe un registro de estado que almacena el estado de la máquina.  El número de estados posibles es finito, y no se exige ningún estado especial con el que sea iniciada la máquina.
    -Existe una tabla de acción , que contiene las instrucciones de lo que hará el autómata.  Estas instrucciones representan en cierta forma el "programa" de la máquina.  La ejecución de cada instrucción de la tabla de acción incluye cuatro pasos: 

    -Leer un carácter en la posición actual.
    -Escribir un nuevo símbolo en esta posición (puede ser el mismo que había).  El símbolo a escribir es   alguno del alfabeto de la máquina.
    -Desplazar el cabezal una celda a derecha o izquierda.
    -Decidir cual será el nuevo estado en función del carácter que se acaba de leer y del estado actual.  Si la tabla de acción no contiene ninguna correspondencia con el estado actual y el símbolo leído, entonces la máquina detiene su funcionamiento.  



    lunes, 20 de septiembre de 2010

    Lenguaje de Programacion Erlang


    Lenguaje de Programación 
    Martes m1-m3

    Hola compañeros, les explicare un poco sobre el lenguaje de programación Erlang.

    Erlang es un lenguaje de programación de propósito general y un entorno de ejecución. Es uno de los lenguajes declarativos mas exitosos en el entorno empresarial.

    Erlang pertenece a la clase de lenguajes orientados a mensajes. Estos lenguajes proporcionan concurrencia usando procesos paralelos. No hay objetos compartidos en un lenguaje orientado a mensajes, si no que toda la interacción entre los procesos se realiza enviando y recibiendo mensajes.

    Las caracterisiticas mas destacadas son:
    - lenguaje funcional
    -soporte de concurrencia
    -distribución, no hay memoria compartida
    -tolerancia a fallos
    -recolector de basura
    -procesos concurrentes altamente aislados
    -comunicacion entre procesos con paso de mensajes
    -funciones de orden superior
    -comprovación de tipos dinámica
    -posibilidad de conectar con cógico C, Java, y otros lenguajes.


    Respecto a la concurrencia:
    -Todo es un proceso
    -Los procesos están fuertemente aislados
    -La creación y distrubución de objetos es un proceso ligero
    -Los procesos tienen nombre únicos
    -Los procesos no comparten recurso alguno


    La mayor parte del lenguaje, y probablemente la menos interesante, es el subconjunto secuencial. Este subconjunto secuencial tiene comprobacion dinámica de tipos y es un lenguaje de programación estrictamente funcional, libre de efectos secundarios en su mayor parte.

    Ejemplo de programación Erlang
    Los programas están compuestos de bloques funcionales, llamados funciones. las funciones se identifican unícamente por su nombre y su ariedad (el número de datos de entrada), no solo por su nombre como en otros lenguajes.

    la definición de un lenguaje es:

    nombre-función(argumento1, argumento 2, ...) guarda-opcional - ˃
    intrucción,
    intrucción,
    Resultado-a-devolver.

    La guarda opcional puede ser de: when Argumento 1 ˃ Argumento 2

    un ejemplo de función:

    duplica (x) -˃
    X*X
    En Erlang una función puede ser definida con varias cláusuras, por ejemplo:

    fibonacci (0) -˃
    1; 

    fibonacci (1) -˃
    1;
    fibonacci (N) -˃
     fib (N-2) + fib (N-1)
     

    Espero que les haya servido esta informacion. Favor de comentar

    Que tengan un Expelente Día

    SALUDOS!!

    Lenguaje de Programacion Scheme

    Lenguaje de programación 
    Martes m1 - m3

    Hola compañeros, les voy hablar un poco sobre el lenguaje de programación Scheme, algunas características, funcionalidades, su sintaxis y declaración de variables.

     Scheme:
     Como su nombre lo dice es un lenguaje de programación del tipo funcional, de un tipado dinámico e interpretado, dialecto del LISP.
    Scheme es un lenguaje de programación fue desarrollado por Guy L. Steele y Gerald Jay Sussman en la década de los setenta, este es conocido en el mundo académico como los lambda papers de Sussman y Steele. 

    Fue uno de los primeros lenguajes de programación con continuaciones explicitas.
    Algunas características de este lenguaje son:
    - Pone énfacis en la elegancia y simplicidad, es mucho mas pequeño que la mayoría de versiones de lips.

    -Es muy usado en ambientes académicos y de investigación.

    -Su objetivo no es acumular un gran número de funcionalidades, si no evitar las debilidades y restricciones que hacen necesaria su adición. 

    -Sheme ofrece también gestión automática de memoria (recolección de basura).



    Sintaxis
    Sheme posee una Sintaxis reducida comparándolo con otros lenguajes. Utiliza la notacion prefija. Por ejemplo si se desea realizar la suma 1+1, se debe de programar con la siguiente intrucción:

    (+ 1 1)

    Los parentesis son obligatorios, ya que separan las instrucciones que serán evaluadas por el interprete. 
    Para realizar comentarios dentro del código se utiliza ";", esto se marca como linea de comentario
    Ejemplo: 
    ;Esta línea es un comentario, y la orden de abajo es ejecutada
    (+ 1 1)

    Variables:
    Las variables son dinámicamente tipadas, mencionado de otra forma no se puede especificar lo que se va a guardar dentro de la misma.
    Las variables globales se nombran con la instrucción (define nombre valor)
    por ejemplo:
    (define variable 4)


    Por otra parte las variables locales se definen con la instrucción (let variables funcion) 
    ejemplo:

    ;suma dos números guardados en una variable local
    (let
    ;variable de la operacion
    ((numero 1 5)
    (numero 2 7))
    ;intrucción que suma los números, es decir, la función
    (+ numero 1 numero2)).



    En este link se puede descargar el Scheme

    Espero que les pueda servir. Favor de comentar que les pareció

    Que tengan Buen Día
    SALUDOS!!

    sábado, 4 de septiembre de 2010

    Torre de Hanoi

    En que Consiste la Torre de Hanoi

    Clase de Programación
    Hola compañeros solo les explicare sobre la "Torre de Hanoi" para todos aquellos que no sabemos de que trata: 

    El juego consiste en tres varillas verticales. En una de ellas se encuentran apiladas un numero de discos, que generalmete son 8, de diámetros diferentes, ordenados de mayor a menor (el de mayor diámetro abajo)
    Las otras dos varillas están vacías, el juego consiste en pasar todos los discos de la varilla ocupada a una de las varillas libres, y vuelva a quedar como estaba al inicio.

    las reglas de este juego son: 

    1. Sólo se puede mover un disco a la vez.
    2. Un disco de mayor tamaño no se puede colocar encima de uno más pequeño.
    3. Sólo se puede mover un disco que se encuentre en la parte superior de cada varilla. 


    Aquí les dejo estos enlaces donde puedes jugar para que se den una idea de cómo se juega. Torre de Hanoi

    y este enlace donde se muestran algunos programas en donde se aplica este juego: Ejemplos



    Espero que les haya servido y explicado de que trata este juego.
    Saludos! 

    Recursión

    Laboratorio de Programación 


    Hola compañeros, les hablare un poco sobre recursión

    Esto quiere decir que una función en recursiva cuando se define en función de sí misma. 
    No todas las funciones pueden llamarse a sí mismas, si no que deben estar diseñadas especialmente para que sean recursivas, de otro modo podrían conducir a que el programa termine inadecuadamente. 

    Nota: No todos los lenguajes de programación permiten usar recursividad.

    C++ permite la recursividad. Cada vez que se hace una función, si la función hace una llamada a si misma, se guardan sus variables y la nueva instancia de la función trabajara con tu propia copia de dichas variables. 


    Por ejemplo: 
    El factorial se simboliza como n!, se lee como "n factorial" y la definición es:

    Algunas reglas para utilizar recursividad son:
     -No es posible calcular el factorial de negativos, no está definido.
     -El factorial de 1 es 0.

    Este ejemplo de programación en C++ utilizando "n! factorial"


    Aunque la función "factorial" es un buen ejemplo para demostrar cómo funciona una función recursiva.

    Aunque este sea buena la recursividad consume muchos recursos de memoria y tiempo de ejecución, y debe aplicarse a funciones que realmente le saquen provecho.



    Espero que les haya servido esta información, comenten por favor.
    Que tengan un buen día
    SALUDOS!