28 febrero 2008

Jugando con tablas normalizadas y SQL

El otro día estábamos jugando a crear tablas normalizadas e instrucciones SQL y lo que resultó fue un ejemplo de diseñar tablas normalizadas (escribí algo acerca de la normalización de bases de datos que puedes leer aquí) y el uso de instrucciones SQL para usarlas. Por esta razón, publico aquí el ejercicio y la mejor solución que surgió esperando que te sea útil.

Antes que nada, este es el problema planteado:

Crear las tablas necesarias para almacenar los datos que necesita una tienda de autoservicio. El programa es de punto de venta, que controlará el inventario de producto, clientes que han solicitado facturas, recibos (ventas) y facturas.

Los datos (mínimos) que se tienen que almacenar son:
  • IdProducto – Número que identifica de manera única cada producto
  • Descripcion – Descripción del producto
  • PrecioCompra – El precio al que te venden el producto.
  • Min – Cantidad mínima que necesitas tener en el almacén. Si llegas a este valor, es necesario hacer otro pedido.
  • Max – Cantidad máxima que puedes almacenar de un producto.
  • Cantidad – Cantidad de producto que tienes actualmente.
  • PrecioVenta – Precio al que vendes el producto.
  • Proveedor – Nombre del proveedor que te surte un producto.
  • Tel – Teléfono del proveedor.
  • EMail – I-Meil del proveedor.
  • Cliente – Nombre del cliente.
  • RFC – del cliente.
  • Domicilio – del cliente.
  • CP – Código postal del cliente.
  • FechaVenta – Fecha en que se hizo la venta.
  • NoRecibo – El número que identifica un recibo.
  • NoFactura – Número de factura que se hizo de un recibo (si es que se hizo una fectura de ese recibo).
Ten en cuenta algunas de las funciones que tendrá el programa:
  • Emite recibos: almacena el número de recibo, la fecha en que se hizo la venta, la lista de productos que se vendieron (producto, cantidad, precio del producto ) y el número de factura, si es que el usuario solicitó una factura de este recibo.
  • Control de inventario: conforme se vayan vendiendo productos en la tienda, se va a ir ajustando la cantidad que se tiene en el almacén. Cuando llegue al tope mínimo, deberá mandar un aviso para que hagan un pedido de ese material y que el pedido (más lo que se tiene) no supere el límite máximo.
  • Facturación: que lleve un registro de las facturas que se emitieron. Se tiene que registrar que factura corresponde a qué recibo y a qué cliente.
  • Reportes: se necesitarán reportes de existencias en inventario, de lo que se ha vendido (reportes financieros) y uno que otro más.
Además de esto, debes guardar instrucciones SQL que hagan lo siguiente:

1. Los productos que se tienen en inventario (descripción, cantidad en inventario, precio compra y precio de venta, ordenado por la descripción).

2. La lista de los clientes (RFC, Nombre, Apellidos y Teléfono, ordenado por apellido paterno, luego por apellido materno y luego por nombre).

3. Nombres de todos los clientes cuyo apellido paterno comience con “Men” o su RFC contenga la cadena “2011”.

4. Listado de todos los recibos que contengan el producto 2 o el 9 y que se hayan comprado en el mes de septiembre de cualquier año.

5. Listado de todos los productos que contengan la cadena “coca”, “sprite” o “fanta” en la descripción. Ordénalos por descripción de forma descendente y luego por precio de venta.

6. Dar de alta un recibo de compra: número de recibo, fecha y 10 artículos que compró.

Este es el problema. Ahora la onda es ver cómo solucionarlo. Comencemos por el diseño de las tablas. No voy a hacer un repaso de las formas normales (que, como dije antes, puedes ver aquí), pero solo escribir como quedarían. Pongo un signo # antes del campo que sería la llave primaria de la tabla.

