miércoles, 27 de octubre de 2010

Tarea 5 - Problema Logico

Esta es mi entrada acerca del problema logico que habiamos escogido en clase, yo escogí el problema llamado "Crates of fruit" (Cajas de Fruta)

PROBLEMA

El problema dice así:

"You are on an island and there are three crates of fruit that have washed up in front of you. One crate contains only apples. One crate contains only oranges. The other crate contains both apples and oranges.

Each crate is labeled. One reads "apples", one reads "oranges", and one reads "apples and oranges". You know that NONE of the crates have been labeled correctly - they are all wrong.

If you can only take out and look at just one of the pieces of fruit from just one of the crates, how can you label ALL of the crates correctly?"


Bueno pues mi problema planteado es que estoy en una isla y hay cajas de fruta  enfrente de mi, una caja contiene solo manzanas, otra caja contiene solo naranjas y otra caja contiene ambas ( manzanas y naranjas.)

Cada caja está etiquetada, una dice "manzanas" , otra dice "naranjas" y otra dice "manzanas y naranjas". Tu sabes que NINGUNA de las cajas está etiquetada correctamente, todas ellas están etiquetadas incorrectamente.

Si solo puedes tomar y mirar una de las piezas de solo una de las cajas, ¿como puedes etiquetar las cajas correctamente?

ANÁLISIS

Bien pues analizando esta situación puedo decir lo siguiente:

Primero si sabemos que las cajas estan etiquetadas incorrectamente podemos afirmar que la caja con la etiqueta:

Caja etiquetada "Manzanas" --> Puede contener  naranjas  o  manzanas y naranjas

Caja etiquetada "Naranjas" --> Puede contener manzanas  o  manzanas y naranjas

Caja etiquetada "Manzanas y Naranjas" --> Puede contener manzanas o naranjas



Ilustrativamente podriamos decirlo con la siguiente imagen



Si ustedes se preguntan ¿por qué ésto? , es porque TODAS LAS CAJAS ESTAN ETIQUETADAS INCORRECTAMENTE.

Bueno y si nos centramos en el problema de esa persona, que quiere saber que hay en las 3 cajas con tan solo agarrar una fruta de una caja.

Caso I
Caja etiquetada manzanas

Si la persona agarrara una fruta de la caja que dice manzanas puede tocarle o naranjas o manzanas y naranjas.

Si le toca naranja entonces esa persona no sabria si en esa caja solo hay naranjas o si hay manzanas y naranjas, y no podria decidir por alguna de las dos opciones. Entonces no es la respuesta correcta.

En caso de agarrar una manzana sabria que en esa caja hay manzanas y naranjas ya que no puede haber solo manzanas porque las etiquetas están mal y quedarian 2 cajas , una que tiene la etiqueta de naranajas y manzanas y otra que tiene la etiqueta de naranjas , en la de naranjas tendria que haber manzanas  y en la de manzanas y naranjas habria naranjas.

En este caso podriamos saber que hay en las 3 cajas en el caso de que de la caja que dice manzanas sacaramos una manzana. Habria dos posibilidades y en solo una de esas se cumpliria.


Caso II
Caja etiquetada naranjas

Si la persona agarra una fruta de la caja marcada como naranjas y le sale una naranja el sabria que en esa caja hay manzanas y naranjas porque ambas van en conjunto , entonces le quedarian 2 cajas  una que tiene una etiqueta de manzanas en la que habria naranjas y otra que tiene que la etiqueta de manzanas y naranjas en la que hay manzanas entoces vuelve a suceder lo mismo que arriba, ¿que pasaria si en lugar de salir naranja sale una manzana ? volvemos al mismo caso anterior hay dos posibles respuestas y de esas dos solo 1 es correcta.

Caso III
Caja etiquetada Manzanas y naranjas

