jueves, 30 de junio de 2011

lab de algoritmos(maquinas turing)

Esta entrada se trata de las maquinas de turing, que es una maquina de turing?, bueno una maquina de turing es un tipo de automata que se mueve sobre una banda de datos que tiene un inicio pero no tiene final solo puede ver un dato cada que avanza y avanza hacia la derecha o hacia la izquierda dejando el valor de la celda igual avanzando hacia la derecha o izquierda o quedarse en ese punto, modificandolo avanzano a la derecha o izquierda o quedandose en ese punto  realizando dichas acciones apartir de una tabla que tiene en cuenta en que lugar de la banda esta y el ultimo dato leido

Tiene una cinta sobre la que puede desplazarse a izquierda y derecha un cabezal de lectura/escritura. La cinta contiene una serie de celdas, y en cada una de ellas puede escribirse un símbolo de un conjunto finito; este conjunto de símbolos se denomina el alfabeto de la máquina. En principio todas las celdas que no se hayan escrito antes contienen un carácter especial nulo o vacío (que se representa por 0 o #). La cinta puede contener tantas celdas a derecha e izquierda del cabezal como sean necesarias para el funcionamiento de la máquina.
  • El cabezal puede moverse a derecha (R) a izquierda (L) de su posición actual, así como leer el contenido de una celda o escribir en ella cualquier carácter de su alfabeto.
  • 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. Las 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, y depende del carácter leído y del estado actual.
  • Desplazar el cabezal una celda a derecha o izquierda (R/L); en algunos modelos el desplazamiento puede ser nulo (detener H).
  • 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

despues de esta pequeña explicacion de maquinas turing un ejemplo que estube realizando en clase  se le sumava uno a un numero :


# = vacio
&= inicio
<=retroceder
>=avanzar
- =quieto

s,   0  =      s,0,>
s,   1  =      s,1,>
s,   #  =      q,#,<
s,  & =      s,&,>
q,   0 =      Alto,1,-
q,   1 =      q,0,<
q   & =     p,&,>
p   0   =     r,1,>
r    0   =     r,0,>
r    #   =    Alto,0,-

1110011

s, &1110011#    s,&,>
s, &1110011# s,1,>
s, &1110011# s,1,>
s, &1110011# s,1,>
s, &1110011# s,0,>
s, &1110011# s,0,>
s, &1110011# s,1,>
s, &1110011# s,1,>
s, &1110011# q,#,<
q,&1110011# q,0,<
q,&1110010# q,0,<
q,&1110000# Alto,1,-

numero escrito= 1110011=115
resultado=  1110100 = 116
 
bueno esto es una forma de representar las maquinas turing su funcionamiento cabe recordar que existen varios tipos de maquinas turing esta es la estandar basada en base 2 pero puede aber otras que tu le des el alfabeto a utilizar. por mi parte es todo gracias

para aser esta publicacion me base en esta pagina http://www.zator.com/Cpp/E0_1_1.htm

martes, 28 de junio de 2011

lab de algoritmos (tema 1: serie de fibonacci)

bueno en esta publicacion hare referencia a el problema de practica del tema 1 que se refiere a la serie de fibonacci(0,1,1,2,3,5,8,13,21,34,55,89,144) para el que no sepa en que consiste la serie de fibonaccci dar clic en el enlace sucecion de fibonacci en este enlace da a conocer sus aplicaciones quien la invento y su historia.

prociguiendo y suponiendo que lla e entendio la sucesion de la serie iniciamos con el algoritmo

ALGORITMO: Serie Fibonacci
  1. inicio
  2. variables a usar: a,b,c,n,i
  3. se le da un valor inicial a las variables a=0,b=1
  4. se lee el valor de n(numero de digitos a imprimir de la serie)
  5. se abre una condicion (n==1)
  6. si es verdadera la condicin anterior se imprime la variable a
  7. si es falsa entra a una segunda condicion (n>1)
  8. si es verdadera se imprime a,b
  9. se abre un ciclo for(i=3;i<=n;i++) (donde se inicializa i=3 por que ia se tienen los primeros dos digitos se compara con la variable n que representa el numero de digitos a imprimir y por ultimo se suma 1 a el valor de la i)
  10. dentro del ciclo se efectua la operacion c=a+b y se imprime c
  11. despues a=b,b=c (se corren los valores la primer variable(a) pasa a tomar el valor de la segunda variable(b) y la segunda variable pasa a tomar el valor de la resultante(c)
  12. si se cumple la condicion del ciclo (i<=n) se suma 1 a el valor inicial (i) y se repite el ciclo hasta que lla no se cumpla la condicion
  13. fin
codigo de fibonacci en DEV C++

#include<stdio.h>
#include<conio.h>
main(){
       int a,b,c,n,i;
       a=0;
       b=1;
       printf("cuantos numeros de la serie fibonacci desea imprimir?");
       scanf("%d",&n);
       if(n==1){
                printf("%d",a);}
       if(n>1){
       printf("%d,%d,",a,b);}
       for(i=3;i<=n;i++){
       c=a+b;
       printf("%d,",c);
       a=b;
       b=c;}
       getch();}

esto biene siendo el algoritmo y la codificacion de la serie de fibonacci al diagra se los devo todavia no tengo un programa para diagramar ojala y se entienda cualquier duda pues pueden dejar su publicacion y la respondere lo mas antes posible

Lab de algoritmos (tema 2 numeros binarios,binario a decimal,decimal a binario)

En la busqueda de numeros binarios encontre que se puede usar puntos decimales en los numeros binarios para poder indicar valores menores
a 1 el numero que esta enseguida del punto hacia la izquierda se le llama unidad
y el que le sigue hacia la izquierda cada posicion vale 2 veces mas que la anterior
la primer cifra del punto decimal hacia la derecha se le llama mitades
y cada posicion que avansa hacia la derecha es dos veces menos que la mitad anterior

101011.110012 

Existen formas de convertir numeros binarios a decimales como lo dice el sistema binario esta compuesto por la base dos(0,1) se compone de ceros y unos  y para saber cual es su equivalente en numeros decimales se tiene que aser lo siguiente

Ejemplo(de la pagina): ¿Cuánto es 11112 en decimal?

  • El "1" de la izquierda está en la posición "2×2×2", esto es 1×2×2×2 (=8)
  • El siguiente "1" está en la posición "2×2", esto es 1×2×2 (=4)
  • El siguiente "1" está en la posición "2", esto es 1×2 (=2)
  • El último "1" son las unidades, es decir 1
  • Respuesta: 1111 = 8+4+2+1 = 15 en decimal
Porlotanto es una forma de convertir un numero binario a decimal ahora pondre un ejemplo mio.

EJEMPLO: Cuanto es 110111011 en numero decimal?

otra forma de resolverlos es:
  • Tomar el primer numero de la derecha e ir hacia la izquierda multiplicandolo por la base 2 elevada a la potencia 0 y asi ir aumentando uno a la potencia de la base 2,    (1*2)=1
  • el siguiente numero es uno (1101110112 )  se multiplica por la base que es 2 pero ahora elevada a la potencia anterior +1, (1*21)=2
  • el siguiente numero es cero (1101110112 ) se multiplica por la base que es 2 pero ahora elevada a la potencia anterior +1, (0*22)=0
  • el siguiente numero es uno (1101110112 ) se multiplica por la base que es 2 pero ahora elevada a la potencia anterior +1, (1*23)=8
  • el siguiente numero es uno (1101110112 ) se multiplica por la base que es 2 pero ahora elevada a la potencia anterior +1, (1*24)=16
  • el siguiente numero es uno (1101110112 ) se multiplica por la base que es 2 pero ahora elevada a la potencia anterior +1, (1*25)=32
  • el siguiente numero es uno (1101110112 ) se multiplica por la base que es 2 pero ahora elevada a la potencia anterior +1, (0*26)=0
  • el siguiente numero es uno (1101110112 ) se multiplica por la base que es 2 pero ahora elevada a la potencia anterior +1, (1*27)=128
  • el siguiente numero es uno (1101110112 ) se multiplica por la base que es 2 pero ahora elevada a la potencia anterior +1, (1*28)=256
  • una vez sacados todos los numeros se suman los resultados: 1+2+0+8+16+32+0+128+256=443
  • el numero 110111011en decimal es 443

esas son dos formas de convertir numeros binarios en decimales tambien hay metodos para convertir numeros decimales a binarios :

Ejemplo: convertir el decimal 248 a numero binario

  1. Una forma es dividiendo el numero decimal entre la base 2 que representa a los numeros binarios el resultado de esa division volverla a dividir y asi sucesivamente hasta que llegue a uno o cero despues acomodar el numero empezando con el resultado de la ultima division  y acomodar de derecha a izquierda los residuos de las divisiones anteriores :
  • 248/2=124 residuo 0,124/2=62 residuo 0,62/2=31 residuo 0,31/2=15 residuo 1,15/2=7 residuo 1, 7/2=3 residuo 1, 3/2=1 residuo 1
  • despues de aser las operaciones acomodarlos de derecha hacia izquierda empezando con el resulado de la ultima division:  000111112 que es el resultante de la conversion de 248
por ultimo una tabla de algunos numeros binarios a decimales:


 Bueno esto es mi aportacion sobre los numeros binarios espero y les pueda servir de algo compañeros suerte cualquier duda favor de preguntarme estare en contacto
 

lab algoritmos (algoritmo,diagrama y pseudocodigo)