Professional Documents
Culture Documents
FUNDAMENTOS DE
PROGRAMACIÓN II
Autores:
- J. L. Vicedo González
- S. Meliá Beigbeder
- E. Pérez López
- F. Ortuño Ortín
GUÍA DOCENTE ECTS
Fundamentos de Programación II
Ingeniería Informática
Ingeniería Técnica en Informática de Sistemas
Ingeniería Técnica en Informática de Gestión
i
FUNDAMENTOS DE PROGRAMACIÓN II
ii
GuíaDocente
1. Contextualización
1.1. Perfil de los créditos de la materia. Adecuación al
perfil profesional y académico de la titulación
Cuando la disciplina de la Informática o Ciencias de la Computación se consolidó suficientemente
como entidad para implicar un título universitario, surgió la necesidad de establecer las bases curriculares
de dicha titulación.
Debido a la rápida evolución de la disciplina, los trabajos para adaptar los diseños curriculares de los
estudios de Informática a su cambiante realidad han venido sucediéndose desde 1968. Desde entonces,
prestigiosas entidades y asociaciones internacionales han propuesto diversas recomendaciones
curriculares para definir los estudios en Informática en los niveles universitarios.
Es el caso de las recomendaciones de la Association for Computing Machinery (ACM) [ACM1968] y
[ACM1979], los informes del Institute for Electrical and Electronic Engineers (IEEE) [IEEE1977] y
[IEEE1983], las propuestas conjuntas desarrolladas por ambas instituciones que quedan recogidas en los
Computing Curricula 1991 [CC1991] y 2001 [CC2001] y algunas otras de interés como el currículo realizada
por un grupo de la International Federation for Information Processing (IFIP) bajo un contrato de la United
Nations Educational, Scientific and Cultural Organization (UNESCO) [UNE1984] o el presentado por la
Universidad Carnegie-Mellon [CM1985].
La propuesta docente que presenta este documento está ampliamente influenciada por la evolución
de las distintas recomendaciones curriculares si bien en todas ellas, la materia objeto de este trabajo es
considerada básica e imprescindible para cualquiera de las titulaciones y especialidades derivadas de los
estudios en informática.
En cuanto a la perspectiva nacional, debemos observar cuáles son las directrices generales propias
de la titulación de Ingeniería Informática (Real decreto 1460/1990, de 26 de octubre, BOE 1990). En dicha
titulación aparece como materia troncal de obligatoria inclusión en todos los planes de estudio, la materia
“Metodología y Tecnología de la Programación”, con 15 créditos troncales cuyas directrices engloban el
estudio del proceso de resolución de problemas en programación, así como de las características y
propiedades de las herramientas a utilizar. En concreto esta materia profundizará en los principales
aspectos relacionados con el estudio de los algoritmos que son:
• Diseño. Consiste en el estudio formal del problema y la aplicación de técnicas y/o esquemas que
faciliten la obtención de un algoritmo que resuelva dicho problema.
• Complejidad. Hace referencia a la estimación de la cantidad de recursos (tiempo y memoria) que el
algoritmo necesitará para su ejecución una vez implementado. Este aspecto tiene una gran importancia
tanto en la teoría como en la práctica. Además, para que este análisis tenga importancia, ha de ser
independiente del computador y del lenguaje de implementación final que se vaya a utilizar.
• Verificación. Engloba el estudio de las técnicas de comprobación formal de la corrección del
algoritmo. Consiste en demostrar que el algoritmo termina en un tiempo finito y que su resultado es
correcto para toda entrada de datos válida.
• Codificación. Es el proceso de obtención de un programa correcto expresado en algún lenguaje de
programación a partir del algoritmo. Este proceso puede llegar a ser bastante complejo en función del
nivel de especificación del algoritmo y del lenguaje de programación utilizado.
1
FUNDAMENTOS DE PROGRAMACIÓN II
• Fundamentos de Programación I. Asignatura básica que facilita una visión inicial del campo de la
programación a través del estudio de los elementos básicos de un lenguaje de programación y el
estudio de los distintos paradigmas de programación existentes.
• Fundamentos de Programación II. Asignatura que facilita la aplicación de los conceptos generales
de un lenguaje mediante el estudio y uso de un lenguaje de programación de tipo imperativo.
• Diseño y Análisis de Algoritmos. Asignatura que estudia los conceptos de diseño, análisis y
verificación de algoritmos y sus técnicas asociadas.
Diseño de redes de comunicación − Diseñar, construir y poner en funcionamiento prototipos para probar y
demostrar distintas funciones.
− Ayudar a técnicos de integración y pruebas y trabajar con ellos para que
conozcan el diseño.
− Detectar y resolver problemas.
Desarrollo de software y − Desarrollar el código y los algoritmos de las pruebas o los aspectos de control
aplicaciones en tiempo real mediante un procedimiento de trabajo modular que siga la
estructura prevista.
− Analizar rutinas y módulos, rendimiento, tamaño de memoria, etc. de sistemas
técnicos (integrados), cuando proceda.
− Prestar apoyo a la dirección del proyecto.
− Construir el sistema y los subsistemas de acuerdo con el diseño y la estructura
desarrollada y la configuración modular.
− Construir prototipos de todo el sistema o de algunas de sus partes.
− Colaborar con el arquitecto y el diseñador de sistemas.
− Diseñar las pruebas de los módulos y ayudar a diseñar las pruebas de
integración e instalación. Realizar la integración del sistema, las pruebas de
integración y la instalación.
− Desarrollar o aplicar un procedimiento de control de versiones, un
procedimiento de instalación y un paquete completo de documentación.
Añadir boletines de versión y otros documentos relevantes.
− Realizar la presentación técnica, la instalación y las pruebas finales del sistema.
Diseño multimedia − Crear prototipos, simulaciones o espacios virtuales para distintas tecnologías
multimedia.
2
GuíaDocente
Ingeniería de integración, pruebas − Configurar el producto o sistema para atender las necesidades de los clientes.
e implantación − Diseñar y realizar pruebas de funcionamiento representativas para demostrar
la capacidad.
− Asegurarse de que el producto o sistema funciona según las especificaciones.
1.1.1. Referencias
[ACM1968] ACM Curriculum Committe on Computer Science. Curriculum 68. Recomendations for the
undergraduate program in Computer Science. Communications of the ACM, 11(3).
[ACM1979] ACM Curriculum Committe on Computer Science. Curriculum 78. Recomendations for the
undergraduate program in Computer Science. Communications of the ACM, 22(3).
[ACM1991] ACM/IEEE Joint Curriculum Task Force. Computing Currricula 1991. ACM Press, IEEE
Computer Society Press,1991.
[ACM2001] Association for Computing Machinery. ACM code of ethics and professional conduct.
New York: The Association for Computing Machinery, May 2001. http://www.acm.org/sigcse/cc2001.
[IEEE1977] A curriculum in computer science and engineering. IEEE Society Press N.Y.
[IEEE1983] IEEE Educational Activities Board. Model Program in Computer Science and Enginering.
IEEE Computer Society.
[CM1985] The Carnegie-Mellon curriculum for undergraduate in Computer Science. Springer-Verlag.
[UNE1984] A modular curriculum in computer science. UNESCO-IFIP.
3
FUNDAMENTOS DE PROGRAMACIÓN II
2. Objetivos
2.1. Objetivos generales
4
GuíaDocente
• Adquirir aquellos conceptos básicos y métodos relacionados con la programación que son
recomendaciones o prerrequisitos de otras asignaturas.
• Aplicar los conocimientos adquiridos mediante la resolución de problemas, su implementación y su
ejecución en un ordenador.
• Utilizar con fluidez el software necesario en las prácticas relacionadas con la asignatura.
• Adquirir el lenguaje propio de la materia y utilizarlo correctamente tanto de forma oral como escrita.
• Conocer y utilizar la terminología usual de la asignatura en castellano y/o en valenciano y conocer
dicha terminología en inglés.
2.2. Competencias
Habilidades cognitivas:
• Conocer la estructura de un programa en un lenguaje determinado. En este caso el lenguaje C/C++.
• Conocer y saber emplear los componentes básicos del lenguaje de programación C/C++: Palabras
reservadas, Identificadores, Tipos de datos básicos, Constantes y operadores.
• Conocer y entender del funcionamiento de las operaciones básicas de entrada/salida en C/C++.
• Entender el concepto de estructuras de control. Conocer y saber emplear las estructuras
secuenciales, las estructuras de selección y las estructuras iterativas de control de ejecución de
algoritmos en C/C++.
• Comprender el concepto de programación modular. Conocer y comprender el concepto de módulo o
función. Entender la necesidad de descomponer los problemas en subproblemas de menor tamaño para
facilitar su resolución y facilitar la reutilización de software. Saber implementar funciones en C/C++.
• Entender el concepto de parámetro y de sus diferentes usos en las funciones.
5
FUNDAMENTOS DE PROGRAMACIÓN II
Capacidades metodológicas:
• Ser capaz de representar de forma algorítmica la solución a un problema determinado.
• Ser capaz de aplicar correctamente y manejar con comodidad los diferentes elementos de los que
dispone un lenguaje para implementar una solución automática a un problema.
Destrezas tecnológicas:
• Manejar las operaciones básicas de los sistemas operativos MSWindows y Linux que permitirán la
interacción con los sistemas informáticos para el desarrollo e implementación de soluciones algorítmicas
concretas.
• Manejar con fluidez las herramientas de edición, implementación y compilación de programas en
C/C++ que servirá de guía para la resolución de problemas relacionados con la teoría de grafos.
• Manejar con fluidez las herramientas de compilación separada.
• Habilidades básicas de consulta de la red informática para la obtención y manejo de información
relacionada con el lenguaje de programación a emplear en el desarrollo de programas.
• Habilidades básicas de consulta de la red informática para la obtención y manejo de información
relacionada con la programación de computadores.
Destrezas lingüísticas:
• Adquirir un buen conocimiento del lenguaje relacionado con la programación y sus estructuras.
Emplear este lenguaje con propiedad, siendo riguroso en las explicaciones de cualquier proceso
relacionado con la teoría de la programación.
• Conocer y utilizar la terminología usual en programación tanto en castellano como en valenciano
como en inglés.
Habilidades cognitivas:
• Entender el concepto de vector y matriz.
• Saber definir estructuras de datos de tipo vector y matriz. Conocer y entender las operaciones sobre
estas estructuras en C/C++.
• Entender las estrategias de los principales algoritmos de búsqueda en vectores.
• Entender las estrategias de los principales algoritmos de ordenación de vectores.
• Conocer y entender las diferentes estructuras posibles para el tratamiento de cadenas en C/C++: los
vectores de caracteres y el tipo string.
• Conocer las diferentes operaciones sobre cadenas de caracteres.
• Entender la necesidad de emplear estructuras de información complejas. Conocer las formas básicas
de definición de estructuras de información en C/C++: registros, uniones y tipos enumerados. Razonar
acerca de su uso y entender sus diferencias.
• Comprender la necesidad de almacenamiento de información en medios no volátiles. Conocer el
concepto de fichero y sus diferentes tipos. Conocer las operaciones que se pueden realizar sobre ellos y
entender su funcionamiento.
• Entender la necesidad de las estructuras dinámicas de información. Asimilar el concepto de
estructura dinámica de información y sus aplicaciones.
6
GuíaDocente
• Conocer los componentes básicos de las estructuras dinámicas de información: los punteros.
Entender el concepto de puntero y sus posibilidades de uso.
• Conocer las principales estructuras enlazadas de información: listas, pilas y colas.
• Entender el concepto de lista, pila y cola, sus aplicaciones y sus operaciones básicas.
Capacidades metodológicas:
• Ser capaz de representar los diferentes tipos de información de un problema empleando las
estructuras de datos adecuadas encada caso.
• Ser capaz de definir una estructura de datos concreta adecuada a un problema en particular.
• Ser capaz de emplear las estructuras dinámicas de información de acuerdo a sus características.
Destrezas tecnológicas:
• Habilidades básicas de consulta de la red informática para la obtención y manejo de información
relacionada con el uso del lenguaje de programación a emplear en el desarrollo de programas.
Destrezas lingüísticas:
• Adquirir un buen conocimiento del lenguaje relacionado con la programación y sus estructuras
básicas de información. Emplear este lenguaje con propiedad, siendo riguroso en las explicaciones de
cualquier proceso relacionado con la teoría de la programación.
• Conocer y utilizar la terminología usual en programación tanto en castellano como en valenciano y
en inglés.
7
FUNDAMENTOS DE PROGRAMACIÓN II
3. Prerrequisitos
3.1. Competencias y contenidos mínimos
• Entender el concepto de algoritmo.
• Conocer las principales formas de representar los algoritmos.
• Conocer el proceso básico de diseño de un algoritmo independientemente del lenguaje de
programación que se vaya a utilizar en su implemetación.
• Conocer los elementos básicos de un lenguaje de programación de 3ª generación: variables,
funciones, tipos de datos estructurados, punteros, estructuras de datos dinámicas y ficheros.
• Conocer los distintos paradigmas de programación como alternativa y complemento a los lenguajes
de programación procedimentales clásicos.
8
GuíaDocente
9
FUNDAMENTOS DE PROGRAMACIÓN II
5. Metodología y estrategias de
aprendizaje
5.1. Metodología docente
En un proceso de enseñanza-aprendizaje, el objetivo final es el del aprendizaje: enseñamos con el
fin de conseguir un aprendizaje de calidad. Pero, ¿qué es un aprendizaje de calidad?. En esencia, aquél
capaz de conseguir que el alumno asimile los conocimientos y desarrolle la destreza y las actitudes
definidas en los objetivos propuestos al inicio del proceso. Es por tanto muy importante la incorporación de
consideraciones metodológicas que faciliten el desarrollo de un aprendizaje experimental y fomente las
actitudes críticas y creativas en el alumno. Los nuevos paradigmas docentes propugnan los modelos
educativos que propician el pensamiento creativo, enseñando a aprender por encima de enseñar
conocimientos. Nos proponemos diseñar un modelo en el que la clase magistral tiene un papel importante
pero no exclusivo en la transmisión de conocimientos. Este tipo de enseñanza se va a complementar con
otros procesos entre los que cabe destacar las prácticas de laboratorio y las actividades en grupos
pequeños que jugarán un papel fundamental. Se proponen las siguientes actividades:
• Clases de teoría: en estas clases se presentarán los contenidos básicos de un cierto tema.
Comienzan por una introducción donde se comentarán los contenidos del tema y sus objetivos
específicos, así como un breve comentario sobre los conceptos ya vistos en clases anteriores y que
tengan incidencia en los puntos a tratar. A continuación se realizará la exposición de los contenidos,
haciendo uso de aquellos medios audiovisuales, textos y documentos que permitan un adecuado nivel
de motivación e interés en los alumnos. En la metodología propuesta se compaginarán clases
expositivas-frontales (de tipo magistral) con clases expositivas-interactivas (solución de problemas,
estudio de casos prácticos, trabajos por grupos, etc.), intentando hacer uso de estas segundas siempre
que sea posible. Las características de las asignaturas tratadas en este Proyecto Docente facilitan dicha
aproximación ya que se pueden introducir los conceptos básicos para después pasar a proponer y
solucionar problemas basados en dichos conceptos básicos. En esa línea, se debe motivar a los
alumnos a intervenir en cualquier momento en las clases de teoría, exponiendo sus dudas, realizando
comentarios que se intentarán aprovechar para realizar de forma más dinámica la clase y facilitar el
aprendizaje deseado por parte de los alumnos. Por último, es interesante dedicar siempre un periodo de
la clase para mostrar las conclusiones más importantes a modo de resumen del tema.
• Clases de prácticas: las prácticas son también un medio excelente para que el alumno potencie su
iniciativa y capacidad crítica. Además, son imprescindibles para conseguir un buen aprendizaje en
materias científicas y tecnológicas, permitiendo proyectar los conocimientos acumulados sobre
problemas reales. Por todos estos motivos es necesario prestar a las prácticas una gran atención y
dedicación, para conseguir hacerlas útiles y sugestivas. Así, la planificación y supervisión deben ser
completas y directas. Por último, las clases prácticas permiten al profesor estar en mayor contacto con
los alumnos debido al número reducido de alumnos por cada grupo, permitiéndole realizar un mejor
seguimiento de cada alumno.
10
GuíaDocente
El enfoque utilizado en las prácticas es el siguiente:
− Se plantean como una serie de problemas de complejidad creciente.
− Se realizará un seguimiento continuado a las tareas que realiza el alumno. Este seguimiento
permite observar los progresos que realiza el alumno a lo largo del curso. Además, se
pretende evitar que el alumno inicie sus prácticas con planteamientos incorrectos. Por último,
se establece la comunicación con el alumno que permite que se le pueda indicar los errores
que está cometiendo y el modo de solucionarlos.
− Se deberán realizar en parejas. Con ello se pretende fomentar el trabajo en equipo y
favorecer el intercambio de conocimientos entre los integrantes de la pareja. Aunque se
especificará que la evaluación de sus conocimientos se realizará de forma individual.
− Los alumnos dispondrán con suficiente antelación de los enunciados de las prácticas. Los
enunciados deberán contener objetivos generales, materias de trabajo, contenido mínimo de
las memorias que se exigirán en cada práctica y fecha de entrega.
− Deberán estar sincronizadas con las clases de teoría. Así se consigue que el alumno conozca
los aspectos teóricos previamente al planteamiento del trabajo práctico.
• El proceso tutorial: las horas de asistencia al alumnado o tutorías son esenciales para la calidad de
la enseñanza. Estas son la continuación de las clases de exposición, de problemas y prácticas de
laboratorio. La atención personalizada en las horas de asistencia al alumnado mejora el aprendizaje y el
conocimiento entre profesor y alumno. Los alumnos podrán acudir al profesor dentro de un horario
estipulado. Desgraciadamente, un elevado número de alumnos no acude a tutorías o hace un escaso
uso de ellas. Probablemente, ello se debe a que los alumnos no estudian de forma continuada y sólo
acuden al profesor en las vísperas del examen o de la entrega de trabajos. Por ello, es muy importante
recordarles que disponen de ellas durante todo el curso y animarlos a que acudan.
• Actividades adicionales: es conveniente que los alumnos puedan realizar algunas actividades
adicionales que le estimulen e incrementen su interés por la asignatura. Estas actividades deben ser
optativas, ya que su principal objetivo es permitir al alumno profundizar en algunos temas y no marcar
un requisito adicional para superar la asignatura. Las actividades pueden consistir en asistencia a
11
FUNDAMENTOS DE PROGRAMACIÓN II
seminarios y conferencias de interés sobre temas puntuales o bien realizar trabajos de curso que
potencien el trabajo en equipo.
12
GuíaDocente
correspondiente, publicado en el campus virtual. Es conveniente no utilizar los apuntes la
primera vez que se haga, ya que luego se podrá rehacer las veces que se quiera.
5. Evaluación final: si el resultado de todos los ejercicios de autoevaluación ha sido satisfactorio,
el estudiante estará bastante preparado para la realización del examen final. No obstante, para
abordar el examen final con buenas perspectivas, será necesario un repaso exhaustivo del
contenido completo de la asignatura incidiendo en las partes en las que se haya tenido más
dificultad.
6. De forma opcional se podrá hacer un trabajo complementario, individual o en grupo, para subir
la nota, siempre y cuando se haya aprobado el examen final.
Presentación: 2
Lección 1 2 2
Lección 2 2 2
Lección 3 2 2
Lección 4 2 2
Lección 5 2 2
Lección 6 2 2
Lección 7 2 2
Lección 8 4 4
Lección 9 6 6
Preparación
2
Examen final
Examen final: 3
TOTAL: 55 31 24
13
FUNDAMENTOS DE PROGRAMACIÓN II
Lección 1 3 3
Lección 2 3 3
Lección 3 3 3
Lección 4 3 3
Lección 5 3 3
Lección 6 3 3
Lección 7 3 3
Lección 8 6 4
Lección 9 12 6
Preparación
6
Examen final
Tutorías 3 3
Foros Virtuales 3 3
TOTAL: 88 51 37
7. Bibliografía
7.1. Bibliografía Básica
Libro básico de consulta cuyo contenido se ajusta fielmente al desarrollo de la asignatura. Destaca por
abordar los conceptos de los lenguajes de programación desde una perspectiva teórica que combina
perfectamente con su aplicación práctica a través del estudio del lenguaje C y el C++ en sus aspectos
básicos.
14
GuíaDocente
Buena referencia de consulta y estudio de los lenguajes C y C++. Destaca por abordar el estudio del
lenguaje C++ como transición desde C, lo que facilita la comprensión de aquellos aspectos diferenciales
del segundo con respecto al primero. Sin embargo, carece de ejemplos relacionados con la asignatura,
lo que lo convierte en un libro general de consulta de estos lenguajes.
Libro básico de consulta para la realización de prácticas. Describe de forma clara y detallada el uso del
lenguaje C++ desde sus estructuras básicas hasta sus aspectos más complejos. Explica detalladamente
la implementación y funcionamiento de numerosos algoritmos relacionados con la asignatura como los
de ordenación de vectores.
Este libro tiene por objetivo mostrar los conocimientos necesarios para llegar a realizar programas en un
lenguaje estructurado, pasando previamente por la obtención de unos conocimientos abstractos de
metodología de la programación y de estructura de datos, que nos permitan asentar las bases para el
futuro desarrollo de programas en cualquier lenguaje estructurado. El texto está organizado en dos
partes: (1) Estructura de datos y metodología de la programación estructurada, y (2) Programación en
lenguaje C.
El objetivo de este libro es enseñar el lenguaje de programación C a personas sin conocimientos previos
de programación. Cabe destacar el hecho de que el aprendizaje de esta programación se hace en
forma estructurada, con el fin de que el lector aprenda a realizar los programas de forma más eficiente y
éstos sean más fáciles de leer. Se estudian todas las herramientas y técnicas básicas de la
programación en C como son: bucles, vectores y matrices, cálculos, estructuras de datos,
entrada/salida, etc., e incluye un último capítulo dedicado a temas avanzados donde se tratan tópicos
como punteros a funciones, funciones como parámetros, programas con módulos y el uso de la
herramienta make. Se presentan de forma completa todos los aspectos de la programación en lenguaje
C con múltiples figuras y esquemas, lo que permite ofrecer un tratamiento gráfico de todos los temas
estudiados.
15
FUNDAMENTOS DE PROGRAMACIÓN II
• La evaluación: los conceptos teóricos de esta asignatura se evalúan por medio de un examen
escrito que se realiza al final del curso (cuatrimestre). Este examen, que supondrá el 50% de la nota
final, contendrá:
− Cuestiones de tipo teórico y
− Resolución de problemas
Por otra parte, las prácticas de laboratorio se evaluarán mediante la realización, en el laboratorio, de una
defensa y entrega de la documentación de las prácticas propuestas durante el cuatrimestre. De este
modo se evalúa tanto la asimilación de los contenidos de las asignaturas como la capacidad por parte
del alumno de elaborar resúmenes, informes o memorias y de defender su trabajo. El peso relativo de
cada una de las prácticas en la nota final de prácticas se calcula en función del número de horas
planificadas para su realización. De este cálculo se excluirán aquellas prácticas de carácter introductorio
que no se crea conveniente su evaluación. El peso relativo de la nota final de prácticas en la nota final
global de la asignatura será del 50%.
Para superar la asignatura se deben aprobar ambas partes por separado.
16
GuíaDocente
17