domingo, 25 de abril de 2010

Proyecto #4 "Tablas de Dispersion"


Introducción:

Una Tabla de Dispersión, en pocas palabras, es aquella que asocia claves o llaves a determinados valores, atraves de una función Hash, también se les llaman Tablas Hash.
Trabajo en Equipo:
¿Que hice yo?
Mi trabajo individual mente dentro del equipo fue como el de los demás, checar información de distintas fuentes acerca del tema, tablas de dispersión, y compartirlo con mis compañeros para estar en el mismo canal y no desviarnos del tema, también cheque previemante todos los demás temas disponibles a exponer para tener una idea superficial de como iba a ser este proyecto 4, también le di estructura a la presentación de las diapositivas que después editamos, también trate de buscar los ejemplos mas entendibles y que creí que los demás compañeros de clase pudieran entender en nuestra clase.
¿Como me salio?
En mi opinión digo que me salio excelente, hay que ser optimista :D pero si creo que hicimos las cosas bien como equipo y cada quien individualmente trato de acoplarse a los demás para mejorar la clase que vamos a dar.
¿En que aspectos estoy bien y en que aspectos puedo mejorar?
Creo que estoy bien tratando de hacer las cosas de la mejor manera posible, ya que quiero obtener todos los puntos completos de los proyectos restantes y obtener la calificación mejor que se pueda, también yo creo que estoy satisfecho conmigo mismo por que no solo me limite en buscar lo que sea para hacer la clase, si no que busque lo que mejor se entendiera para ofrecer una buena clase.
Yo creo que en los aspectos que debería de mejorar seria, el de dedicar un poco mas de tiempo a investigar a cosas que van mas aya de lo que se ve en clase, no solo para que me vaya bien en la materia, si no también para enriquecerme de mas conocimientos que me ayuden con mi formación profesional.
Ayudo a los demás o me apoyo en ellos?
Yo creo que hago de ambos aspectos, ayudo a mis compañeros yo creo que si por que por ejemplo para la clase yo investigue en paginas que se explica sobre el tema pero en ingles y que yo si le entiendo y explicarle a mis compañeros de lo que dice, también les decía como era una mejor forma de explicar lo que ellos iban a dar de clase, osea de su parte de exposición, entre otras; pero también yo me apoyo en ellos para saber si estoy bien en lo que digo o de lo que investigue para la clase, en pocas palabras ambas son necesarias para una retroalimentación entre los cuatro y ayudarnos todos para hacer mejor las cosas, como el dicho "todos para uno y uno para todos" o "4 cabezas piensan mejor que una" jajaja.
¿Quien se encarga de coordinar el trabajo? ¿Que papel tomo yo?
En mi opinión yo soy el que coordina, pero creo que es mejor decir que yo era el medio de comunicacion entre el equipo por que yo me ponía en contacto para ponernos de acuerdo en juntarnos para hacer este proyecto, del cual todos necesitamos la mejor calificación, y por eso también me esfuerzo en que todo salga bien y poder ofrecer una buena presentación, en fin espero obtener 4 en este proyecto y en los que restan.
Presentación:

domingo, 14 de marzo de 2010

Proyecto #3 - Computo de Factoriales

Iteración:



La iteración en pocas palabras es la repetición, y en este caso es la repetición del algoritmo las veces necesarias o que se requiera para la solución del algoritmo.




Recursion:

Esta propiedad consiste en sintetizar un algoritmo que no se sabe su resolucion, a partes mas simples las cuales si se puedan resolver, es decir, partir de un caso base, que es lo que si sabemos resolver y de ahí partir para encontrar la solución a nuestro algoritmo.





















Recomendaciones:


Es muy útil usar la iteración cuando el algoritmo es repetitivo, es recomendable usar las estructuras for y while en la creación del pseudocódigo:

For → Cuando se sabe el numero de veces a repetir el algoritmo.
While → Cuando no se sabe el numero de veces a repetir el algoritmo.

La Recursion es muy útil cuando no se sabe la resolución de un algoritmo y es necesario simplificarlo para poder resolverlo a partir de un caso base.

Si no es necesario usar la recursion en la resolucion de algoritmos es preferible omitirmosm ya que de lo contrario haria un algoritmo que es facil de resolver a uno con un monton de pasos inesesarios para su solucion, lo cual ocuparia mas memoria de la computadora y seria contraproducente.


Trabajo en Grupo:

Lo que en equipo hicimos fue dividirnos el trabajo para no hacerlo tan pesado y que cada integrante investigara bien lo que se iba a exponer y ya después que cada quien explicara y a los demás que fue lo que investigo y que así todos estuviéramos enterados del trabajo de cada quien.




Trabajo Individual:

Lo que yo hice fue investigar como hacer un pseudocodigo iterativo del problema del factorial y después lo pase a un compilador para correrlo y hacerlo funcionar, también investigué de la complejidad del algoritmo, y todo lo respalde con mis compañeros de equipo para editar las diapositivas.





Diapositivas:


Bloggs del Equipo:



jueves, 4 de marzo de 2010

Proyecto #2


Optimización




Problema:


"El alcalde de San Nico va a recibir en nuestro municipio al presidente de México en la plaza municipal, para lo que dicha zona debe estar presentable para ese día, digamos que los días restantes para su llegada son 3, entonces el alcalde quiere encontrar la manera mas óptima para dejar esa zona muy bien presentable para tal fecha"


Supongamos que el alcalde cuenta con un presupuesto de $1,166,666.6 para una semana por lo que a los correspondientes 3 días son $500,000 ; el cual es sacado de los impuestos que pagan los ciudadanos; y los aspectos para arreglar en la zona son:

1. Basura
2. Pintura
3.Mantenimiento


El área del terreno a arreglarse es de 1800m cuadrados:





El alcalde cuenta con 3 compañias que se encargan de realizar el trabajo que se requiere y son las siguientes;


Opción 1:

Ellos se tardan 5 días en realizar este trabajo y cobran un 150% mas por cada día menos que se aplace la fecha. La ponderación de lo que cobran por cada aspecto es:

1. Basura → $25 c/m2
2. Pintura → $100 c/m2
3.Mantenimiento → $80 c/m2

f(x)=((25x+100x+80x)•3)+z

si z=25x+100x+80x


Opción 2

Ellos se acomodan al limite de tiempo que el cliente necesita para el trabajo. La ponderación de lo que cobran por cada aspecto es:

1. Basura → $35 c/m2
2. Pintura → $90 c/m2
3. Mantenimiento → $50 c/m2

f(x)=35x+90x+50x


Opción 3

Ellos tradan 2 dias en hacer su trabaj y hacen un descuento del 5% por cada dia de plazo que se le den de mas.

1. Basura → $60 c/m2
2. Pintura → $110c/m2
3. Mantenimiento → $70 c/m2

f(x)=60x+110x+70x - (z(0.05))

si z=60x+110x+70x



¿Cual sera la manera mas óptima para encargar el trabajo?

Como el área =1800m2 entonces los costos de cada una de las empresas son:



Opción 1

1. Basura → $202,500
2. Pintura → $810,000
3.Mantenimiento → $144,000

=$1,156,500 + 300%
Total =$4,626,000


Opción 2

1. Basura → $63,500
2. Pintura → $162,000
3.Mantenimiento → $90,000

Total=$169,200


Opción 3

1. Basura → $108,000
2. Pintura → $198,000
3.Mantenimiento → $126,000

=$432,000 - 5%
Total=$410,400

Complejidad Asintótica

La manera mas óptima seria encontrar una cota inferior a la del presupuesto, pero entre mas alejada se encuentre de esta sera menos el costo, por lo tanto, mas óptimo.






En este caso como se observa en la gráfica la cota óptima a elegir es la opción 2 de color azul, ya que cumple con los requisitos para optimizar el trabajo, se encuentra debajo de la cota de ingreso (verde) y es también la cota mas baja, por lo tanto la menos costosa.


Este problema de decisión pertenece a la clase "P", ya que la elección no es muy complicada y las ecuaciones de cada opción son lineales, es por eso que no es muy difícil su solución.
Aparte estos algoritmos no pertenecen a un problema NP-difícil, por que para empezar como no es un problema NP por lo tanto no puede ser NP-duro.



Esta es una representación del algoritmo:


*Este no es un diagrama de flujo, solo es una representación del algoritmo en diagrama simple.



Referencias :

http://www.google.com.mx/
http://es.wikipedia.org/wiki/NP-hard
http://es.wikipedia.org/wiki/Clases_de_complejidad_P_y_NP
http://es.wikipedia.org/wiki/Cota_superior_asint%C3%B3tica
http://es.wikipedia.org/wiki/Optimizaci%C3%B3n_de_software
http://maps.google.com.mx/?gclid=CKvjnPWen6ACFSpeagodMlwzag
http://es.wikipedia.org/wiki/Problema_de_decisi%C3%B3n



viernes, 19 de febrero de 2010

Proyecto #1 "Algoritmos Computacionales Simples"

Problema:

5. Elegir entre posibles objetos de valor cuáles llevar a un viaje en una
mochila con capacidad límitada.

Ejemplo#1

Algoritmo:

1. Inicio

2. Se declaran las constantes y variables (c, Ipod=500, Lap=2000, Celular=500, Diccionario=800, Calzado=1000, Ropa=3000, Joyeria=1000, Usb=200, Grabadora=3000, TV=5000, Xbox=3000)

3. Pedir d segun la funcion (d=suma de n articulos)

4. Asiganar d (Xbox, Ipod, Celular)

5. Evaluar condicion (d<=6000)

6. Imprimir (Verdadero)

7. Fin

Ejemplo#2

Algoritmo:

1. Inicio

2. Declarar las constantes y variables (c, Ipod=500, Lap=2000, Celular=500, Diccionario=800, Calzado=1000, Ropa=3000, Joyeria=1000, Usb=200, Grabadora=3000, TV=5000, Xbox=3000)