La tercera opcion seria agarrar de la caja manzanas y naranjas aqui solo habria dos posiblidades: o es la caja de manzanas nadamas o es la caja de naranjas nadamas porque no puede contener ambas, entonces digamos que tomamos una naranja, entonces en esa caja sabremos que solo hay naranjas,  y por lo tanto  en las otras cajas quedan manzanas o naranjas o manzanas

nos quedaria algo asi

Caja de manzanas y naranjas  = Caja de naranjas

Caja de manzanas = ???? 

Caja de naranjas = ????


Entonces, nos quedan dos caja (Caja de manzanas y Caja de naranjas )  , y nos quedan dos tipos de respuestas , manzanas y naranjas o manzanas , entonces si sabemos que en la de naranjas no puede haber naranjas porque estan etiquetadas incorrectamente, tiene que haber manzanas porque en la de manzanas no puede haber manzanas por estar mal etiquetada entonces en la caja de manzanas tiene que haber naranjas y manzanas porque es lo ultimo que nos queda.


Caja de manzanas y naranjas  = Caja de naranjas


Caja de manzanas = Caja de manzanas y naranjas


Caja de naranjas = Caja de Manzanas


Igualmente en el caso de que saque una manzana de la caja de manzanas y naranjas seria lo mismo, nadamas que en la caja de manzanas no habria manzanas sino naranjas con lo que nos sobraria una caja  que dice naranjas en la que habria manzanas y naranjas.

Entonces se cumple que en caso de sacar una naranja o una manzana se puede saber que hay en las otras dos cajas.

Bueno a todo esto puedo concluir con la siguiente respuesta:


RESPUESTA

De la caja de manzanas y naranjas tomo una fruta , si es naranja entonces en la caja de naranjas hay manzanas y en la de manzanas hay naranjas y manzanas.

Si fuera un manzana la que saco de la caja de manzanas y naranjas  entonces en la de manzanas hay naranjas y en la de naranjas hay manzanas y naranjas.



Nota: Lo mas probable esque se confundan con el razonamiento, yo tambien tuve esos problemas pero luego analice bien la situación y me di cuenta como estaba esto.
espero le entiendan.

1.¿Por qué no elegi los otros dos casos como respuesta?
R= Porque en los primeros dos casos hay 2 opciones en ambos y solo una opcion lleva a la respuesta y el tercer caso son 2 opciones y las dos llevan a la respuesta.

2.¿Por qué usé muchos colores?
Para diferenciar entre frutas, las verdes eran ambas (manzanas y naranjas).


Mi problema fué este

Problema Lógico


Es todo.

Notación Backus-Naur


La notación de Backus-Naur, es una metasintaxis usada para expresar gramáticas libres de contexto: es decir, una manera formal de describir lenguajes formales.

El BNF se utiliza extensamente como notación para las gramáticas de los lenguajes de programación de la computadora, de los sistemas de comando y de los protocolos de comunicación, así como una notación para representar partes de las gramáticas de la lengua natural (por ejemplo, el metro en la poesía de Venpa). La mayoría de los libros de textos para la teoría o la semántica del lenguaje de programación documentan el lenguaje de programación en BNF.


Una especificación de BNF es un sistema de reglas de derivación, escrito como:
 
<simbolo> ::= <expresión con símbolos>
donde es un no terminal, y la expresión consiste en secuencias de símbolos o secuencias separadas por la barra vertical, '|', indicando una opción, el conjunto es una posible substitución para el símbolo a la izquierda. Los símbolos que nunca aparecen en un lado izquierdo son terminales.


Otros ejemplos:

<dirección postal> ::= <nombre> <dirección> 
<apartado postal> 
 
<personal> ::= <primer nombre> | <inicial> "."
 
  • Un dirección postal consiste de un nombre, seguido por una dirección, seguida por un apartado postal.
  • Una parte "personal" consiste en un nombre o una inicial seguido(a) por un punto.

Bueno pues esto es algo de lo que se habló en la clase de lenguajes de programación, sobre las diferentes grámaticas entre los lenguajes. este formato se utiliza comunmente para describir la la sintaxis de los diferentes lenguajes usados en la computación,.