Tabla: Productos
Aquí se guardan los datos de los productos
#IdProducto
Descripcion
Min
Max
Cant
PrecioCompra
PrecioVenta
IdProveedor
(esto lo pongo solamente si cada producto tiene un solo proveedor. si no hay que hacer otra tabla que ilustro más adelante en la tabla ProveedorProducto)

Tabla: Proveedores
Aquí se guardan los datos de los proveedores
#IdProveedor
Nombre
Tel
EMail


Tabla: Clientes
Aquí se guardan los datos de los clientes
#RFC
Nombre
ApellidoP
ApellidoM
Domicilio
CP


Tabla: Recibos
Aquí se guardan los datos generales de los recibos y facturas, si la han hecho de este recibo
#NoRecibo
Fecha
NoFactura
(en caso que no haya factura de este recibo, este campo tiene 0 y el que sigue no le pongo valor, es nulo) RFCCliente

Tabla: ReciboProducto
Aquí se guardan los productos que se compraron en cada recibo
#NoRecibo
#NoProducto
Cant
Precio


Tabla: ProveedorProducto
En caso de que más de un proveedor puede proveer un producto, aquí se guarda quien provee qué
#IdProveedor
#IdProducto


Ahora van las instrucciones SQL. Como las consultas van enumeradas, voy a poner primero el numero y en el siguiente renglón la instrucción SQL correspondiente:

1.
SELECT Descripcion,Cant,PrecioCompra,PrecioVenta
FROM Productos
ORDER BY Descripcion


2.
SELECT RFC,Nombre,ApP,ApM,Tel
FROM Clientes
ORDER BY ApP,ApM,Nombre


3.
SELECT RFC,Nombre,ApP,ApM
FROM Clientes
WHERE ApP LIKE "Men*" OR RFC LIKE "*2011*"


4.
SELECT DISTINCT NoRec
FROM ReciboProducto
WHERE NoProd=2 OR NoProd=9


5.
SELECT Descripcion
FROM Productos
WHERE Descripcion LIKE "*coca*" OR Descripcion LIKE "*sprite*" OR Descripcion LIKE "*fanta*" ORDER BY Descripcion DESC,PrecioVenta


6.
En primer lugar, inserto los datos generales a la tabla Recibos. Como puedes ver, estoy omitiendo la información de la factura:
INSERT INTO Recibos (NoRec,Fecha) VALUES (1,"28/Feb/08")

Ahora todos estos dan de alta los 10 productos que ampara este recibo (en nuestor caos, el recibo número 1):
INSERT INTO ReciboProducto (NoRec,NoProd,Cant,Precio) VALUES (1,1,5,3.5)
INSERT INTO ReciboProducto (NoRec,NoProd,Cant,Precio) VALUES (1,3,1,13)
INSERT INTO ReciboProducto (NoRec,NoProd,Cant,Precio) VALUES (1,9,1,25.95)
INSERT INTO ReciboProducto (NoRec,NoProd,Cant,Precio) VALUES (1,25,1,14.5)
INSERT INTO ReciboProducto (NoRec,NoProd,Cant,Precio) VALUES (1,7,2,3.75)
INSERT INTO ReciboProducto (NoRec,NoProd,Cant,Precio) VALUES (1,2,1,5)
INSERT INTO ReciboProducto (NoRec,NoProd,Cant,Precio) VALUES (1,10,1,4)
INSERT INTO ReciboProducto (NoRec,NoProd,Cant,Precio) VALUES (1,13,2,8.5)
INSERT INTO ReciboProducto (NoRec,NoProd,Cant,Precio) VALUES (1,7,1,50)
INSERT INTO ReciboProducto (NoRec,NoProd,Cant,Precio) VALUES (1,24,3,30)


Espero que esto te ayude. Si no te queda claro, no dudes en dejar un mensaje. ¡Hasta la próxima!

22 febrero 2008

Escuchando música con pocos recursos


