Programa Analítico de la Asignatura¶
Programación I - B6003 es una materia de la carrera de Ingeniería en Computación, dictada en la Escuela de Producción y Tecnología de la Sede Andina, en San Carlos de Bariloche. La asignatura forma parte del plan de estudios ICOMP 2021-V7 y se sitúa como una de las primeras materias de formación específica en el área de la programación.
Información General¶
Sede: Sede Andina
Localidad: Bariloche
Escuela: Escuela de Producción y Tecnología
Carrera: Ingeniería en Computación
Código Guaraní: B6003
Plan de estudio: ICOMP 2021 - V9
Ubicación en el plan: 1º año - 2º Cuatrimestre
Ciclo lectivo: 2024
Régimen de cursada: Cuatrimestral
Período de dictado: 2º Cuatrimestre
Correlativas vigentes:
Para cursar: Introducción a Ingeniería en Computación (B6001)
Para rendir: Introducción a Ingeniería en Computación (B6001)
Carga horaria total: 96 horas
Teóricas: 48 h
Prácticas: 48 h
Virtuales: 0 h
Estudio extra clase recomendado: 20 h
Profesor responsable: Martín René Vilugrón
Equipo docente: Miguel Mariguin, Mauro Alejandro Fermín, Daniel Eduardo Teira
Ubicación en el Plan de Estudios y Correlatividades¶
Esta materia se cursa en el segundo cuatrimestre del primer año de la carrera. Para poder inscribirse y cursarla, es requisito tener la cursada aprobada de Introducción a la Ingeniería en Computación (B6001). Para rendir el examen final de Programación I, es necesario tener aprobada la materia correlativa mencionada anteriormente.
Fundamentación¶
La asignatura constituye un pilar fundamental en nuestra carrera universitaria. Nuestro objetivo principal es capacitar al estudiante en la adquisición de habilidades sólidas en programación, con un enfoque en la correctitud y eficiencia en el desarrollo de software de alta calidad desde los primeros pasos en la programación.
Esta materia se ha diseñado de manera incremental para garantizar una comprensión efectiva de la programación estructurada. Reconocemos que la programación es esencial tanto para el desarrollo de software como para la implementación de sistemas de hardware. Un diseño apropiado, una implementación precisa y la posterior optimización de sistemas son los cimientos de un desarrollo exitoso.
A través de esta asignatura, preparamos al estudiante para el diseño e implementación de soluciones a diversos problemas mediante la definición de algoritmos. Además, se abordan los conceptos fundamentales de programación, así como las estructuras de datos esenciales. Se introducen tipos simples, tipos definidos por el usuario y tipos de datos lineales y no lineales, que permiten abordar una amplia variedad de problemas a través de su combinación y variación.
Nuestro enfoque principal en esta asignatura es el lenguaje de programación C, que brinda una base sólida para el desarrollo de software eficiente y de alta calidad. Con Programación 1, sentamos las bases para el éxito de nuestros estudiantes en su futura trayectoria en el mundo de la programación y la informática.
Propósitos de la Asignatura¶
Se ha optado por enmarcar la cátedra en un enfoque actual y moderno que aborda tanto técnicas teóricas como prácticas para el desarrollo de habilidades sólidas en programación.
Nuestro objetivo es que los estudiantes adquieran competencias en programación estructurada y sean capaces de aplicar métodos de vanguardia en el campo de la informática.
Durante el curso, los estudiantes explorarán y dominarán el manejo de estructuras de datos en memoria estática y dinámica, lo que incluye el uso de arreglos de una o varias dimensiones y punteros. Estos conceptos son esenciales en la programación moderna y se promoverá su aplicación en situaciones reales.
Además, se fomentará el desarrollo de capacidades analíticas, técnicas e intuitivas en los estudiantes para que puedan diseñar y analizar la complejidad de algoritmos de manera efectiva. Se promoverá la generación de algoritmos recursivos como una herramienta fundamental para abordar una variedad de problemas. Los estudiantes también aprenderán a utilizar herramientas de depuración de algoritmos, lo que es esencial para el desarrollo de software robusto.
Desarrollar competencias en programación estructurada.
Aplicar métodos modernos en informática.
Dominar el manejo de estructuras de datos en memoria estática y dinámica.
Fomentar la capacidad analítica y técnica para el diseño de algoritmos.
Comprender y aplicar recursión y depuración de programas.
Contenidos Mínimos (según plan de estudio)¶
Que los/as estudiantes:
Adquieran habilidades teóricas y prácticas en la programación estructurada
Operen estructuras de datos en memoria estática y dinámica (incluyendo arreglos de una o varias dimensiones) y punteros
Adquieran las capacidades analíticas, técnicas e intuitivas para realizar diseños y análisis de la complejidad de los algoritmos. Se propiciará que pueda generar algoritmos recursivos para diferentes problemas y la utilización de herramientas de depuración de algoritmos.
Se mostrarán diversos algoritmos de búsqueda y de ordenación, analizando en cada uno su diseño y su complejidad algorítmica a fin de que puedan aplicar su propio análisis y evaluación de los mismos
Tópicos principales¶
Estructuras de control: secuencia, condiciones, iteradores, funciones y parámetros.
Entrada y salida estándar.
Tipos definidos por el usuario: registros, vectores, matrices, arreglos n-dimensionales.
Punteros y referencias.
Memoria estática y dinámica.
Recursión.
Algoritmos de búsqueda y ordenamiento.
Complejidad, notación O(), depuración.
Propuesta Metodológica¶
La asignatura consistirá de clases teóricas y clases prácticas.
En las clases teóricas se desarrollarán los temas del programa de la asignatura, incluyendo múltiples ejemplos que faciliten la asimilación de los contenidos conceptuales. Mediante ejemplos prácticos se relacionarán cada uno de los temas vistos. Se fomentará la interacción del alumno con el objetivo de que logre una actitud activa para, a través de su propio razonamiento, logre crear soluciones creativas a problemas planteados durante las clases.
Mientras que en las clases practicas, se propondrán distintas prácticas para favorecer la asimilación de los conceptos vistos en la materia. Al inicio de cada práctica el profesor hará una breve explicación de práctica donde se propondrán ejemplos similares a los ejercicios propuestos en la práctica.
La distribución de los ejercicios, así como su revisión esta pensado para utilizar la herramienta git junto al servicio GitHub. Así como la utilización de un espacio de discusión sobre la plataforma para facilitar las comunicaciones de manera asíncrona.
Para facilitar el cursado de los alumnos, se grabaran todas las clases para que estas puedan ser seguidas en cualquier momento.
Clases teóricas: desarrollo de contenidos con ejemplos, fomentando la participación activa.
Clases prácticas: ejercicios guiados y revisión mediante Git/GitHub.
Grabación de todas las clases para acceso asincrónico.
Espacio de discusión virtual.
Accesibilidad¶
La UNRN implementa políticas de accesibilidad académica, incluyendo acompañamiento docente y configuraciones de apoyo específicas.
Unidades de Aprendizaje¶
Unidad 1: Lenguaje C base¶
Semanas: 1–2
Contenidos: Introducción al lenguaje C, compilación, tipos de datos, control de flujo, funciones y documentación.
Prácticas: Repositorios 1 y 2.
Bibliografía: Kernighan & Ritchie (1991).
Unidad 2: Arreglos y cadenas¶
Semanas: 3
Contenidos: Arreglos unidimensionales, cadenas, modelo de memoria y uso en funciones.
Práctica: Repositorio 3.
Bibliografía: Kernighan & Ritchie (1991); Schildt (2004).
Unidad 3: Punteros¶
Semanas: 4
Contenidos: Concepto, aritmética de punteros, relación con arreglos, punteros a función.
Práctica: Repositorio 4.
Bibliografía: Kernighan & Ritchie (1991); Schildt (2004).
Unidad 4: Repaso general #1¶
Semana: 5
Contenidos: Repaso de unidades previas y correcciones.
Práctica: Revisión de prácticas 1–4.
Unidad 5: Matrices y estructuras¶
Semana: 6
Contenidos: Declaración, inicialización y operaciones con matrices. Estructuras (struct
, typedef
).
Práctica: Repositorio 5.
Unidad 6: Archivos¶
Semana: 7
Contenidos: Archivos de texto, lectura, escritura, errores, argumentos del programa.
Práctica: Repositorio 6.
Unidad 7: Memoria dinámica¶
Semana: 8
Contenidos: Regiones de memoria, malloc
, realloc
, free
, punteros void*
, ALV.
Práctica: Repositorio 7.
Unidad 8: Repaso general #2¶
Semana: 9
Contenidos: Repaso previo al segundo parcial.
Práctica: Revisión prácticas 5–7.
Unidad 9: Estructuras basadas en nodos¶
Semana: 10
Contenidos: Listas enlazadas, pilas y colas. Uso dinámico de estructuras.
Práctica: Repositorio 8.
Unidad 10: Algoritmos recursivos¶
Semana: 11
Contenidos: Recursión, condiciones base, divide y conquista.
Práctica: Repositorio 9.
Unidad 11: Análisis y diseño de algoritmos¶
Semanas: 12–13
Contenidos: Complejidad, eficiencia, notación O(), análisis de casos.
Práctica: Repositorio 10.
Unidad 12: Algoritmos de búsqueda y ordenamiento¶
Semanas: 14–15
Contenidos: Búsqueda secuencial y binaria, ordenamientos clásicos (burbuja, inserción, selección, merge, quick, bogosort).
Práctica: Trabajo integrador final.
Unidad 13: Recuperatorios y cierre¶
Semana: 16
Contenidos: Exposiciones finales y examen recuperatorio.
Evaluación¶
Evaluación Formativa¶
Trabajos Prácticos (TP) semanales.
Calificación cualitativa: OK, A corregir o Rechazado.
Uso de herramientas de análisis de código automatizadas.
Evaluación Sumativa¶
Dos exámenes escritos.
Contribuyen a la nota final.
Promoción¶
Escala: Promoción 7 - Promoción.
Se permite 1 TP pendiente de corrección.
Modalidad Libre¶
Resolver ejercicio base en C indicado por la cátedra.
Desarrollar y justificar el código en examen oral.
Requisitos de Aprobación¶
Entregar todos los TP dentro del plazo.
Ambos parciales en la misma condición.
Fechas Tentativas¶
Parcial 1: semana 5
Parcial 2: semana 10
Evaluación final o proyecto: semana 15
Recuperatorio: semana 16
Bibliografía General¶
Obligatoria:
El lenguaje de programación C, 2ª Ed. – B. W. Kernighan, D. M. Ritchie (1991).
C Manual de referencia, 4ª Ed. – H. Schildt (2004).
Complementaria: No aplica.