Cpp/Exámenes Resultos (Extraordinaria)/Septiembre2016_2/GrupoChat.cpp
2019-06-20 12:55:38 +02:00

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ú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;
}