Fuentes:
http://es.wikipedia.org/wiki/Notaci%C3%B3n_de_Backus-Naur
http://www.worldlingo.com/ma/enwiki/es/Backus%E2%80%93Naur_Form
http://en.wikipedia.org/wiki/Backus%E2%80%93Naur_Form

Tutorial para descargar e instalar Algol (Algol68) (Extra Points)

Bueno, esta es mi segundo tutorial , ahora les mostraré los pasos a seguir para instalar el Algol68 (Para poder compilar el lenguaje Algol).

1. Primero entramos a este sitio web:


Algol 68


2. Ahora damos clic en el boton verde "Download now!"  , los redireccionará a otra pagina, esperen unos segundos e inmediatamente verán la opcion de descargar, bajamos el archivo  "algol68g-2.0.0.tgz" , y lo movemos a nuestro escritorio o Desktop,


Ahora que lo tenemos aquí damos clic con el botón derecho en el archivo y seleccionamos la opción  "Extraer aquí" o "Extract here" ,  se creará una carpeta en nuestro escritorio con el mismo nombre del archivo:


Ahora esa carpeta que se creó le cambiamos el nombre por uno mas corto, en mi caso lo dejé como "algol68" ,para acceder a ella mas facilmente por medio del terminal.

Ahora que tenemos la carpeta renombrada, abrimos el terminal y nos movemos hacia la carpeta, en este caso mi ruta fué:

cd Desktop
cd algol68

Ahora que estamos dentro de nuestra carpeta, por medio del terminal,
ejecutamos el comando siguiente

sudo ./configure 

y damos enter, empezará a mostrar datos en la pantalla, hasta llegar a un mensaje que dice algo asi como "make install" , y luego podremos volver a introducir comandos, nos quedara algo asi la pantalla:


Ahora tendremos que instalar la libreria "libncurses5-dev" (creo que es libreria) ,  es necesario para poder continuar la instalación.

Introducimos el siguiente comando:

sudo apt-get install libncurses5-dev

y empezará otra vez a descargar paquetes para instalarla. esto puede tardar algo de tiempo, unos 10 minutos, se paciente.

Luego que termine de descargar y podamos escribir comandos,ahora escribimos

primero

sudo install make 

y luego

sudo apt-get install make


Si te pregunta algo le dices que si. (S)

Empezará a instalar... esperamos un momento

Luego ya despues de haber hecho esto, si gustan abran otra nueva ventana en la terminal y vuelvan a moverse hacia la carpeta del escritorio:

cd Desktop
cd algol68

Ahora que estamos en la carpeta de algol68
vamos a ejecutar un ejemplo que está dentro de la carpeta,
escribimos el comando siguiente

./a68g demo/sierpinski.a68

y finalmente obtendremos la siguiente imagen:




Hay mas ejemplos dentro de la carpeta demo pero de este ultimo comando notemos algunas cosas

./a68g demo/sierpinski.a68


./a68g    =  Es lo se utilizaremos para compilar, pero recuerden estar dentro de la carpta de algol68, 

demo = Es una subcarpeta que está dentro de la carpeta algol68, pueden abrirla si gustan desde el explorador de ubuntu.


sierpinski.a68  =  Es el nombre del archivo que estamos ejecutando, en este caso se llama asi, tiene la extension .a68


y finalmente como resumen, pues , si quieren compilar algo, primero hacemos el codigo y luego lo metemos directamente a la carpeta algol68, luego nos desplazamos a la carpeta y ejecutariamos algo asi.


./a68g nombrearchivo.a68 


y ya podriamos ejecutar nuestro codigo.
 



Bueno eso es todo, esos fueron los pasos realizados en clase y los que seguí para hacer este tutorial.

Bueno es todo, espero que les sirva.

y espero recibir puntos :D , le dedique un buen ratito para hacer este tutorial y el anterior.

