Presentación del grupo 6020 - 2011-2.
Programación I
Semestre 2011-2
José Luis Torres Rodríguez
Luis Enrique Serrano Gutiérrez
Requisitos
- Tener una cuenta de correo @ciencias.unam.mx (http://mail.ciencias.unam.mx)
- Asistencia regular a clase
- No tener materias encimadas
- Dedicar al menos una hora diaria a la materia, adicional a las clases
Objetivos- Obtener conocimientos básicos de la creación de algoritmos para la solución de problemas.
- Obtener conocimientos básicos de programación, y de los distintos procesos implicados en el desarrollo de software, que le permitan al estudiante generar implementaciones de soluciones a problemas, a través del uso de la computadora.
- Obtener conocimientos del lenguaje de programación C, del manejo de los distintos tipos de datos simples y estructurados, así como de su representación en una computadora.
- Conocer los fundamentos de los algoritmos recursivos para la solución de problemas.
- Obtener conocimientos básicos de análisis de algoritmos.
Lenguaje de programación
Entorno de desarrollo - Code::Blocks
Code::Blocks es un Entorno de Desarrollo Integrado (IDE), para los lenguajes de programación C y C++. Cuenta con implementaciones para Linux, Windows y Mac OS. Soporta multiples compiladores, tales como GCC (MingW / GNU GCC), MSVC++, Borland C++ 5.5 y Open Watcom, entre otros. Code::Blocks puede obtenerse de forma gratuita, ya que es distribuido como "software libre", bajo la licencia GPL de GNU.
Página principal: http://www.codeblocks.org/
Página para descarga: http://www.codeblocks.org/downloads/5
Impartición de las clases
Las clases se llevarán a cabo de lunes a viernes, de 13:00 a 14:00 horas, con la asistencia del titular o el ayudante, según corresponda, en el salón 0-220.
Se determinarán sesiones prácticas, de acuerdo a las tareas asignadas. Durante estas sesiones se revisará parte del material visto en clase, por lo que solamente se permitirá el acceso a quien asista con dicho material listo para su revisión.
Contenido del curso- Conceptos teóricos:
- Estructura de una computadora
- Representación de datos en una computadora
- Descripción de los sistemas de numeración binario, octal y hexadecimal
- Descripción teórica del funcionamiento de una computadora (Máquina de Turing)
- Descripción del proceso de desarrollo de un sistema, como solución a un problema
- Descripción del Ciclo de Vida de un sistema
- Proceso de creación de una solución para un problema
- Análisis
- Diseño de una solución a partir del análisis
- Uso de diagramas de Warnier/Orr para la descripción de una solución a un problema
- Lenguaje C
- Estructura general de un programa en C
- Tipos de datos simples
- Operadores (aritméticos, lógicos, relacionales)
- Uso de variables
- Uso de la biblioteca de funciones de C
- Sentencias de ejecución condicional
- Arreglos
- Creación de funciones
- Sentencias para creación de ciclos
- Estructuras, uniones y enumeraciones
- Manejo de arreglos empacados
- Manejo del ambiente de desarrollo Dev-Cpp
- Recursividad
- Desarrollo de soluciones recursivas a problemas
- Revisión del concepto de apuntador
- Uso de apuntadores para desarrollo de soluciones a problemas
- Apuntadores a datos
- Apuntadores a funciones
- Manejo de archivos
- Principios de análisis de algoritmos
- Elementos básicos para determinar la conveniencia del uso de una solución a un problema, de entre varias opciones, en determinadas condiciones
Evaluación del semestre
Se considerarán los siguientes elementos para llevar a cabo la evaluación:
- Asistencia regular a clase.
- Exámenes. Éstos se aplicarán en las siguientes fechas:
Parcial 1: 7 de marzo de 2011
Parcial 2: 11 de abril de 2011
Parcial 3: 23 de mayo de 2011
Requisito para presentar examen: haber entregado puntualmente las tareas anteriores a la fecha del examen.
No habrá reposiciones. - Tareas teórico-prácticas, con la misma periodicidad que los exámenes teóricos.
En estas tareas se aplicarán todos los conocimientos vistos hasta la fecha, complementados con material adicional. - Entrega de los programas vistos en clase, cada lunes. Esto incluye complementar los bloques de código vistos como ejemplo.
- Programas semanales (de tamaño y complejidad razonable). Éstos servirán para reforzar y complementar el material visto durante la semana.
- Participaciones en clase. Estas son OBLIGATORIAS. Se tomarán en cuenta sobre todo aquellas participaciones que refuercen lo visto en clase y que constituyan una aportación importante.
- Proyecto final.
Se propondrán varios temas a desarrollar en equipo; cada equipo deberá seleccionar uno, el cual será entregado a más tardar el día 2 de junio de 2011.
Se informará acerca de los temas al menos un mes antes de la entrega.
Este proyecto final se deberá presentar ante el grupo, incluyendo el análisis, diseño e implementación realizados. - La entrega de todos los trabajos será improrrogable.
- Todos los trabajos duplicados serán evaluados con cero, sin hacer indagaciones.
- La calificación final se entregará PERSONALMENTE a más tardar el día 9 de junio de 2011, sin excepción ni prorroga.
Quien no se presente el día señalado a recibir su calificación está aceptando la evaluación que se haga de su trabajo durante el semestre. - Sin excepción, no se aceptarán reclamaciones fuera de la fecha señalada en el punto anterior.
- Sin excepciones, no se permitirá renunciar a ninguna calificación.
- La calificación de NP solo se asignará a quien no haya entregado ningún trabajo y no haya presentado ningún examen.
- De ninguna manera se dará un trato ni una calificación especial a ningún estudiante, por el hecho de trabajar, tener un promedio alto, contar con algún tipo de beca o tener materias encimadas. Tampoco se tomarán en cuenta recomendados de ninguna persona.
Observaciones adicionales
- Se prohíben los teléfonos celulares durante la clase. Éstos deberán apagarse o ponerse en modo vibrador y no contestarse en el salón o laboratorio.
Quien responda llamadas dentro del salón o laboratorio deberá retirarse, por respeto a sus compañeros. - Por ningún motivo se repetirán clases anteriores a ninguna persona, por el hecho de no haber podido asistir a las mismas, a menos que la mayoría lo solicite y justifique.
- Al inicio del semestre se formarán equipos de trabajo, para llevar a cabo las tareas que lo requieran, tomando en cuenta lo siguiente:
- Los equipos constarán de a lo más cuatro integrantes.
- No se permitirá hacer cambios de los integrantes.
- El trabajo en equipo no implica la división de la tarea por partes iguales.
- Se supondrá que estos trabajos se desarrollaron colectivamente por todos los integrantes, por lo que no se evaluará cada parte individualmente; cada uno de los miembros de un equipo deberá poder defender, en su totalidad, el trabajo entregado.
- Las tareas y programas podrán ser enviados por correo a las siguientes direcciones:
jluis+prog1-20112@ciencias.unam.mx
luis+prog1-20112@ciencias.unam.mx
- Para las tareas que se entreguen en papel, se sugiere hacer uso de papel reciclado.
No es necesario hacer la entrega de los trabajos en fólder, sobre, etc. - De cada trabajo entregado se les podrá solicitar – en cualquier momento – responder preguntas acerca de o adicionales al mismo, por lo que todos deberán ser entregados, o enviados por correo, personalmente.
- Se prohíbe introducir alimentos y bebidas al laboratorio de cómputo.
- Ningún alumno deberá entrar al laboratorio de cómputo hasta que esté presente el titular o el ayudante; tampoco deberá permanecer dentro después de finalizada la clase.
Bibliografía básica
- Practical C Programming.
Oualline, Steve. - C/C++ y Java, Cómo Programar.
Cuarta Edición.
Deitel, Harvey M.; Deitel, Paul J.
- El lenguaje de programación C.
Kernighan, Bryan; Ritchie, Dennis.
- Fundamentals of computing I: Logic, Problem solving, Programs and Computers.
- El arte de la programación.
Kernighan, Bryan.
- Logical Construction of Systems.
Warnier, J. D.
Para llevar a cabo consultas en Internet, se sugiere NO HACER uso de Wikipedia, Wikimedia o algún otro WikiX, como un medio de consulta final.