Classe conjunt d’enters

Cal implementar la següent classe cj_enterscj\_enters que ens permet representar i manipular conjunts d’enters (no importa l’ordre dels enters i no poden haver-hi enters repetits):

#include <iostream>
using namespace std;

class cj_enters {

public:

  // Constructora per defecte. Crea un conjunt buit.
  cj_enters();

  // Les tres grans: Constructora per còpia, destructora, operador d'assignació
  cj_enters(const cj_enters &cj);
  ~cj_enters();
  cj_enters& operator=(const cj_enters &cj);

  // Insereix l’enter e en el conjunt. Si e ja pertanyia al conjunt, el mètode no fa res.
  void insereix(int e);

  // Unió, intersecció i diferència de conjunts. Operen modificant el conjunt sobre el que
  // s’aplica el mètode, usant el segon conjunt com argument. P.e.: a.restar(b) fa que el
  // nou valor d’a sigui A - B, on A i B són els valors originals dels objectes a i b.
  void unir(const cj_enters& B);
  void intersectar(const cj_enters& B);
  void restar(const cj_enters& B);

  // Unió, intersecció i diferència de conjunts. Operen creant un nou conjunt sense
  // modificar el conjunt sobre el que s’aplica el mètode. La suma de conjunts
  // correspon a la unió, la resta a la diferència i el producte a la intersecció.
  cj_enters operator+(const cj_enters& B) const;
  cj_enters operator*(const cj_enters& B) const;
  cj_enters operator-(const cj_enters& B) const;

  // Retorna cert si i només si e pertany al conjunt.
  bool conte(int e) const;

  // Retornen els elements màxim i mínim del conjunt, respectivament.
  // El seu comportament no està definit si el conjunt és buit.
  int max() const;
  int min() const;

  // Retorna el nombre d’elements (la cardinalitat) del conjunt.
  int card() const;

  // Operadors relacionals. == retorna cert si i només si els dos conjunts
  // (el paràmetre implícit i B) contenen els mateixos elements;
  // != retorna cert si i només si els conjunts són diferents.
  bool operator==(const cj_enters& B) const;
  bool operator!=(const cj_enters& B) const;

  // Imprimeix el conjunt d’enters, ordenats en ordre ascendent, sobre
  // el canal de sortida os; el format és [e1 e2 ... en], és a dir, amb
  // espais entre els elements i tancant la seqüència amb corxets.
  void print(ostream& os) const;

private:
    // Cal definir els atributs i mètodes privats dins del fitxer .rep 
    #include "cj_enters.rep"
};

Bàsicament el que cal fer és:

  1. Trobar una representació adequada pels objectes de la classe i escriure els atributs necessaris en la part privateprivate de la classe (dins del fitxer cj_enters.repcj\_enters.rep). També es poden especificar mètodes privats addicionals.

  2. Implementar tots els mètodes de la classe els quals manipularan la representació anterior dins del fitxer cj_enters.cppcj\_enters.cpp.

Cal enviar la solució (els fitxers cj_enters.repcj\_enters.rep i cj_enters.cppcj\_enters.cpp) comprimida en un sol fitxer .tar.tar

Per testejar la classe disposeu d’un programa principal que processa blocs que contenen dos conjunts AA i BB i vàries comandes que els manipulen.

Entrada

L’entrada conté varis blocs separats per línies amb 10 guions (———–). Cada bloc consisteix en dues seqüències d’enters, una per línia, cadascuna d’elles són els elements que tindran originalment el conjunt AA i el conjunt BB. A continuació segueixen vàries comandes, una per línea, amb el següent format:

On cjt1 i cjt2 poden ser ’A’ o ’B’.

Sortida

Per a cada línia d’entrada, escriu una línia amb el resultat:

Observació

Aquest problema proporciona la definició pública de la classe cj_enterscj\_enters dins del fitxer cj_enters.hppcj\_enters.hpp, el programa principal main.cppmain.cpp i un fitxer MakefileMakefile per facilitar la compilació.

Per implementar el conjunt no es poden usar les classes stackstack, queuequeue, listlist o setset de la STL.

Pots fer un parell de versions, una implementada amb memòria estàtica (usant per exemple arrays de C++) i una altra implementada amb memòria dinàmica. Si la versió amb memòria estàtica té un límit en el màxim nombre d’element d’un conjunt, segurament no passarà els jocs de prova privats on hi ha casos amb conjunts molt grans.

Si els mètodes d’unir, intersectar, restar, igualtat i diferència no es programen de forma eficient (cost lineal) tampoc passaran els jocs de prova privats degut a un excés de temps d’execució.

Informació del problema

Autoria: Jordi Esteve

Generació: 2026-01-25T21:20:29.445Z

© Jutge.org, 2006–2026.
https://jutge.org