2005-2006

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ó

Las actividades de aprendizaje se han dividido fundamentalmente en función de su tipología en varias categorías: - sesiones de teoría: los profesores presentan una serie de conceptos y técnicas, además de ejemplos de su utilización. Los estudiantes deberán repasar fuera del aula los apuntes y sus notas para acabar de asimilar los contenidos. - sesiones de ejercicios: los estudiantes deben resolver una serie de ejercicios de pequeño tamaño, poniendo en práctica los conceptos y técnicas presentados en las sesiones de teoría. Estas actividades se comienzan en aulas de ordenadores, y deben completarse fuera del aula. - sesiones de prácticas: los estudiantes deben resolver unos problemas de un tamaño mayor que los ejercicios antes citados, de forma que deben decidir qué conceptos y técnicas deben utilizar en cada caso. Estas actividades se comienzan en aulas de ordenadores, y deben completarse fuera del aula. - ejercicios de autoevaluación: ejercicios para que el estudiante, al final de cada unidad didáctica, compruebe que ha asimilado los conceptos y técnicas presentados. Esta actividad la realiza el estudiante fuera del aula. El proceso habitual de aprendizaje en una unidad didáctica comienza con una sesión de teoría en el que se presentan ciertos fundamentos teórico-prácticos. Esta actividad se realiza en un grupo de entre 60 y 90 estudiantes. El estudiante deberá posteriormente completar esta actividad con una lectura detenida de los apuntes. Así, para cada sesión de 1,5 horas de duración, convenientemente aprovechadas, se estima que necesario un trabajo personal de 0,5 horas. A continuación se lleva a cabo una sesión de ejercicios, en los cuales el estudiante pone en práctica los conceptos y técnicas presentados en la sesión de teoría, mediante la implementación de programas para solucionar pequeños problemas. Para los primeros ejercicios de la sesión se ofrecen las soluciones, pero no para los demás. El objetivo es que el estudiante consolide los fundamentos para posteriormente poder llevar a cabo problemas de mayor tamaño. Esta actividad se realiza por parejas, en un grupo de alrededor de 30 estudiantes. Cada actividad de este tipo está programada con una duración de 4 horas, de las cuales, 1,5 está previsto que se realicen en el aula. El siguiente paso es el de la sesión de prácticas. En ella se proponen unos problemas de mayor tamaño, especialmente en las prácticas parcial y final, que requieren un diseño previo de la solución a implementar y que deben integran diferentes conceptos y técnicas. En la práctica final se reúnen todas las competencias específicas que el estudiante debe adquirir en esta asignatura. Esta actividad se realiza por parejas, en un grupo de alrededor de 30 estudiantes, y debe continuarse fuera del aula. El último paso es el de la resolución de unos ejercicios de autoevaluación mediante los cuales el estudiante puede comprobar si ha adquirido las competencias, al menos las que posteriormente se evaluarán mediante los exámenes parcial y final. Algunas unidades didácticas presentan varios ciclos como el anteriormente presentado, o tienen más de una sesión de prácticas o de ejercicios. En cada sesión de ejercicios y de prácticas se dedica un tiempo para discutir los principales problemas que se han presentado en la sesión anterior.

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

Bibliografia complementària
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

Darrera actualització 24-11-2010
© Universitat Pompeu Fabra, Barcelona