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 objetivo de esta asignatura es aprender a realizar programas de tamaño medio, partiendo de diseños apropiados y aplicando los conceptos de módulo de programa y tipo abstracto de dato (TAD).
Los estudiantes trabajarán con abstracciones de datos fundamentales, se introducirán al análisis de algoritmos y lograrán un dominio sólido del lenguaje C (y eventualmente C++ sin orientación a objetos).
¿Por qué usamos C? 😮💨
El lenguaje C se utiliza en este curso porque permite un acceso directo a los recursos del sistema, algo que pocos lenguajes de alto nivel ofrecen. Esto incluye:
- Control de memoria: gestión explícita de variables y estructuras dinámicas.
- Acceso a bajo nivel: manipulación directa de punteros, arrays y estructuras.
- Comprensión de costos reales: cada operación tiene un costo tangible en memoria y tiempo de ejecución.
- Fundamento para otros lenguajes: muchos lenguajes modernos se basan en conceptos de C, por lo que dominarlo ayuda a entender cómo funcionan internamente otros entornos.
- Conceptos transferibles: incluso si luego no se trabaja directamente con C, entender cómo funcionan el heap, la stack y los costos asociados permite tomar decisiones más eficientes en cualquier lenguaje de programación.
Aprender C permite entender cómo funcionan los programas “por dentro”, tomar decisiones más informadas sobre eficiencia y optimización, y desarrollar habilidades que luego se aplican a otros lenguajes de programación.
Objetivos 🎯
- Desarrollar programas de tamaño medio usando módulos y Tipos Abstractos de Datos (TAD)
- Dominar estructuras de datos fundamentales: listas, colas, pilas y árboles binarios
- Comprender el análisis de algoritmos (eficiencia en tiempo y espacio)
- Implementar algoritmos de búsqueda y ordenación
- Trabajar con recurrencia y funciones recursivas
- Alcanzar un uso competente del lenguaje C y de su biblioteca estándar
Cronograma del Semestre 📅
- Semanas 1-4: Fundamentos - Módulos, punteros, memoria dinámica
- Semanas 5-7: Algoritmos - Análisis, búsqueda, ordenación, recursión
- Semanas 8-11: Estructuras Lineales - Listas, pilas, colas, TADs
- Semanas 12-15: Estructuras Jerárquicas - Árboles, BST, proyecto integrador
Metodología 📚
- 8 horas semanales de clase incluyendo:
- teoría aplicada
- resolución de ejercicios
- trabajo práctico
- 4-8 horas semanales de estudio personal/practica
Evaluación 📝
Parciales (Puntuación sobre 100)
- Primer Parcial (Semana 7): Hasta 40 puntos - Fundamentos + Algoritmos
- Segundo Parcial (Semana 15): Hasta 60 puntos - Estructuras + Integración
Condiciones de Aprobación
- Exoneración: ≥ 60 puntos + proyecto aprobado
- Suficiencia: 25-59 puntos + proyecto aprobado (habilita examen final)
- Insuficiencia: < 25 puntos o proyecto no aprobado
Proyecto Final
Desarrollo de un sistema completo de tamaño medio que incluya:
- Uso de varios TADs implementados desde cero
- Estructura modular y código organizado
- Implementado en C/C++ puro (sin clases ni objetos)
Ejemplos: Base de datos simple, sistema de gestión bibliotecaria, administrador de inventario, simulador de procesos.
- Evaluación: Aprobado/No Aprobado
- La no aprobación implica la perdida del curso
Temario Detallado 📚
- Tipos Abstractos de Datos - Diseño de programas, módulos de programa
- Punteros y Memoria Dinámica - Concepto y manipulación
- Análisis de Algoritmos - Eficiencia en tiempo y espacio, búsqueda y ordenación
- Recurrencia - Definición e implementación de algoritmos recursivos
- Estructuras Lineales - Listas, pilas, colas, dobles-colas
- Estructuras Jerárquicas - Árboles binarios de búsqueda, árboles generales
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: mariano.zunino@fing.edu.uy