Código fuente C y C++
Ejemplos
En esta sección iremos incluyendo ficheros fuente, de algunos problemas que nos hemos ido encontrando. Rebuscaremos en nuestras bibliotecas, e intentaremos incluir todo aquello que pueda ser de utilidad o que tenga alguna característica didáctica.
También incluímos aquí algunos programas que los colaboradores han ido enviándonos.
Intentaremos que los programas o funciones estén lo mejor documentadas posible, y explicaremos la necesidad que hizo surgir cada programa y la utilidad que pueda tener, así como sus limitaciones y fallos.
Temas
Los programas y enlaces están clasificados por temas, elige el tema que prefieras del menú de la derecha.
- Cambio de bases por Luis Abalos 26-6-01
- Código de algoritmos genéticos I por Milton Osses Castro
- Código de algoritmos genéticos II por Milton Osses Castro
- El camino más corto por Salvador Pozo
- NewBur por Manasés Jesús Galindo Bello
Cambio de bases Luis Abalos 26-6-01 (2001-08-13)
"Este es un programa de cambio de bases que incorporo porque lo considero bastante interesante. Permite cambiar de base 2 a base 32. El funcionamiento del mismo, es introducir una base de destino y una base final en la que se calculara el numero. Permite operar con letras, que van apareciendo en cada base (mayusculas), y tiene controles de errores, aunque hay uno que no esta terminado que es para el caso de que se introduzca un número con cifras de más. Faltan algunos controles. Si pudiera reducir algo más el código me sería muy útil. Lo mando por si alguien está interesado. Está hecho en BorlandC para C."
Detalles
- binario.cpp: 13/08/2001 (16.311 bytes)
Código de algoritmos genéticos I Milton Osses Castro (2001-06-06)
Sobre costo mínimo de una ruta especifica con grafica.
Detalles
- Genet.cpp 06/06/2001 (2.802 bytes)
Código de algoritmos genéticos II Milton Osses Castro (2001-06-06)
Árbol de expansion mínima de una ruta específica (Genetico.cpp)
Detalles
- Genetico.cpp 06/06/2001 (10.968 bytes)
El camino más corto Salvador Pozo (2000-08-10)
El problema consiste en trazar la ruta más corta posible que pase por un número indeterminado de puntos. Además los puntos de partida y final son fijos y las distancias entre los puntos deberán ser introducidas.
Por mi parte he introducido algunos límites, aunque no demasiado rígidos:
- Dentro de la ruta no puede pasarse dos veces por la misma ciudad.
Esta es una limitación arbitraria, ya que cada uno es muy libre de hacer las excursiones como quiera, de hecho, si para hacer la ruta A->B->C, es más corto hacer A->C->B->C, yo al menos lo haría.
Si parece que este caso es muy poco probable, basta con imaginar que no existe carretera entre A y B, y que el único camino para ir de A a B es pasar por C.
En nuestro ejemplo, cuando introduzcamos las distancias entre los puntos no pondremos una distancia infinita entre A y B, sino que pondremos la distancia de A a B pasando por C. De este modo el funcionamiento es lógico y no se contradice el enunciado. - Se usa una función recursiva, es la técnica más potente y eficaz, (al menos que yo conozca), para generar todas las permutaciones posibles de un conjunto de elementos.
- Para mantener la claridad del programa se llamará a los puntos A, B, C...,
esto limita su número máximo a 26, que son las letras que tenemos. De todos
modos el programa es fácil de modificar para incluir más puntos, pero es dudoso
que alguien esté dispuesto a introducir las 325 distancias para 26 puntos.
Para 100 puntos son casi 5000 distancias. Y esto no es lo peor, ya que el tiempo de ejecución también crece rápidamente.
El programa es fácil de modificar para hacer que los puntos de partida y destino no estén impuestos.
Me parece que es un buen ejemplo de programación de funciones recursivas.
Detalles
- ruta.c 10/08/2000 (6.640 bytes)
NewBur Manasés Jesús Galindo Bello (2003-06-20)
Este es el método de la burbuja con una optimización que revisa si hay elementos ordenados, lo que ahorra comparaciones y número de vueltas a los ciclos.
Utiliza arreglos con una constante (MAX) que indica el número máximo de números a ordenar.
Detalles
- NewBur.cpp 20/06/2003 (1.450 bytes)