Escuchar MP3 en la computadora es una parte de nuestra vida diaria. Sin embargo, la mayoría de los reproductores son muy pesados y consumen muchos recursos de la computadora al ejecutarse. Por ejemplo, el archivo de instalación de iTunes (que yo solo lo tengo para poder sincronizar mi iPod shuffle), ocupa más de 65 MB, el Windows Media Player tarda muchísimo en abrir, y hasta el WinAmp, que era mi favorito por gratis, pequeño y fácil de usar, ya se ha vuelto más grande y me ha comenzado a dar lata.

El otro día, mientras vagaba por el internet, me topé con un artículo en un blog que de vez en cuando visito, Infoserranía, que recomendaba el AIMP2, un reproductor de MP3 que no es muy grande y se ejecuta rápido.

La página "oficial", www.aimp.ru, está en ruso pero tiene un botoncito que dice "EN" para que vean una parte en inglés (aunque todavía quedan muchos letreros en ruso). De allí lo puedes bajar.

Se los recomiendo. ¡Disfruta tu música!

19 febrero 2008

Dreamweaver: Sepultado entre capas

Las capas son elementos que te pueden ayudar mucho en diseñar una página güev son las capas. Las capas son cuadros que puedes poner en cualquier parte de tu página que puede contener cosas (como imágenes, texto, tablas, animaciones flash, etc.), similar a los cuadros de texto de Microsoft Word, pero más interesantes (digo, en Word no puedes meter una animación de flash y que se vea de forma decente). Las capas se pueden ocultar, mostrar o encimarse entre ellos, lo cual te da grandes posibilidades de diseño que solo son limitados por tu imaginación (bueno, tal vez seas demasiado imaginativo, pero ese es otro rollo).

Aquí te explicaré lo mejor que pueda la manera de incluir capas en tu página. Para empezar, haz clic en el menú Insert, luego Layout object y luego Layer, como puedes ver en esta imagen:


Al tener esto, aparece la capa dibujada sobre la página como se ve aquí:


Puedo manipular la posición o el tamaño de la capa se hace arrastrando el cuadrito que está sobre la esquina superior izquierda de la capa (para mover la capa) o arrastrando los cuadritos azules que están alrededor de la capa (para cambiar su tamaño). En la siguiente imagen puse el cursor del mouse sobre el cuadro y me marcó sus propiedades. También puedes ver los cuadritos azules que te permiten cambiar el tamaño.


Aquí hay un ejemplo de esta capa con texto y una imagen adentro. Para hacerlo, simplemente haz clic adentro de la capa y comienza a escribir o insertar imagen o lo que sea, tal y como lo harías en la página:


Cuando se tienen muchas capas en un mismo documento, se pueden seleccionar de manera más sencilla usando el panel Layers que está en el menú Window y luego Layers como puedes ver en esta figura:


Cuando lo seleccionas aparece una palomita a un lado indicando que el panel está visible (o sea que si no lo ves, saca tus lentes o acércate al monitor). El panel se ve así:


En este caso, solo se ve una capa (el Layer1) porque solo he incluido una capa en la página. Si tuviera más capas, desde aquí puedo decir el orden en que aparecen.

Siguiendo con la onda capeada pero pasando a otras cosas, Así se ve el inspector de propiedades cuando tienes una capa seleccionada. Voy a tratar de describir lo que hace cada parte, pero primero, ahi va la imagen:

  1. El nombre de la capa. Por default se llama Layer1, Layer2, etc.
  2. Posición de la capa. Es el número de pixeles desde la izquierda (Left) y desde la parte superior (Top) de la página y la esquina superior izquierda de la capa.
  3. El ancho (Width) y alto (Height) de la página.
  4. Es el orden en que se ponen las capas en el documento. Determina cual va enfrente y cual atrás.
  5. Indica la visibilidad inicial de la capa. Puede ser de 4 tipos: default, dará visibilidad según lo que crea conveniente el navegador, inherit muestra la capa mientras se la página sea visible, visible muestra la capa independientemente si la página se esté mostrando o no, y hidden es una capa oculta.
  6. Se encarga de controlar la manera en que aparecen las capas en el navegador cuando el contenido sea más grande de lo que cabe en la capa. Hay cuatro tipos: visible le dice que el contenido extra aparece en la capa, hidden que oculta el contenido "sobrante", scroll le permite al usuario moverse en la capa usando barras de scroll, auto hace que el navegador muestre las barra de scroll solo cuando se necesiten.
