Mostrando las entradas con la etiqueta Fuckultad. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Fuckultad. Mostrar todas las entradas

viernes, 5 de octubre de 2007

/axioma de FingYou!



"Las dos formas mas comunes de demostrar proposiciones en el análisis de estructuras de datos son la inducción y la contradicción o reducción al absurdo (y en ocasiones la demostración por intimidación, sólo por parte de los profesores)".

Estructura de datos y algoritmos - Mark Allen Weiss (capítulo 1 - Introducción)






miércoles, 12 de setiembre de 2007

/actividades universitarias (para todos)



Reconozco que debí postearlo antes (pero no pude), igual están a tiempo.
El desparejo boletín del CEI a veces tiene novedades interesantes, rescato estas dos:


Día del Software Libre
El Software Freedom Day es un esfuerzo global para mostrar al público la importancia, virtudes y disponibilidad del Software Libre y de Codigo Abierto. Equipos locales alrededor del mundo organizan eventos el tercer sábado de Septiembre. El último evento involucró más de 200 equipos de todo el mundo.
Este año se realizará en Uruguay, el día sábado 15 de setiembre, de 10:00 a 18:00 hs, en la Facultad de Ingeniería de la Universidad de la República. El evento es organizado por integrantes del portal Comunidad (www.comunidad.org.uy). Habrá una serie de charlas (sin cronograma aún), demostraciones varias, copiado de distribuciones de GNU/Linux, etc.

Pacifista Iraquí en Montevideo
Se encuentra en Uruguay Sami Rasouli, militante iraquí que lucha por medios pacíficos contra la ocupación de Irak. Se trata de alguien que podrá contarnos una experiencia de primera mano de la realidad iraquí, no recibimos todos los días a alguien que está jugándosela en el terreno, en este caso en Nadjaf, y que además lo hace en las condiciones y con la convicción y el coraje de este compañero.
En particular el CDC ha resuelto recibir algunos estudiantes iraquíes para que sigan sus estudios universitarios acá en la UdelaR.

Se han organizado las siguientes actividades:

1.- domingo 2, de mañana, en el encuentro de estudiantes de ingenieria.
2.- martes 3, 19.30 hrs, charla en ciencias sociales.
3.- miercoles 5, 19 hrs. Charla en el centro universitario de Paysandú.
4.- jueves 6, 18.30 hrs. Charla en facultad de Ciencias.
5.- martes 11, 19 hrs. Charla en Fundacion Vivian Trias.
6.- miercoles 12, 19 hrs. Charla en Humanidades.
7.- Jueves 13. 19 hrs. Charla en el paraninfo.







domingo, 2 de setiembre de 2007

/punteros por referencia en C/C++



Tanto C++, C#, Java, Delphi estaba olvidada de ciertos detalles de C (los que me vi obligada a refrescar). No es ningun cool trick, pero son esos detalles tontos que pueden llevarnos a depurar un buen rato, sobre todo si no tenemos un buen día o estamos cansados.
Esto es un apunte rápido que se basa en un ejemplo real, concreto, y por ende, espero que sea mas claro, que comento porque son errores (o distracciones) mas comunes de lo que uno pensaría. Quizás escribiéndolo no lo olvide, y quizás para quienes se encuentren enfrentando estos lenguajes, los ayude.

Para el árbol mencionado en este post, debía leer el árbol por niveles y cargar los hermanos que cumplieran cierto criterio.


La función es esta:

Lista* menorHermano(Arbol* arbol)
{
Lista* listaNros = listaVacia();
int cantHijos = arbolCantHijos(arbol);

recorreArbol(arbol,cantHijos,listaNros);

return (listaNros);
}
El cabezal de menorHermano estaba fijo, debía retornar una lista formada por los nodos de los diferentes niveles del arbol.

También estaba fijo el cabezal de la función Lista* listaAgregar(int dato, Lista* cola), es más, de Lista solo tenía el .o, y el .h.
Esa era la única biblioteca de la que disponía y debía usar.

La función listaAgregar realiza un insert front, y es llamada dentro de la función recursiva que recorre el árbol. La función recursiva es:
static void recorreArbol(Arbol* arbol, int cantHijos, Lista* &l)

Mi error estuvo en olvidar en pasar por referencia la Lista: el parámetro l que es el que apunta a la lista formada, o que se va formando en cada llamada recursiva.
Ese olvido provocó que al llamar recursivamente la función, el puntero al primer elemento de la lista, no se actualizara. El puntero al primer elemento de la lista siempre tenía el mismo valor, con el cual se llama a recorrerArbol por primera vez (NULL en mi caso).


