Bloque práctico 1: C++



Documentos relacionados
Bloque práctico 2: Java

Fundamentos de Programción (I)

Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C++ Sesión 2

Clase adicional 2. Estructuras básicas de control. Temas

Prof. Dr. Paul Bustamante

Introducción a C++ y Code::Blocks

Programación 2. Grado en Estadística Aplicada. Curso Generación de números pseudoaleatorios. Manejo de ficheros de texto.

PRÁCTICA 4. EL ENTORNO DE UN ROBOT EN C++

CLAVE ASIGNATURA REQUISITOS HORA/SEMANA CREDITOS TI-8 PROGRAMACION II 80% DE ASISTENCIA 4 6

EJERCICIOS DE PROGRAMACIÓN EN C. DIBUJAR UN ROMBO O DIAMANTE. CALCULAR SUMATORIOS. (CU00542F)

INDICE Capitulo 1. El Turbo C++ y el Lenguaje C Capitulo 2. Declaración e inicialización de variables Capitulo 3. Funciones de entrada y salida

FUNDAMENTOS DE INFORMÁTICA

Relación de prácticas de la asignatura METODOLOGÍA DE LA PROGRAMACIÓN Segundo Cuatrimestre Curso º Grado en Informática

Sistemas Operativos I

Escuela Politécnica Superior de Elche

Tema 3. Programación orientada a objetos en Java (Parte 1)

La sintaxis básica para definir una clase es la que a continuación se muestra:

Prof. Dr. Paul Bustamante

APLICACIÓN DE ÁRBOLES BINARIOS

Relación de prácticas de la asignatura METODOLOGÍA DE LA PROGRAMACIÓN Segundo Cuatrimestre Curso º Grado en Informática

Capítulo 11 INTRODUCCIÓN A LA CODIFICACIÓN EN C. Presentación resumen del libro: "EMPEZAR DE CERO A PROGRAMAR EN lenguaje C"

Práctica 1: Introducción a SPSS 1

Estructuras de control y DFDs

TIPOS DE BUCLES O CICLOS DE REPETICIÓN EN PHP: WHILE, DO WHILE Y FOR. EJEMPLOS Y EJERCICIOS RESUELTOS. (CU00822B)

CURSO DE LENGUAJE C. 4.1 Conceptos básicos de funciones 4.2 Funciones que regresan valores no enteros 4.3 Variables externas 4.4 Reglas de alcance

Ejercicios 3A. 2. Implemente un programa que, dados los tres vértices de un triángulo, calcule el área del mismo. Puede aplicar la siguiente fórmula:

POO - Programación Orientada a Objetos

Introducción a OOP. Programación Orientada a Objeto

La herramienta ArtEM: Aritmética Entera y Modular

1.2. Es Java un lenguaje ideal para aprender a programar? 1.4. Cuáles son las versiones y distribuciones Java y cuál usar?

c) Explicar qué es un BreakPoint en Netbeans y para qué sirve. 0,5 punto

Práctica 1: Una primera aproximación a la programación de sistemas concurrentes y distribuidos en C++

Fundamentos de Programación y Bases de Datos

Programación I. Práctica parcial: el juego de los barquitos (ENTREGA OBLIGATORIA)

E/S POR CONSOLA DE C++ Parte I. Elementos Básicos Dr. Oldemar Rodríguez R.

GENERALIDADES DE DIBUJO TÉCNICO INTRODUCCIÓN AL DIBUJO TÉCNICO EN INGENIERIA

Escuela Politécnica Superior de Elche

Modulo 11. Clases y Objetos en Java

CAPÍTULO 1 INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS

Escuela Politécnica Superior de Elche

Tema: Clases y Objetos en C++. Parte II.

EDITOR DE TEXTO DE MOODLE

Ciencias de la Ingeniería

NETBEANS JAVA PROGRAMACIÓN ORIENTADA A OBJETOS

B.- Ejercicio de Herencia y Polimorfismo: FORMAS

En este término se han realizado mejoras en el sistema de Académico en Línea para facilitar su registro.

FUNDAMENTOS DE PROGRAMACIÓN Asignatura correspondiente al plan de estudios de la carrera de Ingeniería Informática

PRÁCTICA 6 REPASO TEMAS 1 Y 2

Objetivo N 2. Conocer la Estructura General de un Programa en C++ Estructura de Datos Prof. Egilde Márquez