Espero que esto les aclare dudas y sirva de referencia. Si tienes dudas, déjame un mensaje. ¡Hasta la próxima!

17 febrero 2008

Arreglando arreglos

Una manera que es muy conveniente almacenar datos en la memoria son los arreglos. Un arreglo (conocido como array entre los gringos) es un grupo consecutivo de localidades de memoria que tienen el mismo nombre y el mismo tipo. Estos son muy útiles cuando trabajas con muchos datos que lógicamente deberían ir juntos, como pueden ser las edades de todos los que están en tu salón de clases.

Hablando de edades, hice un pequeño programa que trabaja con edades de 10 personas. Vienen funciones que lo hacen de dos maneras diferentes: con arreglos y sin arreglos. En este mensaje les comparto como funciona. Por si quieres, los archivos del proyecto los puedes bajar aquí (vienen comprimidas en formato RAR, así que necesitarás el programa WinRAR para poder accesarlos). Sin más rollo, vamos a ver el programa.

Para empezar, esta es la interfaz de mi programa. Alrededor escribí los nombres que le dí a cada control (la propiedad Name de cada control).


De lado izquierdo tengo 3 botones que llenan un arreglo de 10 elementos (le pido los datos al usuario mediante un InputBox). Después hay otros dos botones, uno que calcula el promedio de las edades y el otro que encuentra la edad mayor y la menor. Hay que recordar que si el usuario no ha dado de alta las edades en el arreglo, no puede calcular promedios ni mínimos ni máximos, así que los botones btnPromArreglos y btnMinMaxArr los deshabilito para que el usuario no tenga acceso a ellos hasta que el usuario dé de alta las edades (esto se hace poniéndole el valor de False a la propiedad Enabled de los botones).

Del lado derecho de la ventana dibujé otros 3 botones que realizan las mismas fucnioens que ya describí, solo que no usan arreglos. Los puse simplemente para ilustrar la gran diferencia.

Ahora vamos a la programadera. Para empezar, estas son las variables que declaro en el programa para almacenar las edades. Como podrás observar, con arreglos solo tengo que declarar una variable, sin embargo tengo que declarar 10 si no uso arreglos.


Una cosa que ahorra tiempo y código cuando se trabaja con arreglos es que, como están en posiciones adyacentes y se hace referencia a cada elemento por medio de un número que va desde 0 hasta el número de elementos menos uno, puedo usar ciclos (particularmente el ciclo For es muy útil) para recorrerlo. Esto hago en el procedimiento que pide las edades y las almacena en el arreglo Edades. Al final de todo, habilito los botones que calculan el promedio y el mínimo y máximo.


Hacer lo mismo sin arreglos cuesta un poco más de trabajo porque tengo que escribir 10 líneas de código. Se ve así:


Calcular el mínimo y máximo de todos los datos del arreglo es fácil. Primero declaro dos variables donde voy a guardar el dato más pequeño y el más grande (en este caso los nombré Min y Max). Luego inicializo los valores mínimos y máximos para que sean igual que lo que tiene el primer elemento del arreglo, el que está en la posición 0. Después recorro el resto de los elementos (desde la 1 hasta la 9) y si encuentro que un valor es menor a lo que tengo en Min, a Min le asigno el valor más pequeño. Lo mismo hago con Max, si el valor del elemento que estoy revisando es mayor a lo que tiene Max, a Max le asigno el valor del elemento. Cuando termino de esto, muestro los resultados en un MsgBox. El código con arreglos se ve así:


