Mostrando entradas con la etiqueta programación. Mostrar todas las entradas
Mostrando entradas con la etiqueta programación. Mostrar todas las entradas

jueves, mayo 09, 2013

El camino mas corto en un grafo no dirigido

En la actualidad los expertos indican que las bases de datos relacionales (modelo usado desde los años 80) están llegando a ciertos límites y nuevas tendencias están emergiendo, como las bases de datos NoSQL, producto de las necesidades de la Web, grandes volúmenes de datos (Big-Data), la computación en la nube, computación en paralelo (MapReduce), inteligencia de negocios (BI), machine learning muy útil en la minería de datos, entre otros.

Producto de un par de cursos interesantes en Coursera: Web Intelligence and Big Data e Introduction to Data Science he encontrado que muchas de las nuevas tendencias están basadas en teorías relativamente viejas, que parecían no tener un futuro muy marcado, ni amplio uso (al menos desde mi punto de vista personal tomando como base los trabajos y los proyectos en los que me ha tocado participar).

Una de estas teorías que tuve la oportunidad de conocer a nivel básico en la universidad, fue la teoría de grafos, la cual ahora se usa en las nuevas tendencias de bases de datos orientadas a grafos.

Al leer sobre este asunto, recordé que en la universidad realicé un proyecto relacionado con grafos, en conjunto con Marconi Poveda y Alam Romero para la clase de Matemáticas Discretas, razón por la cual me di a la tarea de desempolvar los archivos personales para compartir el programa y su código fuente, si le es útil a alguien allí está el link de descarga.


"GRAFOS 1.0  es un programa desarrollado en el lenguaje de programación Visual Basic 6.0; cuyo objetivo es resolver el problema de encontrar los caminos de menor peso entre todos los pares de vértices de un grafo no dirigido.

Presentado como proyecto de la clase de Matemáticas Discretas impartida por el profesor Ing. Marvin Castañeda en la Universidad Nacional de Ingeniería (UNI) de Managua, Nicaragua, y llevado a cabo por alumnos de segundo año de la carrera de Ingeniería en Computación durante el mes de Diciembre del 2002."





sábado, abril 09, 2011

Experiencias Intentando Aprender a Tocar Piano (I)

Experiencias Intentando Aprender a Tocar Piano (I)


Primero aclarar que no soy experto en piano, ni en música, en este primer artículo sobre el tema tan sólo quiero presentar mi poca experiencia y como he llegado a comprender algunas cosas sobre la música que me parecen interesantes para compartir, y por supuesto el artículo incluye un poco de matemáticas y otro poco de programación :-).

Creo que todos conocemos las notas musicales: Do, Re, Mi, Fa, Sol, La, Si. Así empezó todo hace mucho tiempo. Desde pequeño vemos en la televisión que en uno u otro programa las menciona sin ser necesariamente un programa que trate sobre música. Luego como 20 años después cuando ya tuve acceso a Internet y a las computadoras leí este artículo que explica sobre las notas musicales, Wikipedia.

Regresando al pasado, mientras estaba aún en secundaria llegó a mis manos un libro de la colección LIBROS DE ORO DEL SABER llamado MATEMÁTICAS edición de 1979, viejo pero considero que aún hoy día su contenido es excelente.

En dicho libro hay un capítulo llamado "Las Matemáticas y la Música", tremenda exposición en dos páginas con ilustraciones sobre como las vibraciones producen cada nota musical, inicia explicando que el número de vibraciones por segundo se llama frecuencia y se mide en Hertz. Luego explica la relación matemática de las frecuencias de cada nota en una escala musical escogiendo como base una cuerda que vibra 256 veces por segundo (o sea a 256 Hz) siendo esta la nota DO, y después de unos cuantos párrafos de explicación sobre notas dominantes, niveles y tónicas, todo se resume a lo siguiente:

Sea:

DO = 256 Hz

Entonces, la frecuencia correspondiente a las otras notas, en función del DO en la misma escala se puede calcular así:

RE = 9/8 del DO = 288 hz

MI = 81/64 veces el DO = 324 hz

FA = 171/128 veces el DO = 342 hz

SOL = 3/2 del DO = 384 hz

LA = 27/16 veces el DO = 432 hz

SI = 243/128 veces el DO = 486 hz

Y el siguiente DO:

DO2 = 2 veces el DO original = 512 hz

En el fondo todo está en relación a 3/2 para encontrar las notas dominantes. Para ampliar más al respecto puede leer: La música vista por un matemático. Hay algo también en la Wikipedia, o por supuesto el libro originalmente mencionado.


Fue interesante leer eso en su momento, pero yo no tenía teclado (piano), ni computadora para comprobarlo. Varios años después en la universidad, mientras estudiaba programación con lenguaje C, usando el famoso compilador Turbo C++ de Borland, por unos compañeros haciendo prácticas extraclase, llegué a conocer la función sound de la biblioteca dos.h, que super interesante, recibía como parámetro la frecuencia en la cual el speaker interno del CPU emitiría un sonido, inmediatamente recordé el artículo de frecuencias que había leído hace algún tiempo busqué el librito y cuando tuve tiempo hice mi experimento:

(Como dice un amigo: "En C todo se puede!")

#include<stdio.h>
#include<dos.h>


int main()
{
long int DO=256;

sound(DO);  // do
delay(600);

sound(9*DO/8);//re
delay(600);

sound(81*DO/64);//mi
delay(600);

sound(171*DO/128);//fa
delay(600);

sound(3*DO/2);//sol
delay(600);

sound(27*DO/16);//la
delay(600);

sound(243*DO/128);//si
delay(600);

sound(2*DO);//do
delay(600);
nosound();

return(0);

}

Para escribir este artículo fui a buscar a mi respaldo de la universidad el programa, y dado que esa versión del compilador prácticamente no se usa fue necesario hacer unos ajustes para compilarlo nuvamente en las versiones actuales de C para Windows, por si alguien lo desea probar aquí está:

#include <windows.h>

int main(int argc, char *argv[])
{
int DO=256;

Beep(DO, 600);
Beep(9*DO/8, 600);//re
Beep(81*DO/64, 600);//mi
Beep(171*DO/128, 600);//fa
Beep(3*DO/2, 600);//sol
Beep(27*DO/16, 600);//la
Beep(243*DO/128, 600);//si
Beep(2*DO, 600);//do

return 0;
}

/*
http://msdn.microsoft.com/en-us/library/ms679277.aspx
*/



(Probado con wxDev-C++).



Luego estuve trabajando en un piano, pero por tiempo nunca lo terminé, adjunto a continuación todo los fuentes mencionados quizás alguien lo termina:

Descargar fuentes.