76 lines
2.0 KiB
C++
76 lines
2.0 KiB
C++
|
#include "GruposChat.h"
|
|||
|
using namespace std;
|
|||
|
|
|||
|
void nuevo(tGrupoChat& grupo) {
|
|||
|
grupo.cont = 0;
|
|||
|
grupo.elemento = new tElemento[grupo.capacidad];
|
|||
|
}
|
|||
|
|
|||
|
void insertar(tGrupoChat& grupo, tElemento& element) {
|
|||
|
int ini = 0, fin = grupo.cont - 1, pos = 0;
|
|||
|
|
|||
|
if ((grupo.cont < grupo.capacidad) && (!buscar(grupo, element.puntero->id, ini, fin, pos))) {
|
|||
|
for (int i = grupo.cont; i > pos; i--){
|
|||
|
grupo.elemento[i] = grupo.elemento[i - 1];
|
|||
|
}
|
|||
|
grupo.elemento[pos] = element;
|
|||
|
grupo.cont++;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
bool buscar(tGrupoChat& grupo, std::string& id, int& ini, int& fin, int& pos) {
|
|||
|
bool encontrado = false;
|
|||
|
|
|||
|
if (ini <= fin) {
|
|||
|
pos = (ini + fin) / 2;
|
|||
|
if (id < grupo.elemento[pos].puntero->id) {
|
|||
|
fin = pos - 1;
|
|||
|
encontrado = buscar(grupo, id, ini, fin, pos);
|
|||
|
}
|
|||
|
else if (grupo.elemento[pos].puntero->id < id) {
|
|||
|
ini = pos + 1;
|
|||
|
encontrado = buscar(grupo, id, ini, fin, pos);
|
|||
|
}
|
|||
|
else {
|
|||
|
encontrado = true;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return encontrado;
|
|||
|
}
|
|||
|
|
|||
|
void mostrar(tGrupoChat& grupo) {
|
|||
|
int totalMensajes = 0;
|
|||
|
|
|||
|
cout << setfill(char('-')) << setw(50) << "\n" << setfill(char(0));
|
|||
|
cout << "Grupo de chat: " << grupo.nombreGrupo << endl;
|
|||
|
cout << setfill(char('-')) << setw(50) << "\n" << setfill(char(0));
|
|||
|
for (int i = 0; i < grupo.cont; i++) {
|
|||
|
mostrar(*grupo.elemento[i].puntero);
|
|||
|
cout << right << setw(20) << "N<EFBFBD>mero de mensajes: " << grupo.elemento[i].numMensajes << endl;
|
|||
|
totalMensajes += grupo.elemento[i].numMensajes;
|
|||
|
}
|
|||
|
cout << endl << "TOTAL MENSAJES: " << totalMensajes << endl;
|
|||
|
}
|
|||
|
|
|||
|
void combinar(tGrupoChat& grupoA, tGrupoChat& grupoB, tGrupoChat& grupoC) {
|
|||
|
int contAUX = grupoA.cont + grupoB.cont;
|
|||
|
|
|||
|
grupoC.capacidad = grupoA.capacidad + grupoB.capacidad;
|
|||
|
grupoC.nombreGrupo = grupoA.nombreGrupo + " y " + grupoB.nombreGrupo;
|
|||
|
nuevo(grupoC);
|
|||
|
for (int i = 0; i < contAUX; i++){
|
|||
|
if (i < grupoA.capacidad) {
|
|||
|
insertar(grupoC, grupoA.elemento[i]);
|
|||
|
}
|
|||
|
if (i < grupoB.cont) {
|
|||
|
insertar(grupoC, grupoB.elemento[i]);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
void destruir(tGrupoChat& grupo) {
|
|||
|
|
|||
|
delete[] grupo.elemento;
|
|||
|
}
|