Tutorial para Instalar Fortran en Ubuntu (PUNTOS EXTRAS)

Bueno compañeros, esta es una entrada en donde les mostraré como instalar Gfortran,  para poder compilar codigos del lenguaje Fortran, en Ubuntu.

Los pasos a realizar, son los siguientes:


1. Abrimos la terminal de ubuntu:


2.Escribimos el comando siguiente y presionamos enter.

sudo apt-get install gfortran

3. Despues de haber hecho eso, aparecera informacion sobre la instalacion y te preguntara algo, tu contestas con la letra S y le das enter




 4. Luego de esto continuará la instalación , puede tardar entre 5 a 10 minutos a lo mucho, despues de la instalacion aparecera una pantalla como esta:



y te dejará seguir escribiendo comandos,

Nota: A mi me aparecia un error en initramfs-tools y en nvidia-current, esto puede que no te aparesca a ti, esto me aparecio por la falta de compatibilidad de ubuntu hacia mi tarjeta de gráficos, asi que lo que te aparesca despues de la instalación puede variar.



En este momento (cuando ya puedes seguir introduciendo comandos) , ya instalaste el Gfortran, ahora mostraré como compilar tus programas.


6. Utilizaré el código que está en esta página (La cual usamos en la clase)

http://www.scriptol.com/programming/fibonacci.php
 
En la parte del lenguaje fortran,  es la serie de fibonacci, para compilarlo lo tuve que dejar el código asi:


      I=35; K=I
      CALL F(I)
      PRINT *,K,'th Fibonacci number is',I
      STOP
      END PROGRAM

      SUBROUTINE F(I)
      DIMENSION A(I+1)
      A(1)=1; A(2)=1
      DO1J=3,I+1
      A(J)=A(J-1)+A(J-2)
1    CONTINUE
      I=A(I+1)
      RETURN
      END SUBROUTINE

Bueno pues ese codigo lo copian y pegan en emacs, y lo guardan como extensión .f  , yo lo guardé como codigo.f no olviden borrar las lineas rojas de arriba que salen cuando abres una ventana nueva en emacs, pues se puede interpretar como linea de codigo. Me refiero a estas lineas:


Las borran antes de guardar el codigo.


Ahora viene lo bueno,   despues de que guardamos nuestro archivo con extensión .f  ( lo puedes guardar en donde quieras, en mi ejemplo lo guarde en el escritorio), abrimos la terminal.

y si lo guardaste en tu escritorio o en desktop escribe el siguiente comando

cd Desktop

ahora te encuentras en desktop, osea, tu escritorio, luego escribes el siguiente comando:

gfortran codigo.f 

en la palabra codigo es el nombre de tu archivo, y como les mencioné , yo le puse codigo.f , luego de haber escrito eso notarás que en tu escritorio hay un archivo con el nombre de a.out.


Ahora escribes esto ya para compilar:

./a.out

y podrás ver el resultado

En la siguiente imagen verás lo que tienes que hacer:


y es todo, ahora te toca hacer a ti el resto.

Bueno fué todo, aun queda pendiente el segundo tutorial de como instalar el Algol,espero que esta guia les sirva, no solo para instalar el gfortran, si no también para saber como compilar un codigo de éste. Hice este tutorial orientado para los que talvez no sepan nada mucho de como usar ubuntu y/o los que faltaron ese dia de clases,es todo.




Descarga el ejemplo codigo.f (Clic en la carpeta)


Descarga

lunes, 18 de octubre de 2010

Tercera Presentación - DFS En Grafos

Presentacion 3 - DFS - Busqueda en Profundidad

Bueno pues aqui está mi presentacion sobre DFS en grafos y su pseudocodigo y con ejemplos.

Expondré el tema junto con mis compañeros Jurgen Martinez Sanchez y Gustavo Rafael.

Descarga:
 (Clic en la carpeta)

En Power Point


En PDF