Enginyeria Tè;cnica en Informàtica de Sistemes (3372)
Programació I (12406)
Descripció
Programación I está integrada en un bloque de asignaturas sobre algorítmica y programación que se
llevan a cabo en el primer curso de los estudios, tanto de Ingeniería en Informática como de
Ingeniería Técnica en Informática de Sistemas. Para esta primera asignatura del bloque se presupone
que los estudiantes no tienen conocimientos previos sobre algorítmica y programación. En ella se
establecen las bases de la algorítmica, de las estructuras de datos y de la programación en el
lenguaje C. En las asignaturas de Programación II y Estructuras de Datos y de la Información I
(segundo trimestre) y Programación III (tercer trimestre) se profundizará en las competencias aquí
adquiridas, de forma que al final el primer curso el estudiante ha de ser capaz de desarrollar
programas de tamaño considerable con las estructuras de datos adecuadas, tanto en forma imperativa
como orientada a objetos. Así mismo, es importante destacar que las bases adquiridas en
Programación I son imprescindi! bles para poder implementar la parte práctica de numerosas
asignaturas a lo largo de los estudios.
Esta asignatura está incluida en el plan de medidas para la adaptación al Espacio Europeo de
Enseñanza Superior. El plan docente detallado puede encontrarse en
http://www.tecn.upf.es/~tnavarrete/programacio1/pladocent.pdf
Objectius
El objetivo fundamental de esta asignatura es que los alumnos adquieran las bases de la algorítmica
y estructuras de datos, así como que sean capaces de desarrollar fluidamente programas de tamaño
medio utilizando el lenguaje C.
En concreto, las competencias (generales y específicas) que los estudiantes han de adquirir
son las siguientes:
Competencias generales:
CG1: Capacidad de síntesis
El estudiante ha de ser capaz de escribir soluciones con los elementos esenciales, de forma
simple, elegante y lo más eficiente posible.
CG2: Capacidad de análisis
El estudiante ha de ser capaz de, a partir de un problema concreto, analizarlo y proponer
soluciones adecuadas a dicho problema.
CG3: Capacidad para aplicar el conocimiento en la práctica
El estudiante ha de ser capaz de aplicar los conocimientos adquiridos para resolver problemas
concretos, eligiendo la técnica que mejor se ajuste a cada caso.
CG4: Interés por la calidad
El estudiante ha de ser capaz de que su código sea, además de eficiente, fácil de leer y
mantener. Así mismo es importante que se documente correctamente, tanto dentro del propio código
como en una memoria.
Competencias específicas:
CE1: Capacidad para trabajar con un compilador y debugador
El estudiante ha de ser capaz de trabajar con las herramientas adecuadas para la
programación: un compilador y un debugador. Esta competencia es primordial para el correcto
desarrollo de las demás.
CE2: Dominio de los tipos de datos estáticos básicos y compuestos
El estudiante ha de ser capaz de distinguir los diferentes tipos de datos estáticos básicos y
compuestos y de decidir el tipo adecuado para cada situación concreta.
CE3: Dominio de las estructuras de control
El estudiante ha de ser capaz de distinguir las diferentes estructuras de control compuestos
y de decidir las más adecuadas para resolver problemas concretos.
CE4: Capacidad de resolución de problemas mediante diseño descendente y dominio de la
utilización de funciones
El estudiante ha de ser capaz de resolver problemas de una complejidad considerable
utilizando las técnicas del diseño descendente. En particular, el estudiante ha de comprender el
funcionamiento de las llamadas a funciones y pasos de parámetros; y ser capaz de dividir un
problema en las unidades adecuadas.
CE5: Dominio de los tipos de datos dinámicos y de la gestión dinámica de memoria
El estudiante ha de comprender el mecanismo de gestión de memoria, así como el uso de
punteros y control dinámico de estructuras de datos. Se incluye también el manejo de ficheros de
texto.
CE6: Documentación y estructuración de código
El estudiante ha de adquirir el hábito de estructurar y documentar el código de forma
adecuada con la finalidad de facilitar su posterior lectura.
CE7: Capacidad de lectura (rápida) de código en C
El estudiante ha de ser capaz de comprender código escrito por otros programadores, de forma
relativamente rápida.
Temari
Unidades didácticas:
- Unidad didáctica 1: Primeros pasos: introducción, tipos de datos básicos y estructuras de
control. Dedicación total: 20 horas (12 en el aula, 8 fuera)
- Unidad didáctica 2: Funciones y diseño descendente. Dedicación total: 11 horas (5 en el
aula, 6 fuera)
- Unidad didáctica 3: Tipos de datos compuestos estáticos y declaración de tipos. Dedicación
total: 24 horas (11,5 en el aula, 16,5 fuera)
- Unidad didáctica 4: Punteros y paso de parámetros por referencia. Dedicación total: 11
horas (5 en el aula, 6 fuera)
- Unidad didáctica 5: Ficheros de texto. Dedicación total: 30 horas (15 en el aula, 15
fuera)
Dedicación total de la asignatura: 100 horas (48,5 en el aula, 51,5 fuera)
Organització
Pràctiques
Las primera sesión de prácticas está destinada a que el estudiante se famirialice con el entorno de trabajo: el compilador gcc, tanto en Linux como en Windows con Cygwin. A parte de las prácticas entregables que se describen a continuación, se han programado una serie de sesiones de prácticas donde los estudiantes aplicarán los conceptos y técnicas presentados en las sesiones teóricas. Práctica parcial Se evaluará la resolución de una práctica de tamaño reducido en la que el estudiante podrá mostrar el grado de asimilación de los conceptos y competencias adquiridos aproximadamente a la mitad de la asignatura. En particular se evaluarán las competencias CE2, CE3 y ciertos aspectos de la CE4 y la CE6 (estructuración de código comentado). La práctica consistirá en la resolución de un problema, incluyendo su análisis y la programación de una solución adecuada en lenguaje C. El estudiante deberá decidir las estructuras de datos estáticas así como el flujo de operaciones de la solución y realizar un sencillo diseño descendente. Así mismo se valorarán las cuatro competencias generales definidas. Como se ha indicado anteriormente, parte de la nota de la práctica parcial vendrá de la evaluación anónima que los propios estudiantes realizarán de las prácticas de otros grupos. Práctica final Se evaluará la resolución de una práctica de un tamaño mayor al de la parcial en la que el estudiante podrá mostrar el grado de asimilación de los conceptos y competencias adquiridos durante toda la asignatura. En particular se evaluarán las competencias CE2, CE3, CE4, CE5 y CE6. La práctica consistirá en la resolución de un problema considerablemente complejo, incluyendo su análisis, la elección de las estructuras de datos (estáticas y dinámicas) adecuadas, el diseño descendente, la programación de una solución adecuada en lenguaje C y su correcta documentación en una memoria en la que también se justificarán las decisiones adoptadas. Así mismo se valorarán las cuatro competencias generales definidas. Como se ha indicado anteriormente, a lo largo de las sesiones dedicadas a la práctica final, los profesores revisarán el trabajo de los estudiantes, especialmente en lo referente a las decisiones importantes sobre estructuración en funciones y estructuras de datos a utilizar. En el caso de no haber realizado dicha revisión, deberá hacerse a lo largo del período de exámenes.
Mètode d'avaluació
Esta asignatura consta de dos partes principales: - Fundamentos teórico-prácticos, que engloba las actividades relacionadas con las sesiones de teoría y de ejercicios - Prácticas Cada una supone un 50% de la nota final, aunque es necesario aprobar ambas para superar la asignatura. En la parte de fundamentos teórico-prácticos, habrá dos exámenes, uno a mitad de la asignatura y otro al final. El primero supone un 25% de la nota y se centra en el bloque de ejercicios realizados en las primeras sesiones de ejercicios. El segundo examen supone el 75% restante y abarca cuestiones teórico-prácticas de todo el conjunto de la asignatura. Además, en las sesiones de ejercicios los profesores irán revisando el trabajo de los estudiantes a lo largo del trimestre. En función de dichas revisiones, se podrá subir (pero nunca bajar) la nota de la parte de fundamentos en hasta 0,5 puntos. En cuanto a la parte de prácticas, la nota de esta parte se obtiene a partir de dos prácticas entregables, una a mitad de la asignatura y otra al final. La práctica parcial tiene un peso del 25%, mientras que la final supone un 75%. La nota de la práctica parcial se obtendrá a partir de la valoración de los profesores y un proceso de co-evaluación o revisión anónima por parte de otros grupos. En cuanto a la nota de la práctica final, a parte de la valoración global, los profesores irán revisando el progreso en el trabajo de los estudiantes, a lo largo de las sesiones de prácticas y ejercicios dedicados a la práctica final. En el caso en que algún grupo no hiciese dicha revisión, o que ésta no fuese satisfactoria, tendrá que hacer una defensa de su práctica con posterioridad a su entrega, durante el período de exámenes. En el caso de no aprobar ambas partes en la convocatoria de diciembre, sólo se guardará para septiembre una parte aprobada en el caso de que la nota de la otra parte sea igual o superior al 3. En caso contrario, habrá que volver a examinarse y entregar una nueva práctica (con un enunciado diferente).
Bibliografia
Bibliografia bàsica
Brian W. Kernighan, Dennis M. Ritchie: El lenguaje de programación C. Segunda edición.
Prentice-Hall. ISBN: 968-880-205-0
Altres llibres sobre C:
Herbert Schildt: C Manual de referencia. Mc Graw Hill. 84-481-0335-1
James L. Antonakos, Kenneth C. Mansfield Jr.: Programación estructurada en C. Prentice-Hall. ISBN: 84-89660-23-9
Luis Joyanes, Ignacio Zahonero: Programación en C. Mc Graw Hill. ISBN: 84-481-3013-8
Félix García, Jesús Carretero, Javier Fernández, Alejandro Calderón: El lenguaje de programación C. Diseño e implementación de programas. Prentice-Hall. ISBN: 84-205-3178-2
P.J. Plauger, Jim Brodie: C Estándar. Guía de referencia rápida para programadores. Anaya. ISBN: 84-7614-264-1
Altres clàssics sobre algorísmica (més avançats):
Alfred V. Aho, Jeffrey D. Ullman, John E. Hopcroft: Estructuras de datos y algoritmos. Addison Wesley, 1988. ISBN: 968-444-345-5
Niklaus Wirth: Algoritmos + estructuras de datos = programas. Ediciones del Castillo, 1980. ISBN: 84-219-0172-9
Niklaus Wirth: Algoritmia y estructuras de datos. Prentice Hall, 1987. ISBN: 968-880-113-5
D.E. Knuth: El arte de programar ordenadores (3 volums). Editoria Reverté. ISBN: 84-291-2661-9
Terrence W. Pratt, Marvin V. Zelkowitz: Lenguajes de programación. Diseño e implementación. Prentice Hall, 3ª edic., 1997. ISBN: 970-17-0046-5
G. Brassard, P. Bratley: Fundamentos de algoritmia. Prentice-Hall. ISBN: 84-89660-00-X