Ejercicio 1: Estructuras estáticas

Tutoriales de Programaciones

Comenzaremos con una clase que se llama cj_enteros. Esta clase está definida como un conjunto de enteros los cuales tienes diferentes métodos entre ellos la union, intersección y la resta de conjuntos. A continuación mostraré la idea que quiero que entengáis del ejercicio.

Requisitos

  1. Linux
  2. Conocimientos básicos de estructuras lineales como arrays, etc.

Breve ilustración

Dado dos conjuntos A y B la unión es la figura 1, la resta figura 2 y la interseccion la figura 3.

Código a implementar

  //Tamaño máximo
  static const int MAXSIZE = 20;
  //Constructora por defecto, crea un conjunto vacio
  cj_enteros();
 //Inserta el elemento e en el conjunto. Si el elemento ya está no se hace nada.
  void inserta(int e);
  //Union, interseccion y resta de conjuntos, se modifica el conjunto original no el que se pasa    //por argumento, que es una constante!!!
  void unir(const cj_enters& B); 
  void intersectar(const cj_enters& B);
  void restar(const cj_enters& B);
//Lo mismo de antes pero esta vez lo guardamos en un objeto!!!
  cj_enters operator+(const cj_enteros& B) const;
  cj_enters operator*(const cj_enteros& B) const;
  cj_enters operator-(const cj_enteros& B) const;
//Miramos si e está en el conjunto
  bool contiene(int e) const;
//Elmento más grande y más pequeño del conjunto
  int maximo() const;
  int minimo() const;
//Numero de elemntos en el conjunto
  int card() const;
//Operadores comparadores si son iguales o diferentes.
  bool operator==(const cj_enteros& B) const;
  bool operator!=(const cj_enteros& B) const;
//Imprime el conjunto
  void print(ostream& os) const;

Ejercicio propuesto

Dada la especificación incluida en el fichero adjuntado al final del artículo "cj_enteros.hpp" hacer la implementación de las funciones y crear las variables y métodos que necesites para la clase en la parte privada del cj_enteros.hpp. RECORDAR, las implementaciones de las funciones declaradas se ponen en un fichero .cpp.

Comprovar funciones

Una vez hecho el código lo más normal es comprovar lo que hemos hecho. Para ello debes de crear un fichero aparte del tipo .cpp donde incluirias el main y harias los includes necesarios y las llamadas necesarias para comprovar las funciones. Ejemplo:

//Aqui irian los includes.
 
int main(){ 
   cj_enteros a1;
   a1.inserta(2);
   a1.inserta(4);
   a1.inserta(6);
}

Makefile

Dado que no me gusta estar todo el rato escribiendo el código lo mejor será crear un makefile, que lo que hace es mediante el comando:

make

Te busca el fichero makefile en la carpeta actual y te lo ejecuta mostrando lo que hace, ejemplo:

all: pruebas
 
pruebas: cj_enteros.hpp cj_enteros.cpp prueba.cpp
 
	 g++ -Wall -ansi -c cj_enteros.cpp
	 g++ -Wall -ansi -c prueba.cpp
	 g++ -o ejec1 cj_enteros.o prueba.o

RECORDATORIO: El fichero fuente cj_enteros.cpp no tiene definido el main (por cuestiones de jararquia y evitar errores es mejor) con lo cual el fichero adicional que creeis para hacer las pruebas debe incluir todo lo necesario como includes, main, etc. A la hora de compilar es lo mismo, pero la diferencia, es que ahora hay que linkear o relacionar el fichero de implementaciones con el de pruebas para que funcione, el comando es el ultimo que he puesto en el makefile anterior:

 g++ -o ejec1 cj_enteros.o prueba.o
 
//Genera un archivo ejecutable con los 2 ejecutables, uno de las funciones y otro de las comprovaciones de las funciones.

Comprovar las salidas

Una vez hecho las comprovaciones de las funciones lo siguiente seria generar un redireccionamiento de la salida a un archivo de texto.

./prueba.o > salida.txt

Te generará un archivo salida.txt con la salida que tu verías en la shell.

Una vez hecho esto procederiamos a comprovar con el fichero que proporciono en los adjuntos.

diff salidatuya salidabuena

Si no salta ningún error, enhorabuena, has pasado la prueba, muestra una pantalla de tu shell compartiendo tu alegria. En caso contrario tendrias que analizar en que fallas.

Salida correcta (adjuntada en la descarga):

///////////////V E C T O R  A /////////////
vector A: [2 4 6]
numero de elementos en A: 3
maximo: 6
minimo: 2
///////////////V E C T O R  B /////////////
vector B: [1 3 5]
numero de elementos en B: 3
maximo: 5
minimo: 1
///// O P E R A C I O N E S //////
unión: [1 2 3 4 5 6]
intersectar: []
restar: [2 4 6]
Son iguales: 0
Son diferentes: <br />

Observaciones

Los conjuntos tienen que estar ordenados en orden ascendente. Fijaros en la salida que os he propuesto, como están impresos los conjuntos, etc.

Dicho esto, suerte a todos, y cualquier duda preguntar.

5
Tu voto: Ninguno Votos totales: 5 (11 votos)

Anuncios Google

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de recoco

Ejercicios

Hacer el ejercicio :)

No hace falta compartir código, tan sólo que a medida hagais el ejercicio pregunteis dudas, y si lográis hacer el ejercicio pues postear una captura de la consola de comandos mostrando los comandos que habeis hecho y el diff final sin errores.

Saludos


Image Hosted by ImageShack.us 

Imagen de ateno_3

Muy bueno tu manual sobre

Muy bueno tu manual sobre POO, yo aprendí ya hace tiempo, pero usé otro tipo de manual mucho más complejo, que al final viene a llegar a donde mismo. Gracias. 

PD: Por favor, 

ComproVar las salidas => ComproBar..

Programo en C, C++, C# y ASM ( Sintaxis INTEL y AT&T )

Proyectos:

- UnlockMii 5.0 ----> UnlockMii 5.1: ( EN CONSTRUCCION -> 2% )

- MiiOS ( EN CONSTRUCCION -> 0,01% )

El mejor antivirus ==> Avast!

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.