Finalizado el recorrido quería leer la lista, y resulta que no tenía elementos, y claro, imposible, las inserciones se 'perdieron', porque el puntero al primer elemento nunca se actualizó.

Para evitar eso, debí pasar el puntero a la lista por referencia, ya que al insertar un elemento en la misma, y por tratarse de un insert front, la dirección del primer nodo cambia inserción tras inserción. Y si el puntero no se pasa por referencia, no se modifica.

En C:
static void recorreArbol(Arbol* arbol, int cantHijos, Lista**l)
Se invoca:
recorreArbol(arbol,cantHijos,&l)

En C++:
static void recorreArbol(Arbol* arbol, int cantHijos, Lista**l)
Se invoca:
recorreArbol(arbol,cantHijos,l)












/leyendo (recursivamente) con fscanf




El 29/08 escribía este post sobre mis problemas para entender fscanf. No es que haya sacado mucho mas en limpio, pero a ensayo y error y leyendo algun que otro man, pude entender al menos lo necesario para resolver el problema.
En general la información o es mas bien críptica o demasiado trivial, por eso dejo un ejemplo concreto, otro más.

La solución fue recursiva nomás. La única restricción es que debía ser llamada dentro de otra función a la cual hay que respetarle el cabezal o su firma.

Para recordar, el formato del archivo a leer es de este tipo:
(Ar 3 (C 2 (d 5) (F 6))(juan 4 )(Ale 5 (Ana 3)))
Entre dos paréntesis consecutivos )) puede haber cualquier cosa, la cual debe ser filtrada.

Arbol* leer(char const* ruta)// firma a respetar.
{
FILE *fp;

fp = fopen(ruta,"r");
Arbol* arbol = NULL;

if (fp)
{
arbol = getArbol(fp,arbol);
fclose(fp);
}

return arbol;
}


Arbol* getArbol(FILE *f, Arbol* a)
{

char c;
char nom[largoNombre];
char lin[512];
int nro;

Arbol* arbol = NULL;
Arbol* subArbol = NULL;

if (!feof(f))
{
fscanf(f,"%[^()]",lin); // leo lo que haya ANTES de ( ó )

fscanf(f,"%c",&c); // lee los paréntesis
if (c == '(') // hay un nodo del arbol
{

fscanf(f," %s %d ",nom,&nro);
arbol = arbolCrear(nom,nro);

subArbol = getArbol(f,arbol); //llamo c/hijos
subArbol = getArbol(f,a); //llamo con padre a leer hnos

if ((a != NULL) && (arbol != NULL))
arbolCambiarPadre(arbol,a); //agrega al arbol
}
}
return arbol;
}

Notas:
  • no es necesario pasar por referencia el puntero a arbol porque la raíz no cambia.
  • fscanf(f,"%[^()]",lin) puede sustituirse por fscanf(f,"*[^()]"), el * indica que lo leído no se almacene en ninguna variable. Como desconocía las consecuencias de leer asi, sin almacenar, decidí optar por la primera. El símbolo ^ saltea blancos, tabuladores, nueva línea y espacios.
  • Otra forma de leer lo mismo hubiera sido fscanf(f," ( %s %d ",nom,&nro)los espacios en blanco son para contemplar el caso que el string o entero inmediato se encuentren después de una nueva línea (algo que puede darse), salvo esa restricción, no vi necesario el espacio entre %s y %d.
  • fscanf(f," %s %d ",nom,&nro). El espacio en blanco saltea nueva línea, tabuladores, los espacios que haya, no importa cuantos, basta poner uno saltea los que haya hasta que encuentre una coincidencia que se ajuste al parámetro de lectura.
  • El carácter "(" es la condición de parada de la recursividad, se terminaron de leer los hijos del nodo actual, se pasa a leer los hermanos del mismo.
Dada la recursividad de la estructura, la función escritura también fue recursiva.