Sin arreglos se complica un poco la cosa. El código se vería así:


Calcular el promedio es fácil. Por si no recuerdas, solo se tienen que sumar todos los elementos y dividir el total entre el número de elementos. En nuestro caso, son 10 elementos.

Al usar arreglos, declaro una variable Prom que va a acumular la suma de todos los elementos. Esto lo hago en un ciclo For. Al terminar de calcular la suma, divido el valor entre 10 y despliego el resultado al usuario con otro MsgBox. Aquí está el código:


Sin arreglos, tengo que hacer la suma y división escribiendo todos los elementos. En este caso, como son solo 10 edades, parece menos código. Pero imagínate que de pronto te dicen que son 100 edades, con arreglos simplemente cambio el ciclo For para que en lugar de ir hasta el elemento 9, le siga hasta la 99 y en lugar de dividir la suma entre 10, lo divido entre 100. Sin arreglos tengo que escribir otras 90 variables para hacer lo mismo. El código se ve así:


Lo que falta es lo más sencillo: la función que exita del programa (entendiendo exitar como acción y efecto de ir hacia el Exit). Como está muy claro, solo pongo el código:


Con esto termino en esta ocasión. Si tienes dudas, no dudes (valga la redundancia) en dejar un comentario o mandarme un I-Meil. ¡Hasta la próxima!

14 febrero 2008

¿Con qué dibujo?