Programación orientada a objetos

PROGRAMACION ORIENTADA A OBJETOS EN C++

Problemas de Recursividad

Indice del curso básico programación desde cero Visual Basic Nivel I (CU00302A)

Codificador Decodificador ISBN EAN13 (GTK2.0,GdkPixbuf,GDK & GCC)

EJEMPLO DE CÓDIGO JAVA BÁSICO. CREAR CLASES CON CAMPOS, CONSTRUCTOR Y MÉTODOS. LA PALABRA CLAVE THIS (CU00652B)

INGENIERÍA DE COMPUTADORES 3. Trabajo Práctico - Junio 2018

Introducción a las sentencias de control

roducción a la programación con el lenguaje C usando el entorno de trabajo Dev-C. Nociones básicas de programación

Unidad V. Ya veremos qué poner en "algunas_palabras" y "algo_más", por ahora sigamos un poco más.

IMPORTAR Y USAR CLASES DEL API DE JAVA. EJEMPLO CLASE MATH Y MÉTODO POW. CONSTRUCTORES PRIVADOS. (CU00647B)

Tema 6: Memoria dinámica

PROGRAMACIÓN ALGORITMOS y DIAGRAMAS

CICLO FORMATIVO: ELE 202 INSTALACIONES ELÉCTRICAS Y AUTOMÁTICAS MÓDULO: 0238 INSTALACIONES DOMÓTICAS. CURSO:

Introducción Programación Modular y a Métodos: Consideremos el siguiente ejercicio:

GUÍA DOCENTE DE INVESTIGACIÓN DE MERCADOS I

Tema 3 Constantes, Variables y Tipos

TEMA 7: Ficheros. TEMA 7: Ficheros Concepto de fichero

El fichero <X11/X.h> se incluye cuando se utiliza el <X11/Xlib.h>, por tanto, cuando este último sea incluido, el primero no es necesario hacerlo.

PROGRAMACIÓN ORIENTADA A OBJETOS

Práctica 1 Pasa la calculadora

DIRECCIÓN DE RRHH 1- DESCRIPCIÓN DE LA ASIGNATURA

Introducción a c++ Introducción a la programación EIS Informática III

6. Crea el procedimiento necesario para dibujar la siguiente figura: 7. Crea el procedimiento necesario para dibujar la siguiente figura:

Escuela Politécnica Superior de Elche

PROBLEMA 1. Rellena el hueco 1 (línea 23). Realiza la reserva de memoria para almacenar los n puntos.

Introducción a Java. Fernando Cerezal López. 24 Noviembre 2005

BOLETÍN DE PROBLEMAS 15: FACTORÍAS E ITERABLES Versión: 1.0.2

Lenguajes de programación LPSI EUI UPM CADENAS DE CARACTERES

Fundamentos de Informática

Sistemas Operativos I Manual de prácticas

Tipos de variables. Lenguaje C. Departamento de Electrónica. Tipos de datos, variables y constantes. Fundación San Valero

DaVinciTEXTIL. Codificación de artículos

GUIA DE COMPONENTE PRACTICO

Programación 1 Tema 3. Información, datos, operaciones y expresiones

Cursosindustriales. Curso de C / C++ Por Deimos_hack

Introducción a Mooshak y Primer Problema Modalidad: Problemas de Programación C

Estudio Temporal de Sistemas Continuos de 1 er y 2º Orden

PROYECTOS DINÁMICOS PARA EL APRENDIZAJE EN LOS PRIMEROS CURSOS DE LAS ENSEÑANZAS DE PROGRAMACIÓN INFORMÁTICA

Contenido. Página 2 de 8

Tema 3. Herencia. Programación Avanzada. Jorge Badenas

Polimorfismo. Métodos virtuales

UNAN LEÓN Departamento de Computación. Asignatura: ALGORITMO Y ESTRUCTURA DE DATOS MANEJO DE ARCHIVOS (FICHEROS) EN C

Introducción a la programación orientada a objetos

1 Introducción Programación en Windows Alcance del libro Instalación del CD-ROM 2 Conceptos y estructura del lenguaje Modelo de trabajo Ejecutables

Herencia y polimorfismo

INICIACIÓN A LA PROGRAMACIÓN LENGUAJE JAVA con BlueJ

Transcripción:

Bloque práctico 1: C++ 1: Programación modular, herencia simple y polimorfismo En esta práctica utilizaremos las capacidades de programación orientada a objetos, tanto básicas como avanzadas, de que dispone C++ El objetivo de la práctica es programar un lienzo y figuras que se puedan pintar utilizando herencia y polimorfismo 1) Programar un lienzo y figuras dibujables Un Lienzo es una matriz de puntos de imagen (píxels) de dos dimensiones al que se le pueden poner los píxels de un color determinado (un entero) Un lienzo se puede rellenar de un color, con lo que todos los píxels del lienzo tendrían dicho valor Un lienzo, finalmente, se puede mostrar por pantalla, traduciendo según el tipo de Lienzo el entero a una representación Se debe implementar, asimismo, una clase heredada de Lienzo (LienzoCaracter), cuya representación sea el entero interpretado como un carácter ASCII Para pintar en este Lienzo, vamos a construir unas figuras que sepan como pintarse en un lienzo, teniendo en cuenta que si el dibujo se sale de los límites del mismo no se pinten los píxeles que se salen del lienzo (es decir, si la figura se sale del lienzo, no da error, sólo visualiza la parte que cae dentro del mismo) Una figura contiene una posición de origen expresada por dos enteros que determinan la posición del eje x y el eje y Esta posición es una clase aparte contenida por la figura Una figura debe tener un método que devuelva una cadena de caracteres ( char * de C, no string de C++) con la descripción del tipo de figura y su contenido color Una figura tiene un color determinado por un entero Las figuras disponibles son: Punto: Posición y color Circulo: Centro (una posición), radio (entero) y color Linea : Posición inicial, posición final y color Bitmap : Posición inicial (esquina superior izquierda), ancho, alto,contenido y

Notas sobre los métodos de Dibujo de cada figura: Circulo y Linea deberán calcular la posición de los píxels en el lienzo usando funciones trigonométricas y el número PI (disponible en la biblioteca mathh) Ejemplo: dibujar un Circulo de radio 3 y color '#' ## ## Ejemplo: dibujar una Linea que vaya de la posición(0,0) a la posición(5,5) en color '' Bitmap se construye como una cadena que contiene unos ("1") en las posiciones que se quiere pintar y "0" en las no pintables (bitmap monocromo) Un ejemplo de bitmap de alto 3 y ancho tres es el siguiente: Contenido del bitmap: "001001001" Bitmap dibujado con el color '*': " * * *" donde " " serian pixels no dibujados y * el píxel dibujado en el color * Estas figuras deben contener en una superclase todas aquellas características que les sean comunes Finalmente, debe quedar compilada como una biblioteca estática, llamada LibFiguras, que se pueda enlazar a otros programas Por comodidad y para los ejemplos programados que siguen, cree un archivo de cabecera Libfigurashpp, que incluya todas las cabeceras creadas para los módulos de esta biblioteca

