Información del curso
Programa del curso. 16 créditos enfocados en modularización en C, punteros, memoria dinámica, TADs y estructuras dinámicas.
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, árboles binarios de búsqueda y árboles generales
- analizar algoritmos de búsqueda y ordenamiento mediante invariantes y costos
- reconocer balanceo de BST e implementar operaciones básicas de heaps
- justificar decisiones de representación según operaciones requeridas, costo y claridad del diseño
Secuencia de temas
Bloque 1 — Base técnica y primeras estructuras
- 01: presentación del curso y repaso de C
- 02: módulos en C y Makefiles
- 03: punteros y arreglos
- 04: memoria dinámica en C
- 05: TAD y listas enlazadas
- 06: complejidad y análisis de costo
- 07: recursión
Bloque 2 — Estructuras dinámicas
- 08: operaciones, invariantes y variantes de listas
- 09: pilas, colas y dobles-colas
- 10: búsqueda binaria y algoritmos de ordenamiento
- 11: árboles binarios
- 12: árboles binarios de búsqueda
- 13: balanceo de árboles binarios de búsqueda
- 14: árboles generales
Bloque 3 — Cierre
- 15: heaps y colas de prioridad: representación e inserción
- 16: heaps y colas de prioridad: extracción y aplicaciones
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 módulos, punteros, memoria dinámica, TAD, listas enlazadas, recursión y costo en contexto
- 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]