3. Pedir d segun la funcion (d=suma de n articulos)

4. Asiganar d (TV, Xbox, Ropa, Usb, Lap, Calzado)

5. Evaluar condicion (d<=6000)

6. Imprimir (Falso)

7. Asignar d nuevamente (Ropa, Lap)

8. Evaluar condicion (d<=6000)

9. Imprimir (verdadero)

10. Falso

*En estos videos vienen explicados paso a paso los diagramas de flujo.

martes, 9 de febrero de 2010

Sistema Binario

El sistema de numeracion binario es el mas simple en la notacion posicional, en el solo se usan dos digitos el 1 y 0; una razon por la que se usa este sistema en la computacion es sencillamente por que el 1 reprecenta el encendido y el 0 apagado.


A la representacion de un numero binario se le llama bit y al conjunto de 8 bits se le llama bytes.


Ejemplo:


111 = Contiene 3 bits
01001 = Contiene 5 bits
10111101 = Contiene 8 bits o 1 byte





Conversion Decimal-Binario

Para expresar un numero decimal a uno binario, depende de la cantidad que tenemos en decimales, y de ahi sabemos cuantas posiciones deve de tener dicho numero en binario y nos tenemos que basar en las potencias de 2, como lo musestra la siguiente tabla:








Ejemplo:


Se divide el numero decimal entre la mayor potencia en la que quepa y asi sucesivamente hasta dejar en 0 el residuo, se representara con el 1 si el numero cabe en la divicion, y con el 0 si no cabe. (El orden de la posicion de los numeros binarios es mayor hacia la izquierda y menor hacia la derecha)



Decimal → 7 Binario → 111 = 2^2 + 2^1 + 2^0 = 4 + 2 + 1 = 7
Decimal → 25 Binario → 11001 = 2^4 + 2^3 + 2^2 + 2^1 + 2^0 = 16 + 8 + 0 + 0 + 1 = 25




Tambien hay otro metodo mas simple para mi gusto para hacer conversiones de decimales a binario:





Fuentes:

http://es.wikipedia.org/wiki/Potencia_de_dos
http://www.fismat.umich.mx/~elizalde/curso/node112.html

Capacidades de Almacenamiento

Que onda raza, les voy a poner una lista de las capacidades de memoria que hay, se van a quedar algunos con la boca abierta, es interesante, chequenlo, ahí les dejo de todos modos, el link de algunas paginas muy buenas de info sobre este tema. A y recuerden que el bit es la unidad mínima de almacenamiento.




1 Bit (es la unidad mínima de almacenamiento, 0/1)
8 Bits = 1 Byte
1024 Bytes = 1 Kilobyte (un archivo de texto plano, 20 kb)
1024 Kilobytes = 1 Megabyte (un mp3, 3 mb) 2^10
1024 Megabytes = 1 Gigabyte (una película en DivX, 1 gb) 2^20
1024 Gigabytes = 1 Terabyte (800 películas, 1 tb) 2^30
1024 Terabytes = 1 Petabyte (toda la información de Google, entre 1 y 2 petabytes) 2^40
1024 Petabytes = 1 Exabyte (Internet ocupa entre 100 y 300 Exabytes) 2^50
1024 Exabytes = 1 Zettabyte (a partir de aqui no existen comparativas reales)
1024 Zettabytes = 1 YottaByte
1024 YottaBytes = 1 Brontobyte
1024 Brontobytes = 1 GeopByte
1024 GeopBytes = 1 Saganbyte
1024 Saganbytes = 1 Jotabyte











Fuentes:



http://gonzo.teoriza.com/kilobyte-megabyte-gigabyte-terabyte-petabyte-exabyte-zettabyte-zottabyte-brontobyte

http://www.t1shopper.com/tools/calculate/

http://www.taringa.net/posts/info/1260430/Bytes,-KiloBytes,-Megabytes,-GigaBytes,-TeraBytes-y-mas!.html

Codificacion y Diagrama de flujo

Codificacion:




Todo algoritmo si se quiere hacer funcionar como herramienta, como por ejemplo un programa se necesita expresar en forma de un código independiente a la del lenguaje de programacion, para que no sea dependiente de uno solo; ejemplo:




#include
#include
int main()
{

float pre, pag, cam;
printf("Introdusca el precio del producto desaeado:$");
scanf("%f", &pre);
printf("Introdusca la cantidad con la que pagara el cliente:$");
scanf("%f", &pag);
cam= pag - pre;
printf("Al cliente le sobran:$%.2f",cam);
getche();
}




Diagrama de Flujo:



Esta misma codificacion se puede representar en forma de diagrama, y permite una mejor lectura de la codificacion; ejemplo:

pre = precio del producto
pag = pago del cliente
cam = cambio


* El material usado en esta entrada fue creado totalmente por mi, basando me en lo que aprendí en el libro de "Fundamentos de programacion: Piensa en C"