En esta vida, si quieres realizar cualquier trabajo, necesitas contar con la herramienta adecuada. Mi papá, experto en fontanería, carpintería, y casi cualquier cosa que termine con "ía", era fan de tener la herramienta exacta para el trabajo que se necesitaba: no era del tipo de cuates que, a falta de una llave inglesa usarían unas pinzas porque tardaría más y probablemente maltrataría la pieza que estaba manipulando. Lo mismo sucede con cualquier software: necesitas la herramienta adecuada para poder hacer un buen trabajo. Es por esto que en esta ocasión, hice una lista y muy breve comentario de todas las diferentes herramientas que tiene Photoshop CS2. Aunque ya hay en el mercado una versión más chida, la CS3 (la cual cuenta con estas herramientas y agrega uno que otro más), con estas herramientas puedes hacer todo lo que te puedas imaginar en el mundo de la imagen digital. Sin más preámbulo, comencemos entonces. Antes que nada, en esta imagen te presento la barra de herramientas de Photoshop. Ahora va un comentario sucinto sobre cada uno de ellos. Antes de arrancar, quiero que sepas que cada herramienta se puede seleccionar presionando una tecla, misma que escribí entre paréntesis a un lado de cada herramienta. Ahora sí, voy a apostillar: Con estas herramientas crear seleccionar de diferentes formas: rectangular, huevoide (bueno, elíptico), una sola fila (un pixel de alto) o una sola columna (1 pixel de ancho). En lo personal, con mi poca experiencia en el diseño, jamás he usado el que selecciona una fila o una columna, pero si existe es que hay quienes lo han necesitado (han requerido esa herramienta precisa para ciertos trabajos). En fin, mejor sigamos con la siguiente herramienta: La herramienta mover sirve para mover capas de un lado a otro (luego platicaremos de las capas, no se preocupen) o lo que está seleccionado, ya sea dentro de una imagen o entre imágenes. Estas herramientas también son para seleccionar partes de una capa. El primero selecciona todo lo que está dentro de un área trazado con tu mouse y tu buen pulso. El segundo crea selecciones poligonales y el tercero ajusta las selecciones hechas a mano alzada. La varita mágica es útil para seleccionar partes adyacentes de una capa que tienen el mismo color. Se puede establecer cierta tolerancia para que sepa que tan parecidos deben ser los colores que va a seleccionar. La herramienta recortar te permite dibujar un rectángulo con el nuevo tamaño de la imagen: todo lo que esté dentro de ese rectángulo se quedará y lo demás será deshechado. Puedes recortar una imagen en varias "rebanadas" (slice), los cuales son áreas rectangulares. Esto es útil para imágenes de ciertos sitios web, donde cada rebanada hace o dice algo diferente o simplemente para que cargue más rápido la imagen. La primera herramienta permite hacer las rebanadas y la segunda te permite seleccionar una rebanada para luego hacer algo con él. Estas herramientas me permiten corregir errores de diversos tipos y de diferentes maneras, como lo explica la imagen. Estas herramientas son de dibujo a mano alzada (o sea por donde arrastres el mouse, por allí "se pinta"). La diferencia entre la brocha y el lápiz es que la brocha puedes seleccionar una punta diferente con la que quieras pintar (o sea en forma de círculo, pasto, estrellitas, cuadrado, etc.) y el lápiz solo puedes establecer el grueso de la línea. La primera copia el color de un lugar de la imagen a otra y la segunda copia un patrón de de color de un lado a otro. Esta herramienta pinta un estado de la historia (luego hablaremos de la historia de un documento de Photoshop) o un snapshot usando una brocha (con todos los efectos que te permite realizar una brocha). Borrar implica sustituir el color que se está viendo (forecolor) por el de fondo (backcolor). La diferencia con el que borra el fondo es que éste último cambia por transparencia. El "mágico" permite borrar cosas del mismo color con un solo clic. Estas herramientas permiten rellenar una figura, ya sea de un color sólido o con un degradado (que un color va desapareciendo mientras que otro aparece). Estas herramientas me permiten hacer que una parte de la imagen se vea más borrosa, o enfatizarla un poco o bien mezclar colores como si embarraras pintura de un lado a otro. Estas herramientas permiten hacer pixeles más claros, más oscuros o saturarlos de color. Estas herramientas permiten trabajar con rutas ("caminitos" por donde se dibujan líneas), seleccionando y alterando los nodos que las componen (haz de cuenta que una ruta es como esos dibujos de "une los puntos": los puntos son los nodos y el resultado de todas las líneas trazadas es la ruta). Estas herramientas me permiten dibujar texto. Incluye la manera de hacer una selección en forma del texto. Esto es muy útil cuando quieres escribir algo, pero que el relleno sea sacada de una foto o algo por el estilo. Luego jugamos con él. Estas herramientas hacen una función similar que el lápiz, pero de manera diferente. Mientras que con el lápiz o brocha se dibujaba según donde pasara el mouse, aquí uno da clic sobre los lugares donde quieres colocar nodos de una ruta y Photoshop automáticamente la completa con la línea requerida. El de dibujo a mano alzada es muy similar al lápiz, solo que con este dibujas la línea y Photoshop pone los nodos. Se pueden agregar o quitar nodos a una ruta (recuerda que manipulando los nodos puedo modificar una ruta) o cambiar un nodo recto para que tenga curva o viceversa. Estos permiten dibujar diferentes figuras geométricas. Estas te permiten escribir comentarios sobre tu dibujo (cosa que no aparece sobre la imagen de forma definitiva, pero que sin embargo existen para ser consultados por el diseñador) ya sea en forma de texto o en audio. Estas herramientas permiten seleccionar un color que tienes pintado en otro lado, ya sea dentro de la imagen o en otro archivo abierto, pedazo de una ventana o lo que sea. La "mano pachona" solo sirve para desplazarse dentro de una imagen. Haz de cuenta que cuando presionas el botón del mouse es como si encajaras las uñas a la imagen y para donde muevas tu mano se recorre el papel. Si quieres evitar tener que seleccionar esta herramienta, mientras tengas seleccionada casi cualquier herramienta presiona la barra espaciadora y manténla presionada mientras te mueves. Cuando quieres regresar a tu herramienta, suelta la barra y sé feliz. Esta herramienta es clásica: te acercas y alejas en la imágen. Conocido también como el Zoom. Con esto termino con las herramientas. Hay todavía mucho por explorar y con qué jugar. Ya lo iremos viendo más adelante. ¡Hasta la próxima!

