Download PROGRAMACIÓN DIDÁCTICA FAMILIA PROFESIONAL
Document related concepts
Transcript
PROGRAMACIÓN DIDÁCTICA FAMILIA PROFESIONAL INFORMÁTICA CICLO FORMATIVO GRADO SUPERIOR DESARROLLO DE APLICACIONES INFORMÁTICAS MÓDULO 3 PROGRAMACIÓN EN LENGUAJES ESTRUCTURADOS PROFESOR JUAN GREGORI COSTA Programación en lenguajes estructurados 1º DAI ÍNDICE 1. SITUACIÓN EN EL CURRÍCULO....................................................................... 3 1.1. LEGISLACIÓN Y DOCUMENTOS USADOS ............................................... 3 1.2. REFERENCIA AL SISTEMA PRODUCTIVO ............................................... 4 2. OBJETIVOS GENERALES................................................................................. 5 3. ORGANIZACIÓN DE CONTENIDOS.................................................................. 8 3.1. RELACIÓN SECUENCIADA DE UNIDADES DE TRABAJO ....................... 8 4. DESARROLLO DE LAS UNIDADES DIDÁCTICAS......................................... 13 5. METODOLOGÍA ............................................................................................... 45 5.1. ASPECTOS GENERALES Y FUNDAMENTACIÓN DIDÁCTICA. PRINCIPIOS METODOLÓGICOS ........................................................................ 45 6. 5.2. CONCRECIÓN DE LA METODOLOGÍA.................................................... 45 5.3. ELEMENTOS DE PARTICIPACIÓN Y MOTIVACIÓN DEL ALUMNADO .. 46 CRITERIOS DE EVALUACIÓN ........................................................................ 47 6.1. SISTEMA DE EVALUACIÓN ..................................................................... 47 6.1.1.EVALUACIÓN INICIAL ....................................................................... 47 6.1.2.EVALUACIÓN FORMATIVA ............................................................... 48 6.1.3.EVALUACIÓN SUMATIVA.................................................................. 49 6.2. CRITERIOS DE CALIFICACIÓN Y RECUPERACIÓN............................... 49 6.2.1.CRITERIOS DE CALIFICACIÓN ........................................................ 49 6.2.2.SISTEMA DE RECUPERACIÓN ........................................................ 51 Página 1 de 271 Programación en lenguajes estructurados 7. 1º DAI RECURSOS MATERIALES Y BIBLIOGRAFÍA DE AULA............................... 51 7.1. MATERIALES Y RECURSOS DIDÁCTICOS............................................. 51 7.2. BIBLIOGRAFIA .......................................................................................... 54 8. ACTIVIDADES COMPLEMENTARIAS Y EXTRAESCOLARES ...................... 56 9. NECESIDADES EDUCATIVAS ESPECIALES................................................. 56 9.1. ADAPTACIÓN ............................................................................................ 57 10. TEMAS TRANSVERSALES.......................................................................... 58 11. RELACIÓN CON OTRAS ÁREAS DEL CURRICULUM............................... 60 ANEXO I: EJEMPLIFICACIÓN DE UNIDADES DE TRABAJO .............................. 61 ANEXO II: CUESTIONARIO DE EVALUACIÓN DEL PROFESOR Y DEL PROCESO ENSEÑANZA-APRENDIZAJE PARA LOS ALUMNOS ..................... 225 ANEXO III: FICHA PARA EVALUACIÓN DE LA UNIDAD DIDÁCTICA POR PARTE DEL PROFESOR ................................................................................................... 229 ANEXO IV: AMPLIACIÓN DE LAS UNIDADES DIDÁCTICAS............................. 232 Página 2 de 271 Programación en lenguajes estructurados 1º DAI 1. SITUACIÓN EN EL CURRÍCULO La duración del módulo profesional es de 380 horas que se encuadran en el primer curso del Ciclo Formativo de Grado Superior correspondiente al título de Técnico Superior en Desarrollo de Aplicaciones Informáticas. Se desarrolla a lo largo de los tres trimestres del curso, impartiéndose doce horas semanales. 1.1. LEGISLACIÓN Y DOCUMENTOS USADOS REAL DECRETO 1661/1994 de 22 de Julio (BOE 30 de Septiembre), por el que se establece el título y las correspondientes enseñanzas mínimas. Este es el primer documento de referencia, ya que por él se crea el título y además se regulan las enseñanzas que serán comunes en todo el estado. REAL DECRETO 1676/1994, de 22 de julio (BOE 6 de Octubre), por el que se establece el currículo del ciclo formativo de grado superior correspondiente al título de Técnico Superior en Desarrollo de Aplicaciones Informáticas. REAL DECRETO 676/1993, de 7 de mayo, donde se establecen las directrices generales y las enseñanzas mínimas correspondientes a la Formación Profesional. REAL DECRETO 1004/1991, en el que se fijan los requisitos mínimos del profesorado, y los centros que imparten enseñanzas de Formación Profesional. Artículo 35 de la Ley Orgánica 1/1990, del 3 de octubre, por la que se establecen los estudios correspondientes a la Formación Profesional así como las enseñanzas mínimas de los mismos. Otros documentos a considerar A nivel de centro, la programación didáctica ha considerado: Página 3 de 271 Programación en lenguajes estructurados • 1º DAI Proyecto de Centro. Desde un enfoque claramente pedagógico donde se establecen las líneas básicas de actuación docente. • Proyecto Curricular del Ciclo Formativo. Del cual se han extraído propuestas de secuenciación, contenidos, orientaciones metodológicas, capacidades terminales asociadas al ciclo, etc. • Contexto del centro, alumnado y los recursos. 1.2. REFERENCIA AL SISTEMA PRODUCTIVO La referencia al sistema productivo está definida totalmente en el Real Decreto de mínimos. En primer lugar en la competencia general del título: Desarrollar aplicaciones informáticas, participando en el diseño y realizando la programación, pruebas y documentación de las mismas de conformidad con los requisitos funcionales, especificaciones aprobadas y normativa vigente. En segundo lugar, y aumentando el nivel de concreción, en la unidad de competencia número 3, a la que está asociado este módulo: Elaborar, adaptar y probar programas en lenguajes de programación estructurados y de cuarta generación. Afinando más, nos encontramos que esta unidad de competencia se concreta en cinco realizaciones: • Elaborar programas y rutinas siguiendo las especificaciones establecidas en el diseño, con bajo coste de mantenimiento. • Integrar y enlazar programas y rutinas siguiendo las especificaciones establecidas en el diseño. • Realizar pruebas funcionales de programas atendiendo a las especificaciones Página 4 de 271 Programación en lenguajes estructurados 1º DAI establecidas en el diseño. • Elaborar y mantener documentación descriptiva de programas y pruebas que permita la consulta y actualización por terceras personas. • 2. Efectuar cambios en programas de acuerdo con los nuevos requerimientos. OBJETIVOS GENERALES El módulo pretende dotar al alumno de los fundamentos básicos de programación con lenguajes estructurados. Dichos conceptos incluyen la adquisición de la suficiente destreza en la plasmación algorítmica de las soluciones a cada problema, el conocimiento en las estructuras de datos existentes y la filosofía de trabajo de esta técnica de programación. El módulo capacita al alumno para la realización de todo tipo de programas en modo texto, con el empleo de cualquier tipo de estructura de datos y las técnicas de programación estructurada y modular (múltiples funciones, propias y de librería, y múltiples ficheros). Como objetivos fundamentales se detallan los siguientes: • Elaborar programas y rutinas siguiendo las especificaciones en el diseño. • Integrar y enlazar programas y rutinas siguiendo las especificaciones establecidas en el diseño. • Realizar pruebas funcionales de programas atendiendo a las especificaciones establecidas en el diseño. • Elaborar y mantener documentación descriptiva de programas y pruebas que permita la consulta y actualización por terceras personas. • Efectuar cambios en programas de acuerdo con los nuevos requerimientos Página 5 de 271 Programación en lenguajes estructurados 1º DAI establecidos. • Elaborar programas y prototipos de aplicaciones Windows mediante metodología visual. • Adquirir un vocabulario técnico orientado a la informática. Con la superación de este módulo se pretende que el alumno sea capaz de proponer y coordinar cambios para mejorar la explotación del sistema y de las aplicaciones. Para ello debe adquirir las siguientes capacidades terminales: • Elegir y definir una estructura de datos para resolver un problema con lenguajes estructurados. • Aplicar la metodología de desarrollo estructurada para el desarrollo de algoritmos. • Codificar programas en lenguajes estructurados de tercera generación. Además, para la consecución de los objetivos, deben tenerse en cuenta los puntos que se detallan a continuación: • Sean cuales sean los objetivos, lo importante es que estén claros, que el alumno los conozca desde el principio y sepa donde se encuentra, hacia donde se dirige y por qué se persiguen estos objetivos. • Es necesario en cada tema conocer lo que los alumnos saben previamente y hacer que su enseñanza y aprendizaje sea accesible a todos. Por ello en la mayor parte de los temas se partirá de un nivel de conocimiento cero sobre el mismo, y se prestará atención a desterrar las posibles ideas previas que contradigan o entren en conflicto con los nuevos contenidos o métodos de trabajo. Página 6 de 271 Programación en lenguajes estructurados • 1º DAI Es necesario crear un clima que de confianza al alumno que nos llega fracasado de otros niveles, y recordarle que estos son unos estudios específicos y por tanto debe abordarlos como tales, con ánimo de superarlos. • Valorar suficientemente los estudios que están realizando. Está muy arraigada aún la idea de que la Formación Profesional reglada es una enseñanza de 2ª categoría. Es necesario fomentar la idea, de que un ciclo formativo de nivel superior son los estudios de más alto nivel que se pueden realizar en un centro de secundaria, y por tanto deben ser vistos con la consideración que merecen. • Incidir en la motivación de los alumnos, pero más que con actividades lúdicas y culturales, que también son necesarias, procurando acercarles a la realidad del mundo laboral en el que se desenvolverán muy pronto. Que vean la utilidad de lo que están estudiando en el sentido que más valoran: Encontrar un puesto de trabajo. Hay que procurar no caer en el pesimismo y fomentar su capacidad de lucha. Por último se citan objetivos generales sobre educación: • Seleccionar y valorar críticamente distintas fuentes de información relacionadas con su profesión, que le permitan el desarrollo de su capacidad de autoaprendizaje y posibiliten la evolución y adaptación de sus capacidades profesionales a los cambios tecnológicos y organizativos del sector. • Valorar la importancia del trabajo en grupo, asumiendo responsabilidades individuales en la ejecución de las tareas encomendadas desarrollando actitudes de cooperación. Página 7 de 271 Programación en lenguajes estructurados • 1º DAI Iniciar a los alumnos en el mundo de la programación mediante un lenguaje de programación de alto nivel. 3. ORGANIZACIÓN DE CONTENIDOS Los contenidos del módulo se encuentran estructurados en los siguientes bloques: 1. Metodología de la programación. 2. Programación básica. 3. Estructuras de datos. 4. Programación avanzada. 5. Mantenimiento de aplicaciones. 6. Más allá de la programación estructurada. 7. Desarrollo de un proyecto. 3.1. RELACIÓN SECUENCIADA DE UNIDADES DE TRABAJO La propuesta de programación está constituida por una relación secuenciada de unidades de trabajo donde se integran y desarrollan, al mismo tiempo, los procedimientos, los conceptos, las actividades de enseñanza-aprendizaje y los criterios de evaluación. Para el diseño de una programación concreta será preciso contemplar: • Los conocimientos previos del alumno. • Los recursos materiales del centro educativo. • Los medios utilizados en el entorno productivo. En cuanto al primer aspecto se ha considerado que los conocimientos previos del Página 8 de 271 Programación en lenguajes estructurados 1º DAI alumno son inexistentes. Tratándose de un módulo de primer curso, muchos alumnos se inician en la programación con este módulo. Para el segundo aspecto se ha considerado un aula de informática con el suficiente número de equipos como para que los alumnos puedan trabajar individualmente o en grupos de dos. Sería conveniente disponer en el aula de equipos de cierta envergadura, conectados en red y con la adecuada dotación de software (sistema operativo Linux, sistema operativo de red, y sistema y herramientas de desarrollo como editor de texto tipo vi o emacs, compilador de C, depurador, herramientas de creación de librerías, make, etc.). En cuanto al tercer aspecto, dados los sistemas operativos utilizados y la portabilidad del lenguaje de programación elegido, es el que menos problemas plantea. A la estructura de contenidos anteriormente indicada le corresponden las siguientes unidades, con el número aproximado de horas asociado a cada una de ellas. Página 9 de 271 Programación en lenguajes estructurados BLOQUES 1º DAI TÍTULO DE LAS UNIDADES DE HORAS EV. TRABAJO Nº 1 2 3 NOMBRE Nº NOMBRE Metodología de la 1 Introducción a la programación 12 1ª programación. 2 Metodología de la programación 32 1ª Programación básica. 3 Introducción al lenguaje C 20 1ª 4 Programación modular en C 34 1ª 5 Estructuras de datos estáticas 20 1ª 6 Ordenación y búsqueda en vectores 20 1ª 7 Estructuras externas 36 1ª 2ª 8 Estructuras de datos dinámicas 30 2ª Estructuras de datos. lineales 4 Programación 9 Librerías en el lenguaje C 16 2ª avanzada. 10 Recursividad 10 2ª 11 Estructuras de datos dinámicas no 30 2ª lineales 5 Mantenimiento de 12 aplicaciones. 6 7 Más allá Diseño efectivo de programas y 16 2ª 3ª aplicaciones algorítmicas de la 13 Programación orientada a objetos 12 3ª programación 14 Programación en C++ 40 3ª estructurada. 15 Introducción a la programación visual 12 3ª Proyecto. 16 Proyecto integrador 40 3ª TOTAL 380 Página 10 de 271 Programación en lenguajes estructurados 1º DAI La distribución de horas por evaluación queda de la siguiente forma: 1ª evaluación 148 horas 2ª evaluación 115 horas 3ª evaluación 117 horas La U.D.1 tiene como finalidad presentar al alumno los conceptos básicos de la programación. Es una unidad eminentemente conceptual que pretende presentar, de forma global, el contenido que se verá durante todo el Módulo. La U.D.2 presenta al alumno los métodos y técnicas que le permitirán realizar buenos programas. Se expondrán las herramientas de diseño de algoritmos así como las pautas que debe seguir en su diseño y las técnicas de programación utilizadas en la actualidad. Los contenidos son de tipo conceptual y procedimental. La U.D.3 presenta un lenguaje procedimental estructurado, el C. Pretende dar una visión general del lenguaje. Asimismo se pretende que el alumno adquiera los suficientes conocimientos sobre el compilador y su entorno de trabajo como para poder empezar a codificar desde este momento. La U.D.4 pretende en su inicio que el alumno descubra los diferentes tipos de datos que se utilizan en C para dedicarse posteriormente a la descripción de los tipos de datos sencillos que maneja el C y su forma de utilizarlos. También se ocupa de las estructuras de programación características del lenguaje de manera que el alumno pueda empezar a resolver problemas sencillos siguiendo siempre los mismos pasos: interpretación de los problemas, diseño del algoritmo utilizando Página 11 de 271 Programación en lenguajes estructurados 1º DAI alguna de las herramientas vistas en la U.D.2, codificación en C, pruebas, depuración y documentación. La U.D.5. presenta las primeras estructuras complejas de datos: las estructuras internas estáticas. Se enseña al alumno a utilizar estas estructuras. Al finalizar esta unidad el alumno debe ser capaz de resolver ejercicios de cierta complejidad. El contenido de esta unidad es procedimental. La U.D.6 se adentra en la realización de distintos algoritmos de búsqueda y ordenación y es de tipo conceptual y procedimental. La U.D.7 presenta al alumno las estructuras externas de datos. La comprensión de estas estructuras es fundamental ya que suponen un almacenamiento permanente de datos. Es de contenido conceptual y procedimental. La U.D.8 presenta al alumno las estructuras dinámicas de datos lineales. Este tipo de estructuras son características del lenguaje C y le proporcionará una forma muy flexible de gestionar la memoria. Al finalizar la unidad el alumno debe haber adquirido los conocimientos y destrezas necesarios para el manejo de estas estructuras en problemas de gestión. Es de contenido procedimental. La U.D.9 dota al alumno de la capacidad de creación de sus propias librerías y uso de éstas y de las librerías estándar. Son de contenido procedimental. La U.D.10 enseña al alumno nuevas técnicas de programación como es la recursividad. Es de contenido procedimental y conceptual. La U.D.11 presenta al alumno las estructuras dinámicas de datos no lineales. En concreto el alumno conocerá y aprenderá a implementar las estructuras dinámicas denominadas árboles y grafos. Es de contenido procedimental. Página 12 de 271 Programación en lenguajes estructurados 1º DAI La U.D.12 establece los buenos hábitos de programación: técnicas de pruebas de programas y documentación. La U.D.13 pretende ser una introducción a otra forma de entender la programación: la programación orientada a objetos (P.O.O.). Se puede usar el compilador de C++ para la resolución de ejercicios sencillos. La U.D.14 se presenta con un enfoque eminentemente práctico desde el punto de vista de un lenguaje orientado al objeto. Intentando que el alumno aprenda de una forma lo más práctica y directa posible, a través de ejemplos, programas, ejercicios, etc. La mayoría de los conceptos habrán sido vistos en la unidad anterior. La U.D.15 pretende ser una introducción a la programación visual, dado que tanto en segundo curso como en la vida real se van a encontrar con problemas cuya solución requiere una interfaz de usuario. La U.D.16 consiste en el desarrollo de un proyecto de programación que sirva para resolver la informatización de algún tipo de gestión. La idea es que el proyecto sea desarrollado en grupos de trabajo de dos o tres alumnos. Esta unidad es la que pondrá a prueba los conocimientos y destrezas adquiridos por los alumnos. 4. DESARROLLO DE LAS UNIDADES DIDÁCTICAS Unidad Didáctica Nº: 1 Duración: 12 horas Título: Introducción a la programación Objetivos didácticos: - Clasificar el software de un ordenador. - Distinguir entre algoritmo y programa. - Distinguir entre los objetos de un programa. Página 13 de 271 Programación en lenguajes estructurados 1º DAI Análisis de Contenidos: Conceptuales: 1. Los sistemas de procesamiento de la información. 2. Concepto de algoritmo. 3. Fases de elaboración de un programa informático. 3.1. Análisis. 3.2. Diseño. 3.2. Codificación. 3.3. Explotación. 3.4. Mantenimiento. 4. Ensambladores, compiladores e intérpretes. 5. Objetos de un programa. 5.1. Datos y tipos de datos. 5.2. Constantes y variables. 5.3. Expresiones. 6. Lenguajes. Tipos. Procedimentales: - Manejo y uso de los manuales, material bibliográfico y apuntes de clase. - Encauzar a los alumnos hacia el mundo de la programación. - Descripción del ciclo de vida de una aplicación informática. - Interpretación de algoritmos y de errores. - Descripción de las características que debe tener un buen programa. - Documentación de algoritmos y programas. - Identificación y utilización de los objetos de un programa. Página 14 de 271 Programación en lenguajes estructurados 1º DAI Actitudinales: - Relacionar el trabajo con el estudio. - Fomentar la toma de decisiones. - Ensayar temas en grupos de trabajo para posteriores exposiciones. Criterios de evaluación: - Describir las fases de elaboración de una aplicación informática. - Identificar las partes de un programa. - Clasificar los lenguajes de programación. Actividades de enseñanza-aprendizaje a desarrollar: - Planteamiento de situaciones cotidianas para resolverlas mediante el correspondiente algoritmo. - Identificación de las distintas partes de un programa sobre listados. - Creación y diseño de algoritmos sencillos. - Comprensión y discusión de documentación sobre programas. - Resúmenes y realización de ejercicios. Unidad Didáctica Nº: 2 Duración: 32 horas Título: Metodología de la programación Objetivos didácticos: - Elaborar toda la documentación necesaria para documentar los distintos módulos en que dividimos un programa. - Diferenciar entre las distintas formas de paso de parámetros. - Establecer las pautas necesarias para la construcción de programas. Página 15 de 271 Programación en lenguajes estructurados 1º DAI Análisis de Contenidos: Conceptuales: 1. Estructura general de un programa. 1.1. Concepto de programa. 1.2. Partes de un programa. 1.3. Elementos básicos de un programa. 1.4. Instrucciones. Tipos de instrucciones. 2. Herramientas para el diseño de algoritmos. 2.1. Diagramas de flujo. 2.2. Pseudocódigo. 2.3. Tablas de decisión. 3. Técnicas de programación. 3.1. Programación convencional. 3.2. Programación estructurada: estructuras básicas, diseño descendente. 3.3. Programación modular. Procedimentales: - Manejo y uso de los manuales, material bibliográfico y apuntes de clase. - Interpretación del problema. - Elección de las estructuras de programación necesarias para la resolución del problema. - Construcción del algoritmo en pseudocódigo utilizando las estructuras elegidas. - Edición del algoritmo. - Realización de pruebas. - Corrección de los errores observados. Página 16 de 271 Programación en lenguajes estructurados 1º DAI - Documentación del programa. Actitudinales: - Seguir el orden en los pasos de desarrollo de un programa. - Desarrollar la toma de decisiones. - Fomento de la actitud positiva en el hábito del trabajo. Criterios de evaluación: - Representar un algoritmo usando las diferentes técnicas descriptivas. - Generar descripciones verbales de las tareas que realiza un módulo. - Convertir un algoritmo de una técnica descriptiva a otra. - Diferenciar las partes en las que se divide un programa, y los diferentes tipos de instrucciones que lo componen. - Elegir la técnica descriptiva adecuada a cada problema. - Generar pseudocódigo legible y con comentarios. - Descomponer un problema en diferentes módulos. - Diferenciar procedimientos de funciones, y elegir el tipo adecuado para cada caso. Actividades de enseñanza-aprendizaje a desarrollar: - Realización de ejercicios en pseudocódigo empleando técnicas de programación estructurada. - Realización de un esquema con las instrucciones del pseudocódigo. - Realización de ejercicios prácticos de uso de funciones y procedimientos en un lenguaje estructurado genérico. Con estos ejercicios se hará hincapié en los conceptos de función y procedimiento, diferencias entre programas y subprogramas y paso de parámetros. - Utilización de algoritmos ya probados para su discusión y modificación o mejora. Página 17 de 271 Programación en lenguajes estructurados Unidad Didáctica Nº: 3 1º DAI Duración: 20 horas Título: Introducción al lenguaje C Objetivos didácticos: - Elaborar programas utilizando lenguajes estructurados, cumpliendo con las especificaciones establecidas en el diseño. - Resolver problemas muy sencillos usando el compilador. Análisis de Contenidos: Conceptuales: 1. Historia del lenguaje C. 2. C como lenguaje estructurado. 3. Ensambladores, Compiladores e Intérpretes. 4. Estructura de un programa en C. 4.1. Ficheros de cabecera. 4.2. Directivas #include y #define. 4.3. Tipos de datos. 4.4. Variables y constantes. 4.5. Operadores, expresiones y control de flujo. 5. Entorno del compilador C. Compilador GCC (GNU Compiler Collection). 6. Librerías de C. 7. Compilación, ejecución y depuración de un programa en C. Procedimentales: - Manejo y uso de los manuales, material bibliográfico y apuntes de clase. - Manejo y uso de un compilador C. - Trascripción de ejemplos al compilador C. Página 18 de 271 Programación en lenguajes estructurados 1º DAI - Resolución de problemas muy sencillos en C. - Creación de pequeños programas en C a partir de algoritmos sencillos ya descritos. - Realización de pruebas y corrección de errores. - Documentación del programa. Actitudinales: - Iniciativa personal del alumno en la toma de decisiones. - Incrementar la actitud positiva hacia el trabajo en grupo o individual. - Potenciar la adaptación a nuevos cambios en el entorno de trabajo. Criterios de evaluación: - Crear un programa muy sencillo en C, a partir de un algoritmo ya descrito. - Transcribir ejemplos en C a partir del código. - Resolver problemas muy sencillos usando el compilador. - Generar código C legible y con comentarios. Actividades de enseñanza-aprendizaje a desarrollar: - Comentar la historia de C. - Conocer los diferentes compiladores de C disponibles en el mercado, ventajas e inconvenientes de cada uno de ellos. - Escribir un programa en C a partir de un pseudocódigo. - Hacer uso del compilador de C y su entorno. - Realización de ejercicios en pseudocódigo y en C empleando técnicas de programación estructurada. - Comparar las instrucciones del pseudocódigo con las correspondientes en C. Página 19 de 271 Programación en lenguajes estructurados Unidad Didáctica Nº: 4 1º DAI Duración: 34 horas Título: Programación modular en C. Objetivos didácticos: - Elegir las instrucciones adecuadas para cada caso. - Diferenciar entre las distintas formas de paso de parámetros. - Codificar en un lenguaje estructurado programas que resuelvan problemas usando modularidad. Análisis de Contenidos: Conceptuales: 1. Tipos de datos en C: básicos, definidos por el usuario. 2. Elementos del lenguaje C. 2.1. Variables. 2.2. Constantes. 2.3. Operadores. 2.4. Expresiones. 2.5. Control de flujo. 2.6. Entrada/salida estándar. 3. Funciones. 3.1. Definición de una función. 3.2. Declaración y llamada de una función. 3.3. Paso de argumentos por valor y por referencia. 3.4. La función main() con argumentos. 3.5. Las funciones de biblioteca. Página 20 de 271 Programación en lenguajes estructurados 1º DAI 4. Punteros en C. 4.1. Operadores Dirección e Indirección. 4.2. Aritmética de punteros. Procedimentales: - Manejo y uso de los manuales, material bibliográfico y apuntes de clase. - Diseño de funciones. - Manejo de librerías prediseñadas. - Compilación y enlazado del programa objeto y las librerías necesarias. Actitudinales: - Iniciativa personal en la toma de decisiones. - Orden en la realización de ejercicios. - Limpieza en la presentación de los ejercicios. - Trabajo en grupo. Criterios de evaluación: - Diferenciar los distintos tipos de instrucciones, y elegir la instrucción adecuada para cada caso. - Describir las características de cada módulo. - Generar descripciones verbales de las tareas que realiza un módulo. - Representar gráficamente los módulos de un programa y su interrelación. - Dominar un lenguaje de programación estructurado. - Generar pruebas para comprobar la corrección de los programas. - Analizar y diseñar la eficiencia de las estructuras empleadas. Actividades de enseñanza-aprendizaje a desarrollar: - Realización de ejercicios con funciones en C. Página 21 de 271 Programación en lenguajes estructurados 1º DAI - Comprobar las ventajas de los programas modulares con ejemplos y hacer una síntesis de las dificultades encontradas en los mismos. - Diferenciar procedimientos y funciones. Variables locales y globales. Parámetros. Formas de invocar a un módulo. - Corrección de distintas versiones del mismo ejercicio discutiendo las ventajas e inconvenientes de cada uno así como los elementos de programación utilizados. - Trabajo de grupo donde se debe realizar un pequeño programa empleando modularidad. Unidad Didáctica Nº: 5 Duración: 20 horas Título: Estructuras de datos estáticas. Objetivos didácticos: - Elegir y usar de forma correcta la estructura de datos estática idónea para resolver un problema. - Elaborar toda la documentación necesaria para documentar la estructura de datos empleada. - Representar gráficamente cualquier estructura de datos estática. - Codificar en un lenguaje estructurado programas que resuelvan problemas usando estructuras de datos estáticas. Análisis de Contenidos: Conceptuales: 1. Introducción a las estructuras de datos: internas (estáticas y dinámicas) y externas. Página 22 de 271 Programación en lenguajes estructurados 1º DAI 1.1. Tipos abstractos de datos (TAD’s). 2. Estructuras estáticas: definiciones y características. 2.1. Arrays unidimensionales: vectores. 2.2. Arrays multidimensionales. 2.3. Cadenas de caracteres. 2.4. Estructuras. 2.5. Array de estructuras. 2.6. Uniones. 2.7. Ampliación de punteros. Procedimentales: - Análisis de las diferentes estructuras de datos estáticas que pueden solucionar un mismo problema. - Comparativa entre diferentes soluciones propuestas y búsqueda de la óptima. Diseño de la misma. - Implementación de la estructura de datos en un lenguaje de programación estructurado. - Prueba, corrección y mejora de una estructura de datos. - Documentación de una estructura de datos. Actitudinales: - Incrementar la actitud positiva hacia el trabajo en grupo o individual. - Desarrollo de los alumnos en la toma de decisiones. - Potenciar la adaptación a nuevos cambios en el entorno de trabajo. - Apreciar las Estructuras de Datos como elemento imprescindible para crear un programa (Algoritmo + Estructuras de Datos = Programa). Página 23 de 271 Programación en lenguajes estructurados 1º DAI Criterios de evaluación: - Diseñar las estructuras de datos idóneas para cada problema. - Evaluar la eficiencia y el espacio ocupado por la estructura de datos elegida. - Describir las características de cada tipo de estructura de datos estática. - Representar gráficamente todas las estructuras de datos. - Conocer las estructuras de datos estáticas. Actividades de enseñanza-aprendizaje a desarrollar: - Aplicación de las herramientas de diseño de algoritmos a la utilización de las estructuras estáticas y punteros. - Resolución de un problema real por el profesor usando la estructura de datos estática en estudio. - Resolución de un problema complejo en grupo mediante el uso del ordenador. Unidad Didáctica Nº: 6 Duración: 20 horas Título: Ordenación y búsqueda en vectores. Objetivos didácticos: - Conocer e identificar los diferentes métodos de ordenación y de búsqueda. - Elegir el método de búsqueda y ordenación adecuado para cada caso. - Codificar en un lenguaje estructurado los diferentes métodos de búsqueda y ordenación. Análisis de Contenidos: Conceptuales: 1. Introducción. Página 24 de 271 Programación en lenguajes estructurados 1º DAI 2. Búsqueda. 2.1. Secuencial o lineal. 2.2. Binaria o dicotómica. 3. Ordenación. 3.1. Método de intercambio o de la burbuja. 3.2. Método de la burbuja con switch. 3.3. Ordenación por selección. 3.4. Método de inserción o de la baraja. 4. Mezcla de arrays ordenados. Procedimentales: - Manejo y uso de los manuales, material bibliográfico y apuntes de clase. - Estudio de los diferentes algoritmos de búsqueda y ordenación. - Trascripción de estos algoritmos a un lenguaje estructurado. - Comparar la eficiencia de los diferentes algoritmos de ordenación y búsqueda. Actitudinales: - Iniciativa personal en la toma de decisiones. - Criticar y comparar los diferentes métodos. - Limpieza en la presentación de la documentación. - Trabajo en grupo. Criterios de evaluación: - Identificación de los diferentes algoritmos de ordenación y búsqueda. - Utilizando un lenguaje de programación estructurado implementar los diferentes algoritmos de búsqueda y ordenación. - Evaluar la eficiencia y el espacio ocupado por cada algoritmo. Página 25 de 271 Programación en lenguajes estructurados 1º DAI Actividades de enseñanza-aprendizaje a desarrollar: - Resolución de ejercicios en grupo y de forma individual teniendo en cuenta la solución, empleando distintos métodos de ordenación y búsqueda. - Conocer cómo usar las librerías de C para cronometrar el tiempo. - Creación de un programa en C para probar y medir los tiempos de búsqueda y ordenación a partir de los mismos datos. Unidad Didáctica Nº: 7 Duración: 36 horas Título: Estructuras externas. Objetivos didácticos: - Elegir y usar de forma correcta las diferentes organizaciones de ficheros para resolver problemas reales. - Elaborar toda la documentación necesaria para documentar los ficheros que genera o usa un programa. - Codificar en un lenguaje estructurado programas que resuelvan problemas usando ficheros. Análisis de Contenidos: Conceptuales: 1. Archivos o ficheros. 1.1. Terminología. 1.2. Características. 2. Ficheros según su función. 2.1. Ficheros permanentes o maestros. Página 26 de 271 Programación en lenguajes estructurados 1º DAI 2.2. Ficheros de movimientos o transacciones. 2.3. Ficheros de maniobra o trabajo. 3. Ficheros según su organización. 3.1. Secuenciales. 3.2. Directos. 3.3. Indexados. 4. Operaciones a realizar sobre los ficheros. 5. Archivos en C. 5.1. Punteros a archivos. 5.2. Operaciones sobre archivos. Procedimentales: - Manejo y uso de los manuales, material bibliográfico y apuntes de clase. - Manejo de los diferentes tipos de ficheros en un lenguaje de programación estructurado, empleando librerías prediseñadas. - Documentación de las estructuras externas usadas. - Conversión entre diferentes tipos de organizaciones de datos. Actitudinales: - Desarrollo de los alumnos en la toma de decisiones. - Incrementar la actitud positiva hacia el trabajo en grupo o individual. - Potenciar la adaptación a nuevos cambios en el entorno de trabajo. Criterios de evaluación: - Identificar y conocer el funcionamiento de los diferentes tipos de ficheros. - Diferencias entre las distintas organizaciones de los ficheros. Ventajas y desventajas de cada una. ¿Cuándo se debe usar un tipo de organización Página 27 de 271 Programación en lenguajes estructurados 1º DAI determinada? - Analizar y evaluar las diferentes organizaciones de fichero usadas en programas comerciales. - Resolver problemas reales usando estructuras externas. - Describir las características de cada tipo de fichero. - Generar descripciones de los formatos de ficheros creados. Actividades de enseñanza-aprendizaje a desarrollar: - Resolución de ejercicios en grupo y de forma individual teniendo en cuenta: o Reconocimiento y utilización de la organización lógica, acceso a los ficheros. o Utilización de las operaciones sobre ficheros. - Resolución de un problema real por el profesor usando diferentes organizaciones de ficheros. - Resolución de un problema complejo en grupo mediante el uso del ordenador. - Comprobar los progresos realizados por los alumnos, y si han alcanzado los objetivos marcados. Se evaluará el trabajo de grupo de la actividad anterior, y los trabajos realizados en clase. Unidad Didáctica Nº: 8 Duración: 30 horas Título: Estructuras de datos dinámicas lineales. Objetivos didácticos: - Elegir y usar de forma correcta la estructura de datos dinámica lineal idónea para resolver un problema. Página 28 de 271 Programación en lenguajes estructurados 1º DAI - Elaborar toda la documentación necesaria para documentar la estructura de datos empleada. - Representar gráficamente cualquier estructura de datos. - Codificar en un lenguaje estructurado programas que resuelvan problemas usando estructuras de datos dinámicas lineales. Análisis de Contenidos: Conceptuales: 1. Asignación dinámica de memoria. 1.1. Introducción a la asignación dinámica de memoria. 1.2. Las funciones para asignación y liberación de memoria en lenguaje C. 2. Estructura de datos Lista. 2.1. Concepto de lista. 2.2. El tipo abstracto de datos lista (TAD Lista). 2.3. Implementación de la estructura lista. 2.4. Tipos de listas: circular, doblemente enlazadas, otras. 3. Estructura de datos Pila. 3.1. El tipo abstracto de datos pila (TAD Pila). 3.2. Implementación de la estructura pila. 4. Estructura de datos Cola. 4.1. El tipo abstracto de datos cola (TAD Cola). 4.2. Implementación de la estructura cola. Procedimentales: - Manejo y uso de los manuales, material bibliográfico y apuntes de clase. - Análisis de las diferentes estructuras de datos dinámicas lineales que pueden Página 29 de 271 Programación en lenguajes estructurados 1º DAI solucionar un mismo problema. - Comparativa entre las diferentes soluciones propuestas, búsqueda de la óptima, y diseño de la misma. - Implementación de la estructura de datos en un lenguaje de programación estructurado. - Prueba, corrección y mejora de la estructura de datos. - Documentación de la estructura de datos. Actitudinales: - Desarrollo de los alumnos en la toma de decisiones. - Incrementar la actitud positiva hacia el trabajo en grupo o individual. - Documentar y describir las estructuras de datos utilizadas en actividades de clase. Criterios de evaluación: - Diseñar las estructuras de datos idóneas para cada problema. - Evaluar la eficiencia y el espacio ocupado por la estructura de datos elegida. - Describir las características de cada tipo de estructura de datos dinámica lineal. - Estudiar la representación gráfica idónea para cada estructura. Actividades de enseñanza-aprendizaje a desarrollar: - Posibles implementaciones de la estructura de datos dinámica en estudio usando memoria estática. - Posibles implementaciones de la estructura de datos dinámica en estudio usando memoria dinámica. - Resolución de un problema real utilizando un lenguaje de programación en el que debemos usar la estructura de datos estudiada anteriormente. Este problema podrá resolverse en grupo. Página 30 de 271 Programación en lenguajes estructurados Unidad Didáctica Nº: 9 1º DAI Duración: 16 horas Título: Librerías en el lenguaje C. Objetivos didácticos: - Elegir y usar de forma correcta las diferentes librerías estándar de C. - Crear librerías en C. - Codificar en un lenguaje estructurado programas que resuelvan problemas usando librerías estándar y creadas por el usuario. - Elaborar toda la documentación necesaria para documentar los diferentes módulos en los que dividiremos el programa. Análisis de Contenidos: Conceptuales: 1. El preprocesador de C. 1.1. Directivas. 2. Principales librerías estándar en C: stdio.h, math.h, stdlib.h, etc. 2.1. Entrada y salida estándar. 3. Creación de librerías por el usuario. Procedimentales: - Manejo y uso de los manuales, material bibliográfico y apuntes de clase. - Manejo de librerías prediseñadas. - Uso de las librerías para la resolución de problemas. - Creación de librerías de usuario. - Construcción de un programa pasando por todas sus etapas. Actitudinales: - Iniciativa personal en la toma de decisiones. Página 31 de 271 Programación en lenguajes estructurados 1º DAI - Orden en la realización de ejercicios. - Limpieza en la presentación de los ejercicios. - Trabajo en grupo. Criterios de evaluación: - Conocer las librerías que contiene el compilador o lenguaje de programación C. - Manejar correctamente la interfaz de usuario de las librerías. Actividades de enseñanza-aprendizaje a desarrollar: - Estudio de las librerías estándar de C, sus funciones básicas y más útiles a través de ejemplos. - Trabajo individual donde el alumno creará una librería para el manejo de ficheros, que posteriormente se usará para resolver algún problema. Unidad Didáctica Nº: 10 Duración: 10 horas Título: Recursividad. Objetivos didácticos: - Manejar la recursividad como una técnica eficiente y elegante para resolver algunos problemas. Análisis de Contenidos: Conceptuales: 1. Concepto. 2. Diseño recursivo frente a iterativo. 3. Tipos de recursividad. 3.1. Recursión en cascada o múltiple. Página 32 de 271 Programación en lenguajes estructurados 1º DAI 3.2. Recursión lineal. 3.3. Recursión anidada. 4. Ejemplos de recursividad: Factorial, Fibonacci, Quicksort, etc. Procedimentales: - Manejo y uso de los manuales, material bibliográfico y apuntes de clase. - Construcción del algoritmo utilizando recursividad. - Comparativa entre las diferentes soluciones propuestas y búsqueda de la óptima. ¿Qué método se adapta mejor a la solución del problema, el método iterativo o el recursivo? Actitudinales: - Iniciativa personal de los alumnos en la toma de decisiones. - Orden y limpieza en el trabajo. Criterios de evaluación: - Conocer los conceptos teóricos que se encuentran detrás de la recursividad. - Diseñar soluciones eficientes para el manejo de la recursividad. - Estudiar la solución iterativa frente a la solución recursiva. - Justificar el uso de la recursividad en la solución de problemas Actividades de enseñanza-aprendizaje a desarrollar: - Ejemplos básicos de resolución de problemas usando recursividad: factorial, Fibonacci, algoritmos de manejo de árboles binarios. - Comprobar los progresos realizados por los alumnos, y si han alcanzado los objetivos marcados. Se valorarán los trabajos realizados en clase. Página 33 de 271 Programación en lenguajes estructurados Unidad Didáctica Nº: 11 1º DAI Duración: 30 horas Título: Estructuras de datos dinámicas no lineales. Objetivos didácticos: - Elegir y usar de forma correcta la estructura de datos dinámica no lineal idónea para resolver un problema. - Elaborar toda la documentación necesaria para documentar la estructura de datos empleada. - Representar gráficamente cualquier estructura de datos. - Codificar en un lenguaje estructurado programas que resuelvan problemas usando estructuras de datos dinámicas no lineales. - Conocer los principales algoritmos sobre grafos y árboles. Análisis de Contenidos: Conceptuales: 1. Estructura de datos árbol. 1.1. Tipo abstracto de datos ábol binario (TAD Árbol Binario). 1.2. Implementación dinámica en C 1.3. Otros tipos de árboles. 1.4. Recorridos de un árbol: preorden, inorden y postorden. 1.5. Operaciones en árboles binarios de búsqueda: búsqueda, inserción y borrado. 1.6. Árboles binarios equilibrados. 2. Estructura de datos grafo. 2.1. Tipo abstracto de datos grafo (TAD Grafo). 2.2. Conceptos básicos. Grafos dirigidos y grafos no dirigidos. Página 34 de 271 Programación en lenguajes estructurados 1º DAI 2.3. Representación y análisis. Procedimentales: - Manejo y uso de los manuales, material bibliográfico y apuntes de clase. - Análisis de las diferentes estructuras de datos dinámicas no lineales que puede solucionar el mismo problema. - Comparación entre las diferentes soluciones propuestas, búsqueda de la óptima y diseño de la misma. - Implementación de la estructura de datos en un lenguaje de programación estructurado. - Prueba, corrección y mejora de la estructura de datos. - Creación y revisión de algoritmos sobre árboles y grafos. Actitudinales: - Desarrollo de los alumnos en la toma de decisiones. - Incrementar la actitud positiva hacia el trabajo en grupo o individual. - Potenciar la adaptación a nuevos cambios en el entorno de trabajo. Criterios de evaluación: - Identificación de las diferentes estructuras de datos dinámicas no lineales. - Utilizando un lenguaje de programación estructurado implementar las estructuras de datos dinámicas no lineales adecuadas a cada problema. - Describir las características de cada tipo de estructura de datos dinámica no lineal. - Análisis y diseño del programa. - Generación de pruebas para comprobar que los resultados son correctos. - Aplicación de los algoritmos adecuados a las estructuras de datos no lineales. Página 35 de 271 Programación en lenguajes estructurados 1º DAI Actividades de enseñanza-aprendizaje a desarrollar: - Realizar un enfoque global de los conceptos básicos referentes a la estructura de datos a estudiar. - Posibles implementaciones de la estructura de datos dinámica no lineal en estudio usando memoria estática. - Posibles implementaciones de la estructura de datos dinámica no lineal en estudio usando memoria dinámica. - Comparación de las estructuras de datos en estudio frente a otras ya estudiadas previamente. Ventajas y desventajas de cada una de ellas. Unidad Didáctica Nº: 12 Duración: 16 horas Título: Diseño efectivo de programas y aplicaciones algorítmicas. Objetivos didácticos: - Conocer las diferentes técnicas de pruebas de programas. - Elaborar toda la documentación necesaria para documentar un programa. - Aplicar técnicas de prueba para casos concretos. Análisis de Contenidos: Conceptuales: 1. Introducción. 2. Documentación del código fuente. 3. Documentación de un módulo. 4. Documentación del programa. 5. Creación de un manual de usuario. Página 36 de 271 Programación en lenguajes estructurados 1º DAI 6. Técnicas de prueba de programas. 7. Costes. Procedimentales: - Manejo y uso de los manuales, material bibliográfico y apuntes de clase. - Manejo y uso de un compilador. - Manejo y uso del procesador de textos. - Estudio de ejemplos reales. - Realización de pruebas reales sobre programas. - Documentación de las pruebas y de programas realizados. Actitudinales: - Iniciativa personal. - Creatividad, orden y limpieza. - Trabajo en grupo. Criterios de evaluación: - Conocer las diferentes estrategias de prueba de un programa. - Aplicar a cada caso la técnica de prueba adecuada. - Diseñar técnicas alternativas de prueba. - Documentar el programa a estudio. - Documentar la estrategia de prueba a realizar. - Recoger en la documentación los resultados obtenidos y sacar las conclusiones pertinentes. Actividades de enseñanza-aprendizaje a desarrollar: - Conocer las pruebas del software. Diseño de estrategias eficientes y documentación de las mismas. Página 37 de 271 Programación en lenguajes estructurados 1º DAI - Conocer como debe documentarse un programa. - Desarrollo de un programa completo en lenguaje estructurado, diseño de las pruebas para el mismo. Realización de la documentación del programa y de las pruebas realizadas. Unidad Didáctica Nº: 13 Duración: 12 horas Título: Programación orientada a objetos. Objetivos didácticos: - Analizar un problema y darle una solución orientada al objeto. - Diseñar un sistema orientado a objetos. - Emplear el modelado de objetos. Análisis de Contenidos: Conceptuales: 1. Introducción. 2. Objetos. 3. Clases. 4. Herencia. 5. Polimorfismo. 6. Ventajas de la P.O.O. 7. Lenguajes orientados a objetos. Procedimentales: - Manejo y uso de los manuales, material bibliográfico y apuntes de clase. - Interpretación de las características de la P.O.O. Página 38 de 271 Programación en lenguajes estructurados 1º DAI - Estudio de diseños orientados a objetos. - Utilización de un compilador de C++. - Elección de las estructuras de P.O.O. - Análisis de problemas reales. - Estudio de diferentes programas realizados en un lenguaje orientado a objetos. Actitudinales: - Orden y limpieza en el trabajo. - Mostrar una actitud abierta a aprender nuevas formas de resolver problemas que podrían ser abordadas con el paradigma de programación funcional, valorando críticamente ventajas e inconvenientes de ambas aproximaciones. - Mostrar interés por aprender conceptos nuevos de programación con un paradigma de enorme aceptación para el diseño de aplicaciones profesionales. Criterios de evaluación: - Estudio de los diferentes objetos que van a componer nuestro sistema. - Detallar las relaciones entre estos objetos. - Análisis de los atributos necesarios para cada objeto. - Conocer todos los conceptos teóricos que subyacen en el modelado de objetos. Actividades de enseñanza-aprendizaje a desarrollar: - Plantear la ingeniería del software como una necesidad. Estudiar la relación entre ingeniería del software y la orientación al objeto. - Los alumnos deben diseñar un sistema completo con el que van a resolver un problema real planteado por el profesor. - Plantear los conceptos más destacables del modelado de objetos, sus ventajas, y la forma de representar los objetos en sus distintas fases. Página 39 de 271 Programación en lenguajes estructurados 1º DAI - Practicar el modelado de objetos: los alumnos realizarán el modelado del sistema que anteriormente diseñaron. Unidad Didáctica Nº: 14 Duración: 40 horas Título: Programación en C++. Objetivos didácticos: - Codificar programas orientados a objetos. - Emplear de forma adecuada los objetos creados por el propio alumno. - Usar los diferentes objetos básicos proporcionados por el lenguaje de programación estudiado. Análisis de Contenidos: Conceptuales: 1. Introducción a C++ 2. Objetos y clases. 3. Sobrecarga de operadores. 4. Genericidad. 5. Herencia. 6. Polimorfismo. 7. Entrada y Salida. Ficheros. Procedimentales: - Diseño de objetos. - Manejo de objetos prediseñados. - Documentación de los diferentes objetos empleados en el uso de programas. Página 40 de 271 Programación en lenguajes estructurados 1º DAI - Uso de los objetos correctos para la resolución de problemas propuestos. - Uso de la herencia, encapsulación, generalización, y todas las técnicas relacionadas con los objetos. Actitudinales: - Mostrar interés por aprender conceptos nuevos de programación con un paradigma de enorme aceptación para el diseño de aplicaciones profesionales. - Mostrar una actitud abierta a aprender nuevas formas de resolver problemas que podrían ser abordados con el paradigma funcional, valorando críticamente ventajas e inconvenientes de ambas aproximaciones. - Trabajo en grupo. Criterios de evaluación: - Describir las características principales de C++. - Manejar correctamente los objetos creados por otros usuarios. - Usar la interfaz de cada objeto. - Describir las características de cada objeto. - Representar gráficamente los objetos y su interrelación. - Dominar el lenguaje C++ para la resolución de problemas prácticos Actividades de enseñanza-aprendizaje a desarrollar: - Diferenciar entre programación tradicional y P.O.O. - Diferenciar entre C y C++. Manejo de un entorno de programación en C++. - Creación de objetos en C++. - Constructores y destructores en C++. - Sobrecarga y herencia en C++. - Trabajo de grupo donde se diseñará primero, y se implementará después un Página 41 de 271 Programación en lenguajes estructurados 1º DAI programa que usa la orientación al objeto para resolver un problema. Unidad Didáctica Nº: 15 Duración: 12 horas Título: Introducción a la programación visual Objetivos didácticos: - Codificar programas en un entorno visual. - Diseñar una interfaz de usuario para dar solución a problemas determinados. - Distinguir los elementos de la programación visual. Análisis de Contenidos: Conceptuales: 1. Introducción a la programación visual. 1.1.Interacción persona – ordenador. 1.2.Diseño de la interfaz. 2. Introducción a C#. 3. Instalación y configuración del Visual Studio C# Express. 4. Aplicaciones visuales en C#. 4.1.Componentes, propiedades y eventos. 4.2.Diseño de formularios. Procedimentales: - Manejo y uso de los manuales, material bibliográfico y apuntes de clase. - Encauzar a los alumnos hacia el mundo de la programación visual. - Diseño de interfaces de usuario que cumplan unos requisitos dados. Página 42 de 271 Programación en lenguajes estructurados 1º DAI - Identificación y utilización de los componentes visuales. Actitudinales: - Relacionar el trabajo con el estudio. - Fomentar la toma de decisiones. Criterios de evaluación: - Diseñar una interfaz de usuario. - Identificar los diferentes componentes que se pueden utilizar en la programación visual. - Describir las propiedades y los eventos básicos de cada componente. Actividades de enseñanza-aprendizaje a desarrollar: - Planteamiento de situaciones reales para resolverlas mediante una interfaz gráfica. - Identificación de los distintos componentes de la programación visual. - Creación y diseño de aplicaciones visuales sencillas. Unidad Didáctica Nº: 16 Duración: 40 horas Título: Proyecto integrador. Objetivos didácticos: -Aplicar los conceptos y técnicas adquiridos en las anteriores unidades de trabajo. Análisis de Contenidos: Conceptuales: -Todos los desarrollados durante las unidades anteriores profundizando en todos los que fuera necesario. Procedimentales: Página 43 de 271 Programación en lenguajes estructurados 1º DAI - Manejo y uso de los manuales, material bibliográfico y apuntes de clase. - Interpretación del problema. - Elección de las estructuras necesarias para la resolución del problema. - Construcción del algoritmo. - Codificación, compilación y realización de pruebas. - Corrección de los errores observados. - Documentación del programa. - Realización de los manuales de usuario y del programador. Actitudinales: - Orden y limpieza en la realización del proyecto. - Iniciativa personal. - Creatividad. Criterios de evaluación: - Diseño del algoritmo. - Codificación del algoritmo en un lenguaje estructurado. - Diseño de pruebas. - Documentación del proyecto desarrollado. Actividades de enseñanza-aprendizaje a desarrollar: - Presentación y exposición del problema planteado así como de su resolución justificando convenientemente cada uno de los pasos o fases que han llevado a su elaboración. - Ejecución de las pruebas necesarias para verificar la eficiencia y eficacia de la aplicación desarrollada. - Presentación de la documentación necesaria para el conocimiento y utilización de Página 44 de 271 Programación en lenguajes estructurados 1º DAI la aplicación: manual de usuario y manual del programador. 5. METODOLOGÍA 5.1. ASPECTOS GENERALES Y FUNDAMENTACIÓN DIDÁCTICA. PRINCIPIOS METODOLÓGICOS Para definir la metodología adoptada en este nivel educativo se deben tener en cuenta previamente las siguientes consideraciones: • La existencia de libros de texto tanto para la metodología a seguir como para las prácticas efectuadas con el ordenador. • Los recursos disponibles en el centro y aquellos que pudieran ser aportados por los propios alumnos. • Los apuntes preparados por el profesor que permitirá ganar un tiempo valioso que se puede utilizar en potenciar los casos prácticos. 5.2. CONCRECIÓN DE LA METODOLOGÍA Formulados los principios del apartado anterior, se deben efectuar las siguientes consideraciones: a) Cada una de las 16 Unidades serán tratadas, a efectos de programación didáctica, como una Unidad Temática, siguiéndose en todas ellas un proceso de desarrollo semejante. La metodología que se utilizará consistirá básicamente en una exposición teórico-práctica de la Unidad Temática y, a continuación, una serie de propuestas de desarrollo de programas específicos o realización de actividades de administración o de usuario del sistema para consolidar los conocimientos teóricos adquiridos. Página 45 de 271 Programación en lenguajes estructurados 1º DAI Estas actividades se realizarán individualmente o en grupos de un máximo de dos alumnos con el apoyo que necesiten del profesor que deberá, más que resolver todas las dudas, plantear al alumno el camino a seguir haciéndole ver donde puede conseguir la información que precisa (en los apuntes de clase, en los ejemplos realizados, o en los manuales o la ayuda). b) Las diferentes estrategias metodológicas se detallan a continuación: • Estrategias transmisivas que constituirán aproximadamente un 30% del desarrollo de cada Unidad Temática. Se emplearán como medio de presentación de los contenidos básicos y para la fijación posterior de ideas. • Estrategias basadas en actividades que constituirán aproximadamente el 60% del tiempo disponible para cada Unidad. Dichas actividades serán realizadas por los alumnos en clase y en casa ya sea de forma individual o en grupos. • Estrategias de carácter investigativo que ocuparán el 10% restante. c) La secuencia de trabajo se basará en los principios de metodología activa y participativa, alternándose las intervenciones del profesor con las de los alumnos, la consulta a fuentes de información diversa (libros, revistas, etc.) y el recurso a los medios audiovisuales (ordenador, proyector, etc.). 5.3. ELEMENTOS DE PARTICIPACIÓN Y MOTIVACIÓN DEL ALUMNADO La motivación de los alumnos en el aula se puede mejorar con un esquema de trabajo en el que se contemplen los siguientes elementos: • Deben conocerse los intereses previos de los alumnos. Página 46 de 271 Programación en lenguajes estructurados • 1º DAI El estudio de los temas transversales es idóneo para conseguir una mejora en la madurez personal, social, cívica, moral, etc. Se tendrá en cuenta cualquier tipo de comportamiento. Se valorará que el alumno no tenga comportamientos de tipo violento, obsceno, abusivo, ilegal, racial, xenófobo, difamatorio o discriminatorio. • Es conveniente fomentar el espíritu crítico constructivo sobre la actividad tecnológica y las diversas propuestas comerciales que se pueden encontrar en el mercado. • Se le debe ayudar a seleccionar y manejar correctamente la documentación técnica y la información publicitaria. • Favorecer el trabajo en grupo. • Realizar ejercicios prácticos y actuales. • Valorar el esfuerzo empleado en la realización de programas cada vez más eficientes. 6. CRITERIOS DE EVALUACIÓN 6.1. SISTEMA DE EVALUACIÓN El fin de la evaluación no ha de ser sancionador; su objetivo debe ser detectar fallos y dificultades y comprobar los objetivos alcanzados. El alumno debe estar siempre informado sobre la forma de evaluar, los criterios de evaluación y los conocimientos que se van a analizar. 6.1.1. EVALUACIÓN INICIAL Al comienzo del curso se pasará un cuestionario anónimo, para conocer el nivel de conocimientos que poseen los alumnos. El cuestionario constará de una serie de Página 47 de 271 Programación en lenguajes estructurados 1º DAI preguntas cortas para evaluar el nivel del alumno como usuario informático y como programador. Los resultados del cuestionario servirán para conocer el grado de dificultad con el que se van a enfrentar los alumnos en su aprendizaje, así como la mayor o menor necesidad por parte del profesor en el repaso sobre alguno de los conceptos básicos. 6.1.2. EVALUACIÓN FORMATIVA Pretende reconducir el proceso de aprendizaje para adaptarse al alumnado utilizando la observación como instrumento esencial: • La observación constante de las actividades realizadas por los alumnos debe servir para conocer sus capacidades y mejorar sus aspectos más deficitarios. Se deberá orientar las actividades de los mismos cuando la opción elegida diste mucho de una solución correcta para el problema planteado. La orientación no debe ir enfocada a la resolución del problema sino que debe darse únicamente como una directriz que ayude al alumno a alcanzar una solución. • La corrección individualizada, con el alumno, de los ejercicios realizados debe utilizarse para sugerir ideas de mejora y soluciones alternativas. El alumno deberá defender las ventajas o desventajas de su opción. • Las puestas en común de determinados ejercicios o actividades relevantes se aprovecharán para corregir errores generales, consolidar o aclarar determinados aspectos y explicar de manera general los conceptos que no hayan quedado lo suficientemente claros. En dichas puestas en común se fomentará el diálogo entre los alumnos para que tanto el que lo corrige como Página 48 de 271 Programación en lenguajes estructurados 1º DAI los demás defiendan sus diferentes soluciones. • Durante el trabajo en grupo se prestará especial atención al fomento de la colaboración entre ambos, obligando, si fuera necesario por la asimetría del grupo, a que determinadas actividades sean realizadas por un miembro determinado del grupo. • La utilización de los equipos, su actitud y cuidado del mismo (tanto del software como del hardware) serán un aspecto importante de la evaluación del alumno. Asimismo se valorará, corrigiendo si fuera necesario mediante charlas personales, la actitud de los alumnos frente al profesor y a sus compañeros. 6.1.3. EVALUACIÓN SUMATIVA El objetivo de esta evaluación es determinar el nivel de aprendizaje alcanzado por el alumno. En cada unidad de trabajo se han previsto actividades específicas de evaluación consistentes en: • La respuesta a preguntas teóricas. • La realización de programas, con la ayuda de manuales y apuntes de clase, y con la posibilidad de realizar los mismos en el ordenador. 6.2. CRITERIOS DE CALIFICACIÓN Y RECUPERACIÓN 6.2.1. CRITERIOS DE CALIFICACIÓN Como criterios de calificación se establecen los siguientes: • Asistencia a clase y actitud (10%). Se valorará con un 10% la asistencia a clase, el tratamiento del material proporcionado, la actitud ante el profesor, compañeros y la materia de estudio. Se valorará especialmente el interés Página 49 de 271 Programación en lenguajes estructurados 1º DAI mostrado por el alumno en la superación de las dificultades presentadas. Se pretende evitar que el alumno asuma con pasividad “pasando página” sobre aquellos conceptos que le resulten de comprensión dificultosa. • Trabajo desarrollado en clase (30%). En cuanto al trabajo desarrollado se valorará la resolución de ejercicios propuestos, tanto en grupos como individualmente. Se tendrán en cuenta las destrezas adquiridas y demostradas en el desarrollo de los ejercicios realizados en clase tanto individualmente como en grupo. La evaluación de estas actividades se realizará mediante el seguimiento del trabajo del alumno en clase y la corrección del resultado final, considerando: En la realización de programas: • El análisis del problema. • La valoración de diversas soluciones. • El método utilizado para su realización (compilación, depuración). • La corrección del algoritmo, su fiabilidad, rendimiento en cuanto a tiempo y memoria utilizada. • Los comentarios utilizados. • La documentación asociada. • Las pruebas realizadas. En todo tipo de ejercicios: • • La entrega puntual del ejercicio realizado. • La claridad y presentación del mismo. Actividades específicas de evaluación (60%). Se realizarán un número mínimo de 2 en cada evaluación. Consistirán en la resolución de pruebas Página 50 de 271 Programación en lenguajes estructurados 1º DAI individuales teóricas y prácticas con y sin ordenador, valorando los mismos aspectos que en el apartado anterior. Siempre que el número de ordenadores sea inferior al número de alumnos, estas actividades específicas de evaluación se realizarán en 2 días (la mitad de alumnos un día, la otra mitad el siguiente). Para aprobar la evaluación es necesario superar las dos pruebas presenciales con una nota igual o superior a 4 y que el resultado de la siguiente fórmula sea igual o superior a 5: ⎛ ⎛ Nota _ prueba1 + Nota _ prueba 2 ⎞ ⎞ ⎜⎜ ⎜ ⎟ * 0,6 ⎟⎟ + ( Nota _ actividades * 0,3) + ( Nota _ actitud * 0,1) 2 ⎠ ⎝⎝ ⎠ 6.2.2. SISTEMA DE RECUPERACIÓN El módulo será evaluado de forma continua, por lo que para recuperar una evaluación suspensa será necesario aprobar la evaluación siguiente. No obstante, al final de las tres evaluaciones, se realizará un examen de recuperación para aquellos alumnos que no hayan superado la 3ª evaluación, y hayan superado al menos la nota de 4. Los alumnos con nota inferior no tendrán acceso a dicha prueba, con lo que serán calificados como suspenso. La nota final de Junio, previa al examen de recuperación citado, será la nota de la 3ª evaluación. La convocatoria para Septiembre se realizará de todo el módulo. 7. RECURSOS MATERIALES Y BIBLIOGRAFÍA DE AULA 7.1. MATERIALES Y RECURSOS DIDÁCTICOS Para el desarrollo de la metodología expuesta se emplearán los siguientes Página 51 de 271 Programación en lenguajes estructurados 1º DAI recursos didácticos: Materiales fungibles: • Tóner para la impresora láser. • Cartuchos de tinta. • Rotuladores. • Pilas. • Papel. Hardware: • 15 ordenadores PC con procesador Pentium IV, con 512 Mb de RAM, disco duro de 80Gb, dotados con tarjeta de red. • 1 servidor: ordenador PC Pentium IV, 1024 Mb de RAM, 120Gb de disco duro, con regrabadora de DVD de doble capa, dotado con tarjeta de red. • Conexión a Internet de banda ancha (ADSL). • 1 switch de 16 puertos. • Router ADSL. • Impresora láser. • Cañón de video proyección. • Pantalla de proyección portátil. • Pizarra blanca. • Televisión. • Vídeo. Software: • Sistema Operativo LINUX con entorno de desarrollo GNU y utilidades de red. Habrá un sistema operativo propio en cada ordenador y todos ellos Página 52 de 271 Programación en lenguajes estructurados 1º DAI estarán conectados a través de una red TCP/IP. Todos los ordenadores del aula, en Linux, estarán configurados de forma que los alumnos validarán el inicio de sesión en el servidor del profesor y podrán situarse, indistintamente, en cualquier ordenador. Desde cualquiera de ellos se accederá por igual al directorio propio de trabajo del usuario. • Sistema Operativo Windows XP Profesional. • Compilador de C. • Paquete ofimático. • Navegador de Internet. • Entorno de desarrollo integrado en C. • Compilador de C++. • Programa editor de diagramas como organigramas, diagramas de flujo, etc. • Entorno de desarrollo integrado en C++. • Entorno de desarrollo en Visual C#. • Utilidades para la compilación selectiva de programas como make. • Compresor/Descompresor. • Visor de ficheros PDF. • Antivirus. Documentación: • Libros de consulta, manuales, material de elaboración propia por parte del profesor. • Otros recursos que pudieran derivarse de la búsqueda y recopilación de información fuera del aula. Página 53 de 271 Programación en lenguajes estructurados 7.2. 1º DAI BIBLIOGRAFIA A continuación se presenta la bibliografía recomendada para el seguimiento del módulo: • W. Kernighan & D.M. Ritchie. El Lenguaje de Programación C. Ed. PrenticeHall Hispanoamericana, S.A. 1985. • Eduardo Alcalde y Miguel García. Metodología de la programación. Ed. McGraw Hill. 1993. • Luis Joyanes Aguilar. Programación en C++. Algoritmos, estructuras de datos y objetos. Ed. McGraw Hill. 2006. • Herbert Schildt. C. Manual de Referencia. Ed. Mc Graw Hill. 1996. • Luis Joyanes Aguilar. C. Algoritmos, programación y estructutas de datos. Ed. Mc Graw Hill. 2005. • Enrique Quero Catalinas. Programación en lenguajes estructurados. Ed. Paraninfo. 2001. • José Manuel Molina. Programación en lenguajes estructurados. Ed. McGraw Hill. 2006. Enlaces de interés: • El rincón del C: http://www.elrincondelc.com. • Curso de programación en C (Miguel A. Garcies) de la Universidad de las Islas Baleares: http://www.uib.es/c-calculo/cursc.htm. • C++ con clase: http://c.conclase.net/. • Programación en C, C++, ...: http://www.jeanpaul.com.ar/. • Tutoriales y ejemplos sobre C y otros lenguajes de programación: www.misalgoritmos.com Página 54 de 271 Programación en lenguajes estructurados • 1º DAI Análisis de algoritmos y estructuras de datos, su orden, su tipología y su implementación en distintos lenguajes: www.algoritmia.net • Preguntas y respuestas frecuentes sobre C (FAQ): www.faqs.org/faqs/C-faq/faq www.faqs.org/faqs/C-faq/faq/Index.html (de Steve Summit) • Página de Dennis M. Ritchie: www.es.bell-labs.com/who/dmr/Index.htrnl Revistas: • C/C++ Users Journal: www.cuj.com • MSDN Magazine: msdn.microsoft.com/msdnmag • UNIXReview: www.review.com • C++Report: www.creport.com • Journal Object Orientd Programming: www.joopmag.com Tutoriales: • www.help.eom/cat/2/259/hc/index-9.html • www.lysator.liu.se/c • www.anubis.dkung.dk/JTCl/SC22/WG14 • www.uib.es/c-caiculo/manuals/altrese/cursc.htm • www.help.com/cat/259/hc/index-9.html Estándares de c: • K&R (The C Programming Language, 1978) • ANSÍ C (Comité ANSÍ X3.159-1989,1989) • ANSÍ C (adoptado por ISO como ISO/IEC 9899 :1990,1990) • C99 (ISO 9899:1999) Manuales de c estándar y librerías de c: Página 55 de 271 Programación en lenguajes estructurados • Biblioteca de C: www.dinkunware.com/ • Revisión 5.10 de Abril de 2003, manual de más de 200 páginas: 1º DAI www.open-std.org/jtcl/sc22/wgl4/www/c99Rationalev5.10.pdf • Manual de más de 500 páginas: www. sics.se/~pd/IS0-C-FDIS.1999-04.pdf Foros: • Portal de ciencia y tecnología: 100cia.com 8. ACTIVIDADES COMPLEMENTARIAS Y EXTRAESCOLARES De carácter no obligatorio y dependiente del desarrollo del curso escolar y de las disponibilidades económicas del grupo y del departamento. Las posibles actividades serían: • Visita a empresas privadas de informática. • Visita a empresas públicas de informática. • Visita a parques tecnológicos y/o ferias relacionadas con la informática. • Asistir a ponencias de expertos. 9. NECESIDADES EDUCATIVAS ESPECIALES Se contemplan una serie de medidas para los alumnos con necesidades educativas especiales. Los alumnos con necesidades educativas especiales se beneficiarán de un tratamiento individualizado a través de las siguientes adaptaciones curriculares: • Cambios metodológicos. • Prioridad en algunos objetivos y contenidos. • Modificaciones en el tiempo de consecución de los objetivos. Página 56 de 271 Programación en lenguajes estructurados • 1º DAI Adecuaciones en los criterios de evaluación en función de sus dificultades específicas. No obstante, su mayor o menor alejamiento del currículo básico dependerá de la evaluación y diagnóstico previo de cada alumno, a realizar por el Departamento de Orientación. El objetivo último ha de ser proporcionar a cada alumno la respuesta que necesita en función de sus necesidades y también de sus límites, tratando siempre que esa respuesta se aleje lo menos posible de las que son comunes a todos los alumnos. 9.1. ADAPTACIÓN Las modificaciones en la programación del trabajo en el aula, a través de la variedad de ritmos y actividades, permiten la atención individualizada a cada alumno. Constituyen, junto con la atención personalizada, el recurso de individualización más frecuente. En términos generales, se contemplan dentro de este apartado todas aquellas medidas que se encaminan a diversificar el proceso de aprendizaje con arreglo a las diferencias personales de los alumnos y alumnas en cuanto a estilos de aprendizaje, capacidades, intereses y motivaciones. Se engloban dentro de este capítulo las medidas referentes a agrupamientos, contenidos, actividades, metodología, materiales curriculares específicos y evaluación. A los alumnos que por su capacidad o por su experiencia tengan un nivel claramente superior al resto de la clase se les propondrán actividades específicas que permitan desarrollar su intelecto de la forma más adecuada, recomendándoles Página 57 de 271 Programación en lenguajes estructurados 1º DAI lecturas de temas específicos tomados de Internet, de revistas o de libros sobre la materia y proponiéndoles la realización de actividades de mayor complejidad que al resto de la clase. A los alumnos que tengan un nivel claramente inferior a la media de la clase se les tratará de orientar hacia la realización de las actividades más básicas que cumplan los objetivos marcados para el módulo. Se les proporcionará información de apoyo adecuada a su nivel y si posee ordenador en su casa se le orientará para que instale y pueda utilizar el mismo material didáctico que poseemos en el centro. A los alumnos que estudian y trabajan se les tendrá que ayudar para que la motivación no les baje. Para los alumnos con deficiencias físicas (visuales, auditivas, motricidad), se pedirá ayuda al Departamento de Orientación y a organizaciones como la ONCE. 10. TEMAS TRANSVERSALES Se parte del convencimiento de que los temas transversales deben impregnar la actividad docente, y estar presentes en el aula de forma permanente, ya que se refieren a problemas y preocupaciones fundamentales de la sociedad. EDUCACIÓN PARA LA CONVIVENCIA Persigue y concreta una parte importante de los objetivos de educación moral y cívica presente en todo el currículo. Pretende educar para la convivencia en el pluralismo mediante un esfuerzo formativo en dos direcciones: • El respeto a la autonomía a los demás. • El diálogo como forma de solucionar los problemas. EDUCACIÓN NO SEXISTA La educación para la igualdad se plantea expresamente por la necesidad de Página 58 de 271 Programación en lenguajes estructurados 1º DAI crear desde el principio una dinámica correctora de las discriminaciones. Entre sus objetivos están: • Desarrollar la autoestima. • Analizar críticamente la realidad y corregir prejuicios sexistas y sus manifestaciones en la sociedad. • Consolidar hábitos no discriminatorios. TRATAMIENTO DE LAS TIC Al tratarse de un módulo perteneciente a un Ciclo de Grado Superior de Informática, las Tecnologías de Información y Comunicación deben estar integradas plenamente en la práctica docente. Algunas sencillas directrices que podemos seguir son: • Oficina sin papel: Debemos evitar el uso de papel siempre que sea posible, empleando formatos electrónicos portables y estándar como el PDF. • Integración de Internet: A la práctica educativa es interesante añadir todos los elementos disponibles en Internet como páginas Web, manuales, foros, etc. LEY DE PROTECCIÓN DE LA SEGURIDAD DE LOS DATOS Los alumnos deben conocer que leyes nos amparan en cuanto a la protección de datos y que medidas se pueden llevar a cabo en el caso en que éstas no se cumplan. RECICLAJE DEL MATERIAL INFORMÁTICO Página 59 de 271 Programación en lenguajes estructurados 1º DAI Con el fin de promover el respeto hacia el medio ambiente se deben reciclar todos los materiales posibles: tóner, monitor,… NORMAS ISO DE CALIDAD DEL SOFTWARE Se debe fomentar el uso de las herramientas CASE pero con espíritu crítico, es decir, se nos intenta vender que una herramienta CASE genera todo el código pero realmente lo que proporciona son simplemente plantillas. 11. RELACIÓN CON OTRAS ÁREAS DEL CURRICULUM Este módulo tiene una importante relación con los siguientes módulos del ciclo: • Sistemas informáticos, monousuarios y en Red: Debemos sentar las bases de la programación (manejo de variables, bucles, etc.) que van a ser necesarias para la programación de scripts, trabajo con el sistema operativo desde un lenguaje de programación, manejo de procesos batch. • Análisis y diseño detallado: Le resultará mucho más fácil al alumno analizar y diseñar programas cuando compruebe qué es un programa, cómo se desarrolla, y qué utilidad puede tener. • Desarrollo de aplicaciones en entornos de cuarta generación y herramientas CASE: Es interesante el conocimiento de los mecanismos de manejo de estructuras de datos externas, y los algoritmos que trabajan sobre ellas (fusión, búsqueda, indexación, etc.) para facilitar la comprensión del manejo de bases de datos. • Diseño y realización de servicios de presentación en entornos gráficos: Resulta básico que el alumno maneje conceptos básicos de programación en lenguajes estructurados, y comprenda como funciona la programación orientada al objeto para poder superar este módulo con éxito. Página 60 de 271 Programación en lenguajes estructurados Anexos ANEXO I: EJEMPLIFICACIÓN DE UNIDADES DE TRABAJO Página 61 de 271 Programación en lenguajes estructurados Anexos ÍNDICE 1. INTRODUCCIÓN .............................................................................................. 63 2. EVALUACIÓN INICIAL..................................................................................... 63 3. EJEMPLIFICACIÓN DE UNIDADES DE TRABAJO ........................................ 64 3.1. U.T. 1: INTRODUCCIÓN A LA PROGRAMACIÓN .................................... 65 3.2. U.T. 2: METODOLOGÍA DE LA PROGRAMACIÓN................................... 66 3.3. U.T. 3: INTRODUCCIÓN AL LENGUAJE C ............................................... 73 3.4. U.T. 4: PROGRAMACIÓN MODULAR EN C ............................................. 82 3.5. U.T. 5: ESTRUCTURAS DE DATOS ESTÁTICAS..................................... 97 3.6. U.T. 6: ORDENACIÓN Y BÚSQUEDA..................................................... 107 3.7. U.T. 7: ESTRUCTURAS EXTERNAS ...................................................... 114 3.8. U.T. 8: ESTRUCTURAS DE DATOS DINÁMICAS LINEALES ................ 120 3.9. U.T. 9: LIBRERÍAS EN EL LENGUAJE C ................................................ 129 3.10. U.T. 10: RECURSIVIDAD ........................................................................ 134 3.11. U.T. 11: ESTRUCTURAS DE DATOS DINÁMICAS NO LINEALES ........ 144 3.12. U.T. 12: DISEÑO EFECTIVO DE PROGRAMAS Y APLICACIONES ALGORÍTMICAS................................................................................................. 155 3.13. U.T. 13: INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS ........................................................................................................... 159 3.14. U.T. 14: PROGRAMACIÓN EN C++ ........................................................ 164 3.15. U.T. 15: INTRODUCCIÓN A LA PROGRAMACIÓN VISUAL .................. 192 3.16. U.T. 16: PROYECTO INTEGRADOR....................................................... 204 4. EVALUACIÓN SUMATIVA ............................................................................. 213 Página 62 de 271 Programación en lenguajes estructurados Anexos 1. INTRODUCCIÓN En el presente anexo se pretende describir las diferentes actividades que se pueden plantear a los alumnos para evaluar tanto los contenidos como los procedimientos de cada unidad de trabajo. Además de estas actividades de formación, se diseñan otras actividades de evaluación: 1. Inicial: Evaluación de los conocimientos previos que tiene el alumno para enfrentarse con el nuevo módulo. 2. Sumativa: Evaluación del grado de consecución de los objetivos. Para cada una de las unidades de trabajo, la estructura de contenidos se corresponde con la expuesta en el desarrollo de las unidades didácticas. 2. EVALUACIÓN INICIAL Al comienzo del curso se pasará un cuestionario anónimo, para conocer el nivel de conocimientos que poseen los alumnos. El cuestionario constará de una serie de preguntas cortas para evaluar el nivel del alumno como usuario informático y como programador. Los resultados del cuestionario servirán para conocer el grado de dificultad con el que se van a enfrentar los alumnos en su aprendizaje, así como la mayor o menor necesidad por parte del profesor en el repaso sobre alguno de los conceptos básicos. A continuación se detalla el cuestionario que será pasado a los alumnos. Página 63 de 271 Programación en lenguajes estructurados Anexos CUESTIONARIO: 1. ¿Qué es un algoritmo? 2. ¿Qué es un programa? 3. ¿Conoces las fases o etapas a seguir en la realización de un programa? 4. ¿Qué es un compilador? 5. ¿Qué es la CPU o Unidad Central de Proceso? 6. Nombra y explica brevemente los tipos de periféricos que conoces. 7. ¿Sabes que es una interface? 8. ¿Qué es un sistema operativo? 9. ¿Qué diferencia hay entre memoria auxiliar y memoria principal o central? 10. Define lo que entiendes por sistema informático. 11. ¿Qué lenguajes de programación conoces? ¿Has utilizado alguno de ellos? 3. EJEMPLIFICACIÓN DE UNIDADES DE TRABAJO En este apartado se encuentran parte de las actividades de enseñanzaaprendizaje que los alumnos tendrán que resolver a lo largo del curso en cada una de las unidades didácticas. Según los contenidos de las unidades didácticas, las actividades podrán ser conceptuales o procedimentales. Al mismo tiempo, estas actividades se clasifican según sean: • Actividades de desarrollo: Pretenden que el alumno adquiera los contenidos del módulo. • Actividades de refuerzo: Dirigidas a los alumnos que, por su capacidad, tengan problemas a la hora de alcanzar los objetivos mínimos. Página 64 de 271 Programación en lenguajes estructurados • Anexos Actividades de ampliación: Para aquellos alumnos que tengan una capacidad superior al resto de la clase. • Actividades de investigación: Dirigidas a todos los alumnos con el fin de enseñarles a buscar la información que requieran para solucionar cualquier problema. Cabe destacar, que no todas las unidades didácticas tienen actividades de todos los tipos enumerados anteriormente. U.T. 1: INTRODUCCIÓN A LA PROGRAMACIÓN Esta unidad didáctica es de contenido conceptual, por tanto las actividades formativas se basan en los contenidos explicados en clase. ACTIVIDADES DE DESARROLLO Actividad 1: Enumera por orden las fases o etapas a seguir en la realización de un programa. Actividad 2: Enumera las características del lenguaje ensamblador. Actividad 3: ¿Qué es un compilador? ¿Qué es un intérprete? Diferencias entre ellos. Actividad 4: Enumera las principales diferencias entre los lenguajes de alto y bajo nivel. Actividad 5: a) ¿Qué importancia tiene la fase de mantenimiento en el ciclo de vida de un sistema informático? b) ¿En que consiste la fase de diseño en el desarrollo de un Página 65 de 271 Programación en lenguajes estructurados Anexos determinado producto de software? U.T. 2: METODOLOGÍA DE LA PROGRAMACIÓN La unidad de trabajo 2 presenta tanto contenidos conceptuales como procedimentales, por tanto, en este apartado se detallan actividades formativas de los dos tipos. ACTIVIDADES DE DESARROLLO Actividad 1: Diferencia entre programación convencional, estructurada y modular. Indica las características principales de cada una de ellas. Actividad 2: Diferencia las partes en las que se divide un programa, y los diferentes tipos de instrucciones que lo componen. Actividad 3: Indica las distintas técnicas descriptivas en las que se puede representar un problema. Actividad 4: Cuando se define un subprograma cuales son los criterios en los que hay que basarse para elegir el tipo adecuado (función o procedimiento). Actividad 5: Dibujar el organigrama de una aplicación cuyo objetivo es la emisión de facturas a partir de los datos de compra introducidos por teclado y los datos de los clientes almacenados en un fichero soportado en disco. La factura se presenta en pantalla y una vez dada la conformidad se lista a través de impresora. Actividad 6: Escribir un programa (expresando su algoritmo mediante ordinograma y pseudocódigo) que lea el valor correspondiente a una distancia en millas marinas y las escriba expresadas en metros. Sabiendo que una milla Página 66 de 271 Programación en lenguajes estructurados Anexos marina equivale a 1852 metros. Actividad 7: Algoritmo que lee dos valores numéricos ‘X’ e ‘Y’, determina si son iguales y en caso de no serlo, indica cual de ellos es el mayor. Actividad 8: Dados dos valores numéricos almacenados en dos variables de nombre a y b, hacer un programa modular que llame a una función de nombre Cambiar () a la que se le pasan como parámetros por referencia dichas variables e intercambie sus valores. Actividad 9: Escribe un algoritmo que permita, dado un número que se introduce por teclado, decir si es par o impar. Actividad 10: Diseñar un ordinograma correspondiente a un programa que lea un número entero positivo y seguidamente escriba el carácter “*” un número de veces igual al valor numérico leído. Actividad 11: Diseñar un ordinograma correspondiente a un programa que escribe el porcentaje descontado en una compra, introduciendo por teclado el precio de la tarifa y el precio pagado. ACTIVIDADES DE AMPLIACIÓN Actividad 12: Escribe un algoritmo que lea números introducidos de manera consecutiva y aleatoria por teclado hasta que el valor introducido sea 0 (cero). Suma todos los valores introducidos antes de que aparezca el primero mayor que 200. Por otra parte, suma todos los que entran a continuación de éste hasta la aparición del cero. Por último, el algoritmo deberá visualizar el número de introducciones (sin contar el cero ni el primer número mayor de 200), la primera suma y la segunda. Contempla la posibilidad de que entre antes el 0 que el primer número mayor de 200. Página 67 de 271 Programación en lenguajes estructurados Anexos Actividad 13: Escribe un programa que lea por teclado un número entero N y otro K, para después mostrar por pantalla el valor del K-ésimo dígito del número empezando por la derecha. Actividad 14: Diseñar un algoritmo utilizando un ordinograma correspondiente a un programa que lee un número entero positivo y determina el número de dígitos decimales necesarios para la representación de dicho valor. Actividad 15: Diseñar un algoritmo utilizando un ordinograma correspondiente a un programa que calcula la potencia de un número dada la base y el exponente. ACTIVIDADES DE REFUERZO Actividad 16: Dibuja un ordinograma que sume los números pares comprendidos entre el 2 y 100. Actividad 17: Dibuja un ordinograma que lea dos valores numéricos distintos X e Y y determine cuál es el mayor dejando el resultado en una tercera variable de nombre Z. Página 68 de 271 Programación en lenguajes estructurados Anexos Solución actividad 8: PROGRAMA: Intercambio MODULO: Principal INICIO DATOS: VARIABLES a,b: Numéricas reales ALGORITMO: Escribir “Introducir dos números: “ Leer a,b Cambiar(dir-a,dir-b)**Se le pasan las direcciones de a y b Escribir a,b FIN MODULO MODULO: Cambiar(x,y) INICIO DATOS: PARÁMETROS x,y: Punteros a numéricos reales VARIABLES aux: Numérico real ALGORITMO: ** Se opera con las direcciones de memoria y su contenido aux = val-x ** Significa valor que contiene la dirección x val-x = val-y ** Valor que contiene la dirección y Página 69 de 271 Programación en lenguajes estructurados Anexos val-y = aux FIN MODULO Solución actividad 9: VARIABLES UTILIZADAS NUMERO Entero. Variable de introducción por teclado. RESTO Entero. Variable Auxiliar para el cálculo PSEUDOCÓDIGO Inicio Programa NUMERO ← 0 Escribir "Introduzca un número entero" Leer NUMERO RESTO ← NUMERO – ((NUMERO/2)*2) Si (RESTO = 0) Entonces Escribir "El número", NUMERO, "es par" Sino Escribir "El número", NUMERO, "es impar" Fin Si Fin de Programa Página 70 de 271 Programación en lenguajes estructurados Anexos Solución Actividad 10: Inicio AST = 0 Leer numast AST = AST+1 Escribir ´*´ Ast < numast Sí No Fin Página 71 de 271 Programación en lenguajes estructurados Anexos Solución Actividad 11: Inicio Leer Tarifa Leer Precio Dto = Tarifa - Precio Pd = Dto * 100 / Tarifa Escribir “ Porcentaje de descuento : “ , Pd Fin Solución actividad 12: VARIABLES UTILIZADAS NUMERO Entero o Real. Variable de introducción por teclado. INTRODUCE Entero. Contador de introducciones. SUMA1 Entero o Real. Acumulador de los anteriores al primer 200. SUMA2 Entero o Real. Acumulador de los posteriores al 200. PSEUDOCÓDIGO Página 72 de 271 Inicio Programa Programación en lenguajes estructurados Anexos U.T. 3: INTRODUCCIÓN AL LENGUAJE C La unidad de trabajo 3 es eminentemente procedimental, por este motivo, las actividades formativas que aquí se detallan van orientadas en este aspecto. ACTIVIDADES DE DESARROLLO Actividad 1: Escribir un programa en C que calcule la potencia de un número dado el valor de su base y su exponente. Actividad 2: Realiza un programa que muestre en pantalla las coordenadas de una tabla cuyas dimensiones son 5x5 (filas x columnas). Actividad 3: Dadas las siguientes sentencias en lenguaje C: X=0; switch(s) { case 0: case 1: case 2: x=10; break; case 3: case 5: x = 20; default: x=30; } z=x; Si s = 5, ¿cual será el valor de z? Actividad 4: Indica la salida de resultados del siguiente programa en C: #include <stdio.h> main() { int j; Página 73 de 271 Programación en lenguajes estructurados Anexos for (j=1;j<=10;j++) { if (j==5) continue; printf (“ %d “, j); } } Actividad 5: Dada la siguiente macro: # define Doble(a) 2*a Razona mediante un ejemplo por qué está mal definida. A continuación defínela de forma correcta. Actividad 6: ¿Cuál es la diferencia entre las dos directivas siguientes? #include <stdio.h> #include “stdio.h” Actividad 7: Escribe un programa en C que dados tres números enteros los muestre por pantalla, ordenados de forma decreciente. Actividad 8: Escribe un programa en C que, dada una variable de tipo carácter indique si el valor de la misma es un carácter alfabético, numérico o especial. Utiliza como referencia la tabla de caracteres ASCII. Actividad 9: Escribir un programa en C que, dado un número entero mayor que cero, indique en pantalla qué dígitos presentaba el número y cuántas veces aparecieron. ACTIVIDADES DE AMPLIACIÓN Actividad 10: Escribe un programa en C que permita seleccionar una opción de entre cuatro posibles e imprima por pantalla la opción seleccionada. Las Página 74 de 271 Programación en lenguajes estructurados Anexos posibles opciones son a, b, c ó d. Actividad 11: Escribe un programa en C que permita calcular la pendiente de la recta que pasa por dos puntos A y B cuyas coordenadas son inicializadas al principio del programa ACTIVIDADES DE REFUERZO Actividad 12: Haz un esquema con los pasos que se siguen desde que tenemos el programa fuente hasta la obtención del programa ejecutable. Actividad 13: Explica qué hacen las siguientes opciones del compilador gcc: gcc [opciones] ficheros Opciones: -o<file> -c Actividad 14: ¿Qué es el tipo enum? Actividad 15: Escribe un programa en C que permita calcular el factorial de un número. ACTIVIDADES DE INVESTIGACIÓN Actividad 16: Averigua cuales son los lenguajes de programación antecesores de C. Actividad 17: Busca información sobre los creadores de C. Actividad 18: Menciona alguno de los entornos de desarrollo integrados (IDE) de código libre/abierto. Solución Actividad 5: La macro está mal parentizada, y por lo tanto, habrá casos en los que no Página 75 de 271 Programación en lenguajes estructurados Anexos calcule correctamente el doble del valor que se le pase. Veámoslo con ejemplos: Doble(6) Î Calculará 2 * 6 =12 (correcto) Doble(3+3) Î Calculará 2 * 3 + 3 = 9 (incorrecto) La solución será: #define Doble(a) 2*(a) Doble(3+3) Î Calculará 2 * (3 + 3) = 12 (correcto) Solución Actividad 7: #include <stdio.h> main(){ /* declaración de variables */ int numero1, numero2, numero3, auxiliar; /* números a ordenar */ numero1= 1; numero2= 2; numero3= 3; auxiliar = 0; /* comparaciones para ordenar los números */ if(numero1 < numero2){ auxiliar = numero1; numero1 = numero2; numero2 = auxiliar; } if(numero1 < numero3){ auxiliar = numero1; Página 76 de 271 Programación en lenguajes estructurados Anexos numero1 = numero3; numero3 = auxiliar; } if(numero2 < numero3){ auxiliar = numero2; numero2 = numero3; numero3 = auxiliar; } printf("Los números introducidos en orden decreciente"); printf(" son %d, %d, %d\n", numero1, numero2, numero3); } Solución Actividad 8: #include <stdio.h> main(){ /* declaración de variables */ char caracter; /* carácter que deseamos analizar */ caracter = '0'; printf("El carácter leído es %c\n", caracter); /* determinación del tipo de carácter */ if(caracter >= '0' && caracter <= '9'){ printf("el carácter leído es un número\n"); } else{ Página 77 de 271 Programación en lenguajes estructurados Anexos if((caracter >= 'A' && caracter <= 'Z')|| (caracter >= 'a' && caracter <= 'z')){ printf("el carácter leído es una letra\n"); } else{ printf("el carácter es especial\n"); } } } Solución Actividad 9: #include <stdio.h> main(){ /* declaración de variables */ int apariciones[10]; int digito, numero, i; /* se inicializa el vector de apariciones */ for(i=0; i<=9; i++){ apariciones[i]=0; } /* número que se desea analizar */ numero=355; /* se analiza dígito a dígito */ while(numero > 0){ digito = numero%10; Página 78 de 271 Programación en lenguajes estructurados Anexos numero = numero/10; apariciones[digito]=apariciones[digito]+1; } /* imprimimos por pantalla las apariciones del dígito */ for(i=0; i<=9; i++){ if(apariciones[i] > 0){ printf("El digito %d aparece %d veces\n", i, apariciones[i]); } } } Solución Actividad 10: #include <stdio.h> main(){ /* declaración de variables */ char seleccion; /* valor de la selección */ seleccion = 'B'; switch (seleccion) { case 'a': printf("La opción seleccionada es la opción A\n"); break; case 'b': printf("La opción seleccionada es la opción B\n"); Página 79 de 271 Programación en lenguajes estructurados Anexos break; case 'c': printf("La opción seleccionada es la opción C\n"); break; case 'd': printf("La opción seleccionada es la opción D\n"); break; default: printf("Selección errónea \n"); } } Solución Actividad 11: #include <stdio.h> main(){ /* valores de las coordenadas X e Y de los puntos A y B */ int aX = 1; int aY = 5; int bX = 0; int bY = 9; /* declaración de la variable que almacena el valor de la pendiente */ float pendiente; /* cálculo de la pendiente contemplando la posibilidad de división */ /* por 0 y pendiente infinita */ if(bX == aX){ Página 80 de 271 Programación en lenguajes estructurados Anexos printf("La pendiente de la recta que une los puntos %d,%d y %d,%d ", aX,aY,bX,bY); printf("es INFINITA\n"); } else { pendiente = (bY-aY)/(bX-aX); printf("La pendiente de la recta que une los puntos %d,%d y %d,%d ", aX,aY,bX,bY); printf("es %.2f\n", pendiente); } } Solución Actividad 13: Opciones de gcc: -o<file> Especifica el nombre del fichero ejecutable (por defecto, a.out) -c Preprocesa, compila y ensambla, pero no enlaza Solución Actividad 14: El tipo enum es un tipo especial de datos que permite realizar enumeraciones de elementos. En realidad el tipo enum asigna valores enteros secuenciales a una lista de objetos. La sintaxis general del tipo enum es: enum identificador {elemento1, elmento2, …, elementoN}; Solución Actividad 15: #include <stdio.h> Página 81 de 271 Programación en lenguajes estructurados Anexos main(){ /* declaración de variables del programa */ int numero, factorial, i; /* inicialización de variables */ numero = 8; /* es el número del cual debe calcularse el factorial */ factorial = 1; /* cálculo del factorial */ for(i=numero;i>0;i--){ factorial = factorial * i; } printf("El Factorial de %d es: %d\n", numero, factorial); } U.T. 4: PROGRAMACIÓN MODULAR EN C La unidad de trabajo 4 es, al igual que ocurre con la unidad 3, eminentemente procedimental, por tanto, las actividades formativas que se detallan van orientadas en este aspecto. ACTIVIDADES DE DESARROLLO Actividad 1: Escribir un programa que utiliza una función que intercambia los valores en memoria de dos variables numéricas. La cabecera de la función debe ser: void Intercambia(float *x, float *y). Actividad 2: Poner en memoria la mitad del valor de dos variables numéricas. La cabecera de la función debe ser: void Pone_mitad(float *x, float *y). Página 82 de 271 Programación en lenguajes estructurados Anexos Actividad 3: Vamos a acceder a las funciones primera y segunda desde la función main. Indica cuál será la salida por pantalla. #include <stdio.h> void primera (void); void segunda (void); main () { printf (“La primera función llamada, main\n”); primera(); segunda(); printf (“Final de la función main\n”); return 0; } void primera (void) { printf (“Llamada a la función primera\n”); return; } void segunda (void) { printf (“Llamada a la función segunda\n”); return; } Actividad 4: Indica la salida por pantalla que se produce en el siguiente Página 83 de 271 Programación en lenguajes estructurados Anexos ejemplo. En dicho ejemplo se utilizan variables globales como mecanismo de intercambio entre funciones. #include <stdio.h> void unaFuncion (); void otraFuncion (); int variable; main () { variable = 9; printf(“El valor de variable es: %d\n”, variable); unaFuncion(); otraFuncion(); printf(“Ahora el valor de variable es: %d\n”, variable); return 0; } void unaFuncion() { printf (“En la función unaFuncion, variable es: %d\n”, variable); } void otraFuncion() { variable++; printf (“En la función otraFuncion, variable es: %d\n”, variable); Página 84 de 271 Programación en lenguajes estructurados Anexos } Actividad 5: Escribe un programa en C que implemente y haga uso de una función que calcule el factorial de un número entero para determinar los posibles podios que pueden darse en una carrera entre 8 corredores. Utiliza la fórmula de variación: n Vm = m! (m − n)! . Actividad 6: Escribe un programa que implemente y utilice una función para determinar si un número es positivo o negativo. Lee un número entero por teclado e imprime por pantalla si el número leído es positivo o negativo haciendo uso de la función definida. Actividad 7: Realiza una función que, dada una cadena de caracteres y un carácter, devuelva el número de apariciones de dicho carácter en la cadena. Realiza un programa que lea una cadena de caracteres por teclado y escriba por pantalla el número de apariciones en la cadena de cada una de las vocales haciendo uso de la función definida. ACTIVIDADES DE AMPLIACIÓN Actividad 8: Escribe un programa en C que simule una pequeña calculadora que implementa las siguientes operaciones: multiplicación, suma, resta, división, potencia y raiz. Todas las operaciones deben ser implementadas como funciones. La selección de la operación se realizará mediante un pequeño menú desplegado por pantalla. Cada operación utilizará dos operandos. Página 85 de 271 Programación en lenguajes estructurados Anexos ACTIVIDADES DE REFUERZO Actividad 9: Dado el siguiente código: #include <stdio.h> void cubo(int *); main() { int numero = 5; printf(“El número original vale %d\n”, numero); cubo(&numero); printf(“El nuevo valor del número es %d\n”, numero); } void cubo(int *nPtr) { *nPtr = *nPtr * *nPtr * *nPtr; } ¿Cuál es el valor que se imprime? Actividad 10: ¿Qué falla en este código? int main (void) { printf (“Hola Mundo\n”) return 0; } Actividad 11: ¿Qué imprimiría este código? Página 86 de 271 Programación en lenguajes estructurados Anexos void imp_inc (int *a) { *a = *a + 1; printf (“%d\n”, *a); } int main (void) { int i, a = 0; for (i = 0 ; i < 5 ; i++) imp_inc (&a); return 0; } Actividad 12: Escribe un programa que pida dos cantidades, una será la edad y la otra el sexo. La salida del programa tiene que ser tal y como se presenta en el siguiente ejemplo: Su sexo es H y su edad 35 años. Actividad 13:¿Qué función de entrada nos permite leer un carácter? ACTIVIDADES DE INVESTIGACIÓN Actividad 14: Escribe un programa en C que, dada una variable de tipo carácter indique si el valor de la misma es un carácter alfabético, numérico o especial. Busca como referencia la tabla de caracteres ASCII, para identificar los caracteres. Solución Actividad 3: Página 87 de 271 Programación en lenguajes estructurados Anexos La salida es: La primera función llamada, main Llamada a la función primera Llamada a la función segunda Final de la función main Solución Actividad 4: La salida es: El valor de variable es: 9 En la función unaFunción, variable es: 9 En la función otraFunción, variable es: 10 Ahora el valor de variable es: 10 Solución Actividad 5: #include <stdio.h> #define POSICION 3 int factorial(int numero); int main(){ int total, variaciones; printf("Introduzca el número de participantes (>3)\n"); scanf("%i", &total); /* cálculo de las variaciones */ variaciones=factorial(total)/factorial(total-POSICION); printf("El número de variaciones posibles es %d\n", variaciones); return 0; } Página 88 de 271 Programación en lenguajes estructurados Anexos /* definición de la function factorial */ int factorial(int numero){ int i; int factor = 1; for(i=2; i<=numero; i++){ factor = factor * i; } return factor; } Solución Actividad 6: #include <stdio.h> int esPositivo(int numero); int main(){ int num, respuesta; printf("Introduzca un número\n"); scanf("%i", &num); respuesta = esPositivo(num); if(respuesta){ printf("El número %d es un número positivo\n", num); }else{ printf("El número %d es un número negativo\n", num); } return 0; } Página 89 de 271 Programación en lenguajes estructurados Anexos int esPositivo(int numero){ if(numero >= 0){ return 1; }else{ return 0; } } Solución Actividad 7: #include <stdio.h> int contarCaracter(char caracter, char cadena[] ); int main(){ char cadena[30]; printf("Introduce una cadena de caracteres (max 30 caracteres)\n"); gets(cadena); printf("\nLa cadena introducida es:\n%s\n", cadena); printf("La vocal a aparece %d veces en la frase\n", contarCaracter('a', cadena)); printf("La vocal e aparece %d veces en la frase\n", contarCaracter('e', cadena)); printf("La vocal i aparece %d veces en la frase\n", contarCaracter('i', cadena)); printf("La vocal o aparece %d veces en la frase\n", contarCaracter('o', cadena)); printf("La vocal u aparece %d veces en la frase\n", contarCaracter('u', Página 90 de 271 Programación en lenguajes estructurados Anexos cadena)); return 0; } int contarCaracter(char caracter, char cadena[] ){ int i; int contador=0; for(i=0; i<30; i++){ if(cadena[i]==caracter){ contador ++; } } return contador; } Solución Actividad 8: #include <stdio.h> #include <math.h> double suma(double num1, double num2); double resta(double num1, double num2); double multiplica(double num1, double num2); double divide(double num1, double num2); double potencia(double base, int exponente); int main(){ float num1=0.0, num2=0.0; float base=0.0; Página 91 de 271 Programación en lenguajes estructurados Anexos int exp; char seleccion; /* imprime el menu */ printf("Seleccione una opción:\n"); printf("--------------------------\n"); printf("MULTIPLICAR (*)\n"); printf("SUMAR (+) \n"); printf("RESTAR (-) \n"); printf("DIVIDIR (/) \n"); printf("POTENCIA (^) \n"); printf("RAIZ CUADRADA (#) \n"); printf("--------------------------\n"); printf("¿Opción?\n"); /* lee la selección */ scanf("%c", &seleccion); switch (seleccion) { case '*': printf("Introduce el primer termino\n"); scanf("%f", &num1); printf("Introduce el segundo termino\n"); scanf("%f", &num2); printf("El resultado es %.2f\n", multiplica(num1,num2)); break; Página 92 de 271 Programación en lenguajes estructurados Anexos case '+': printf("Introduce el primer sumando\n"); scanf("%f", &num1); printf("Introduce el segundo sumando\n"); scanf("%f", &num2); printf("El resultado es %.2f\n", suma(num1,num2)); break; case '-': printf("Introduce el minuendo\n"); scanf("%f", &num1); printf("Introduce el sustraendo\n"); scanf("%f", &num2); printf("El resultado es %.2f\n", resta(num1,num2)); break; case '/': printf("Introduce el dividendo\n"); scanf("%f", &num1); printf("Introduce el divisor\n"); scanf("%f", &num2); printf("El resultado es %.2f\n", divide(num1,num2)); break; case '^': printf("Introduce la base\n"); Página 93 de 271 Programación en lenguajes estructurados Anexos scanf("%f", &base); printf("Introduce el exponente\n"); scanf("%i", &exp); printf("El resultado es %.2f\n", potencia(base,exp)); break; case '#': printf("Introduce el número\n"); scanf("%f", &num1); printf("El resultado es %.2f\n", sqrt(num1)); break; default: printf("No existe la operación\n"); } return 0; } double suma(double num1, double num2){ return num1 + num2; } double resta(double num1, double num2){ return num1 - num2; } double multiplica(double num1, double num2){ return num1 * num2; Página 94 de 271 Programación en lenguajes estructurados Anexos } double divide(double num1, double num2){ return num1/num2; } double potencia(double base, int exponente){ int i; double resultado=1.0; for(i=1;i<=exponente;i++){ resultado = resultado * base; } return resultado; } Solución Actividad 11: Imprimiría 1 2 3 4 5 Solución Actividad 12: #include <stdio.h> main( ) { int edad; Página 95 de 271 Programación en lenguajes estructurados Anexos char sexo; printf (“Escriba su edad (en años) y sexo (H o M):\n”); scanf (“%i %c, &edad, &sexo); printf (“Su sexo es %c y su edad %i años\n”, sexo, edad); return 0; } Solución Actividad 13: La función que nos permite leer caracteres uno a uno es la función getchar. Esta función no requiere argumentos y simplemente devuelve el carácter leído por la entrada estándar en forma de entero sin signo. El prototipo de esta función es: int getchar (void); Solución Actividad 14: #include <stdio.h> main(){ /* declaración de variables */ char caracter; /* carácter que deseamos analizar */ caracter = '0'; printf("El carácter leído es %c\n", caracter); /* determinación del tipo de carácter */ if(caracter >= '0' && caracter <= '9'){ printf("el carácter leído es un número\n"); } Página 96 de 271 Programación en lenguajes estructurados Anexos else{ if((caracter >= 'A' && caracter <= 'Z')|| (caracter >= 'a' && caracter <= 'z')){ printf("el carácter leído es una letra\n"); } else{ printf("el carácter es especial\n"); } } } U.T. 5: ESTRUCTURAS DE DATOS ESTÁTICAS La unidad de trabajo 5 es procedimental, por tanto, las actividades formativas que se detallan van orientadas en este aspecto. ACTIVIDADES DE DESARROLLO Actividad 1: Hacer un programa que: a) Crea un array unidimensional de 30 elementos de tipo numérico entero y nombre “números”. b) Carga el vector con valores positivos, negativos y ceros. c) Contabilliza el número de valores positivos, negativos y ceros almacenados en el proceso de carga. d) Muestra en pantalla los resultados obtenidos. Actividad 2: Hacer un programa que: a) Lea una secuencia de 20 valores numéricos reales y los almacene en Página 97 de 271 Programación en lenguajes estructurados Anexos un array de nombre “números”. b) Muestra en pantalla cuál es el valor máximo, así como la posición que ocupa en el array. En caso de aparecer repetido el valor máximo se muestra el de menor índice. Actividad 3: Realiza un programa que dada una cadena que será introducida por teclado debe determinar la longitud de la misma. Se pide implementar dos funciones para determinar la longitud. Una de ellas mediante el uso de punteros y la otra con un vector. Actividad 4: Escribir un programa que mediante el empleo de un menú realice operaciones aritméticas, llamando a las funciones correspondientes. Desarrollar este programa utilizando una tabla de punteros a funciones. ACTIVIDADES DE AMPLIACIÓN Actividad 5: Queremos calcular el consumo (euros de gasto y litros/km) de un conjunto de vehículos, para lo cual vamos anotando los kilómetros recorridos y los litros de gasolina repostados cada vez que paramos en una gasolinera. Teniendo en cuenta que, cuando repostamos los litros con los que llenamos el depósito, aún no han sido utilizados pero sí pagados, propón una estructura para representar la información relativa al consumo del coche, y una función repostar que reciba como argumentos los kilómetros que marca el coche, los litros repostados y el precio pagado por cada litro de gasolina. Actividad 6: Describe mediante una unión las posibles jugadas de poker (repoker, escalera de color, poker, foul, trio, color, dobles parejas y parejas) sabiendo que es relevante representar el valor más alto de las escaleras, el valor de los poker, parejas y trios, y los dos valores del foul y de las dobles Página 98 de 271 Programación en lenguajes estructurados Anexos parejas. ACTIVIDADES DE REFUERZO Actividad 7: Define el tipo abstracto de datos vector (TAD vector). Actividad 8: Hacer un programa que: a) Cree un array unidimensional de nombre ‘vector’ y cinco elementos, siendo sus componentes de tipo numérico entero. b) Asigne a cada elemento o componente del array el valor 0. c) Calcule el tamaño (en bytes) que dicho array ocupa en memoria, mostrando el resultado obtenido en pantalla. Actividad 9: Hacer un programa que: a) Cree un array bidimensional de longitud 5x5 y nombre ‘diagonal’. b) Inicializa el array, de forma que los componentes pertenecientes a la diagonal de la matriz tomen valor 1 y el resto valor 0. c) Muestre el contenido del array en pantalla. Actividad 10: Define una estructura de empleados con los siguientes campos: Nombre, dirección, teléfono, salario. A continuación declara un array de 150 elementos del tipo empleado. Solución Actividad 1: #include <stdio.h> main() { int numeros[30]; Página 99 de 271 Programación en lenguajes estructurados Anexos int j, pos, neg, cero; for (j=0; j<30; j++) scanf (“%d “, &numeros[j]); pos = neg = cero = 0; for (j=0; j<30; j++) if (numeros[j]<0) neg++; else if (numeros[j]>0) pos++; else cero++; printf (“Hay %d números negativos, %d números positivos y %d ceros \n”, neg, pos, cero); } Solución Actividad 2: #include <stdio.h> main() { float numeros[20]; int k, p; float maximo; for (k=0; k<20; k++) { printf(“Introduce componentes %d: “, k); Página 100 de 271 Programación en lenguajes estructurados Anexos scanf(“%f”, &numeros[k]); } maximo = numeros[0]; p = 0; for(k=1;k<20;k++) if (maximo < numeros[k]) { maximo = numeros[k]; p = k; } printf (“El valor máximo es: %f\n”, maximo); printf (“Ocupa la posición %d del vector \n”, p+1); } Solución Actividad 3: #include <stdio.h> int longitud_cadena2 (char *cadena); int longitud_cadena1 (char *cadena); main() { char cadena[100]; printf (“Introducir una cadena:”); gets (cadena); printf(“Longitud de la cadena: %d\n”, longitud_cadena2 (cadena)); printf(“Longitud de la cadena: %d\n”, longitud_cadena1 (cadena)); Página 101 de 271 Programación en lenguajes estructurados Anexos } /* Funciones que devuelven la longitud de una cadena */ int longitud_cadena1 (char *cadena) { int n; for (n=0; cadena[n] != ‘\0’; n++); return (n); } int longitud_cadena2 (char *cadena) { int n; for (n=0; *cadena != ‘\0’; cadena++) n++; return (n); } Solución Actividad 4: #include <stdio.h> void main (void) { void suma (float x, float y); void resta (float x, float y); void prod (float x, float y); void divi (float x, float y); Página 102 de 271 Programación en lenguajes estructurados Anexos void (*p[4]) (float x, float y) = {suma, resta, prod, divi}; float num1, num2; int opcion; printf (“\n Introducir dos números\n”); scanf(“%f%f”, &num1, &num2); printf (“1.- Suma\n”); printf (“2.- Resta\n”); printf (“3.- Producto\n”); printf (“4.- División\n”); Do { printf (“Seleccionar una opción \n”); scanf (“%d”, &opcion); } while (opcion < 1 || opcion > 4); (*p[opcion-1])(num1, num2); } void suma (float x, float y) { printf (“La suma vale:%0.2f”, x+y); } void resta (float x, float y) Página 103 de 271 Programación en lenguajes estructurados Anexos { printf (“La resta vale:%0.2f”, x-y); } void prod (float x, float y) { printf (“El producto vale:%0.2f”, x*y); } void divi (float x, float y) { if (y==0) printf (“La división no es posible. Divisor igual a cero”); else printf (“La división vale:%0.2f”, x/y); } Solución Actividad 5: struct vehiculo { char marca[12]; char modelo[12]; char matricula[7]; int kms; int litros; float gasto; float consumo; } Página 104 de 271 Programación en lenguajes estructurados Anexos repostar(int kms, int litros, float precio, struct *vehiculo) { vehiculo->kms=kms; // como los kms que marca el coche incluyen todos los acumulados en la vida del vehiculo, no hay que sumarlo. vehiculo->consumo= vehiculo->litros / vehiculo->kms; // son los litros consumidos sin incluir los recién repostados (pq no se han utilizado aún para recorrer kms) vehiculo->litros=vehiculo->litros+litros; // añadimos los litros del ultimo repostaje para que cuenten en el próximo cálculo de consumo vehiculo->gasto= vehiculo->gasto+ litros*precio; // añadimos al gasto los litros repostados por el precio en ese momento de la gasolina } Solución Actividad 6: enum tipos {repoker, escalera, poker, foul, trio, color, dobles, pareja) struct foul { enum tipos tipo; int valor1; int valor2; } Página 105 de 271 Programación en lenguajes estructurados Anexos struct otra { enum tipos tipo; int valor; } union jugada { struct foul mifoul; enum tipos micolor; // a la jugada 'color' no le hace falta asociarle ningún número struct otra miotra; } Solución Actividad 7: TAD: vector OPERACIONES: Crear: Æ vector Extraer: vector x tipo_indice Æ tipo_base Almacenar: vector x tipo_indice x tipo_base Æ vector AXIOMAS: ∀ A ∈ vector, ∀ i, j ∈ tipo_indice, ∀ x, y ∈ tipo_base Extraer(Crear, i) =error Extraer(Almacenar(A,i,x), j) = si i=j entonces x sino Extraer(A,j) Almacenar(Almacenar(A,i,x), j, y) = si i=j entonces Almacenar(A,i,y) sino Almacenar(Almacenar(A, j,y),i,x) Página 106 de 271 Programación en lenguajes estructurados Anexos U.T. 6: ORDENACIÓN Y BÚSQUEDA La unidad de trabajo 6 presenta tanto contenidos conceptuales como procedimentales, por tanto, en este apartado se detallan actividades formativas orientadas en los dos aspectos. ACTIVIDADES DE DESARROLLO Actividad 1: Hacer un programa que: a) Cree un array unidimensional de 10 elementos de tipo numérico entero. b) Seguidamente lo cargue con valores numéricos aleatorios. c) Recoja el valor del elemento que se quiere buscar en el array. d) Realice una llamada a una función de nombre “busqueda_binaria()”, a la que se pasarán como parámetros el valor que se quiere encontrar, el array en el que se desea buscar y el tamaño del mismo. Esta función devolverá el valor -1 en caso de no ser encontrado el elemento buscado y en caso contrario devolverá la posición donde ha sido localizado dicho elemento (valor del índice). Actividad 2: Diseñar y codificar una función que ordene un array mediante el método de selección directa. Actividad 3: Diseñar y codificar los métodos de búsqueda estudiados (secuencial y binaria) y calcular el tiempo que tarda cada uno de ellos en ejecutarse mediante la función time. ACTIVIDADES DE AMPLIACIÓN Página 107 de 271 Programación en lenguajes estructurados Anexos Actividad 4: Desarrolla una función que permita ordenar un array de artículos por código o por nombre. La cabecera de la función será: Void ordena_clientes (cliente *clientes, int cant, char campo); Donde cliente es una estructura con la siguiente definición: Struct cliente { int codigo; char *nombre; char *apellidos; char *NIF; float consumo_total; }; Actividad 5: ¿Por qué el método que se ha discutido para la búsqueda en arrays no ordenados no puede ser mejorado? Actividad 6: Implementa el algoritmo de ordenación “quicksort” y compara los tiempos de ejecución de éste en comparación con los métodos presentados. ACTIVIDADES DE REFUERZO Actividad 7: Describe el algoritmo de búsqueda lineal en un array. Actividad 8: Define el método de ordenación por intercambio directo (método de la burbuja). ¿Qué mejora incorpora el método de la burbuja con switch? ACTIVIDADES DE INVESTIGACIÓN Actividad 9: Los algoritmos de ordenación que hemos mencionado no son todos los conocidos. Investiga qué otros algoritmos existen y describe en qué sentido demoran a los ya descritos. Página 108 de 271 Programación en lenguajes estructurados Anexos Solución Actividad 1: #include <stdio.h> int busqueda_binaria (int valor, int vector[ ], int tam); main () { int vector[10]; int i; int valor; for (i=0; i<10; i++) { printf (“Valor de la componente %d”, i); scanf (“%d”, &vector[i]); } printf (“Valor que desea buscar:”); scanf (“%d”, &valor); i = busqueda_binaria (valor, vector, 10); if (i != -1) printf (“El valor %d fue encontrado en la posición %d\n”, valor, i); else printf (“El valor %d no existe en el vector indicado”, valor); } int busqueda_binaria (int valor, int vector[ ], int tam) Página 109 de 271 Programación en lenguajes estructurados Anexos { int izq, der, cen; izq = 0; der = tam-1; cen = (izq + der) /2; while (valor != vector[cen] && izq < der) { if (valor > vector[cen]) izq = cen+1; else der = cen -1; cen = (izq + der) / 2; } if (valor == vector[cen]) return (cen); else return (-1); } Solución Actividad 2: void selección_directa (int v[ ], int tam) { int i, j, min, posmin; for (i=0; i<tam-1; i++) { Página 110 de 271 Programación en lenguajes estructurados Anexos posmin = i; min = v[i]; for (j = i+1; i<tam; j++) if (v[j]<min) { min = v[j]; posmin = j; } v[posmin] = v[i]; v[i] = min; } } Solución Actividad 4: int ordena_clientes_cod (cliente *clientes, int cant) { struct cliente *aux; int i, j; for (i=1; i<cant; i++) { for (j=cant-1; j>=i; j--) { if (clientes[j].codigo > clientes[j-1].codigo) { aux = &clientes[j]; clientes[j] = clientes[j-1]; Página 111 de 271 Programación en lenguajes estructurados Anexos clientes[j-1] = *aux; } } } } int ordena_clientes_nom (cliente *clientes, int cant) { struct cliente *aux; int i, j; for (i=1; i<cant; i++) { for (j=cant-1; j>=i; j--) { if (strcmp(clientes[j].nombre, clientes[j- 1].nombre)<0) { aux = &clientes[j]; clientes[j] = clientes[j-1]; clientes[j-1] = *aux; } } } } Solución Actividad 5: Página 112 de 271 Programación en lenguajes estructurados Anexos Esto es debido a que se desconoce la composición del array y, por tanto, no se puede hacer una hipótesis de en qué posible lugar del array podemos encontrar al elemento buscado. Si el array está ordenado, este proceso se simplifica, ya que al comparar con un elemento cualquiera del array, si este es menor que el elemento que buscamos, sabemos que debemos concentrarnos en la parte posterior del array, o anterior en caso contrario. Solución Actividad 6: En comparación con los otros métodos presentados “quicksort” es más rápido ya que como promedio, tiene una complejidad de orden n log(n), donde n es la dimensión de la lista. void swap (int *a, int *b) { int t=*a; *a=*b; *b=t; } void sort(int arr[], int beg, int end) { if (end > beg+1) { int piv = arr[beg], l = beg+1, r = end; while (l!= r-1) { if (arr[l] <= piv) l++; else Página 113 de 271 Programación en lenguajes estructurados Anexos swap (&arr[l], &arr[r--]); } if (arr[l] <= piv && arr[r] <= piv) l = r+1; else if (arr[l] <= piv && arr[r] > piv) { l++; r--;} else if (arr[l] > piv && arr[r] <= piv) swap (&arr[l++], &arr[r--]); else r= l-1; swap (&arr[r--], &arr[beg]); sort(arr,beg, r); sort (arr, l, end); } } Solución Actividad 9: En Internet se pueden encontrar numerosos recursos que hablan sobre este tema. Un buen lugar para comenzar puede ser Wikipedia, en particular la página http://es.wikipedia.org/wiki/Algoritmo_de_ordenamiento. U.T. 7: ESTRUCTURAS EXTERNAS La unidad de trabajo 7 es conceptual y procedimental, por tanto, las actividades formativas que se detallan van orientadas en este aspecto. Página 114 de 271 Programación en lenguajes estructurados Anexos ACTIVIDADES DE DESARROLLO Actividad 1: Clasifica los distintos tipos de ficheros según su función y el uso que se hace de ellos. Actividad 2: Diferencia entre los tres tipos de organizaciones de ficheros existentes. Cita las características más importantes de cada una de ellas. Actividad 3: Define los conceptos de registro lógico y campo. Actividad 4: ¿Qué entiendes por bloque o registro físico? Actividad 5: Explica con la mayor claridad posible lo que entiendes por factor de bloqueo. Actividad 6: ¿En que se caracterizan los dispositivos direccionables? Actividad 7: Mostrar cómo (tamaño y contenido) se almacenaría 8238201 en un fichero si utilizamos fprintf y fwrite. Actividad 8: Indica el tipo de operación que deberíamos haber realizado para modificar el contenido de un fichero preexistente. ACTIVIDADES DE AMPLIACIÓN Actividad 9: Se dispone de un fichero de texto (notas.dat) en el que están introducidas las notas de las tres evaluaciones (apellidos, nombre, curso, nota1, nota2, nota3). Diseñar un programa que lea dicho fichero y cree un nuevo fichero (aprobados.dat) en el que figuren aquellos alumnos cuya media sea mayor o igual a cinco. Actividad 10: Crea un programa que copie el contenido de un fichero de texto denominado “quijote.txt” en otro denominado “copiaquijote.txt”, carácter a carácter, mediante las funciones getc y putc. Página 115 de 271 Programación en lenguajes estructurados Anexos Actividad 11: Crea un programa que recibe un fichero de texto denominado “quijote.txt” y presenta su contenido en pantalla en orden inverso. Actividad 12: Escribe un programa que reciba como argumentos un caracter y el nombre de un fichero, y que muestre en pantalla las líneas del fichero que comiencen con el carácter indicado. ACTIVIDADES DE REFUERZO Actividad 13: Diseñar un programa que lea los datos de 5 alumnos y los escriba en un fichero de texto. Actividad 14: ¿Qué errores tiene este programa? #include <stdio.h> main() { int *fp; int i; fp = fopen (“dieta”); i = 5; while (i>0) { fputs(fp, “dia %d de la dieta: verdura hervida”, i); i = i-1; } fclose (dieta); } Página 116 de 271 Programación en lenguajes estructurados Anexos Solución Actividad 7: • Con fprintf se almacenaría en 7 octetos correspondientes a cada carácter: “8” “2” “3” “8” “2” “0” “1”. • Con fwrite se guarda en cuatro octetos con la representación binaria correspondiente a los enteros. Solución Actividad 8: • w+ borraría todo el contenido del fichero. • a+ sólo permitiría escribir al final del fichero. • r+ es la solución correcta. Solución Actividad 10: #include <stdio.h> main() { FILE *fich1, *fich2; char c; fich1 = fopen (“quijote.txt”, “r”); fich2 = fopen (“copiaquijote.txt”, “w”); if ((fich1 == null) || (fich2 == null)) printf (“Error al abrir ficheros”); else { while ((c = getc (fich1)) != EOF) putc (c, fich2); if (fclose (fich1) != 0) Página 117 de 271 Programación en lenguajes estructurados Anexos printf (“Error al cerrar el fichero quijote”); if (fclose (fich2) != 0) printf (“Error al cerrar el fichero copiaquijote”); } } Solución Actividad 11: #include <stdio.h> main() { char ch; FILE *fich; long i, tam; fich = fopen (“quijote.txt”, “r”); if (fich == null) printf (“Error al abrir fichero”); else { fseek (fich, 0L, SEEK_END); tam = ftell (fich); i = 1L; while (i<=tam) { fseek(fich, -i, SEEK_END); ch = getc (fich); Página 118 de 271 Programación en lenguajes estructurados Anexos if (ch != CNTLZ && ch != ‘\r’) putchar(ch); i = i+1; } if (fclose (fich1) != 0) printf (“Error al cerrar el fichero quijote”); } } Solución Actividad 12: #include <stdio.h> main (int argc, char *argv) { FILE* fichero; char c; char linea[256]; if (argc != 3) { printf(“numero incorrecto de argu } c= argv[1][0]; if (fichero= fopen(argv[2], “r”)) == NULL) { printf(“error de lectura de Página 119 de 271 Programación en lenguajes estructurados Anexos } while (fgets (linea, 256, fichero)) { if (linea[0]==c) printf (“% } } Solución Actividad 14: 1. La variable fp se tenía que haber declarado como FILE * y no como int. 2. fopen necesita como segundo argumento el tipo de apertura que vamos a realizar, por ejemplo escritura “w”. 3. fclose necesita como argumento un puntero a FILE (fp) y no una cadena de caracteres. 4. En lugar de fputs debería ser fprintf. U.T. 8: ESTRUCTURAS DE DATOS DINÁMICAS LINEALES La unidad de trabajo 8 es procedimental, por tanto, las actividades formativas que se detallan van orientadas en este aspecto. ACTIVIDADES DE DESARROLLO Actividad 1: Dada una Pila, con sus operaciones típicas, diseñar el algoritmo correspondiente a un módulo o función que cuente el número de elementos de Página 120 de 271 Programación en lenguajes estructurados Anexos dicha pila. Actividad 2: Diseñar un procedimiento que recibiendo una cola, suprima de la misma el elemento especificado. En el supuesto de existir varios elementos repetidos todos ellos deberán ser eliminados. Actividad 3: Diseñar el algoritmo correspondiente a un módulo o función que recibe una pila y un valor del tipo de los elementos de dicha pila e inserta dicho valor en el fondo de la pila. Actividad 4: Diseñar un procedimiento que inserte un nuevo nodo a una lista enlazada. Actividad 5: Escribir una función que devuelva cierto si la lista está vacía y falso en otro caso, y otra que cree una lista vacía. Actividad 6: Escribir una función entera que devuelva el número de nodos de una lista enlazada. Actividad 7: Escribir una función que elimine el nodo que ocupa la posición i de una lista enlazada ordenada. Actividad 8: Escribir una función que recibe como parámetro dos listas enlazadas ordenadas crecientemente y de cómo resultado otra lista enlazada ordenada que sea la mezcla de las dos. Actividad 9: Escribir las funciones MayorPila, MenorPila y MediaPila que calculan el elemento mayor, menor y la media de una pila de enteros. Actividad 10: Escribir las funciones LiberarPila y SonIgualesPila que respectivamente libera todos los nodos de una pila implementada con listas y decide si dos pilas son iguales. ACTIVIDADES DE AMPLIACIÓN Página 121 de 271 Programación en lenguajes estructurados Anexos Actividad 11: Implementa de forma dinámica en C las siguientes operaciones de la pila: crear, pilavacia, tope, borrar, añadir. ACTIVIDADES DE REFUERZO Actividad 12: Define el tipo abstracto de datos de la pila (TAD pila). Actividad 13: Define el tipo abstracto de datos de la cola (TAD cola). Solución Actividad 5: typedef int Item; typedef struct Registro { Item el; struct Registro* sig; }Nodo; Int Esvacia(Nodo * Primero) { return( Primero==NULL); } Void VaciaL(Nodo ** Primero) { *Primero==NULL; } Solución Actividad 6: int NumerNodos(Nodo *Primero) { Página 122 de 271 Programación en lenguajes estructurados Anexos int k = ; Nodo *p; p = Primero; while (p != NULL) { k++; p = p->sig; } return(k); } Solución Actividad 7: void EliminaPosicion (Nodo** Primero, int i) { int k = 0; Nodo *ptr, *ant; ptr = *Primero; ant = NULL; while ( (k < i) && (ptr != NULL)) { k++; ant = ptr; ptr = ptr->sig; } if(k == i) Página 123 de 271 Programación en lenguajes estructurados Anexos { if( ant == NULL) *Primero = ptr->sig; else ant->sig = ptr->sig; free(ptr); } } Solución Actividad 8: void MezclarListasOrdenadas(Nodo *L1, Nodo *L2, Nodo **L3) { Nodo *p1, *p2, *p, *u, *nn; nn = NuevoNodo(-32767); p = nn; u = nn; p1 = L1; p2 = L2; while (p1 && p2) if (p1->el < p2->el) { nn = NuevoNodo(p1->el); u->sig = nn; u = nn; p1 = p1->sig; Página 124 de 271 Programación en lenguajes estructurados Anexos } else { nn = NuevoNodo(p2->el); u->sig = nn; u = nn; p2 = p2->sig; } while ( p1 ) { nn = NuevoNodo(p1->el); u->sig = nn; u = nn; p1 = p1->sig; } while ( p2 ) { nn = NuevoNodo(p2->el); u->sig =nn; u = nn; p2 = p2->sig; } *L3 = p->sig; free(p); Página 125 de 271 Programación en lenguajes estructurados Anexos } Solución Actividad 9: TipoDato MayorPila(Pila *P) { TipoDato Mayor,e; Mayor = -32767; while (! EsVaciaP(P)) { e=PrimeroP(P); BorrarP(&P); if (Mayor < e) Mayor = e; } return Mayor; } TipoDato MenorPila(Pila *P) { TipoDato Menor,e; Menor = 32767; while (! EsVaciaP(P)) { e=PrimeroP(P); BorrarP(&P); if (Menor > e) Página 126 de 271 Programación en lenguajes estructurados Anexos Menor = e; } return Menor; } float MediaPila(Pila*P) { TipoDato Total=0,e,k=0; while (! EsVaciaP(P)) { e = PrimeroP(P); BorrarP(&P); Total+ = e; k++; } if ( k == 0 ) return 0; else return ( (float)Total / k); } Solución Actividad 10: void LiberarPila(Pila**P) { while (!EsVaciaP(*P)) BorrarP(P); Página 127 de 271 Programación en lenguajes estructurados Anexos } int SonIgualesPilas(Pila *P, Pila* P1) { int sw = 1; TipoDato e,e1; while (! EsVaciaP(P) && !EsVaciaP(P1) && sw) { e = PrimeroP(P); BorrarP(&P); e1 = PrimeroP(P1); BorrarP(&P1); sw = (e == e1); } return (sw && EsVaciaP(P)&& EsVaciaP(P1)); } Solución Actividad 11: struct nodo { tipobase info; struct nodo *sig; }; typedef struct nodo *pila; pila crear (void) { return null; } Página 128 de 271 Programación en lenguajes estructurados Anexos int pilavacia (pila p) { return !p; } tipobase tope (pila p) { return p Æ info; } pila borrar (pila p) { pila q = p; p = pÆ sig; free (q); return p; } pila anyadir (pila p, tipobase e) { pila q; q = (pila) malloc (sizeof (struct nodo)); q Æ info = e; q Æ sig = p; return q; } U.T. 9: LIBRERÍAS EN EL LENGUAJE C La unidad de trabajo 9 es procedimental, por tanto, las actividades formativas que se detallan van orientadas en este aspecto. Página 129 de 271 Programación en lenguajes estructurados Anexos ACTIVIDADES DE DESARROLLO Actividad 1: Hacer un programa que: a) Determine mediante directivas de compilación condicionales si está o no definida la macro CUADRADO. b) En caso afirmativo, deberá calcular el cuadrado de un valor numérico introducido por teclado. c) En caso contrario deberá mostrar un mensaje en pantalla indicando la ausencia de dicha definición. Actividad 2: Definir una macro que obtenga el valor absoluto de un número y utilizarla en un programa. ACTIVIDADES DE AMPLIACIÓN Actividad 3: Hacer un programa que contenga un fichero de cabecera de nombre “pseudo.h” constituido por la definición de una lista de constantes simbólicas que permitan establecer un lenguaje propio similar a la nomenclatura utilizada en la notación pseudocodificada para el diseño de estructuras condicionales. Utiliza para ello la solución del ejercicio anterior. Actividad 4: Hacer un programa que determine mediante directivas condicionales de compilación si el compilador utilizado es de Borland (TurboC), Microsoft (Microsoft C) o de Digital (el VAX C). ACTIVIDADES DE REFUERZO Actividad 5: Generar una librería que incluya dos funciones, suma y división. Crear un programa desde el cual se llame a estas funciones y muestre a partir de 2 números reales, el resultado de ambas funciones. Página 130 de 271 Programación en lenguajes estructurados Anexos Actividad 6: Dadas las siguientes directivas condicionales indicar según las opciones de compilación cuales serán las salidas correspondientes. #ifndef SYSTEM #error system no está definido #endif #define LINUX 2 #define MSDOS 3 #if SYSTEM == LINUX #define HDR ”linux.h” #elif SYSTEM == MSDOS #define HDR “msdos.h” #else #define HDR “default.h” #endif #include HDR main() { /*………….*/ } Opciones de compilación: a) $gcc –o prog prog.c b) $gcc –o prog –D SYSTEM = 2 prog.c c) $gcc –o prog –D SYSTEM prog.c ACTIVIDADES DE INVESTIGACIÓN Actividad 7: Averigua cuales son las funciones que contiene la librería Página 131 de 271 Programación en lenguajes estructurados Anexos estándar stdlib y los parámetros que se tienen que pasar a cada una de ellas así como los resultados que devuelve. Solución Actividad 2: #define ABS (x) ((x>=0) ? (x):(-x)) void main (void) { int a, b, abs_a, abs_b; printf (“\n Introduce primer número: “); scanf (“%d”, &a); printf (“\n Introduce segundo número: “); scanf (“%d”, &b); abs_a = ABS (a); abs_b = ABS (b); if (abs_a > abs_b) printf (“El mayor en valor absoluto es: %d”, a); else if (abs_a < abs_b) printf (“El mayor en valor absoluto es: %d”, b); else printf (“Los dos números son iguales en valor absoluto”); } Solución Actividad 3: /*PSEUDO.H*/ #define si if Página 132 de 271 Programación en lenguajes estructurados Anexos #define entonces { #define finsi } #define sino } else { #define leer scanf #define escribir printf /*-------------------------------------------------*/ #include <stdio.h> #include “pseudo.h” #define ABS (x) ((x>= 0) ? (x):(-x)) void main (void) { int a, b, abs_a, abs_b; escribir (“\n Introduce primer número: “); leer (“%d”, &a); escribir (“\n Introduce segundo número: “); leer (“%d”, &b); abs_a = ABS (a); abs_b = ABS (b); si (abs_a > abs_b) entonces escribir (“El mayor en valor absoluto es: %d”, a); sino si (abs_a < abs_b) entonces escribir (“El mayor en valor absoluto es: %d”, b); sino Página 133 de 271 Programación en lenguajes estructurados Anexos escribir (“Los dos números son iguales en valor absoluto”); finsi finsi } Solución Actividad 6: a) $gcc –o prog prog.c Esta opción de compilación daría error porque SYSTEM no está definido. b) $gcc –o prog –D SYSTEM = 2 prog.c Con esta opción de compilación en el include se pondrá linux.h. c) $gcc –o prog –D SYSTEM prog.c Con esta opción de compilación en el include se pondrá default.h. U.T. 10: RECURSIVIDAD La unidad de trabajo 10 presenta tanto contenidos conceptuales como procedimentales, por tanto, en este apartado se detallan actividades formativas orientadas en los dos aspectos. ACTIVIDADES DE DESARROLLO Actividad 1: Diseñar una función que calcule el factorial de un número entero de las siguientes formas: a) Solución con una estructura iterativa. Página 134 de 271 Programación en lenguajes estructurados Anexos b) Solución con una función recursiva. Actividad 2: Escribir una función recursiva que recibe como parámetro un valor numérico entero y positivo (en decimal) y pasa dicho valor al sistema de numeración binario mostrando el resultado por pantalla. Actividad 3: Dada la siguiente función recursiva, realiza el seguimiento y determina cuál es la salida que genera. void saludo (int valor) { int k; if (valor>0) { for (k = 1; k <= valor; k++) putchar (‘ ‘); printf (“Hola\n”); saludo(valor – 1); } return; } Entrada de datos: Se llamará a la función, por ejemplo, desde el main() con saludo(5); Actividad 4: Escribe un programa que utiliza una función recursiva para calcular y retornar la potencia de un número distinto de cero, siendo su exponente entero y positivo. Actividad 5: Escribir una función recursiva que calcule los valores de la Página 135 de 271 Programación en lenguajes estructurados Anexos función funcionx definida de la siguiente forma: funcionx(0) = 0, funcionx(1) = 1, funcionx(2) = 2, funcionx(n) = funcionx(n-3) + 2 * funcionx(n-2) + funcionx(n-1) si n>2. ACTIVIDADES DE AMPLIACIÓN Actividad 6: El problema de las torres de Hanoi general tiene tres varillas o torres denominadas Origen, Destino y Auxiliar y un conjunto de n>0 discos de diferentes tamaños. Cada disco tiene una perforación en el centro que le permite colocarse en cualquiera de las torres. En la varilla Origen se encuentran colocados inicialmente los n discos de tamaños diferentes ordenados de mayor a menor. Se trata de llevar los n discos de la varilla Origen a la varilla Destino utilizando las siguientes reglas: 1. Sólo se puede llevar un solo disco a la vez. 2. Un disco sólo puede colocarse encima de otro con diámetro ligeramente superior. 3. Si se necesita puede usarse la varilla Auxiliar. Actividad 7: Escribir una función recursiva que calcule la función de Ackermann definida de la siguiente forma: A(m,n) = n+1 si m=0 A(m,n) = A(m-1, 1) si n=0 A(m,n) = A(m-1, A(m-1, 1)) si m>0, y n>0 ACTIVIDADES DE REFUERZO Actividad 8: ¿Por qué se caracteriza una función recursiva? Página 136 de 271 Programación en lenguajes estructurados Anexos Actividad 9: Definir los tipos de recursividad que existen: 1. Atendiendo al número de llamadas que se generan. 2. Atendiendo a la forma de activar la recursividad. Actividad 10: Dada la siguiente función: long fibonacci (long n) { if (n==1 | | n==2) return n; else return fibonacci (n - 1) + fibonacci (n - 2); } ¿Qué valor se obtiene haciendo la llamada fibonacci (5)? Actividad 11: Escribir una función recursiva que muestre en pantalla los dígitos de un valor numérico entero positivo en orden inverso. Actividad 12: Obtener un algoritmo recursivo que multiplique dos números naturales. ACTIVIDADES DE INVESTIGACIÓN Actividad 13: Codificar un programa que mediante la técnica de recursividad indirecta escriba el alfabeto en minúsculas. Los alumnos deberán investigar que es la recursividad indirecta, dado que no se ha explicado en clase. Solución Actividad 1: a) Solución con una estructura iterativa. long Fac_itera (int x) Página 137 de 271 Programación en lenguajes estructurados Anexos { int k; long fac = 1; for (k = 1; k<=x; k++) fac = fac+k; return fac; } b) Solución con una estructura recursiva. long Fac_recur (int x) { long fac; if (x == 1) return 1; fac = x * Fac_recur (x-1); return fac; } Solución Actividad 2: void dec_bin (int num) { if (num <=1) printf (“%d”, num); else { dec_bin (num/2); Página 138 de 271 Programación en lenguajes estructurados Anexos printf (“%d”, num%2); } } Solución Actividad 3: Hola Hola Hola Hola Hola Solución Actividad 4: float potencia (float a, int n) { if (n<=0) return (1); else return (a * potencia (a, n-1)); } Solución Actividad 5: Int funcionx (int n) { if (n <=2) return (n); else return (funcionx (n-3) + 2 * funcionx (n-2) + funcionx (n-1)); Página 139 de 271 Programación en lenguajes estructurados Anexos } Solución Actividad 6: #include <stdio.h> #include <stlib.h> void Hanoi (int n, int Origen, int Destino, int Auxiliar) { if (n==1) printf(“Llevo disco %3d de la varilla %3d a la varilla %3d\n”, n, Origen, Destino); else { Hanoi (n-1, Origen, Auxiliar, Destino); printf(“Llevo disco %3d de la varilla %3d a la varilla %3d\n”, n, Origen, Destino); Hanoi (n-1, Auxiliar, Destino, Origen); } } int main () { char sig; Hanoi (3, 1, 2, 3); puts (“\nPresione una tecla para continuar … “); scanf (“%c”, &sig); return 0; Página 140 de 271 Programación en lenguajes estructurados Anexos } Solución Actividad 7: #include <stdio.h> double akerman (int m, int n) { if (m==0) return n+1; else if (n==0) return (akerman(m-1, 1)); else return (akerman(m-1, akerman(m, n-1)); } int main () { long a; int i, j; char sig; for (i=1; i<=3; i++) { printf(“ fila %d :”, i); for (j=1; j<=8; j++) { a = akerman (i, j); Página 141 de 271 Programación en lenguajes estructurados Anexos printf(“ %d “, a); } printf (“\n”); } puts(“\nPresione una tecla para continuar … “); scanf(“%c”,&asig); return 0; } Solución Actividad 11: void cifras (int num) { printf (“%d”, num%10); if (num/10 != 0) cifras(num/10); return; } Solución Actividad 12: int prod (int n, int m) { if (n==0) return 0; else return prod(n-1, m) + m; } Página 142 de 271 Programación en lenguajes estructurados Anexos Solución Actividad 13: #include <stdio.h> void f1 (char c); void f2 (char c); int main() { f1(‘a’); printf(“\n”); return 0; } voif f1 (char c) { if (c < ‘z’) { printf(“%c “, c); c++; f2( c ); } else printf (“%c”, c); } voif f2 (char c) { if (c < ‘z’) Página 143 de 271 Programación en lenguajes estructurados Anexos { printf(“%c “, c); c++; f1( c ); } else printf (“%c”, c); } U.T. 11: ESTRUCTURAS DE DATOS DINÁMICAS NO LINEALES La unidad de trabajo 9 es procedimental, por tanto, las actividades formativas que se detallan van orientadas en este aspecto. ACTIVIDADES DE DESARROLLO Actividad 1: Crear un programa que implemente un árbol binario ordenado en el que se almacenarán números enteros. El programa mostrará el contenido de dicho árbol haciendo el recorrido en inorden, preorden y postorden. Actividad 2: Un ejemplo muy típico es el uso de grafos para almacenar en el ordenador mapas de carreteras. Cada uno de los vértices sería una ciudad y cada arco una carretera que une dos ciudades. Representa gráficamente mediante listas enlazadas el siguiente grafo: Página 144 de 271 Programación en lenguajes estructurados Anexos Sevilla 150 900 527 653 Cádiz 500 Madrid Barcelona Actividad 3: Implementa en C las operaciones básicas de un árbol binario. Actividad 4: Realiza una posible implementación en C de la estructura de un grafo. Actividad 5: Explicar por qué cada una de las siguientes estructuras no es un árbol binario. A B D E A A C F B B C D E C D F Actividad 6: Considérese el árbol siguiente: Página 145 de 271 Programación en lenguajes estructurados Anexos P Q S R T U W V X a) ¿Cuál es su altura? b) ¿Está el árbol equilibrado? ¿Porqué? c) Listar todos los nodos hoja. d) ¿Cuál es el predecesor inmediato (padre) del nodo U? e) Listar los hijos del nodo R. f) Listar los sucesores del nodo R. Actividad 7: Para el árbol de la actividad anterior realizar los siguientes recorridos: RDI, DRI, DIR. Actividad 8: Escribir funciones para construir un árbol vacío, decidir si un árbol es vacío, y decidir si un árbol es una hoja. ACTIVIDADES DE AMPLIACIÓN Actividad 9: Escribir funciones que digan el número de hojas de un árbol, el número de nodos de un árbol, el número de nodos que no son hojas, la altura de un árbol, y los nodos que hay en un cierto nivel. Actividad 10: Escriba una función recursiva y otra iterativa que se encargue de buscar la información dada en un elemento en un árbol binario de búsqueda. ACTIVIDADES DE REFUERZO Página 146 de 271 Actividad 11: Especifica el tipo abstracto de datos árbol binario (TAD árbol Programación en lenguajes estructurados Anexos Solución Actividad 3: #include <stdio.h> #define tipobase int struct nodo { tipobase info; struct nodo *der; struct nodo *izq; }; typedef struct nodo *arbol; arbol crear (void) { return null; } int arbolvacio (arbol a) { return !a; } arbol constarbol (arbol sder, tipobase e, arbol sizq) { arbol a; a = (arbol) malloc (sizeof (struct nodo)); a Æ info = e; a Æ izq = sizq; a Æ der = sder; return a; Página 147 de 271 Programación en lenguajes estructurados Anexos } arbol hizq (arbol a) { return a Æ izq; } arbol hder (arbol a) { return a Æ der; } tipobase datoraiz (arbol a) { return a Æ info; } Solución Actividad 4: typedef struct nodo *ptrnodo; struct nodo { tipobase info; ptrnodo sig; }; typedef ptrnodo grafo[maxnodos]; Solución Actividad 5: La primera no es un árbol binario ya que el nodo cuyo contenido es B tiene tres hijos y le máximo número de hijos de un árbol binario es dos. La segunda porque hay dos caminos distintos para ir al nodo F y por tanto no se expresa la jerarquía de la definición de árbol. La tercera por la misma razón que la segunda. Solución Actividad 6: Página 148 de 271 Programación en lenguajes estructurados Anexos a) Su altura es cuatro. b) El árbol está equilibrado ya que la diferencia de las alturas de los subárboles izquierdo y derecho es como máximo uno. c) Los nodos hoja son: W, T, X, V. d) El predecesor inmediato (padre) del nodo U es el nodo que contiene R. e) Los hijos del nodo R son U y V. f) Los sucesores del nodo R son U, V, X. Solución Actividad 7: Recorrido RDI : P, R, V, U, X, Q, T, S, W. Recorrido DRI : V, R, X, U, P, T, Q, S, W. Recorrido DIR : V, X, U, R, T, W, S, Q, P. Solución Actividad 8: int EsVacioA(Nodo *a) { return(a == NULL); } void VaciaA(Nodo **a) { (*a) = NULL; } int Eshoja(Nodo *a) { Página 149 de 271 Programación en lenguajes estructurados Anexos if (a) return( (a->hi == NULL)&& a->hd == NULL); else return (0); } Solución Actividad 9: int Altura(Nodo *a) { if (!a) return(0); else { int ai,ad; ai = Altura(a->hi); ad = Altura(a->hd); if (ai < ad) return (1 + ad); else return (1 + ai); } } int NdeHojas(Nodo *a) Página 150 de 271 Programación en lenguajes estructurados Anexos { if (!a) return(0); else return (NdeHojas(a->hi) + NdeHojas(a->hd)); } int NdeNodos(Nodo *a) { if(!a) return(0); else return(1+ NdeNodos(a->hi) + NdeNodos(a->hd)); } int NdeNodosInternos(Nodo *a) { return (NdeNodos(a)-NdeHojas(a)); } void NodosNivel(Nodo *a, int n) { if (a) if (n == 1) printf("%d\n", a->el); Página 151 de 271 Programación en lenguajes estructurados Anexos else { NodosNivel(a->hi,n - 1); NodosNivel(a->hd,n - 1); } } Solución Actividad 10: Nodo* BuscarA (Nodo* p, TipoElemento el) { if (!p) return 0; else if (el == p -> el) return p; else if (el < p -> el) return BuscarA (p -> hi, el); else return BuscarA (p -> hd, el); } Nodo*BuscarAIterativo(Nodo * a, Nodo** ant, TipoElemento el) { int enc; Nodo *anterior; Página 152 de 271 Programación en lenguajes estructurados Anexos enc = 0; anterior = NULL; while (!enc && (a!=NULL) ) { if (a->el == el) enc = 1; else { anterior =a ; if (el < a->el) a = a->hi; else a = a->hd; } } *ant = anterior; return a; } Solución Actividad 13: void Inorden(Nodo *a) { if (a) Página 153 de 271 Programación en lenguajes estructurados Anexos { Inorden(a->hi); printf("%d ", a->el); Inorden(a->hd); } } void Preorden(Nodo *a) { if (a) { printf("%d ", a->el); Preorden(a->hi); Preorden(a->hd); } } void Postorden(Nodo *a) { if (a) { Postorden(a->hi); Postorden(a->hd); printf("%d ", a->el); Página 154 de 271 Programación en lenguajes estructurados Anexos } } U.T. 12: DISEÑO EFECTIVO DE PROGRAMAS Y APLICACIONES ALGORÍTMICAS La unidad de trabajo 12 es procedimental, por tanto, las actividades formativas que se detallan van orientadas en este aspecto. ACTIVIDADES DE DESARROLLO Actividad 1: Dado el siguiente grafo: a) Indicar los caminos independientes del grafo. b) Calcula la complejidad ciclomática utilizando almenos dos métodos. Actividad 2: Dado el siguiente módulo: Página 155 de 271 Programación en lenguajes estructurados Anexos Módulo: Imprime media (X, Y, Real) INICIO (1) Resultado = 0 (2) Si X<0 o Y<0 (4) escribir: “X e Y deben ser positivos” (3) sino resultado= (X+Y)/2 (5) Escribir:= “La media es”, resultado (6) fsi FIN a) Realizar el grafo de flujo. b) Calcular la complejidad ciclomática. c) Determinar el conjunto básico de caminos. d) Diseñar los casos de prueba. Actividad 3: Crear el manual de usuario para la aplicación comercial de compresión/descompresión de archivos Winzip. Actividad 4: Determinar las clases de equivalencia para: a) 5 = < x < = 50 b) x = 70 Actividad 5: Supongamos que hemos realizado un módulo para realizar un chequeo de una sentencia de declaración de variables enteras en un lenguaje de programación x. Página 156 de 271 Programación en lenguajes estructurados Anexos Ejemplo: integer a integer a, b, c Con las siguientes condiciones: a) 4 variables como máximo. b) Identificadores de un máximo de 6 caracteres. c) El primer carácter de cada identificador ha de ser una letra. Se pide diseñar las clases de equivalencia y los casos de prueba resultantes. ACTIVIDADES DE AMPLIACIÓN Actividad 6: Calcula el coste de la función siguiente: void bombolla (int v[ ], int tam) { int i, j, aux; for (i = 0; i < tam-1; i++) for (j = tam-1; j > 1; j--) if (v[j] < v[j-1]) { aux = v[j]; v[j] = v[j-1]; v[j-1] = aux; } } ACTIVIDADES DE REFUERZO Actividad 7: Diseña las clases de equivalencia para la siguiente función: EsPrimo: Entrero Æ Booleano Actividad 8: Dado un entero que se utilizarà para identificar el dia del mes, calcula las clases de equivalencia. Página 157 de 271 Programación en lenguajes estructurados Anexos Solución Actividad 5: Diseño de las clases de equivalencia: Entrada Nombre Clases válidas de variable (1)Tiene algunas letras Clases no válidas (3)Tiene (contenido) (2)Tiene algunos dígitos caracteres Existe variable (4)Si (5)No Comienza por letra (6)Si (7)No Tamaño del nombre (8)1…6 (9)0 otros (10)>6 Número de variables (11)1…4 (12)0 (13)>4 Casos de prueba: Entrada Casos cubiertos integer ABC, a19, b 1,2,4,6,8,11 integer 5,12,9 integer 213 7 integer a?3 3 integer, a 9 integer ABCDEFG 10 integer A,B,C,D,E 13 Solución Actividad 7: Página 158 de 271 Programación en lenguajes estructurados Anexos Clase 1: primo >=2 (2, 3, 5, 7, 11, …) Clase 2: no_primo >=2 (4, 6, 8, 10, …) Clase 3: valores singulares Clase 4: no definido (0,1) (-1, -2, …) Solución Actividad 8: - Valores posibles: [1..31] - Tres clases de equivalencia: o Números menores que 1 o Números entre 1 y 31 o Números mayores que 31. U.T. 13: INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS La unidad de trabajo 13 es meramente conceptual. En esta unidad las actividades formativas que se detallan son teóricas. ACTIVIDADES DE DESARROLLO Actividad 1: ¿Qué ventajas representa la programación orientada a objetos? Actividad 2: Definir que es un procedimiento constructor y destructor. Actividad 3: ¿En qué consiste el polimorfismo y de qué formas se puede realizar? Actividad 4: ¿En qué consiste la herencia de clases y cómo se realiza la declaración de las clases derivadas? Actividad 5: Contesta a las siguientes preguntas tipo test: 1. En C++ Página 159 de 271 Programación en lenguajes estructurados Anexos a) Se pueden declarar variables en cualquier parte de un programa, salvo en la cabecera de una instrucción for. b) Se pueden declarar variables constantes, es decir, que se pueden inicializar pero no modificar. c) No se pueden utilizar las funciones para la entrada/salida estándar de C. d) No se permite la herencia múltiple. 2. Una función declarada inline a) Se repite (su código) en el lugar del programa en el que es invocada. b) Debe ser una función miembro de una clase. c) Es aquella que no devuelve nada. d) Es una obligación para el compilador. 3. La sobrecarga de funciones consiste en redeclarar una función declarada préviamente a) Con distinto número de parámetros. b) Con distinto valor por defecto para los parámetros. c) Con distinto número y/o tipo de parámetros. d) Con distinto valor devuelto. 4. Un dato miembro de una clase a) No puede ser inicializado en la definición de la clase. b) No puede ser un objeto de otra clase. c) No puede tener el mismo nombre que un dato miembro de otra clase. d) Debe ser privado. Página 160 de 271 Programación en lenguajes estructurados Anexos 5. Los especificadores de acceso a los miembros de una clase son a) Public, private y static. b) Private, public y protected. c) Public, private, protected y friend. d) Public y protected. 6. Para definir una función miembro fuera del cuerpo de su clase a) Es preciso utilizar el operador de extracción. b) Es preciso emplear el operador de inserción. c) No es necesario utilizar ningun operador. d) Hay que usar el operador de resolución de ámbito. 7. Si en la derivación de una clase no se indica ningún especificador, se supone que se trata de una derivación: a) Privada. b) Protegida. c) Pública. d) Privada y protegida. ACTIVIDADES DE REFUERZO Actividad 6: ¿Cuáles son los posibles calificadores de acceso en C++ para los miembros de una clase? Actividad 7: Describe las partes de un objeto y explica qué se pretende representar con cada una. ACTIVIDADES DE AMPLIACIÓN Actividad 8: Relaciona el concepto de abstracción con el de encapsulación. Pon un ejemplo apoyándote en la definición de una clase en programación Página 161 de 271 Programación en lenguajes estructurados Anexos orientada a objetos. ACTIVIDADES DE INVESTIGACIÓN Actividad 9: Indica algunas de las nuevas posibilidades que da C++ para mejorar el funcionamiento de C. Solución Actividad 6: El calificador public indica que el miembro es visible por todos los objetos de las demás clases. El calificador private indica que únicamente el propio objeto, y otros objetos de la misma clase, pueden acceder a ellos. El calificador protected permite el acceso a los objetos de las clases derivadas. Finalmente, el calificador friend permite a una función o clase acceder a todos los miembros de otra clase, como si fueran públicos. Solución Actividad 7: Las partes de un objeto, conocidas como miembro, son los atributos y los métodos. El programador deberá analizar qué define una variable de la clase, de manera que desarrolle una agrupación de atributos, o variables, que lo definan, y un conjunto de métodos que permitan trabajar con él. Por ejemplo, un objeto Cuadrado podría tener como datos propios: el punto superior izquierdo, el punto inferior derecho, el color, etc. Además de los atributos, el desarrollador de la clase deberá pensar qué métodos pueden hacerle falta al programador de la aplicación que utilizará dicho objeto, por ejemplo operaciones como CalcularPerímetro, CalcularÁrea, calcularDiagonal, dibujar, .etc. Los datos y las operaciones de cada objeto Cuadrado estarán particularizados para cada objeto en concreto, en función de su estado. Es Página 162 de 271 Programación en lenguajes estructurados Anexos decir, un objeto particular Cuadrado conoce sus datos propios (sus coordenadas superior izquierda, inferior derecha, color, etc.) y conoce cómo ejecutar las operaciones que le son propias. Solución Actividad 8: Abstracción es un concepto que permite diseñar las estructuras que representan los elementos del mundo real. Encapsulación es una barrera que separa la responsabilidad de un objeto (mantener su estado interno) del exterior. Por tanto, ambos conceptos son complementarios. La encapsulación permite poner en práctica la abstracción, pues podemos razonar sobre los objetos como unidades de computación sin entrar en los detalles de su implementación. La abstracción se centra en el exterior de los objetos y la encapsulación previene a los demás objetos de las variaciones en la implementación de los objetos. Cualquier ejemplo de clase en la que tengamos bien diferenciadas la interfaz pública hacia el exterior de la implementación, encapsulada dentro del objeto serviría como ejemplo: sea una clase Matriz, que ofrezca las operaciones típicas (inversión, suma, producto, transposición, etc.), de manera que podemos abstraerla y utilizarla en un programa de cálculo numérico de física, que maneje los objetos matrices directamente como variables sin preocuparse en absoluto de sus detalles y operaciones internas. Solución Actividad 9: El C++ fue desarrollado originalmente como un preprocesador que traducía del C++ al C estándar. Es un lenguaje híbrido en el que no todas las entidades son objetos, de hecho es una extensión (o superconjunto) del lenguaje C, Página 163 de 271 Programación en lenguajes estructurados Anexos desarrollado para introducir capacidades de orientación a objetos (abstracción de datos, herencia, polimorfismo, etc.) y al mismo tiempo posibilidad de utilizarlo como el lenguaje C pero que incorpora una serie de mejoras, entre las que destacan: - Comentarios de línea. - Comprobación de argumentasen llamadas a funciones. - Definición de tipos estructura. - Declaraciones y definiciones en cualquier lugar dentro de un bloque (y no sólo al principio). - Calificador const en funciones. - Variables de referencia. U.T. 14: PROGRAMACIÓN EN C++ La unidad de trabajo 14 es totalmente procedimental. En esta unidad las actividades formativas que se detallan son procedimentales. Página 164 de 271 Programación en lenguajes estructurados Anexos ACTIVIDADES DE DESARROLLO Actividad 1: Define la clase Circulo que contenga dos métodos: circunferencia y área. Actividad 2: Definir 3 funciones en C++ con el mismo nombre y distintos parámetros siguiendo las siguientes especificaciones: - El nombre de la función es escribir. - La primera función tiene como parámetro un entero. - La segunda función tiene como parámetro un float. - La tercera función tiene como parámetros dos enteros. - Todas las funciones devuelven por pantalla el valor introducido como parámetro. Actividad 3: Define mediante la sobrecarga de métodos dos métodos para obtener las notas de los alumnos. A uno de los métodos se le pasarán dos parámetros para obtener la nota numérica y la nota textual. El otro método será sin paso de parámetros. Actividad 4: Dadas las siguientes clases punto.cpp, main.cpp y punto.h se pide implementar una función llamada distancia: a) Como friend. b) Como método público. /*Punto.h*/ class punto { public: punto (int, int); punto(); Página 165 de 271 Programación en lenguajes estructurados Anexos void putx (int); void puty (int); private: int cx; int cy; } /*main.cpp*/ #include “punto.h” main() { punto q; punto p (3, -2); cout << “Introduce”; cin >> x >> y; q.putx (x); q.puty (y); } /*punto.cpp*/ #include “punto.h” punto::punto (int x, int y) { cx = x; cy = y; } Página 166 de 271 Programación en lenguajes estructurados Anexos punto::punto () {} void punto::putx (int x) { cx = x; } voif punto:: puty (int y) { cy = y; } Actividad 5: Definir una clase que represente una radio que emita con tecnología MP3. Actividad 6: Diseñar un programa que muestre el uso de funciones virtuales y la ligadura dinámica. Para ello hay que definir: - Una clase A con dos funciones que imprimen sus nombres. - Una clase B, derivada de A, redefiniendo ambas funciones. En el programa principal deben usarse tanto las funciones de la clase A como las de B y ver que salida se produce en cada caso. Actividad 7: Considérese una clase Prestamo y tres clases derivadas de ella: Pago_fijo, Pago_variable e Hipoteca. La clase Prestamo tiene dos variables capital y tasa_interes que no deben repetirse en la clase derivada. Se pide implementar las clases descritas anteriormente. Actividad 8: Definir una función plantilla llamada intercambio que intercambie dos valores del mismo tipo. Actividad 9: Crear un tipo parametrizado pila con las funciones miembro Poner y Quitar. Actividad 10: Diseñar una clase Pila que permita manipular pilas de diferentes Página 167 de 271 Programación en lenguajes estructurados Anexos tipos de datos. Las operaciones que se deben considerar son: poner, quitar y visualizar. Actividad 11: Implementar un programa que sume valores que se van introduciendo por teclado. Para cada valor que se suma debe sacar el resultado parcial. Al finalizar la introducción de valores debe mostrar el resultado final de la suma. Actividad 12: Implementar un programa que pida por teclado la edad y el nombre de la persona. Hay que tener en cuenta que se debe limpiar la memoria intermedia con una variable auxiliar. Actividad 13: Escribir un programa que solicite al usuario el nombre y apellidos y a continuación, imprima el nombre completo y el apellido en la impresora. Actividad 14: Implementar un programa que escriba una cadena de caracteres no ASCII en un archivo. Actividad 15: Implementar un programa que escriba un array de enteros y los lea posteriormente. ACTIVIDADES DE AMPLIACIÓN Actividad 16: Realizar un programa para el control del personal de una fábrica. De cada persona que trabaja almacenamos su nombre, su sueldo, y la fecha de ingreso en la empresa. En la fábrica hay 3 tipos de empleados: - Encargados de área: debemos saber el área que dirigen. - Obreros: queremos saber su especialidad, y el área en la que trabajan. - Aprendices: Queremos saber su titulación. Se debe definir estas clases con las relaciones que se consideren oportunas, y Página 168 de 271 Programación en lenguajes estructurados Anexos realizar un pequeño programa de prueba. Como idea se podría crear una clase base trabajador, a partir de la cual puede ir creando las derivaciones necesarias. Las operaciones que podemos realizar con un empleado son: - Introducir datos: sería el constructor de la clase. - Imprimir_datos: saca por pantalla una ficha con todos los datos personales del empleado. - Devolver_sueldo: retorna el sueldo de un empleado. - Devolver_area: retorna el área en la que trabaja un empleado. Actividad 17: Realiza un programa en C++ que implemente una lista de alumnos y su posterior evaluación. Actividad 18: Implementa en C++ una función que asigne datos a los miembros del ejemplo anterior. ACTIVIDADES DE REFUERZO Actividad 19: Crear una clase llamada demoObj que muestre el uso que debe hacerse de los objetos. Para ello hay que definir en la clase dos métodos: void fijardatos (int d) void mostrardatos () Actividad 20: Se desea escribir una función min(a, b) que devuelva el valor más pequeño de sus argumentos. Será necesario utilizar diferentes funciones sobrecargadas min(), cada una de las cuales se aplica a un tipo de argumento específico. Actividad 21: Escribir un programa que lea caracteres por teclado y los vaya mostrando en pantalla. Se debe utilizar la función cin.get(). Actividad 22: Diseñar un programa que lea y escriba Nombre, Dirección y Página 169 de 271 Programación en lenguajes estructurados Anexos Teléfono del usuario. Actividad 23: Implementar un programa que muestre en pantalla el contenido de un archivo. Solución Actividad 4: Declarar la función distancia como friend (amiga). La función distancia será una función externa a la clase punto pero que se declara como amiga a dicha clase para poder acceder a todos sus miembros. class punto { public: punto (int, int); punto(); void putx (int); void puty (int); friend float distancia (punto, punto); private: int cx; int cy; } Declarar la función distancia como método público de la clase punto. class punto { public: punto (int, int); punto(); Página 170 de 271 Programación en lenguajes estructurados Anexos void putx (int); void puty (int); float distancia (punto); private: int cx; int cy; } Solución Actividad 5: class radioMP3 { private: int frecuencia; int volumen; public: void iniciar (void); void AumentarFrecuencia (void); void DisminuirFrecuencia (void); void BajarVolumen (void); void SubirVolumen (void); }; void radioMP3 :: iniciar (void) { // inicializar atributos de frecuencia y volumen frecuencia = 99.99; volumen = 45; Página 171 de 271 Programación en lenguajes estructurados Anexos } void radioMP3 :: SubirVolumen (void) { // Incrementar en una unidad el volumen volumen++; } void radioMP3 :: BajarVolumen (void) { // Disminuir en una unidad el volumen volumen --; } void radioMP3 :: DisminuirFrecuencia (void) { // disminuir frecuencia 1 MHz frecuencia--; { void radioMP3 :: AumentarFrecuencia (void) { // aumentar la frecuencia 1 MHz frecuencia++; } int main (void) { Página 172 de 271 Programación en lenguajes estructurados Anexos radioMP3 miEstacion; miEstacion.iniciar(); miEstacion.SubirVolumen(); miEstacion.BajarVolumen(); miEstacion.AumentarFrecuencia(); miEstacion.DisminuirFrecuencia(); } Solución Actividad 6: // archivo LIGADURA.CPP // diferencias entre ligadura estática y dinámica #include <iostream> using namespace std; // define una clase A con dos funciones que imprimen sus nombres class A { public: A() { } virtual void Dinamica() { cout << "Función dinámica de la clase A" << endl; } void Estatica() { cout << "Función estática de la clase A" << endl; } Página 173 de 271 Programación en lenguajes estructurados Anexos }; // define una clase B, derivada de A, redefiniendo ambas funciones class B : public A { public: B() { } void Dinamica() { cout << "Función dinámica de clase B" << endl; } void Estatica() { cout << "Función estática de clase B" << endl; } }; void main() { // definiciones A *a; B *b; // inicialización a = new A(); b = new B(); cout << "Funciones del objeto a de la clase A" << endl; a -> Dinamica(); Página 174 de 271 Programación en lenguajes estructurados Anexos a -> Estatica(); cout << endl; cout << "Funciones del objeto b de la clase B" << endl; b -> Dinamica(); b -> Estatica(); cout << endl; // propiedad de polimorfismo // a toma como valor un puntero a un objeto de la clase B a = b; cout << "Funciones del objeto a de la clase A" << endl; << "al que se ha asignado un valor de la clase b" << endl; // llamada a la función virtual de la clase B a -> Dinamica(); // llamada a la función no virtual de la clase B a -> Estatica(); } Solución Actividad 7: class Prestamo { protected: float capital; float tasa_interes; public: Préstamo(float, float); virtual int CrearTablaPagos(float[MAX_TERM][NUM_COLUMNAS])=0; Página 175 de 271 Programación en lenguajes estructurados Anexos }; class Pago_fijo : public Préstamo { private: float pago; // cantidad mensual a pagar por cliente public: Pago_Fijo (float, float, float); int CrearTablaPagos(float, [MAX_TERM][NUM_COLUMNAS]); }; class Hipoteca : public Prestamo { private: int num_recibos; int recibos_por_anyo; float pago; public: Hipoteca(int, int, float, float, float); int CrearTablaPagos(float [MAX_TERN][NUM_COLUMNAS]); }; Solución Actividad 8: template <class T> void intercambio(T& a, T& b) { T aux = a; a = b; b = aux; return o; Página 176 de 271 Programación en lenguajes estructurados Anexos } int main() { int x = 5; int y = 12; intercambio(x, y) //ahora x = 12, y = 5 } Solución Actividad 9: class Pila { public: Pila(); bool poner(const Tipo); // meter elemento en la pila bool quitar(Tipo&); // sacar elemento de la pila private : Tipo elementos[MaxElementos];// elementos de pila int cima; // cima de la pila }; template <class Tipo> Pila <Tipo>:: Pila() { cima = -1; } template <class Tipo> // función miembro poner bool Pila <Tipo>:: poner(const Tipo item) { Página 177 de 271 Programación en lenguajes estructurados Anexos if(cima < MaxElementos -1) { elementos[++cima] = item; return true; } else { return false; } } template <class Tipo> bool Pila <Tipo> :: quitar(Tipo& item) { if (cima < o) { return false; } else { item = elementos[cima--]; return true; } } Solución Actividad 10: // archivo PILA1.CPP enum estado_pila {OK, LLENA, VACIA}; template <class T> class Pila { Página 178 de 271 Programación en lenguajes estructurados Anexos public: Pila(int _longitud = 10); ˜Pila() {delete[] tabla;} void poner(T); T quitar(); void visualizar(); int num_elementos(); int leer_long() {return longitud;} private: int longitud; T* tabla; int cima; estado_pila estado; }; template <class T> Pila <T>::Pila(int _longitud) { longitud = _longitud; tabla = new T[longitud]; cima = 0; estado = VACIA; } template <class T> void Pila <T>::poner(T _elemento) if (estado!= LLENA) Página 179 de 271 Programación en lenguajes estructurados Anexos tabla [++cima] = _elemento; else cout << "*** Pila llena ***" << endl; if (cima >= longitud) estado = LLENA; else estado = OK; } template <class T> T Pila <T> :: quitar() { T elemento = 0; if (estado!= VACIA) elemento = tabla[--cima]; else cout << "*** Pila vacía ***" << endl; if (cima <= 0) estado = VACIA; else estado = OK; return elemento; } template <class T> void Pila <T>::visualizar() { for (int i = cima; i > 0, i--) Página 180 de 271 Programación en lenguajes estructurados Anexos cout <<"[" << tabla[i] << "] << endl; } template <class T> int Pila<T>:: num_elementos() { return cima; } void main() { // Pila de enteros Pila <int> p1(6); p1.poner(6); p1.poner(12); p1.poner(18); cout << "Número de elementos:" << p1.num_elementos() << endl; p1.visualizar(); cout <<"Quitar 1 :" << p1.quitar() << endl; cout <<"Quitar 2 :" << p1.quitar() << endl; cout <<"Quitar 3 :" << p1.quitar() << endl; cout <<"Número de elementos :" <<p1.num_elementos() << endl; cout <<"Quitar 4 :" << p1.quitar() << endl; cout << endl ; // Pila de enteros largos Página 181 de 271 Programación en lenguajes estructurados Anexos Pila <long> p2(6); p2.poner(60000L); p2.poner(1000000L); p2.poner(2000000L); cout <<"Número de elementos:" << p2.num_elementos() << endl; p2.visualizar(); cout <<"Quitar 1 : " << p2.quitar() << endl; cout <<"Quitar 2 : " << p2.quitar() << endl; cout <<"Quitar 3 : " << p2.quitar() << endl; cout <<"Número de elementos :" << p2.num_elemento << endl; cout <<"Quitar 4 : " << p2.quitar() << endl; Pila <double> p3(6); p3.poner(6.6); p3.poner(12.12); p3.poner(18.18); cout <<"Número de elementos : " << p3.num_elementos() << endl; p3.visualizar(); cout << "Quitar 1 : " <<p3.quitar() << endl; cout << "Quitar 2 : " <<p3.quitar() << endl; cout << "Quitar 3 : " <<p3.quitar() << endl; cout << "Número de elementos :" << p3.num_elementos()<< endl; cout << "Quitar 4 : " <<p3.quitar() << endl; } Solución Actividad 11: Página 182 de 271 Programación en lenguajes estructurados Anexos int main() { int n, suma = 0; while (cin >> n) suma += n; cout << "La suma parcial es " << suma << endl; cin.clear(); while (cin >> n) suma += n; cout << "La suma total es" << suma << endl; return 0; } Solución Actividad 12: // LIMPIARB.CPP // Limpieza de la memoria intermedia con una // variable auxiliar o basura #include <iostream.h> using namespace std; void main() { char Auxiliar[2]; char Nombre[30]; int Edad; cout << "Introduzca edad:"; Página 183 de 271 Programación en lenguajes estructurados Anexos cin >> Edad; // Lectura de datos numéricos cout << Edad; cin.getline(Auxiliar, 2); // Limpiar buffer de teclado cout << "Introduzca el nombre:"; cin.getline(Nombre, 30); // Leer datos de cadena cout << Nombre; } Solución Actividad 13: // SALIMPRE.CPP // Imprime un nombre en la impresora #include <fstream.h> using namespace std; int main() { char nombre[20]; char apellidos[30]; cout << "¿Cuál es su nombre?"; cin >> Nombre; cout << "¿Cuáles son sus apellidos?"; cin >> Apellidos; // Enviar nombre y apellidos a la impresora ofstream impresora ("PRN"); impresora << "Su nombre completo es: \n"; impresora << apellidos << ", " << nombre << endl; Página 184 de 271 Programación en lenguajes estructurados Anexos return 0; } Solución Actividad 14: #include <iostream> #include <fstream> using namespace std; int main() { char *p = "Hola colegas \n\r\xff"; ofstream sal("prueba", ios::out | ios::binary); if (!sal) { cout << "No se puede abrir el archivo" << endl; return 1; } while (*p) sal.put(*p++); sal.close(); return 0; } Solución Actividad 15: #include <iostream> #include <fstream> using namespace std; int main() Página 185 de 271 Programación en lenguajes estructurados Anexos { int n[6] = {15, 25, 35, 45, 50, 60}; register int i; ofstream salida ("prueba", ios::out | ios::binary); if(!salida) { cout << "No se puede abrir el archivo" << endl; return 1; } salida.write ((unsigned char*) n, sizeof) n)); salida.close(); // inicializa el array for (i = 0; i < 6; i++) n[i] = 0; ifstream entrada ("prueba", ios::in | ios::binary); entrada.read ((unsigned char*) n, sizeof) n)); // presenta valores leídos del archivo for (i = 0; i < 6; i++) cout << n[i] << " "; entrada.close(); return 0; } Solución Actividad 19: //demoObj.cpp Página 186 de 271 Programación en lenguajes estructurados Anexos //demostracion del uso de objetos #include <iostream> using namespace std; class demoObj { private: int undato; //datos de la clase public: void fijardatos (int d) //establecer datos { un dato = d; } void mostrardatos () //visualizar datos { cout << "El dato es: " << un dato << endl; }; int main () { demoObj d1, d2; d1.fijardatos (2005); d2.fijardatos (2010); d1.mostrardatos (); d2.mostrardatos (); return 0; } Solución Actividad 20: // archivo PLANFUN.CPP #include <iostream> Página 187 de 271 Programación en lenguajes estructurados Anexos using namespace std; // datos enteros (int) int min(int a, int b) { if(a <= b) return a; return b; } // datos largos long min(long a, long b) { if(a <= b) return a; return b; } // datos char char min(char a, char b) { if(a <= b) return a; return b; } // datos double double min(double a, double b) Página 188 de 271 Programación en lenguajes estructurados Anexos { if(a <= b) return a; return b; } int main() { int ea = 1, eb = 5; cout << "(int):" << min(ea, eb) << endl; long la = 10000, 1b = 4000; cout << "(long):" << min(1a, 1b) << endl; char ca = 'a', cb = 'z'; cout << "(char):" << min(ca, cb) << endl; double da = 423.654, db = 789.10; cout << "(double):" << min(da, db) << endl; } Solución Actividad 21: #include <iostream> using namespace std; int main() { char c; while ((c = cin.get())!= EOF) { Página 189 de 271 Programación en lenguajes estructurados Anexos cout << "c:" << c << endl; } cout << "\n Terminado!\n"; return 0; } Solución Actividad 22: #include <iostream> using namespace std; void main() { //Definición de arrays de caracteres char Nombre[40]; char Calle[30]; char Ciudad[30]; char Provincia[30]; char CodigoPostal[5]; char Telefono[10]; //Lectura de datos cin.getline(Nombre, 40); cin.getline(Calle, 30); cin.getline(Ciudad, 30); cin.getline(Provincia, 30); cin.getline(CodigoPostal, 5); cin.getline(Telefono, 10); Página 190 de 271 Programación en lenguajes estructurados Anexos //Visualizar datos cout << Nombre; cout << Calle; cout << Ciudad; cout << Provincia; cout << CodigoPostal; cout << Telefono; } Solución Actividad 23: #include <iostream> #include <fstream> int main(int argc, char *argv[]) { char c; if (argc != 2) { cout << "error en número de archivos\n"; return 1; } ifstream ent(argv[1], ios::in | ios::binary); if (!ent) { cout << "No se puede abrir el archivo" << endl; return 1; } Página 191 de 271 Programación en lenguajes estructurados Anexos while (ent) // ent será 0 cuando se alcance eof { ent.get(c); cout << c; } ent.close(); return 0; } U.T. 15: INTRODUCCIÓN A LA PROGRAMACIÓN VISUAL La unidad de trabajo 15 es prácticamente procendimental, por tanto, las actividades que se especifican van encaminadas en este aspecto. Página 192 de 271 Programación en lenguajes estructurados Anexos ACTIVIDADES DE DESARROLLO Actividad 1: Diseñar un formulario que pida el nombre y los dos apellidos de una persona en tres campos diferentes. Implementar 6 botones para concatenar los datos utilizando todas las combinaciones posibles. El resultado debe ser visualizado por pantalla. El formulario puede ser como el siguiente: Actividad 2: Diseñar un formulario que pida un nº de horas y las convierta a semanas, dias, minutos y segundos. Para ello, el usuario deberá indicar que conversión/es desea hacer. El formulario podria ser como el siguiente: Página 193 de 271 Programación en lenguajes estructurados Anexos Actividad 3: Implementar un formulario para realizar un test de inteligencia. Este test constará de 4 preguntas y debe existir un botón para comprobar el número de aciertos conseguidos. El formulario a implementar se muestra a continuación: ACTIVIDADES DE AMPLIACIÓN Actividad 4: Implementar un programa que realice las funciones de una calculadora. El formulario a diseñar es el siguiente: Página 194 de 271 Programación en lenguajes estructurados Anexos ACTIVIDADES DE REFUERZO Actividad 5: Diseñar un formulario que pida un texto cualquiera, permita aplicarle un formato determinado y finalmente al hacer clic en el botón Aplicar lo muestre en pantalla con el formato elegido. El diseño del formulario es el siguiente: Solución Actividad 1: Página 195 de 271 Programación en lenguajes estructurados Anexos using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace Concatenar_cadenas { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { textBox4.Text = textBox1.Text + " " +textBox2.Text + " " +textBox3.Text; Página 196 de 271 Programación en lenguajes estructurados Anexos } private void button2_Click(object sender, EventArgs e) { textBox4.Text = textBox1.Text + " " + textBox3.Text + " " + textBox2.Text; } private void button3_Click(object sender, EventArgs e) { textBox4.Text = textBox2.Text + " " + textBox1.Text + " " + textBox3.Text; } private void button4_Click(object sender, EventArgs e) { textBox4.Text = textBox2.Text + " " + textBox3.Text + " " + textBox1.Text; } private void button5_Click(object sender, EventArgs e) { textBox4.Text = textBox3.Text + " " + textBox1.Text + " " + textBox2.Text; Página 197 de 271 Programación en lenguajes estructurados Anexos } private void button6_Click(object sender, EventArgs e) { textBox4.Text = textBox3.Text + " " + textBox2.Text + " " + textBox1.Text; } private void button7_Click(object sender, EventArgs e) { Close(); } } } Solución Actividad 2: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; Página 198 de 271 Programación en lenguajes estructurados Anexos namespace Conversion_Formulario { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { if (MessageBox.Show("¿Realmente desea salir?", "Salir", MessageBoxButtons.YesNo) == DialogResult.No) { e.Cancel = true; } } private void button1_Click(object sender, EventArgs e) { int horas, segundos, minutos; Página 199 de 271 Programación en lenguajes estructurados Anexos float dias, semanas; try { horas = int.Parse(textBox1.Text); } catch(Exception){ horas = 0; } segundos = horas * 60 * 60; minutos = horas * 60; dias = (float) horas / 24; semanas = (float) (horas / 24) / 7; if (checkBox1.Checked){ textBox2.Text = semanas.ToString(); } if (checkBox2.Checked){ textBox3.Text = minutos.ToString(); } if (checkBox3.Checked){ Página 200 de 271 Programación en lenguajes estructurados Anexos textBox4.Text = dias.ToString(); } if (checkBox4.Checked){ textBox5.Text = segundos.ToString(); } private void button2_Click(object sender, EventArgs e) { Close(); } } } Solución Actividad 5: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; Página 201 de 271 Programación en lenguajes estructurados Anexos namespace Ejercicio_de_Repaso_3 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button2_Click(object sender, EventArgs e) { Close(); } private void button1_Click(object sender, EventArgs e) { FontStyle miestilo; string mifuente; float tamaño; // Se pone en la etiquetra el mismo texto que en el textbox. label2.Text = textBox1.Text; Página 202 de 271 Programación en lenguajes estructurados Anexos // Se calcula el tipo de estilo que va a ser utilizado miestilo = FontStyle.Regular; if (cbcursiva.Checked) miestilo = FontStyle.Italic; if (cbnegrita.Checked) miestilo = (miestilo | FontStyle.Bold); if (cbsubrayado.Checked) miestilo = (miestilo | FontStyle.Underline); if (cbtachado.Checked) miestilo = (miestilo | FontStyle.Strikeout); // Se mira la fuente que va a ser establecida. mifuente = "Arial"; if (radioButton1.Checked) mifuente = "Arial"; if (radioButton2.Checked) mifuente = "Times New Roman"; if (radioButton3.Checked) mifuente = "Lucida Console"; // Se crea una variable del tipo FontFamily con el string de la fuente. FontFamily mifamilia = new FontFamily(mifuente); // Se calcula el tamaño tamaño = 10; if (radioButton4.Checked) tamaño = 10; if (radioButton5.Checked) tamaño = 12; if (radioButton6.Checked) tamaño = 14; // Aplicamos la fuente a la etiqueta con los estilos y la familia. Página 203 de 271 Programación en lenguajes estructurados Anexos // El tamaño es el mismo que tenia la etiqueta. label2.Font = new Font(mifamilia, tamaño, miestilo); } } } U.T. 16: PROYECTO INTEGRADOR La unidad de trabajo 16 es totalmente procedimental. En esta unidad se trata de que el alumno aplique todos los conceptos estudiados en las unidades anteriores en la realización de un proyecto, pasando por todas las fases del desarrollo de software. PROYECTO: En la empresa LICSAFOR existe una biblioteca de libros técnicos para uso de los empleados de la empresa, realizándose actualmente su gestión de forma manual mediante fichas de libros, editoriales, socios y préstamos. Los datos de libros son: código del libro, título, autor, código de editorial, tema, precio, número de ejemplares y ubicación en estantería. Los datos de editoriales son: código de la editorial, nombre, dirección, teléfono, fax y persona de contacto. Los datos de socio son: código de socio, departamento, dirección y teléfono. Los datos de préstamo: código de socio, código de libro, fecha del préstamo, fecha de devolución. En los préstamos se siguen las siguientes normas: Página 204 de 271 Programación en lenguajes estructurados Anexos - Un socio no puede tener más de 3 libros en préstamo a la vez. - La duración del préstamo es de 15 días, pudiéndose renovar si no hay ningún socio en espera. La gestión actual ha sido analizada presentando los siguientes problemas: - La errónea situación de fichas de los libros genera desconocimiento de la existencia de los mismos. - Los informes y consultas se realizan exclusivamente por el código del libro. - Los préstamos son difíciles de controlar en el aspecto de reclamar una devolución de un libro que ha superado su fecha de devolución. Se pretende mejorar la gestión de la biblioteca instalando un sistema informático que soporte los programas correspondientes para realizar las siguientes tareas: - Inventario de libros. - Inventario de editoriales. - Inventario de socios. - Control de préstamos. Las consultas y listados se deben poder efectuar por distintos criterios de búsqueda de la información: - En libros por código del libro, título, autor, editorial, tema y ubicación. - En editoriales por código de editorial, nombre. - En socios por código de socio y nombre. - En préstamos por código de socio, nombre de socio, código del libro, título del libro y por fechas. Página 205 de 271 Programación en lenguajes estructurados Anexos Se pide: - Descripción de la aplicación. - Relación de ficheros de la aplicación. - Descripción del fichero de libros. - Descripción del registro del fichero de libros. - Relación de pantallas. - Diseño de la pantalla de alta de libros. - Controles en pantalla de alta de libros. - Diagrama de estructura de módulos de la aplicación. - Descripción de los módulos del diagrama de estructura. - Relación de programas en los que se divide la aplicación. - Descripción del programa principal de la aplicación. - Diagrama del programa principal de la aplicación. - Variables del programa principal de la aplicación. - Módulos del programa principal de la aplicación. - Algoritmo en pseudocódigo del módulo de alta de libros del programa. - Codificación en C del módulo de alta de libros del programa. - Guía de uso del programa. - Guía de instalación especificando la puesta en marcha del sistema y las normas de explotación (normas de ejecución y normas de seguridad del sistema). A continuación se detalle parte de la solución que se puede dar al proyecto planteado en la unidad didáctica 16. Página 206 de 271 Programación en lenguajes estructurados Anexos TRATAMIENTO GENERAL GUÍA TÉCNICA DESCRIPCIÓN DE LA APLICACIÓN Aplicación: BIBLIOTECA La aplicación BIBLIOTECA consiste en la realización de programas que efectúen el control de inventario de libros de la biblioteca técniva de la empresa LICSAFOR, así como el control de editoriales, socios y préstamos. La gestión se realiza actualemtne de forma manual, presentando problemas de localización de libros, de control de los préstamos y de confección de informes clasificados de diversas formas. Los programas serán soportados en un ordenador personal con 512 Mb de RAM, 160Gb de disco duro, unidad de CD/DVD lector/grabador y procesador Pentiun IV a 2,6 GHz. El lenguaje de programación a emplear será el ANSI-C con el sistema operativo Windows XP. Los listados se harán sobre una impresora de oficina láser, con un tamaño de papel A4 como máximo. El plazo de entrega de la aplicación será de 2 meses, estableciendo la planificación siguiente: Diseño aplicación: 15 dias y dos analistas. Codificación de programas: un mes y dos programadores. Prueba de programas e instalación: 15 dias y un analista y un programador. Página 207 de 271 Programación en lenguajes estructurados Anexos RELACIÓN DE FICHEROS GUÍA TÉCNICA DISEÑO DE DATOS Aplicación: BIBLIOTECA COD-FICH. NOMBRE DESCRIPCIÓN A1 LIBROS Inventario de libros con sus características. A2 EDITOR Relación de editoriales con sus datos. A3 SOCIOS Relación de socios con sus datos personales. A4 PRESTAM Préstamos actuales de un libro a un socio. Página 208 de 271 Programación en lenguajes estructurados Anexos DISEÑO DE DATOS GUÍA TÉCNICA DESCRIPCIÓN DE REGISTRO Aplicación: BIBLIOTECA FICHERO: A1-LIBROS CAMPO CLAVE: COD_LIB NOMBRE REGISTRO: R_LIBRO LONGITUD REGISTRO: 74 bytes COD-CAMPO NOMBRE DESCRIPCIÓN A1-1 COD_LIB Código o referencia del libro A1-2 TIT_LIB Título del libro A1-3 AUTOR_LIB Autor o autores del libro A1-4 COD_EDIT Código de la editorial A1-5 TEMA_LIB Tema del libro A1-6 PRECIO_LIB Precio del libro en euros A1-7 NUM_EJEMP Número de ejemplares en biblioteca A1-8 UBIC_EJEMP Ubicación física de los ejemplares A1-9 FEC_UL_PRES Fecha del último préstamo A1-10 TOTAL_PREST Número total de préstamos Página 209 de 271 Programación en lenguajes estructurados Anexos DISEÑO MODULAR GUÍA TÉCNICA DIAGRAMA DE ESTRUCTURA Aplicación: BIBLIOTECA Página 210 de 271 Programación en lenguajes estructurados Anexos PRINCIPAL LIBROS EDITORIAL SOCIOS PREST ALTALIB ALTAED ALTASOC ALTAPRE BAJALIB BAJAED BAJASOC BAJAPRE MODLIB MODED MODSOC MODPRE CONSLIB CONSED CONSOC CONPRE LISTLIB LISTED LISTSOC LISTPRE PROGRAMA FUENTE GUÍA TÉCNICA CODIFICACIÓN Aplicación: BIBLIOTECA Página 211 de 271 Programación en lenguajes estructurados Anexos PROGRAMA: BIBLIO /* Mantenimiento de libros. Alta de libros */ void Altalib() { int codigo_lib, codigo_edit, vale_cod, vale_edit; int numero; struct R_libro lib; printf(“\n ALTA DE LIBROS”); printf(“\n CÓDIGO LIBRO”); scanf(“%d”, &codigo_lib); printf(“\n CÓDIGO EDITORIAL”); scanf(“%d”, &codigo_edit); vale_cod = Verif_Cod(codig_lib); vale_edit = Verif_Edit(codigo_edit); if (vale_cod ==0 && vale_edit ==1) { lib.cod = codigo_lib; lib.edit = codigo_edit; printf(“\n EDITORIAL”); puts(nom_edit); printf(“\n TÍTULO”); gets(lib.tit); printf(“\n AUTOR”); gets(lib.autor); Página 212 de 271 Programación en lenguajes estructurados Anexos printf(“\n TEMA”); gets(lib.tema); printf(“\n PRECIO”); scanf(“%f”, &lib.precio); printf(“\n EJEMPLARES”); scanf(“%d”, &lib.num); printf(“\n UBICACIÓN”); gets(lib.ubic); fseek (libros, 0L, SEEK_END); fwrite (&lib, sizeof(lib), 1, libros); } else if (vale_edit ==0) printf (“No existen datos de la editorial. Ir a alta de editorial”); } 4. EVALUACIÓN SUMATIVA En este apartado se presentan tres exámenes orientados cada uno de ellos a una de las evaluaciones. En primer lugar, se presenta un examen parcial de la primera evaluación. En este examen se incluyen los contenidos vistos en las U.D. 5 y 6. Página 213 de 271 Programación en lenguajes estructurados Anexos CUESTIONES: 1. Encuentra los errores del siguiente código: #include <stdio.h> void escribe (struct fecha f); int main () { struct fecha { int dia; int mes; int anyo; char mes []; } ff; ff = (1, 1, 2000, “ENERO”); escribe(ff); return 1; } 2. Declara un tipo de datos para representar las estaciones del año. 3. Dada la siguiente lista: 47, 3, 21, 32, 56, 92. Después de dos pasadas de un algoritmo de ordenación, el array se ha quedado dispuesto así: 21, 47, 32, 56, 92. ¿Qué algoritmo de ordenación se está utilizando (selección, burbuja o inserción)? Justifica la respuesta. PROBLEMAS: 1. Escribe un programa que lee por filas una matriz de 3x4 (3 filas y 4 Página 214 de 271 Programación en lenguajes estructurados Anexos columnas) y la escriba por columnas. 2. Escribe un programa que lea un texto de la entrada hasta fin de fichero y clacule el número de: letras a, letras e, letras i, letras o y letras u leídas, y cuente el número de palabras y el número de líneas leídas. SOLUCIÓN DEL EXAMEN: CUESTIONES: 1. La incialización de una estructura puede hacerse solamente cuando es estática o global. No se puede definir un array de caracteres sin especificar el tamaño. La mayor parte de los compiladores tampoco permite inicializar las estructuras de la manera que aparece en el ejemplo fuera de la inicialización de variables globales. Para estar seguros habría que inicializar la estructura fecha miembro a miembro. 2. enum estaciones {PRIMAVERA =1, VERANO=2, INVIERNO=3, OTONO=4}; 3. El método de la burbuja no puede ser el empleado, ya que tras la primera pasada del método, los elementos deberían estar en el orden siguiente: 3, 21, 32, 47, 56, 92. Es decir ya estarían ordenados. El método de ordenación por selección, tras la primera pasada tendría los elementos colocados de la siguiente forma: 3, 47, 21, 32, 46, 92. Tras la segunda pasada los elementos del vector estaría colocados : 3, 21, 47, 32, 46, 92. Por lo tanto este método puede haber sido usado. Página 215 de 271 Programación en lenguajes estructurados Anexos El método de ordenación por inserción tras la primera pasada los datos estarían: 3, 47, 21, 32, 56, 92. Una vez realizada la segunda pasada la información del vector sería: 3, 21, 47, 32, 46, 92. Es decir, también podría haberse usado este método de ordenación. PROBLEMAS: 1. #include <stdio.h> #define filas 3 #define columnas 4 void main(void) { int i,j; int M[filas][columnas]; // lectura por filas for(i = 0; i < filas; i++) for (j = 0;j < columnas; j++) scanf("%d",M[i][j]); // escritura por columnas for(j = 0; j < columnas;j++) { for (i = 0; i< filas;i++) printf("%5d",M[i][j]); Página 216 de 271 Programación en lenguajes estructurados Anexos printf("\n"); } } 2. #include <stdio.h> #include <string.h> #define max 5 void main(void) { int npal =0, nlin=0, cont[max]; char c; clrscr(); printf (" \t\t TEXTO \n"); for (i = 0; i < max; i++) cont[i] = 0; while ((c = getchar()) != EOF) { while ((c != '\t') && (c != ' ') && (c!='\n')&& (c!=EOF)) { c=getchar(); if (c == 'a' || c == 'A') cont[0]++; if (c ==' e' || c == 'E') cont[1]++; if (c == 'i' || c == 'I') cont[2]++; if (c == 'o' || c == 'O') cont[3]++; Página 217 de 271 Programación en lenguajes estructurados Anexos if (c == 'u' || c == 'U') cont[4]++; } npal++; if (c == '\n') nlin++; } printf(" palabras %d lineas %d \n", npal, nlin); printf( " numero de a_es %d \n", cont[0]); printf( " numero de e_es %d \n", cont[1]); printf( " numero de i_es %d \n", cont[2]); printf( " numero de o_es %d \n", cont[3]); printf( " numero de u_es %d \n", cont[4]); getch(); } En segundo lugar, se presenta un examen parcial de la segunda evaluación. En este examen se incluyen los contenidos vistos en las U.D. 9, 10 y 11. CUESTIONES: 1. Enumera dos funciones de las librerías: a) stdio.h b) string.h 2. Indica a que librería corresponden las siguientes funciones: a) sqrt b) rand Página 218 de 271 Programación en lenguajes estructurados Anexos c) malloc d) sin PROBLEMAS: 1. Escribe una función recursiva que lea números enteros positivos ordenados crecientemente del teclado, elimine los repetidos y los escriba al revés. El fin de datos viene dado por el número especial 0. 2. Se dispone de un árbol binario de elementos de tipo entero. Escribe funciones que calculen: a) La suma de sus elementos. b) La suma de sus elementos que son múltiplos de 3. 3. Escribe una función recursiva que se encargue de insertar la información dada en un elemento en un árbol binario de búsqueda. SOLUCIÓN DEL EXAMEN: CUESTIONES: 1. a) stdio.h: scanf, printf, getc, putc, … b) string.h: strcpy, strcat, strcmp, … 2. a) math.h b) stdlib.h c) stdlib.h d) math.h Página 219 de 271 Programación en lenguajes estructurados Anexos PROBLEMAS: 1. #include <stdio.h> int elimina (int ant); int main() { ellimina(-1); return (0); } int elimina (int ant) { int n; scanf(“%d”, &n); if (n == 0) printf(“%d”, n); else if ( !(n == ant)) { elimina (n); printf(“%d”, n); } else elimina (n); return (0); } Página 220 de 271 Programación en lenguajes estructurados Anexos 2. int Suma (Nodo*a) { if(a) return( a->el + Suma(a->hi) + Suma(a->hd)); else return(0); } int SumaMultimpos (Nodo*a) { if(a) if (a->el%3) return( a->el + SumaMultiplos(a->hi)+SumaMultiplos(a->hd)); else return( SumaMultimplos(a->hi) + SumaMultiplos(a->hd)); else return(0); } 3. Nodo* CrearNodo(TipoElemento el) { Nodo* t; Página 221 de 271 Programación en lenguajes estructurados Anexos t = (Nodo*) malloc(sizeof(Nodo)); t -> el = el; t ->hi = t -> hd = NULL; return t; } void AnadeA (Nodo** a, TipoElemento el) { if (!(*a)) *a = CrearNodo(el); else if (el == (*a)->el) printf( " valor %d repetido no se inserta\n",el); else if (el < (*a) -> el) AnadeA (&((*a) -> hi), el); else AnadeA (&((*a) -> hd), el); } Por último, este examen se puede utilizar como examen final de Junio, en el que se evalúan todos los contenidos vistos durante el curso. En primer lugar se trata de resolver una serie de cuestiones teóricas sobre los conceptos explicados. Página 222 de 271 Programación en lenguajes estructurados Anexos Finalmente, hay que resolver dos problemas prácticos que se plantean con el objetivo de que el alumno tenga que utilizar el máximo número de conceptos estudiados. CUESTIONES: 1. Dado un vector ordenado de elementos, se quieren realizar búsquedas sobre los elementos. ¿Qué método de búsqueda es el más adecuado? Razona tu respuesta. 2. Suponiendo que X es un puntero de tipo entero, si X=&NUM y A=*X ¿Cuánto vale A? 3. Dado el fichero fic.txt con el texto “hola”, ¿qué salida se obtiene del siguiente programa? #include <stdio.h> #include <stdlib.h> main() { FILE *f; int c; f = fopen(“fic.txt”, “w”); while ((c=getc(f))!=EOF) putc(c, stdout); fclose(f); } 4. Dada la expresión Página 223 de 271 Programación en lenguajes estructurados Anexos Resul = (a > b) ? a : b ; Escribe su equivalente mediante una sentencia condicional. PROBLEMAS: 1. Escribir un programa en C que conste de dos funciones secundarias de nombre ‘crear_fichero()’ y ‘listar_fichero()’ donde: a) La primera función de nombre ‘crear_fichero()’ almacena en un fichero de texto cuyo nombre se introduce por teclado desde la función principal (main) y es pasado como parámetro a esta función, los nombres (nombre y apellidos) de los alumnos de un centro de estudios. b) La segunda función de nombre ‘listar_fichero()’ muestra en pantalla el contenido del fichero de texto creado en el apartado anterior. 2. Crea un ordinograma que lee dos valores numéricos distintos “x” e “y” y determina cual es el mayor dejando el resultado en una tercera variable de nombre “z”. Página 224 de 271 Programación en lenguajes estructurados Anexos ANEXO II: CUESTIONARIO DE EVALUACIÓN DEL PROFESOR Y DEL PROCESO ENSEÑANZA-APRENDIZAJE PARA LOS ALUMNOS Página 225 de 271 Programación en lenguajes estructurados Anexos El objetivo del siguiente cuestionario es que el profesor conozca la opinión de los estudiantes acerca de su trabajo. El presente cuestionario se entregará al alumno al final de cada evaluación y su contenido íntegro es el siguiente: Nunca Algunas La mayoría veces de las veces Siempre El profesor es puntual El profesor es organizado El profesor prepara bien sus clases Mantiene el interés de los alumnos Aplica el “código disciplinario” Aplica la disciplina con justicia Hay un ambiente de trabajo positivo en clase Trabajamos mucho en clase El profesor responde cuando hacemos alguna pregunta El profesor nos presta atención a todos La cantidad de trabajo para casa es razonable Página 226 de 271 Programación en lenguajes estructurados Anexos Explica los deberes claramente Explica los contenidos claramente Utiliza buenos ejemplos en sus explicaciones El profesor responde a preguntas acerca de lo que no entendemos Usa diferentes materiales en sus explicaciones El profesor evalúa nuestros conocimientos Nos explica la manera de evaluar El profesor nos evalúa con justicia Me gustan las clases El profesor nos respeta Los alumnos respetamos al profesor Al profesor le importa nuestra educación Al profesor le gusta darnos clase Página 227 de 271 Programación en lenguajes estructurados Anexos El profesor es una persona tranquila El profesor aprecia el trabajo bien hecho El profesor aprecia a los alumnos El profesor desea ayudarnos Tu evaluación general sobre el trabajo del profesor es: Mala Regular Buena Muy buena - Por favor, escribe 3 o 4 aspectos del módulo que te han gustado: - Por favor, escribe 3 o 4 aspectos del módulo que mejorarías: Página 228 de 271 Programación en lenguajes estructurados Anexos ANEXO III: FICHA PARA EVALUACIÓN DE LA UNIDAD DIDÁCTICA POR PARTE DEL PROFESOR Página 229 de 271 Programación en lenguajes estructurados Anexos UNIDAD DIDÁCTICA: _____________________________________________ VALORACIÓN INICIAL ¿Se siguió la programación realizada? SÍ NO POR QUÉ Modificaciones realizadas durante su desarrollo EN CUANTO A LOS CONTENIDOS ¿Se trabajaron todos? SÍ NO POR QUÉ Dificultades encontradas: en el grupo Dificultades encontradas: en algunos alumnos Observaciones EN CUANTO A LO PROPUESTO ¿Se llegaron a alcanzar los objetivos? Del grupo SÍ De cada alumno NO SÍ POR QUÉ NO POR QUÉ Obstáculos encontrados Página 230 de 271 Programación en lenguajes estructurados Anexos EN CUANTO A LA METODOLOGÍA ¿Ha facilitado la atención a cada alumno? SÍ NO POR QUÉ ¿Ha facilitado la motivación, la participación y el interés? SÍ NO POR QUÉ Página 231 de 271 Programación en lenguajes estructurados Anexos ANEXO IV: AMPLIACIÓN DE LAS UNIDADES DIDÁCTICAS Página 232 de 271 Programación en lenguajes estructurados Anexos ÍNDICE 1. U.D.1: INTRODUCCIÓN A LA PROGRAMACIÓN................................. 234 2. U.D. 2: METODOLOGÍA DE LA PROGRAMACIÓN .............................. 236 3. U.D. 3: INTRODUCCIÓN AL LENGUAJE C .......................................... 238 4. U.D. 4: PROGRAMACIÓN MODULAR EN C ......................................... 241 5. U.D. 5: ESTRUCTURAS DE DATOS ESTÁTICAS ................................ 245 6. U.D. 6: ORDENACIÓN Y BÚSQUEDA EN VECTORES ........................ 248 7. U.D. 7: ESTRUCTURAS EXTERNAS..................................................... 250 8. U.D. 8: ESTRUCTURAS DE DATOS DINÁMICAS LINEALES.............. 252 9. U.D. 9: LIBRERÍAS EN EL LENGUAJE C ............................................. 255 10. U.D. 10: RECURSIVIDAD ................................................................... 257 11. U.D. 11: ESTRUCTURAS DE DATOS DINÁMICAS NO LINEALES.. 259 12. U.D. 12: DISEÑO EFECTIVO DE PROGRAMAS Y APLICACIONES 261 13. UD13: INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS ...................................................................................................... 264 14. UD14: PROGRAMACIÓN EN C++...................................................... 266 15. UD15: PROGRAMACIÓN VISUAL ..................................................... 269 16. UD16: PROYECTO INTEGRADOR .................................................... 270 Página 233 de 271 Programación en lenguajes estructurados Anexos 1. U.D.1: INTRODUCCIÓN A LA PROGRAMACIÓN 1. Introducción. 1.1. Temporalización: 12 horas (6 sesiones de 2 horas) 1.2. Contextualización: 1.2.1. Evaluación: primera. 1.2.2. Bloque: Metodología de la programación. (Bloque I) 1.3. Contenidos teóricos, prácticos, teórico-prácticos: Totalmente teórica. 1.4. Conocimientos básicos del alumno para la unidad: No requeridos conocimientos sobre programación porque se empieza de un nivel 0, pero si tener los conocimientos básicos de manejo del PC. 2. Objetivos. Los descritos en la programación, en la unidad didáctica correspondiente. 3. Contenidos. Se debe pasar el cuestionario inicial. 3.1. Contenidos conceptuales: 1. Los sistemas de procesamiento de la información. Se explicará a los alumnos: Sistema, Elementos funcionales, SI, Proceso, SIA, Partes de un SIA. 2. Concepto de algoritmo. Qué es un algoritmo, características Página 234 de 271 Programación en lenguajes estructurados Anexos Diferencia entre algoritmo y programa. Se expondrá un ejemplo de algoritmo sencillo en lenguaje natural aunque en la UD2 se explicarán las herramientas del diseño de algoritmos y se verán más ejemplos. 3. Fases de elaboración de un programa informático. 3.1. Análisis. 3.2. Diseño. 3.2. Codificación. 3.3. Explotación. 3.4. Mantenimiento. 4. Ensambladores, compiladores e intérpretes. 5. Objetos de un programa. Introducción a los sistemas de numeración. 5.1. Datos y tipos de datos. 5.2. Constantes y variables. 5.3. Expresiones. 6. Lenguajes. Tipos. Se explicará que es un lenguaje de programación. Se realizará una clasificación de los lenguajes de programación por diversos criterios indicando ejemplos de lenguajes. 3.2. Contenidos procedimentales: Los descritos en la programación, en la unidad didáctica correspondiente. 3.3. Contenidos actitudinales: Los descritos en la programación, en la unidad didáctica correspondiente. Página 235 de 271 Programación en lenguajes estructurados Anexos 4. Metodología: La expuesta en la programación. 5. Criterios de evaluación. No se realizará una actividad específica de evaluación al finalizar la unidad, sino que se realizará al finalizar el bloque 1 (Metodología de la programación) UD1+ UD2 6. Actividades de enseñanza-aprendizaje a desarrollar: Las desarrolladas en el Anexo I, en el apartado correspondiente a la unidad didáctica 1. 2. U.D. 2: METODOLOGÍA DE LA PROGRAMACIÓN 1. Introducción. 1.1. Temporalización: 32 horas (16 sesiones de 2 horas) 1.2. Contextualización: 1.2.1. Evaluación: primera. 1.2.2. Bloque: Metodología de la programación. (Bloque I) 1.3. Contenidos teóricos, prácticos, teórico-prácticos: Teóricos y prácticos. 1.4. Conocimientos básicos del alumno para la unidad: Los explicados en la UD1 2. Objetivos. Los descritos en la programación, en la unidad didáctica correspondiente. 3. Contenidos. 3.1. Contenidos conceptuales: Página 236 de 271 Programación en lenguajes estructurados Anexos 1. Estructura general de un programa. 1.1. Concepto de programa. 1.2. Partes de un programa. 1.3. Elementos básicos de un programa. Se explicará que es un dato y tipo de dato. Así como las constantes, las variables y las expresiones. Se propondrán los diferentes tipos de variables y expresiones. 1.4. Instrucciones. Tipos de instrucciones. Proponer todos los tipos de instrucciones (estructuras de control). 2. Herramientas para el diseño de algoritmos. 2.1. Diagramas de flujo. Se proponen los dos grupos: Organigramas y los Ordinogramas con toda su simbología. 2.2. Pseudocódigo. 2.3. Tablas de decisión. Al final de este punto se propondrá a los alumnos ejercicios resueltos tales cómo los que se encuentran en el Anexo I para esta unidad didáctica. 3. Técnicas de programación. 3.1. Programación convencional. 3.2. Programación estructurada: estructuras básicas, diseño descendente. 3.3. Programación modular. Al final de la Unidad se realizará un examen del bloque1, por tanto, Página 237 de 271 Programación en lenguajes estructurados Anexos se dedicará una sesión para el examen y otra sesión para realizar la corrección del mismo en clase con los alumnos. 3.2. Contenidos procedimentales: Los descritos en la programación, en la unidad didáctica correspondiente. 3.3. Contenidos actitudinales: Los descritos en la programación, en la unidad didáctica correspondiente. 4. Metodología: La expuesta en la programación. 5. Criterios de evaluación. Se hará una actividad específica de evaluación junto con la unidad anterior (Bloque I) 6. Actividades de enseñanza-aprendizaje a desarrollar: Las desarrolladas en el Anexo I, en el apartado correspondiente a la unidad didáctica 2. 3. U.D. 3: INTRODUCCIÓN AL LENGUAJE C 1. Introducción. 1.1. Temporalización: 20 horas (10 sesiones de 2 horas) 1.2. Contextualización: 1.2.1. Evaluación: primera. 1.2.2. Bloque: Programación Básica. (Bloque II) 1.3. Contenidos teóricos, prácticos, teórico-prácticos: Eminentemente Procedimental. 1.4. Conocimientos básicos del alumno para la unidad: Los Página 238 de 271 Programación en lenguajes estructurados Anexos explicados en el Bloque I 2. Objetivos. Los descritos en la programación, en la unidad didáctica correspondiente. 3. Contenidos. 3.1. Contenidos conceptuales: 1. Historia del lenguaje C. ¿Por qué surge C?. Creadores. Estándares. 2. C como lenguaje estructurado. Principales características. 3. Ensambladores, Compiladores e Intérpretes. Veremos Ensambladores (traducción, carga y ejecución), los Compiladores (Fases de Compilación) y finalmente los Intérpretes. 4. Estructura de un programa en C. Se explica la forma general de un programa en C. Y las 4 regiones en memoria. 4.1. Ficheros de cabecera. 4.2. Directivas #include y #define. Se ampliará en la UD 9: Librerías en el Lenguaje C. 4.3. Tipos de datos. Se describen los cinco tipos básicos de C: char, int, float, double y void. Además se les describe en modo esquema los modificadores, los rangos y el tamaño de cada tipo. (Los tipos de datos se ven en detalle en la UD4) 4.4. Variables y constantes. Página 239 de 271 Programación en lenguajes estructurados Anexos En primer lugar se explican las variables indicando los modos de almacenamiento que C presenta (auto, extern, static y register) , luego se pasa a definir los modificadores del tipo de acceso (const y volatile) y finalmente se estudia las conversiones implícitas y explicitas. En segundo lugar se explican las constantes, definiéndolas y enumerando los tipos que C maneja (constantes enteras, de punto flotante, etc.) (Las variables y constantes se ven en detalle en la UD4) 4.5. Operadores, expresiones y control de flujo. Tipos de Operadores. Las expresiones: combinación de variables y/o constantes, y/o operadores. Diferentes tipos de expresiones. Reglas de precedencia y asociatividad entre los operadores (tabla de precedencia y asociatividad). Se enumeran las diferentes sentencias de control de flujo. (Se ven en detalle en la UD4) 5. Entorno del compilador C. Compilador GCC (GNU Compiler Collection). Creación del programa, compilación y enlazado con todas aquellas funciones de biblioteca que se necesiten. 6. Librerías de C. Se indicarán las más importantes sin profundizar puesto que las Librerías se estudian en detalle en la UD9 Página 240 de 271 Programación en lenguajes estructurados Anexos 7. Compilación, ejecución y depuración de un programa en C. Realización de ejercicios y puesta en común. 3.2. Contenidos procedimentales: Los descritos en la programación, en la unidad didáctica correspondiente. 3.3. Contenidos actitudinales: Los descritos en la programación, en la unidad didáctica correspondiente. 4. Metodología: La expuesta en la programación. 5. Criterios de evaluación. Los expuestos en la programación, en la unidad didáctica correspondiente. 6. Actividades de enseñanza-aprendizaje a desarrollar: Las desarrolladas en el Anexo I, en el apartado correspondiente a la unidad didáctica 3. 4. U.D. 4: PROGRAMACIÓN MODULAR EN C 1. Introducción. 1.1. Temporalización: 34 horas (17 sesiones de 2 horas) 1.2. Contextualización: 1.2.1. Evaluación: primera. 1.2.2. Bloque: Programación Básica (Bloque II) 1.3. Contenidos teóricos, prácticos, teórico-prácticos: Procedimental 1.4. Conocimientos básicos del alumno para la unidad: Los vistos en el bloque I (Metodología de la Programación) y los adquiridos en la UD3 (Introducción al Lenguaje C) Página 241 de 271 Programación en lenguajes estructurados Anexos 2. Objetivos. Los descritos en la programación, en la unidad didáctica correspondiente. 3. Contenidos. 3.1. Contenidos conceptuales: 1. Tipos de datos en C: básicos, definidos por el usuario. (En la UD3 se habla de tipos de datos en general) Tipos de datos básicos: char, int, float, double y void. Modificadores de los tipos. Tipos de datos definidos por el usuario: typedef. 2. Elementos del lenguaje C. (En la UD3 ya se habla de ellos) 2.1. Variables. Modos de almacenamiento: auto, extern, static y register. Modificadores de acceso: const y volatile. Conversiones de tipo: implícita y explícita (casting) 2.2. Constantes. Tipos: Enteras, de Punto Flotante, de Carácter, de Cadenas de carácter y de tipo Enumeración. 2.3. Operadores. Operadores Aritméticos, De Asignación, Incrementales, Relaciones y Lógicos, De tratamiento de Bits, otros (sizeof(), operador coma, operador de dirección (&) y el operador de indirección (*)). 2.4. Expresiones. Expresiones Aritméticas, Lógicas y Generales. Página 242 de 271 Programación en lenguajes estructurados Anexos Reglas de Precedencia y Asociatividad. 2.5. Control de flujo. Definición de Sentencia en C. Bifurcaciones: Operador condicional, Sentencia If, Sentencia If…else, Setencia If…else Múltiple, Sentencia Switch, Setencias If Anidadas. Bucles: Sentencia While, Sentencia for, Sentencia do…While Sentencias de Salto: break, continue, goto 2.6. Entrada/salida estándar. (Elemento del lenguaje que se estudia en la UD9 con detalle) E/S de caracteres: funciones getchar(), putchar(), getch() y getche() E/S de cadenas de caracteres: funciones gets() y puts() E/S formateada: printf() y scanf() 3. Funciones. 3.1. Definición de una función. Forma general de una función. 3.2. Declaración y llamada de una función. Declaración de las funcionesÆ Su prototipo y el lugar dónde se hace (después de los #include y los #define). Llamada a una función Æ La invocación se realiza incluyendo su nombre en una sentencia o expresión del main() o de otra función. 3.3. Paso de argumentos por valor y por referencia. Mecanismo de paso por valor y mecanismo de paso por referencia (mediante variables puntero para indicar direcciones de memoria). 3.4. La función main() con argumentos. Página 243 de 271 Programación en lenguajes estructurados Anexos Argumentos argc y argv 3.5. Las funciones de biblioteca. 4. Punteros en C. (En la UD5 se hace una ampliación de los punteros) 4.1. Operadores Dirección e Indirección. Definición de punteros y asignación de direcciones. La Indirección. 4.2. Aritmética de punteros. Asignación de punteros. Aritmética de punteros: sumar o restar un número entero a un puntero, resta de dos punteros, incremento y decremento de punteros, comparación de punteros. (Sesión de examen) (Sesión de corrección del examen) 3.2. Contenidos procedimentales: Los descritos en la programación, en la unidad didáctica correspondiente. 3.3. Contenidos actitudinales: Los descritos en la programación, en la unidad didáctica correspondiente. 4. Metodología: La expuesta en la programación. 5. Criterios de evaluación. Hacer una prueba específica UD3 y UD4 al finalizar. 6. Actividades de enseñanza-aprendizaje a desarrollar: Las desarrolladas en el Anexo I, en el apartado correspondiente a la unidad didáctica 4. Página 244 de 271 Programación en lenguajes estructurados Anexos 5. U.D. 5: ESTRUCTURAS DE DATOS ESTÁTICAS 1. Introducción. 1.1. Temporalización: 20 horas (10 sesiones de 2 horas) 1.2. Contextualización: 1.2.1. Evaluación: primera. 1.2.2. Bloque: Estructuras de Datos (Bloque III) 1.3. Contenidos teóricos, prácticos, teórico-prácticos: Procedimental 1.4. Conocimientos básicos del alumno para la unidad: Los vistos en el bloque I (Metodología de la Programación) y bloque II (Programación Básica) 2. Objetivos. Los descritos en la programación, en la unidad didáctica correspondiente. 3. Contenidos. 3.1. Contenidos conceptuales: 1. Introducción a las estructuras de datos: internas (estáticas y dinámicas) y externas. Estructuras internas: Estáticas y Dinámicas Estructuras Estáticas: Vector, Conjunto y Registro. Estructuras Dinámicas: Lineales y No Lineales. Estructuras Lineales: Pila, Cola, Lista Estructuras No Lineales: Árbol y Grafo. Estructuras externas: Ficheros. 1.1. Tipos abstractos de datos (TAD’s) Página 245 de 271 Programación en lenguajes estructurados Anexos Definición TAD: Abstracción de Datos y Ocultación de la Información. Especificación de un TAD: Nombre, Operaciones (Sintaxis) y Axiomas (Que expresa la Semántica). 2. Estructuras estáticas: definiciones y características. Definir el TAD del Vector con las operaciones (Crear, Extraer y Almacenar). 2.1. Arrays unidimensionales: vectores. Definición y uso. Operaciones básicas: inserción, eliminación y búsqueda. Vectores y punteros. Inicialización de vectores. 2.2. Arrays multidimensionales. Definición y uso. Arrays bidimensionales (matrices). Acceso a los datos, carga de datos. 2.3. Cadenas de caracteres. Definición, acceso a datos, carga de datos. (Funciones: Además de las funciones de E/S vistas en UD4: Programación Modular en C se ven las siguientes funciones de cadenas) Funciones: strlen(), strcpy(), strcmp(), strcat() 2.4. Estructuras. Declaración de variables de tipo Estructura. Página 246 de 271 Programación en lenguajes estructurados Anexos Referenciar los campos de una Estructura. Inicializar una Estructura. Paso de Estructuras a Funciones. Punteros a Estructuras Campos de Bits. 2.5. Array de estructuras. Vectores y Matrices de estructuras. 2.6. Uniones. Declaración de las Uniones. Diferencia entre las Estructuras y las Uniones Estructuras/ Uniones anidadas . 2.7. Ampliación de punteros. Punteros a Funciones. (En la UD4 se han visto funciones y punteros) Vectores de punteros. Punteros y cadenas de caracteres. 3.2. Contenidos procedimentales: Los descritos en la programación, en la unidad didáctica correspondiente. 3.3. Contenidos actitudinales: Los descritos en la programación, en la unidad didáctica correspondiente. 4. Metodología: La expuesta en la programación. 5. Criterios de evaluación. Los expuestos en la programación, en la unidad didáctica correspondiente. 6. Actividades de enseñanza-aprendizaje a desarrollar: Página 247 de 271 Programación en lenguajes estructurados Anexos Las desarrolladas en el Anexo I, en el apartado correspondiente a la unidad didáctica 5. 6. U.D. 6: ORDENACIÓN Y BÚSQUEDA EN VECTORES 1. Introducción. 1.1. Temporalización: 20 horas (10 sesiones de 2 horas) 1.2. Contextualización: 1.2.1. Evaluación: primera. 1.2.2. Bloque: Estructuras de Datos (Bloque III) 1.3. Contenidos teóricos, prácticos, teórico-prácticos: Conceptual y Procedimental 1.4. Conocimientos básicos del alumno para la unidad: Los vistos en el bloque I (Metodología de la Programación), bloque II (Programación Básica) y la UD 5 (Estructuras de Datos Estáticas) 2. Objetivos. Los descritos en la programación, en la unidad didáctica correspondiente. 3. Contenidos. 3.1. Contenidos conceptuales: 1. Introducción. Utilización de la función “time” para cronometrar el tiempo empleado. 2. Búsqueda. 2.1. Secuencial o lineal. 2.2. Binaria o dicotómica. Página 248 de 271 Programación en lenguajes estructurados Anexos (Ejercicios 2 sesiones) 3. Ordenación. 3.1. Método de intercambio o de la burbuja. 3.2. Método de la burbuja con switch. 3.3. Ordenación por selección. 3.4. Método de inserción o de la baraja. (Ejercicios 2 sesiones) 4. Mezcla de arrays ordenados (Examen 1 sesión) (Corrección Examen 1 sesión) 3.2. Contenidos procedimentales: Los descritos en la programación, en la unidad didáctica correspondiente. 3.3. Contenidos actitudinales: Los descritos en la programación, en la unidad didáctica correspondiente. 4. Metodología: La expuesta en la programación. 5. Criterios de evaluación. Los descritos en la programación, en la unidad didáctica correspondiente. Se hará una prueba específica de evaluación de las unidades didácticas 5 y 6. 6. Actividades de enseñanza-aprendizaje a desarrollar: Las desarrolladas en el Anexo I, en el apartado correspondiente a la unidad didáctica 6. Página 249 de 271 Programación en lenguajes estructurados Anexos 7. U.D. 7: ESTRUCTURAS EXTERNAS 1. Introducción. 1.1. Temporalización: 36 horas (18 sesiones de 2 horas) 1.2. Contextualización: 1.2.1. Evaluación: primera y segunda. 1.2.2. Bloque: Estructuras de Datos (Bloque III) 1.3. Contenidos teóricos, prácticos, teórico-prácticos: Conceptual y Procedimental 1.4. Conocimientos básicos del alumno para la unidad: Los vistos en el bloque I (Metodología de la Programación), bloque II (Programación Básica), la UD 5 (Estructuras de Datos Estáticas) y la UD 6 (Ordenación y Búsqueda en Vectores). 2. Objetivos. Los descritos en la programación, en la unidad didáctica correspondiente. 3. Contenidos. 3.1. Contenidos conceptuales: 1. Archivos o ficheros. 1.1. Terminología. Fichero, Registro Lógico, Campo, Campo Clave, Registro Físico a. Características. Tipos de registros (de longitud fija y de longitud variable) Operaciones con registros (alta y baja de registros) Página 250 de 271 Programación en lenguajes estructurados Anexos 2. Ficheros según su función. 2.1. Ficheros permanentes o maestros. Ficheros maestros, Constantes e Históricos. 2.2. Ficheros de movimientos o transacciones. 2.3. Ficheros de maniobra o trabajo. 3. Ficheros según su organización. 3.1. Secuenciales. 3.2. Directos. 3.3. Indexados. 4. Operaciones a realizar sobre los ficheros. Operaciones (independiente del tipo): Creación, apertura, cierre, actualización, ordenación clasificación, copiado o duplicado, concatenación, fusión, intersección, partición, compactación y borrado. 5. Archivos en C. 5.1. Punteros a archivos. Introducción a los ficheros en C 5.2. Operaciones sobre archivos. Abrir (modos de apertura) y cerrar ficheros. Control de errores y de fin fichero. E/S de caracteres. E/S de cadenas de caracteres. E/S de bloques de datos. E/S con formato. Página 251 de 271 Programación en lenguajes estructurados Anexos Acceso directo. Hacer ejercicios. 3.2. Contenidos procedimentales: Los descritos en la programación, en la unidad didáctica correspondiente. 3.3. Contenidos actitudinales: Los descritos en la programación, en la unidad didáctica correspondiente. 4. Metodología: La expuesta en la programación. 5. Criterios de evaluación. Los descritos en la programación, en la unidad didáctica correspondiente. (No se hará una prueba específica) 6. Actividades de enseñanza-aprendizaje a desarrollar: Las desarrolladas en el Anexo I, en el apartado correspondiente a la unidad didáctica 7. 8. U.D. 8: ESTRUCTURAS DE DATOS DINÁMICAS LINEALES 1. Introducción. 1.1. Temporalización: 30 horas (15 sesiones de 2 horas) 1.2. Contextualización: 1.2.1. Evaluación: segunda. 1.2.2. Bloque: Estructuras de Datos (Bloque III) 1.3. Contenidos teóricos, prácticos, teórico-prácticos: Conceptual y Procedimental 1.4. Conocimientos básicos del alumno para la unidad: Los vistos en Página 252 de 271 Programación en lenguajes estructurados el bloque I (Metodología Anexos de la Programación), bloque II (Programación Básica), la UD 5 (Estructuras de Datos Estáticas) ,la UD 6 (Ordenación y Búsqueda en Vectores) y la UD 7 (Estructuras Externas) 2. Objetivos. Los descritos en la programación, en la unidad didáctica correspondiente. 3. Contenidos. 3.1. Contenidos conceptuales: 1. Asignación dinámica de memoria. 1.1. Introducción a la asignación dinámica de memoria. Concepto de Estructuras Dinámicas. Estructuras autoreferenciadas. 1.2. Las funciones para asignación y liberación de memoria en lenguaje C. Funciones malloc y free. 2. Estructura de datos Lista. 2.1. Concepto de lista. Definición de Lista. Pila y la Cola son Listas con restricciones. 2.2. El tipo abstracto de datos lista (TAD Lista). Operaciones (crear, listaVacia, insertar, etc.) y los Axiomas del TAD 2.3. Implementación de la estructura lista. Implementación Estática usando como soporte el vector. Página 253 de 271 Programación en lenguajes estructurados Anexos Implementación Dinámica usando punteros. 2.4. Tipos de listas: circular, doblemente enlazada, otras. Lista Circular, Lista Doblemente enlazadas, Lista Ordenada y las Multilistas. 3. Estructura de datos Pila. 3.1. El tipo abstracto de datos pila (TAD Pila). Operaciones (crear, pilaVacia, tope, etc.) y los Axiomas del TAD 3.2. Implementación de la estructura pila. Implementación Estática mediante un vector. Implementación Dinámica mediante punteros y accesible sólo por tope. 4. Estructura de datos Cola. 4.1. El tipo abstracto de datos cola (TAD Cola). Operaciones (crear, colaVacia, añadir, etc.) 4.2. Implementación de la estructura cola. Implementación Estática mediante un vector usando dos índices. Implementación Dinámica mediante punteros y accesible por el frente y el final. Sesión de Examen Sesión para la Corrección del Examen. 3.2. Contenidos procedimentales: Los descritos en la programación, en la unidad didáctica correspondiente. Página 254 de 271 Programación en lenguajes estructurados Anexos 3.3. Contenidos actitudinales: Los descritos en la programación, en la unidad didáctica correspondiente. 4. Metodología: La expuesta en la programación. 5. Criterios de evaluación. Se hará una prueba específica de evaluación de la UD 8 y UD 9. 6. Actividades de enseñanza-aprendizaje a desarrollar: Las desarrolladas en el Anexo I, en el apartado correspondiente a la unidad didáctica 8. 9. U.D. 9: LIBRERÍAS EN EL LENGUAJE C 1. Introducción. 1.1. Temporalización: 16 horas (8 sesiones de 2 horas) 1.2. Contextualización: 1.2.1. Evaluación: segunda. 1.2.2. Bloque: Programación Avanzada (Bloque IV) 1.3. Contenidos teóricos, prácticos, teórico-prácticos: Procedimental 1.4. Conocimientos básicos del alumno para la unidad: Los vistos en el bloque I (Metodología de la Programación), bloque II (Programación Básica) y bloque III (Estructuras de Datos) 2. Objetivos. Los descritos en la programación, en la unidad didáctica correspondiente. 3. Contenidos. 3.1. Contenidos conceptuales: Página 255 de 271 Programación en lenguajes estructurados Anexos (Algunos puntos se han tratado en la UD 3: Introducción al Lenguaje C) 1. El preprocesador de C. Creación, Compilación y Enlazado de un Programa en C Función del Preprocesador 1.1. Directivas. Directivas de definición de constantes Directivas para definir macros Directivas para inclusión de ficheros. Directivas Condicionales. Otras Directivas. 2. Principales librerías estándar en C: stdio.h, math.h, stdlib.h, etc. Concepto de Biblioteca. Requisitos de una buena Biblioteca 2.1. Entrada y salida estándar. E/S de caracteres: getchar, putchar, getch y getche (conio.h de Turbo C) E/S de cadenas de caracteres: gets, puts. E/S formateada: printf y scanf 3. Creación de librerías por el usuario. Pasos a seguir Gestión de librerías con el programa ar 3.2. Contenidos procedimentales: Página 256 de 271 Programación en lenguajes estructurados Anexos Los descritos en la programación, en la unidad didáctica correspondiente. 3.3. Contenidos actitudinales: Los descritos en la programación, en la unidad didáctica correspondiente. 4. Metodología: La expuesta en la programación. 5. Criterios de evaluación. Los descritos en la programación, en la unidad didáctica correspondiente. (No se hará prueba específica de esta evaluación) 6. Actividades de enseñanza-aprendizaje a desarrollar: Las desarrolladas en el Anexo I, en el apartado correspondiente a la unidad didáctica 9. 10. U.D. 10: RECURSIVIDAD 1. Introducción. 1.1. Temporalización: 10 horas (5 sesiones de 2 horas) 1.2. Contextualización: 1.2.1. Evaluación: segunda. 1.2.2. Bloque: Programación Avanzada (Bloque IV) 1.3. Contenidos teóricos, prácticos, teórico-prácticos: Procedimental y Conceptual. 1.4. Conocimientos básicos del alumno para la unidad: Los vistos en el bloque I (Metodología de la Programación), en el bloque II (Programación Básica), en el bloque III (Estructuras de Datos) y la UD9 del bloque IV (Librerías en el Lenguaje C) Página 257 de 271 Programación en lenguajes estructurados Anexos 2. Objetivos. Los descritos en la programación, en la unidad didáctica correspondiente. 3. Contenidos. 3.1. Contenidos conceptuales: 1. Concepto. Definición de función (módulo) recursiva. Esquema del diseño recursivo Cálculo del coste 2. Diseño recursivo frente a iterativo. Ejemplo de Función que calcula el factorial de forma recursiva e iterativa. 3. Tipos de recursividad. 3.1. Recursión en cascada o múltiple. 3.2. Recursión lineal. 3.3. Recursión anidada. 4. Ejemplos de recursividad: Factorial, Fibonacci, Quicksort, etc. 3.2. Contenidos procedimentales: Los descritos en la programación, en la unidad didáctica correspondiente. 3.3. Contenidos actitudinales: Los descritos en la programación, en la unidad didáctica correspondiente. 4. Metodología: La expuesta en la programación. 5. Criterios de evaluación. Los descritos en la programación, en la unidad didáctica correspondiente. (No se hará actividad específica de Evaluación). Página 258 de 271 Programación en lenguajes estructurados Anexos 6. Actividades de enseñanza-aprendizaje a desarrollar: Las desarrolladas en el Anexo I, en el apartado correspondiente a la unidad didáctica 10. 11. U.D. 11: ESTRUCTURAS DE DATOS DINÁMICAS NO LINEALES 1. Introducción. 1.1. Temporalización: 30 horas (15 sesiones de 2 horas) 1.2. Contextualización: 1.2.1. Evaluación: segunda. 1.2.2. Bloque: Programación Avanzada (Bloque IV) 1.3. Contenidos teóricos, prácticos, teórico-prácticos: Procedimental 1.4. Conocimientos básicos del alumno para la unidad: Los vistos en el bloque I (Metodología de la Programación), bloque II (Programación Básica), bloque III (Estructuras), la UD 9 (Librerías en C) y la UD 10 (Recursividad) 2. Objetivos. Los descritos en la programación, en la unidad didáctica correspondiente. 3. Contenidos. 3.1. Contenidos conceptuales: 1. Estructura de datos árbol. Definición de Árbol. Terminología: Nodo Padre, Nodo Hijo, Hoja, Camino, Longitud, Rama, Altura, Grado, Nivel de un Nodo. Página 259 de 271 Programación en lenguajes estructurados Anexos 1.1. Tipo abstracto de datos árbol binario (TAD Árbol Binario). TAD del Árbol Binario: Operaciones (Crear, arbolVacio, contsArbol, hIzq, hDer, datoRaiz) y Axiomas. 1.2. Implementación Dinámica en C. Implementación similar a la lista pero cada nodo debe tener dos enlaces a los posibles hijos. 1.3. Otros tipos de árboles. Árbol Binario de Búsqueda, Árboles Equilibrados, Árboles Multicamino de búsqueda. 1.4. Recorridos de un árbol: preorden, inorden y postorden. 1.5. Operaciones en árboles binarios de búsqueda: búsqueda, inserción y borrado. 1.6. Árboles binarios equilibrados. 2. Estructura de datos grafo. Definición de Grafo. Terminología: Grado, Arco, Camino entre dos vértices, ciclo, grafo ponderado. 2.1. Tipo abstracto de datos grafo (TAD Grafo). Operaciones: Crear, GrafoVacio, Insertar, Borrar. Axiomas. 2.2. Conceptos básicos. Grafos dirigidos y grafos no dirigidos. Página 260 de 271 Programación en lenguajes estructurados Anexos Ejemplo de grafo no dirigido y ponderado (mapa de carreteras) 2.3. Representación y análisis. Representación usando listas enlazadas. Implementación en C de la Estructura. Sesión de Examen Sesión para la Corrección del Examen. 3.2. Contenidos procedimentales: Los descritos en la programación, en la unidad didáctica correspondiente. 3.3. Contenidos actitudinales: Los descritos en la programación, en la unidad didáctica correspondiente. 4. Metodología: La expuesta en la programación. 5. Criterios de evaluación. Se hará una prueba de evaluación de las unidades didácticas UD9, UD10 y UD11 antes de que acabe la segunda evaluación. 6. Actividades de enseñanza-aprendizaje a desarrollar: Las desarrolladas en el Anexo I, en el apartado correspondiente a la unidad didáctica 11. 12. U.D. 12: DISEÑO EFECTIVO DE PROGRAMAS Y APLICACIONES 1. Introducción. 1.1. Temporalización: 16 horas (8 sesiones de 2 horas) 1.2. Contextualización: 1.2.1. Evaluación: segunda y tercera. Página 261 de 271 Programación en lenguajes estructurados Anexos 1.2.2. Bloque: Mantenimiento de Aplicaciones (Bloque V) 1.3. Contenidos teóricos, prácticos, teórico-prácticos: Procedimental 1.4. Conocimientos básicos del alumno para la unidad: Los vistos en el bloque I (Metodología de la Programación), bloque II (Programación Básica), bloque III (Estructuras) y bloque IV (Programación Avanzada) 2. Objetivos. Los descritos en la programación, en la unidad didáctica correspondiente. 3. Contenidos. 3.1. Contenidos conceptuales: 1. Introducción. Importancia documentación para desarrollo del SW y para su mantenimiento. Documentación desde la primera fase del ciclo de vida. 2. Documentación del código fuente Elección de los nombres de los identificadores, localización y composición de los comentarios. 3. Documentación de un módulo. Descripción de los módulos que aparecen en el Diagrama de Estructura, especificando su código, nombre y descripción general. 4. Documentación del programa. Descripción gráfica del programa: Diagrama de Estructura (DE) 5. Creación de un manual de usuario. Servicios que ofrece el programa y cómo se pueden obtener. Página 262 de 271 Programación en lenguajes estructurados Anexos Deberá estar organizada de forma que el usuario sea autosuficiente. Presentada en lenguaje corriente y evitando la jerga computacional. 6. Técnicas de prueba de programas. Pruebas Unitarias: Pruebas de Caja Blanca: Camino Básico, Estructura de Control. Pruebas de Caja Negra: Partición Equivalente, Análisis de Valores Límite. Pruebas de Integración. 7. Costes. Coste Temporal y Espacial. Talla del programa, Instancia y paso de programa. Caso Mejor y Caso Peor. Sesión de Examen Sesión para la Corrección del Examen. 3.2. Contenidos procedimentales: Los descritos en la programación, en la unidad didáctica correspondiente. 3.3. Contenidos actitudinales: Los descritos en la programación, en la unidad didáctica correspondiente. 4. Metodología: La expuesta en la programación. 5. Criterios de evaluación. Se hará una prueba de evaluación de la UD12. 6. Actividades de enseñanza-aprendizaje a desarrollar: Las desarrolladas en el Anexo I, en el apartado correspondiente a la unidad didáctica 12. Página 263 de 271 Programación en lenguajes estructurados Anexos 13. UD13: INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS 1. Introducción. 1.1. Temporalización: 12 horas (6 sesiones de 2 horas) 1.2. Contextualización: 1.2.1. Evaluación: tercera 1.2.2. Bloque: Más allá de la Programación Estructurada (Bloque VI) 1.3. Contenidos teóricos, prácticos, teórico-prácticos: Conceptual 1.4. Conocimientos básicos del alumno para la unidad: Los vistos en el bloque I (Metodología de la Programación), bloque III (Estructuras), (Programación Básica), (Programación Avanzada) y bloque V bloque II bloque IV (Mantenimiento de Aplicaciones) 2. Objetivos. Los descritos en la programación, en la unidad didáctica correspondiente. 3. Contenidos. 3.1. Contenidos conceptuales: 1. Introducción Principios del paradigma OO: Abstracción, Encapsulación, Modularidad, Jerarquía,… Metodología OO: Unificar Datos+Procesos POO: Objetos, clases, herencia y polimorfismo. 2. Objetos Identidad que tiene: Estado(Atributos), Comportamiento (Métodos) e Página 264 de 271 Programación en lenguajes estructurados Anexos Identidad (Oid). Ocultación de la Información. Encapsulamiento. 3. Clases Conjunto de objetos con la misma Estructura y Comportamiento. Variables Instancia y Variables de Clase. 4. Herencia Definir una Clase como Especialización de otras Clases ya definidas. Herencia Simple. Herencia Múltiple. 5. Polimorfismo Objetos, atributos y métodos que pueden tomar más de una forma. Polimorfismo Ad-hoc Pofimorfismo Universal. 6. Ventajas de la P.O.O. Protección de la información. Rápido Desarrollo. Fácil Mantenimiento. 7. Lenguajes orientados a objetos Lenguaje Puros: SmallTalk, Eiffel, Java,… Lenguajes Híbridos: C++, Object Pascal,… 3.2. Contenidos procedimentales: Los descritos en la programación, en la unidad didáctica correspondiente. Página 265 de 271 Programación en lenguajes estructurados Anexos 3.3. Contenidos actitudinales: Los descritos en la programación, en la unidad didáctica correspondiente. 4. Metodología: La expuesta en la programación. 5. Criterios de evaluación. Los descritos en la programación, en la unidad didáctica correspondiente. 6. Actividades de enseñanza-aprendizaje a desarrollar: Las desarrolladas en el Anexo I, en el apartado correspondiente a la unidad didáctica 13. 14. UD14: PROGRAMACIÓN EN C++ 1. Introducción. 1.1. Temporalización: 40 horas (20 sesiones de 2 horas) 1.2. Contextualización: 1.2.1. Evaluación: tercera 1.2.2. Bloque: Más allá de la Programación Estructurada (Bloque VI) 1.3. Contenidos teóricos, prácticos, teórico-prácticos: Procedimental 1.4. Conocimientos básicos del alumno para la unidad: Los vistos en el bloque I (Programación (Programación (Metodología Básica), de la Programación), bloque III (Estructuras), Avanzada), bloque V bloque bloque (Mantenimiento II IV de Aplicaciones) y la UD 13 Introducción a la POO. 2. Objetivos. Los descritos en la programación, en la unidad didáctica correspondiente. Página 266 de 271 Programación en lenguajes estructurados Anexos 3. Contenidos. 3.1. Contenidos conceptuales: 1. Introducción a C++. C++ como lenguaje para aprendizaje de la POO. C++ soporta las características de: Abstracción, Encapsulado de Datos, Ocultación de la Información, Herencia y Polimorfismo. C++ es un lenguaje OO no puro. Bjarne Stroustrup creador del C++. C++ versus C 2. Objetos y Clases. Definición de una Clase, Nivel de Acceso: private, protected, public. Constructores (por defecto, ordinario y copia) y Destructores: Dos funciones miembros especiales. Funciones Friend. Operador de resolución de ámbito. Variables de Instancia y variables de Clase. Clases compuestas. Paso en el diseño de un programa OO 3. Sobrecarga de operadores. Se explica el ejemplo de la sobrecarga del operador suma para números complejos. 4. Genericidad. Templates Clases. Templates de Funciones Genéricas. Página 267 de 271 Programación en lenguajes estructurados Anexos 5. Herencia. Herencia Simple: Clase Base y Clase Derivada. Herencia Múltiple. 6. Polimorfismo. Polimorfismo de Herencia: Herencia Virtual Ligadura Dinámica. Clases Abstractas. 7. Entrada y Salida. Ficheros. Entrada y Salida con formato. Entrada y Salida de Ficheros: Funciones miembros de iostream y de fstream. 3.2. Contenidos procedimentales: Los descritos en la programación, en la unidad didáctica correspondiente. 3.3. Contenidos actitudinales: Los descritos en la programación, en la unidad didáctica correspondiente. 4. Metodología: La expuesta en la programación. 5. Criterios de evaluación. Los descritos en la programación, en la unidad didáctica correspondiente. 6. Actividades de enseñanza-aprendizaje a desarrollar: Las desarrolladas en el Anexo I, en el apartado correspondiente a la unidad didáctica 14. Página 268 de 271 Programación en lenguajes estructurados Anexos 15. UD15: PROGRAMACIÓN VISUAL 1. Introducción. 1.1. Temporalización: 12 horas (6 sesiones de 2 horas) 1.2. Contextualización: 1.2.1. Evaluación: tercera 1.2.2. Bloque: Más allá de la Programación Estructurada (Bloque VI) 1.3. Contenidos teóricos, prácticos, teórico-prácticos: Procedimental 1.4. Conocimientos básicos del alumno para la unidad: Los vistos en el bloque I (Programación (Programación (Metodología Básica), de la Programación), bloque III (Estructuras), Avanzada), bloque V bloque bloque (Mantenimiento II IV de Aplicaciones) y la UD 13, 14. 2. Objetivos. Los descritos en la programación, en la unidad didáctica correspondiente. 3. Contenidos. 3.1. Contenidos conceptuales: 1. Introducción a la programación visual. 1.1.Interacción persona – ordenador. 1.2.Diseño de la interfaz. 2. Introducción a C#. 3. Instalación y configuración del Visual Studio C# Express. 4. Aplicaciones visuales en C#. 4.1.Componentes, propiedades y eventos. Página 269 de 271 Programación en lenguajes estructurados Anexos 4.2.Diseño de formularios. 3.2. Contenidos procedimentales: Los descritos en la programación, en la unidad didáctica correspondiente. 3.3. Contenidos actitudinales: Los descritos en la programación, en la unidad didáctica correspondiente. 4. Metodología: La expuesta en la programación. 5. Criterios de evaluación. Los descritos en la programación, en la unidad didáctica correspondiente. Se hará una prueba específica de evaluación de UD 13, UD 14 y UD 15. 6. Actividades de enseñanza-aprendizaje a desarrollar: Las desarrolladas en el Anexo I, en el apartado correspondiente a la unidad didáctica 15. 16. UD16: PROYECTO INTEGRADOR 1. Introducción. 1.1. Temporalización: 40 horas (20 sesiones de 2 horas) 1.2. Contextualización: 1.2.1. Evaluación: tercera 1.2.2. Bloque: Proyecto (Bloque VII) 1.3. Contenidos teóricos, prácticos, teórico-prácticos: Procedimental 1.4. Conocimientos básicos del alumno para la unidad: Los estudiados durante todo el curso. Página 270 de 271 Programación en lenguajes estructurados Anexos 2. Objetivos. Los descritos en la programación, en la unidad didáctica correspondiente. 3. Contenidos. 3.1. Contenidos conceptuales: Los descritos en la programación, en la unidad didáctica correspondiente. 3.2. Contenidos procedimentales: Los descritos en la programación, en la unidad didáctica correspondiente. 3.3. Contenidos actitudinales: Los descritos en la programación, en la unidad didáctica correspondiente. 4. Metodología: La expuesta en la programación. 5. Criterios de evaluación. Los descritos en la programación, en la unidad didáctica correspondiente. 6. Actividades de enseñanza-aprendizaje a desarrollar: El proyecto desarrollado en el Anexo I en el apartado correspondiente a esta unidad didáctica. Página 271 de 271