Escuela Politécnica Superior de Elche Ingeniería Industrial EXAMEN PRÁCTICO DE INFORMÁTICA APLICADA Junio de 2007 Realice un programa en Dev C++ 5.0, con las siguientes especificaciones: Se debe implementar la clase CMatriz que permite manejar matrices complejas. Una matriz compleja tiene como elementos números complejos. Se utilizará gestión dinámica de memoria para el almacenamiento de los datos de la matriz. Para almacenar los datos se utiliza un puntero de tipo CComplejo ** (la clase Ccomplejo se proporciona incompleta al alumno). La definición de la clase CMatriz se da a continuación: // Definición de constantes #include "..\inc\Complejo.h" // Definición de macros #define TAM_DEF 2 // Definición de tipos de datos y clases class CMatriz { private: int fil; int col; CComplejo **mat; public: CMatriz(int fil=TAM_DEF, int col=TAM_DEF); CMatriz(CMatriz &orig); //constructor copia ~CMatriz(void); CMatriz operator + (CMatriz &der); CMatriz operator - (CMatriz &der); CMatriz operator * (CMatriz &der); CMatriz& operator = (const CMatriz &der); void Visualizar(void); // visualiza void IntroducirValores(void); los datos de la matriz }; // fin de la clase CMatriz La definición de la clase CComplejo se da a continuación: // Definición de tipos de datos y clases class CComplejo { private: float real; // parte real float imag; // parte imaginaria Examen IA. Junio 2007 Escuela Politécnica Superior de Elche Ingeniería Industrial public: CComplejo(void); // constructor por defecto CComplejo(float num_real, float num_imag = 0.0); // constructor a partir de dos reales CComplejo(const CComplejo &compl_orig); // constructor copia ~CComplejo(void); // destructor void AsignarReal(float num_real); void AsignarImag(float num_imag); void Visualizar(void); void IntroducirValores(void); // Asigna la parte real // Asigna la parte imaginaria // Muestra en pantalla el número complejo CComplejo& operator = (const CComplejo & compl_orig); CComplejo operator + (const CComplejo &a); CComplejo operator - (const CComplejo &a); CComplejo operator * (const CComplejo &a); // fin de la clase CComplejo }; // operador asignación Note el alumno que, en este caso, la clase CMatriz tiene un dato de la clase llamado mat, de tipo CComplejo**. Este puntero se utilizará para reservar la memoria necesaria para una matriz de números complejos. Se proporciona al alumno parte del código de la clase CComplejo y de la clase CMatriz, debiéndose completar los métodos que se indican. INSTRUCCIONES PARA LA REALIZACIÓN DEL EJERCICIO: Descargad los siguientes ficheros desde la web de la asignatura, para ello escribid la siguiente ruta en el navegador: isa.umh.es/asignaturas/ia/exIA_0607/fich.zip Cread un directorio en vuestro PC, con el nombre y apellidos del alumno: T:\NombreApellidos Descomprimid el fichero anterior en el directorio. Se deberá encontrar la estructura típica de directorios utilizada en las prácticas. El fichero examenIA.dev es un fichero de proyecto de Dev C++ donde se han incluído los ficheros necesarios para hacer el examen. En el encabezado de cada fichero escribid vuestro nombre completo. Una vez terminado el ejercicio debéis esperar con el PC encendido a que el profesor responsable guarde los ficheros en una unidad USB. REALICE LAS SIGUIENTE TAREAS Examen IA. Junio 2007 Escuela Politécnica Superior de Elche Ingeniería Industrial 1) Escriba el método IntroducirValores de la clase CComplejo. Deberá recoger un número complejo por teclado y almacenar su parte real e imaginaria (fichero complejo.cpp). void CComplejo::IntroducirValores(void) { ... } (1.0 punto) 2) Escriba el método Visualizar de la clase CComplejo. Deberá mostrar un número complejo por pantalla. Ejemplos de visualización: 1+1i 1-1i (y no 1+-1i) 6 (y no 6+0i) 5i (y no 0+5i) void CComplejo::Visualizar(void) { ... } (1.0 punto) 3) Escriba el código del constructor de la clase CMatriz, con número de filas y columnas. Deberá liberar la memoria necesaria para una matriz de elementos de la clase CComplejo. CMatriz::CMatriz(int filas, int columnas) { ... } (1.0 punto) Escriba el código del constructor copia de la clase CMatriz. Debe crear un nuevo objeto que sea idéntico a orig. CMatriz::CMatriz(CMatriz& orig) { ... } 4) (1.0 punto) Escriba el destructor de la clase CMatriz. Deberá liberar la memoria asignada en el constructor. CMatriz::~CMatriz() { ... } 5) (1.0 punto) Escriba el método Visualizar de la clase CMatriz. Deberá mostrar por pantalla los elementos de la matriz arreglados en filas y columnas. Para visualizar cada uno de los elementos de la matriz, la función deberá llamar al método Visualizar de la clase CComplejo. void CMatriz::Visualizar() { ... } 6) Examen IA. Junio 2007 Escuela Politécnica Superior de Elche Ingeniería Industrial (1.0 punto) Escriba el método IntroducirValores de la clase CMatriz. Deberá pedir por teclado los elementos de la matriz. Para cada uno de los elementos de la matriz, la función deberá llamar al método IntroducirValores de la clase CComplejo. void CMatriz::IntroducirValores() { ... } 7) (1.0 punto) 8) Realice la sobrecarga del operador + para objetos de la clase CMatriz. Deberá sumar dos matrices complejas y devolver el resultado. CMatriz CMatriz::operator + (CMatriz &der) { CMatriz suma(*this); ... return suma; } (1.0 punto) Realice la sobrecarga del operador - para objetos de la clase CMatriz. Deberá restar dos matrices complejas y devolver el resultado. CMatriz CMatriz::operator - (CMatriz &der) { CMatriz resta(*this); 9) ... return resta; } (1.0 punto) 10) Realice la sobrecarga del operador = para objetos de la clase CMatriz. Deberá asignar una matriz compleja a otra. CMatriz& CMatriz::operator = (const CMatriz &der) { ... return (*this); } (1.0 punto) Finalmente se deberá comprobar el funcionamiento del código escrito utilizando la función main que se proporciona en el fichero MainCMatriz.cpp. El programa crea 3 matrices y pide por teclado sus elementos. A continuación realiza la suma y la resta de las dos matrices complejas y muestra por pantalla los resultados. Examen IA. Junio 2007