void arbolEscribir(Arbol* arbol,FILE* f)
{

char* nombre = new char[largoNombre];
nombre[19] = '\0';
Arbol* hijo;
int cant_hijos,k;

if (arbol != NULL)
{
fputs("(",f);

arbolNombre(arbol,nombre);

fprintf(f,"%s ",nombre);
fprintf(f,"%d",arbolNumero(arbol));

cant_hijos = arbolCantHijos(arbol);

for (k = 0; (k <>
{
hijo = arbolHijo(arbol,k);
arbolEscribir(hijo,f);
}
fputs(")",f);
}
}

// Guarda arbol en formato de s-expresión en el archivo ruta.
void escribir(Arbol* arbol, char const* ruta)
{
FILE *fp;

if (arbol == NULL)
{
printf("El arbol esta vacio, no hay arbol para guardar\n");
return;
}

if( NULL == (fp = fopen(ruta, "w")) )
{
printf( "ERROR: No se pudo crear el fichero, %s\n",ruta);
return;
}

arbolEscribir(arbol,fp);
fclose(fp);
}









miércoles, 29 de agosto de 2007

/depurando con cygwin e ainda mais



Cygwin no me gusta, me veo obligada a usarlo, bajo Eclipse se hace mas llevadero. Algo que no entiendo porqué no venden en el CD de facultad el Cygwin con un entorno mas amigable para trabajar con el. Actualmente venden Cygwin, y un editor, hasta donde supe (EditPad).
Notepad++ como editor es otra opción interesante, admite plugins para varios lenguajes, y es open source.
Eclipse da la opción de crear automáticamente un makefile, o trabajar con uno propio, a piacere (al igual que Code::Blocks).
¿Por qué no mejor un IDE que facilite y enseñe a administrar proyectos como Eclipse?, o simplemente la comodidad de Code::Blocks, ¿por qué la incomodidad de trabajar desde consola?.
Pensé que para familiarse con el concepto de Make, makefile, ese especie de máquinas de estados con dependencias, pues bien, lo exigen como parte de la tarea y listo, ya que hay entornos que nos dan la opción de crear nuestro makefile. Pero no entiendo porqué trabajar de manera tan artesanal, que mas que aprender conlleva pérdidas de tiempo.
Aprendiendo a manejar el ddd de cygwin no aporta demasiado, hacer un make tampoco, la intención de las materias como P3 van por otro lado.

(A propósito en otro post hablaré de la última versión de Eclipse que acabo de instalar)

Paquetes mínimos de Cygwin a instalar para trabajar con C o C++: make, gdb, ddd, gcc, g++ y automáticamente instala el entorno gráfico X, necesario para para depurar con ddd. Lo recomiendo, porque gdb es bastante críptico. Esto último para los que no usen Eclipse o Code::Blocks, ya que estos entornos facilitan mucho más el desarrollo.

Nota: Para los que ejecuten Cygwin en modo de consola, si desean activar el debugger (ddd), deben ejecutar el comando startx previamente (carga el entorno gráfico necesario para ddd), luego ejecutan en la línea de comandos, ddd.
De lo contrario, si no tienen el entorno gráfico, les saldrá un mensaje de error: "Error can't load display"

Hablando de Cygwin, si no entraron a los links, les comento que es una colección de herramientas que proporcionan un comportamiento similar a los sistemas Unix bajo Windows. Básicamente consiste en dos grupos de herramientas:
cygwin1.dll biblioteca encargada de crear una capa que provee la funcionalidad de las API de Linux, y un conjunto de comandos propios de Linux para ser ejecutados bajo Windows.

Algunos paquetes son de dominio público, los que están desarrollados por Cygnus se encuentran bajo la licencia GNU (GPL), no hay que pagar para usarlos, pero si desarrollamos aplicaciones con fines comerciales, debemos pagar por la licencia, ya que es una biblioteca propietaria de Cygwin.

Ese es uno de los motivos por los cuales pienso migrar a MinGW, su licencia es mas permisiva. En cuanto a las dificultades para migrar a Linux con ese compilador, no me preocupan, la experiencia me dice que el de Cygwin no es totalmente fiel.
Cuando para facultad nos encontrábamos desarrollando una tarea bajo Fedora, muchas veces para adelantar usabamos máquinas con Windows y Cygwin, y comprobamos que la portabilidad no era 100% segura, debimos hacer pequeñas modificaciones para que compilara bajo Linux.







sábado, 21 de julio de 2007

/análisis de algoritmos - libro



Este libro en formato digital (pdf) y en español andaba circulando cuando cursé P3. Fue escrito por catedráticos de la universidad de Málaga, aunque desconozco a sus autores.
Aborda de manera bastante clara, y sin perder rigurosidad los siguientes temas:

Abunda en ejemplos, y algunos problemas tipo como el problema de la mochila, o el de dar cambio son resueltos aplicando las diversas técnicas para resaltar las diferencias entre ellas.
Los ejemplos están escritos en Modula-2 (muy similar a Pascal), ergo, son fácilmente extrapolables a otros lenguajes.

A propósito, encontré este sitio que trata de manera algo básica esos temas, pero sirve como lectura introductoria algoritmia.net

(El libro también está en sección 'Estantería')

Este libro es complementario de otros que recomiendo:
  • Estructura de datos y algoritmos - Alfred Aho, Jonh Hopcroft y Jeffrey Ullman
  • Fundamentos de Algoritmia - G. Brassard y P.Brantley

No todo es software de gestión, aplicaciones variadas como video juegos, o donde sea necesario optimizar alguna función objetivo hacen uso de estas técnicas.


Box.net

sábado, 14 de julio de 2007

/diseño de patrones



Aqui hay un link a varios patrones conocidos implementados en C++ y Java, incluye los diagramas UML de los mismos, y están catalogados de acuerdo a los efectos de su aplicación en el modelo de clases (estructurales, creacionales, comportamiento,etc).
Particularmente interesante también, para notar las diferencias de los lenguajes y su manejo de punteros. (En el caso de Java la referencia a los mismos es explícita)

Pronto subiré mi implementación de Colecciones en C++ usando el patrón Iterator.

/viernes 13 - tuve parcial




Foto desde mi celular, cuando me iba. Salón B01 del Aulario, nuevo anexo de la Fing, en la planta baja. Estaba sentada en ese lugar, ahí donde tomé la foto, nro de parcial 142. Momento final del parcial.

El Aulario
Todo muy moderno y limpio, nobleza obliga decirlo, pero que frío, todo con vidrio a no demasiados kms de la rambla, no es raro que así sea...la hora y el frío, lindo horario, coreografía conspirativa.
De todos modos se agradece, en una facultad con tantos alumnos era necesario.

Sigue habiendo pocas sillas para zurdos, escribí torcida durante 3 horas y media, raro en una facultad donde veo que el número de zurdos no es nada despreciable.

Duró 3:30hs, estuve hasta el final, no quiero decir como me fue, pero mejor de lo que esperaba para haber practicado poco. El tema con esta materia es la práctica, hacer muchos ejercicios, y eso me faltó, aun así pude con la ansiedad de la culpa de no haberlo hecho, pude mas que otras veces al menos.

Me está pasando algo raro con facultad, no es que encuentre materias imposibles, pero soy yo quien está imposible para encararlas, hay que querer, y tener la mente en eso, attitude, y últimamente no es mi caso. Es raro considerando que me gusta, y no me imagino en otra cosa, pero hay motivos que desgastan. Y no significa que vaya a abandonarla, ni ahí, sino a redefinir mis expectativas y prioridades sin culpa. La culpa no es buena consejera.
No voy a entrar en los motivos personales, pero sí en los relativos a la facultad.

El horario de comienzo
supuestamente era a las 18hs, los salones estaban libres desde las 17:10hs, y los profesores llegaron 5 minutos antes del comienzo a acomodar las sillas, colocar las hojas sobre las mismas, la letra del parcial, y los números que cada estudiante tenía asignado para el mismo. A las 18:30hs, un tiempo record para mi, inconcebible, decidieron que todo estaba pronto. Los estudiantes, atónitos, aunque resignados lamentablemente, observábamos con la total parsimonia en que se desarrollaba todo. Parecían jugar con nuestra ansiedad, con el cansancio del horario, y con el frío insoportable. Como si eso no desgastara, no cansara.

Sobre las 18:30hs nos dicen donde están las listas donde teníamos que fijarnos el número de parcial asignado y el salón. Esperé hasta el final, nunca tuve demasiado afinado el instinto gregario, y no lo digo como una conquista intelectual, al contrario. Pero en este caso, era pragmatismo, esperaba que toda esa masa humana se disipara un poco.
Las listas estaban en un hall con una entrada a otro salón, donde en su puerta una docente a los gritos, pasaba lista de alumnos que iban a otro examen. A los gritos para sobrevivir al ansioso y sufrido grupo de estudiantes que habían esperado media hora más, y querían saber a qué salón correr.

La materia es del InCo, la matriz de todos los bytes sueltos de la facultad, ¿no se supone que puedan colgar esa lista en la web? si pudo imprimirse, de algun archivo habrá salido, ¿tanto cuesta?. ¿No sería un procedimiento mas limpio y optimizado? (algo que enseñan tanto por ahí).
Ni siquiera existe la justificación que no todos acceden a internet, en una facultad donde el contacto vía newsgroups entre docentes y estudiantes es un sustituto complementario y muy usado, sería ridículo.
Son detalles, que suman y suman...emergentes preocupantes porque no están aislados.

Punto a favor: un parcial relativamente accesible.

La luz del salón es cansadora, el ambiente de una limpieza e iluminación aséptica que lo hace frío, sumado a las dimensiones, bastante grandes...solo hace pensar en cuantos somos, y en la poca probabilidad de contacto entre nosotros, y el escaso contacto directo y didáctico entre docente y alumno.
Eso pensaba, ese salón es la prueba contundente de la masificación, y de las dificultades que conlleva.

Surrealismo trágico, la materia está lejos de ser una de las primeros años, muy por el contrario, sin embargo la masificación es abrumadora. La cantidad de alumnos que la recursan es de un porcentaje llamativo, el porcentaje de los que la aprueban por lo escaso (exonerando el curso o salvando el examen), también.
A esta altura de la carrera, no creo que nadie no sepa como estudiar, sino que hay otros motivos.

No me interesa igualar para abajo, y si por mi
fuera, pondría examen de ingreso.
Algunos pensarán, pero solo los que tienen plata podrán prepararlo, bueno, pero yo propongo que los docentes de facultad den clases de preparación, o nivelación para el mismo.

La escasa capacidad didáctica de los docentes, contribuye, no se transmiten las ideas claramente, nunca buscan alternativas, rara vez. Y uno está hasta el cuello de tareas que exigen mas de lo que las cátedras suelen dar.
Las explicaciones nunca son suficientes para resolver una tarea, ni mucho menos aclaradoras de un concepto. Los docentes parecen hablarse a ellos mismos, y muchas veces mandan a los menos experimentados, así los grandes trabajan tranquilos en sus proyectos, y la torta se divide sin problemas. Otras veces no hay demasiado interés por los peces gordos de venir a dar clase tampoco, basta en pensar en la sobredosis de Valium que puede ser Sistemas Operativos.
Otras veces es simple incapacidad para expresar o jugar con un concepto, no saben, no salen de su bunker tecnológico o de su mote de investigadores, en una actitud que tiene mucho de discriminativa no pocas veces.
Y no pocas veces también actúan con la displicencia enajenante de un empleado público.

Los docentes del InCo son los mas 'conflictivos', y el departamento de Arquitectura de los mas tediosos. Cuando cursé Arquitectura, último año que la materia era una sola, antes de dividirse en Arquitectura 1 y 2, para hacer la tarea (un driver para un mouse en assembler), no teníamos la mitad de los conceptos. Las clases de teórico, eran amenas, pero un cuentito, algo desordenadas, nada suficientes para la exigencia de los prácticos, ni mucho menos para la de la tarea, ni los parciales.
No pretendo que nos den digerido todo, pero sí contar con mas elementos para que pueda hilvanar, pretendo una orientación adecuada y no que me den todo resuelto.

Recuerdo cuando explicaron el funcionamiento de la UART en el práctico, miedo escénico en el docente, de quien conocidos me dijeron era muy capaz, bueno, prefiero uno menos capaz, pero que hable claro, y sepa controlar a una clase que del aburrimiento hablaba cualquiera. Y encima el tipo era incapaz de decir algo, de poner orden, no les importa.
Encima, la dio con errores que nos dimos cuenta al implementarla.
Googleé mucho para hacerla.
El material dado por la cátedra propagaba errores años tras años, sin ser corregidos, y dicho sea de paso dejaba mucho que desear. Indignante, si se considera que forma parte de su responsabilidad y que la mayoría de los docentes se repetían en la cátedra.
Diseño Lógico, emparentada en parte con Arquitectura, materia del Instituto de Eléctrica, era otra cosa. Se entendía todo, y uno percibía el placer de un sentimiento algo mas académico. Años luz de diferencia.

El funcionamiento de los diversos institutos de la facultad es una reproducción a escala de lo que sucede en la sociedad. La facultad no es ajena a lo que pasa en el exterior, es más, con todos los convenios que tiene, es imposible que lo esté, pero sin duda, el InCo refleja su aspecto mas mercantil. Mas competitivo en el peor sentido, y se nota
en la deficiencia de los cursos, salvo excepciones que las hay como en todos lados.

Estudiar apurado no es estudiar, estudiar con tantos palos en la rueda tampoco es aprender, así sólo se aprende a salvar cursos, eventualmente examenes, pero eso es otra cosa.

Trabajo para una universidad privada, varios docentes de mi facultad también están ahi, pero recuerdo a uno, que a la privada llegaba en hora, algo que nunca hacía en la Fing, y al menos en la privada los alumnos no tenían que aguantarlo con sus anécdotas pelotudas sobre Waterloo por mas de 40 minutos, sumada la media hora de atraso, una burla para todos los que pedían horas de su trabajo para asistir, hasta que no lo hicieron más, obvio. Parece que no está mas en la privada, si, imagino.

Aprender asi desgasta, siento mas ameno leyendo por mi cuenta e ir cada tanto a consultar dudas o a temas importantes, que asistiendo a clase soportando una serie de vicios conocidos, es que tengo la sensación de tiempo perdido cuando la contrasto con la velocidad de un mundo que va sobre la fibra óptica.

Google mediante, descubro artículos interesantísimos publicados por universidades de países del Mercosur, sobre temas diversos, principalmente de universidades de Argentina o Brasil. De nuestra universidad y facultad he visto pocas que valgan la pena rankearlas como decentes.
No hablo de investigaciones, que por cierto hay muchas en el InCo, las suficientes como para distraer la atención de los docentes, hablo de material generado para los alumnos por las cátedras, sin apartados de Fe de erratas o errores que se propaguen año a año, apuntes ejemplares como vi en la UBA o en la Universidad de Córdoba, o el Politécnico de Madrid, Stanford, etc.


Sumado, a que no es una facultad pensada para el que trabaja, horarios imposibles, esos alumnos se ven obligados a estudiar de apuntes ajenos.

Todo bien con el 4.5% para la educación, pero si es para que cada uno siga defendiendo su feudo sin autocrítica, no servirá demasiado.

Pais amateur la rep@^$%&#


vía mi catarsis, está desordenado y no importa





miércoles, 27 de junio de 2007

/4º campeonato de sumo robótico en UY




Sumo.UY es un evento organizado por el InCo, las inscripciones están abiertas hasta el 30 de setiembre, y pueden inscribirse participantes de otros paises.

"El sumo de robots consiste en un deporte, en el cual dos robots luchan por quitarse mutuamente de un círculo (llamado dohyo). Para participar del evento los concursantes deben programar la estrategia de control de un robot"

En el sitio proveen un simulador para que los concursantes puedan ir diseñándolas. Las mismas pueden desarrollarse en cualquier lenguaje siempre y cuando el protocolo de comunicación con el servidor sea hecho en C (creí entender).
La 'infraestructura', digamos que consiste en dos computadoras cliente (jugadores), y un servidor que gestiona y administra los mensajes cliente-servidor.
El protocolo de estos mensajes, así también como ejemplos se explican en el sitio.

Si tuviera tiempo..pero vienen los parciales + exámenes + trabajo :p jej

(irónico, pero para ser una página del InCo tiene errores según Firefox y no pude ingresar a todos los enlaces, mecachendieu!)

viernes, 4 de mayo de 2007

/trabajos de facultad

Voy a dejar material en la sección de links de algunas de las tareas obligatorias de materias cursadas en la carrera de Ing. en Computación, asi como también algun material de apoyo para resolverlas.
Por supuesto, como todo material es perfectible , y mas considerando que esas entregas se hacen desde la urgencia el 90% de las veces, por lo tanto estoy abierta a todo tipo de sugerencias.

P3 - Técnica de diseño de algoritmos, algoritmos ávidos, backtracking, programación dinámica, Dijkstra, métodos de ordenamiento (quick sort, heap sort, selection sort, etc) y análisis de algoritmos. La implementación fue realizada en C/C++ bajo compilador Cygwin para Windows.
aqui

P4 - Analisis y diseño de sistemas. Manejo de UML para el diseño del modelo conceptual y de dominio. Patrones de diseño de software (implementado en C++ compilador gcc de Fedora), aqui.

Métodos Numéricos- técnicas para la resolución de problemas matemáticos de manera computacional, esto implica arrastrar errores porque la computadora no puede almacenar números con cifras infinitas. Lo que genera impresiciones que son contrarrestadas por metodologías de cálculos como interpolación o método de Vaandermonde.
En el curso se resolvieron sistemas de ecuaciones diferenciales, sistemas lineales, inversión de matrices, mínimos cuadrados, etc. La implementación fue realizada usando MatLab versión 7.1 aqui

Posteriormente agregaré el hecho recientemente para Teoría de lenguajes. Se basó en el reconocimiento de patrones de cadenas en texto mediante expresiones regulares usando Perl.