10 febrero 2008

¿Cómo funcionan las funciones?

Hace muchos años, el emperador Julio César, dijo "divide et vinces" (divide y vencerás) al referirse a su estrategia militar para adueñarse de un territorio. Poco se sospechaba que, en plena era de la informática, iba a ser una frase que inspiraría a programadores por doquier. Cuando los programadores nos enfrentamos a un problemononón, es mejor dividirlo en problemas más pequeños más sencillos de resolver. Más fácil. Y algo que facilita la destrozadera de problemotas en problemitas son las funciones y procedimientos.

Las funciones y procedimientos son pedazos de código que se pueden ejecutar dentro de un programa. Son muy útiles para ahorrarte escribir código que se repite mucho y para dividir un programa en problemas más sencillos.

En este video, hago una aplicación en Windows usando Visual Basic 6.0, que calcula la velocidad en base a dos datos dados por el usuario. También aproveché para hablar de algunas propiedades de algunos controles. El video lo puedes ver aquí abajo o en YouTube aquí. También lo puedes bajar en formato SWF de muy buena calidad aquí. Los archivos del proyecto también los puedes bajar aquí.

Si quedaron dudas, no dudes en dejar un comentario. ¡Hasta la próxima!


08 febrero 2008

La cara bonita de Photoshop

Aquí les dejo un pequeño video que muestra las partes principales de la ventana de Photoshop CS2. Ya sé que es algo sencillo, pero más adelante platicaré acerca de las herramientas, efectos y otras ondas.

Por lo pronto, aquí les dejo este video (puedes bajarlo en formato SWF aquí). Si lo se ve la ventana de YouTube aquí abajo, puedes ver el video aquí.

¡Hasta la próxima!

01 febrero 2008

¡Se acerca la Olimpiada de Informática!

Así es. Se acerca la OMIJAL, Olimpiada de Informática en la fase estatal. Como sabrán, hay premios muy interesantes (si no me la creen, fíjense en todos los patrocinadores). Hay varias categorías para que todo el mundo se pueda divertir (con la novedad que este año también van a incluir una categoría para universitarios patrocinada por Intel).

La olimpiada consta de 3 etapas:
  • Examen lógico (problemitas de lógica matemática). Esta consta de un examen que se llevará a cabo el 9/Feb/08 a las 9:30am en el auditorio Pedro Arrupe del ITESO (aquí está el mapa del ITESO pa' que te ubiques).
  • Examen de Karel. Karel es un pequeño robot que recibe instrucciones muy simples. Si quieres saber más acerca de Karel, aquí hay una explicación que escribí hace tiempo. Aquí puedes ver todos los temas (ejercicios, principalmente) que he escrito acerca de Karel. Este examen va a ser el 8/Mar/08 en el salón general T120/121 del Edificio de Tecnologías de Información.
  • Examen de C/C++. El lenguaje C (y C++) es muy usado y es excelente para resolver problemas. El examen va a ser el 5/Abr/08 también en el ITESO (todavía no confirman el salón, pero probablemente será en el edificio T).

Están ofreciendo cursos gratis de Karel y C para aquellos que lleguen al examen lógico el 9/Feb. Aquí les dejo la convocatoria. Ojalá se animen. Se va a poner bueno. (Y si se ganan un premio, se mochan, jaja). Si tienes cualquier duda, pónte en contacto con Fernando y los chavos de la OMIJAL en su página en www.omijal.org.mx


¡Saludos!

El Tony y sus ondas...

Related Posts Plugin for WordPress, Blogger...