Compile y enlace el código siguiente en un proyecto diferente que utilice la librería creada Compruebe que su librería obtiene la salida deseada En caso contrario, modifique su librería para que funcione correctamente PruebaLibCpp int main(int argc, char *argv[]) { LienzoCaracter z(15,12); Posicion pos1(1,1),pos2(5,5),pos3(8,8); Punto p(pos1,'*'),p1(pos2,'+'); Circulo c(pos2,4,'^'); Linea l(pos1,pos3,''); char* contenido =strdup("001001001"); Bitmap b(posicion(2,2),contenido,3,3,'@'); zrellenar(' '); // Pinta dos puntos, un bitmap ppintar(&z); // y un circulo de radio 4 p1pintar(&z); bpintar(&z); cpintar(&z); zmostrar(); cout << pdescripcion()<< "\n"; cout << bdescripcion()<< "\n"; system("pause"); //Limpia el lienzo zrellenar(); //Dibuja un circulo y una linea csetradio(5); //cambio radio csetpos(pos3);//cambio posicion cpintar(&z); lpintar(&z); zmostrar(); cout << cdescripcion()<< "\n"; cout << ldescripcion()<< "\n"; system("pause"); csetcolor('#'); zrellenar(); csetradio(3); cpintar(&z); zmostrar(); //Ejemplo del circulo system("pause"); //Ejemplo de la Linea lsetcolor(''); zrellenar(); lpintar(&z); zmostrar(); system("pause"); } // Ejemplo de Polimorfismo Figura *f; Lienzo *li; f = &l; li = &z; f->pintar(li); li->mostrar(); system("pause"); return EXIT_SUCCESS;

Salida Esperada * ^^^^^ ^^@ ^^ ^^ @ ^^ ^ @ ^ ^ + ^ ^ ^ ^^ ^^ ^^ ^^ ^^^^^ Punto:(1,1), color:42 Bitmap:(2,2), color:64, contenido:001001001 Presione una tecla para continuar ^^^^^ ^^ ^^ ^ ^^ ^ ^ ^ ^^ ^ ^^^ ^^ ^^^^^ Circulo:(8,8):5, color:94 Linea:(1,1),(8,8), color:46 Presione una tecla para continuar ## ## Presione una tecla para continuar Presione una tecla para continuar Nota: Se han eliminado algunos saltos de línea antes de cada "presione" para que quepa el ejemplo

2) Conseguir que Figura y Lienzo muestren un comportamiento polimórfico dinámico: polimorfismo Realizar un programa de prueba, que cree figuras de varios tipos y las meta en un array de referencias Recorrer posteriormente el array con un bucle llamando al método pintar (por ejemplo si el array se llama tabla, tabla[i]->pintar(l), siendo Lienzo *l) Tanto Lienzo como Figura deben mostrar un comportamiento polimórfico Todos aquellos métodos en Lienzo y Figura que sean comunes a las subclases deben tener un comportamiento polimórfico Completa el programa llamando a cada uno de estos métodos de la misma forma que el programa solicitado usando pintar(lienzo *l) 3) Hacer que Figura y Lienzo sean clases abstractas Consideramos que en nuestro sistema, un Lienzo y una Figura no se deben poder instanciar como objetos Realice las modificaciones necesarias para que el compilador restrinja la instanciación de la clase Lienzo y Figura Realice un programa de prueba que instancie la clase Figura y compruebe que el compilador da un error Si eliminamos la posibilidad de crear objetos de la clase Figura, es esto equivalente a quitar la clase de nuestro diseño? (responda a estas preguntas en comentarios en el propio programa de prueba) 4) Destructores Queremos que todas nuestras clases tengan un destructor que muestre por pantalla el mensaje: DESTRUCTOR: <NombreDeClase>[ <descripción del objeto>] Es decir: la palabra DESTRUCTOR seguida del nombre de la clase a la que pertenece el objeto que se está destruyendo y, en caso de que la clase sea una figura concreta, de la descripción del objeto que se destruye En caso de ser necesario, el destructor deberá liberar la memoria que se ha reservado para el objeto ( Ojo con las cadenas dinámicas!) Haremos que estos mensajes se muestren por pantalla en base a una constante definida con el precompilador: #define DEPURACION #ifdef DEPURACION Código para mostrar el mensaje #endif

De modo que, si no se define la constante, la biblioteca de clases LibFiguras no muestre mensajes cuando se ejecuten los destructores Realice un programa de prueba que genere un lienzo y una figura de cada clase y que posteriormente los borre (delete) Deberá mostrar los mensajes indicados por cada clase Instrucciones de Entrega La práctica deberá dejarse comprimida con winrar con el nombre: Practica1_1_xxxrar en la cuenta de usuario donde xxx es el código de usuario asociado La práctica deberá contener dos directorios (LibFiguras y PruebaFiguras), en LibFiguras estarán todas las clases de la librería, con un fichero hpp y cpp por cada clase y un proyecto denominado Libfiguras para la generación de la librería estática En el otro directorio estarán todas las pruebas a realizar sobre la librería en cpp independientes con el numero del apartado que prueban: libpru_1,libpru_2,etc Las fechas de entrega serán desde el 13 al 25 de Noviembre, siendo necesario defenderlas en clase de la siguiente forma: - Dejar el fichero comprimido en la cuenta - En el ordenador del profesor probar todos los ficheros de prueba - Si funcionan adecuadamente se revisarán las librerías y programas de prueba - En caso de encontrarse errores se permitirá la reentrega dentro de fecha - En caso de errores graves no se considera apta Si la entrega final tiene errores leves, la calificación podrá ser del 50% ó 75% de la parte que le corresponda a la práctica Esta nota será validada cuando se realice el examen de modificación hasta entonces la nota no será definitiva Es necesario superar todas las prácticas y haber asistido a un 70% de las clases para tener apta la parte práctica de la asignatura, en caso contrario se puede optar por examen final práctico