Información general del curso
- Materia: Programación
- Créditos: 16 (8 horas semanales durante 16 semanas)
- Modalidad: Teoría + práctica + laboratorio
- Prerrequisitos: Principios de Programación, Matemática Discreta y Lógica
Descripción
El curso se enfoca en el diseño e implementación de programas de tamaño medio en C, partiendo de interfaces claras y representaciones bien justificadas. La idea central no es solo usar estructuras de datos, sino entender cuándo conviene cada una, cómo se implementa y qué costo tiene.
A lo largo del semestre se trabaja con modularización, punteros, memoria dinámica, Tipos Abstractos de Datos (TAD), listas enlazadas, pilas, colas, árboles binarios, árboles binarios de búsqueda y comparación de representaciones.
¿Por qué usamos C?
C permite trabajar con un modelo de ejecución visible y preciso, algo especialmente útil en un curso de EDA. Esto permite:
- razonar sobre direcciones, punteros y memoria dinámica
- distinguir interfaz, implementación y representación interna
- justificar costos de tiempo y espacio sobre estructuras concretas
- comprender mejor qué decisiones de diseño están detrás de un TAD
El objetivo no es aprender trucos de bajo nivel por sí mismos, sino usar C como herramienta para pensar mejor sobre datos, operaciones y costo.
Objetivos de aprendizaje
Al finalizar el curso se espera que el estudiante pueda:
- organizar código en módulos
.hy.c - diseñar interfaces simples para TADs en C
- usar punteros y memoria dinámica de forma correcta y legible
- implementar estructuras dinámicas lineales y árboles binarios de búsqueda
- justificar decisiones de representación según operaciones requeridas, costo y claridad del diseño
Organización del semestre
Bloque 1 — Base técnica
- Semanas 1-2: nivelación, lectura de código, compilación, módulos, headers y Makefiles
- Semanas 3-4: punteros aplicados y memoria dinámica
- Semanas 5-6: TAD, vector dinámico y complejidad en contexto
- Semana 7: listas enlazadas simples I
Bloque 2 — Estructuras dinámicas
- Semana 8: listas enlazadas simples II
- Semana 9: variantes de listas enlazadas
- Semana 10: pilas y colas
- Semana 11: árboles binarios
- Semana 12: árboles binarios de búsqueda
- Semana 13: comparación de representaciones
- Semana 14: tablas hash
Bloque 3 — Cierre
- Semana 15: consolidación del bloque estructural
- Semana 16: integración y cierre
Metodología
- 8 horas semanales de clase, combinando exposición, resolución de ejercicios y trabajo práctico
- 4 a 8 horas semanales de estudio personal y práctica
- progresión desde problemas concretos hacia herramientas de implementación y diseño
- énfasis en lectura de código, trazas, implementación, prueba y justificación de decisiones
Herramientas recomendadas
Lenguaje C
- ZinjaI: link
- IDE libre y gratuito para programar en C/C++
- Resulta útil para compilar, ejecutar y organizar programas con más de un archivo
- Disponible para Linux, Windows y Mac OS X
Evaluación
La estructura habitual del curso combina dos parciales y los obligatorios definidos por la cátedra.
- Parcial 1: 40 puntos, centrado en el bloque fundacional del curso
- Parcial 2: 60 puntos, centrado en estructuras dinámicas, comparación de representaciones e integración
Las fechas concretas, materiales publicados y avisos de evaluación se comunicarán por la sección de Avisos y por los canales institucionales del curso.
Núcleo temático
Núcleo fuerte
- modularización y compilación separada
- punteros
- memoria dinámica
- TADs
- arrays dinámicos
- listas enlazadas
- pilas y colas
- árboles binarios y BST
- complejidad temporal y espacial en contexto
Temas de cierre o extensión
- tablas hash
- consolidación e integración de varias estructuras en un mismo problema
Este curso es previa de:
- TI12 - Programación Avanzada
- TI16 - Programación de Aplicaciones
- TI18 - Ingeniería de Software
- TI21 - Pasantía Laboral
- TI27 - Proyecto
Contacto
- ✉️ Correo: [email protected]