Código
#include <iostream> using namespace std ; class SecuenciaEnteros{ private: static const int TAMANIO = 50; long vector_privado[TAMANIO]; int total_utilizados; public: ...... }; class SecuenciaCaracteres{ private: static const int TAMANIO = 2e6; char vector_privado[TAMANIO]; int total_utilizados; } public: ............ FrecuenciaCaracter Moda(){ SecuenciaCaracteres procesados; FrecuenciaCaracter moda; char caracter_actual; SecuenciaEnteros conteo_frecuencia; bool encontrado; moda.frecuencia = 0; for (int i = 0 ; i < total_utilizados ; i++){ caracter_actual = vector_privado[i]; encontrado = false; for (int j = 0; j < procesados.TotalUtilizados() && !encontrado; j++){ if (caracter_actual == procesados.vector_privado[j]) encontrado = true; } if (! encontrado){ procesados.Aniade(caracter_actual); conteo_frecuencia = procesados.PosicionesOcurrencias(caracter_actual, i, procesados.total_utilizados); if (conteo_frecuencia.TotalUtilizados() > moda.frecuencia) { moda.frecuencia = conteo_frecuencia.TotalUtilizados(); moda.caracter = caracter_actual; } } } return moda; } SecuenciaEnteros PosicionesOcurrencias(char buscado, int izq, int der){ SecuenciaEnteros conteo_frecuencia; for (int k = izq ; k <= der ; k++) if (buscado == vector_privado[k]) conteo_frecuencia.Aniade(k); return conteo_frecuencia; } SecuenciaCaracteres Descodifica(){ SecuenciaCaracteres descodificado; bool anterior_es_blanco; int i, siguiente; i = 0; anterior_es_blanco = true; while (i < total_utilizados){ siguiente = i+1; if (vector_privado[i] != ' '){ if (anterior_es_blanco || (siguiente < total_utilizados && vector_privado[siguiente] == ' ')){ descodificado.Aniade(vector_privado[i]); } anterior_es_blanco = false; } else anterior_es_blanco = true; i = siguiente; return descodificado; } } }; int main(){ const char TERMINADOR = '#'; char caracter; SecuenciaCaracteres mi_moda; FrecuenciaCaracter moda; //Entrada de datos cout << "Moda." << "\nIntroduzca caracteres con terminador " << TERMINADOR << "\n"; caracter = cin.get(); while(caracter != TERMINADOR && mi_moda.TotalUtilizados() < mi_moda.Capacidad()){ mi_moda.Aniade(caracter); caracter = cin.get(); } moda = mi_moda.Moda(); cout << "\nModa: " << "<" << moda.caracter << ">" << "\nFrecuencia: " << moda.frecuencia; }
He cortado un poco el código para que no sea tan largo ya que cada clase tiene multitud de métodos que no vienen al caso ahora. Comento un poco el objetivo del programa para que sepais por donde van los tiros más o menos. La idea es ir introduciendo caracteres en un vector creando un objeto de la clase SecuenciaCaracteres y que el método Moda() te calcule el caracter más repetido y su número de repeticiones.
*Nota: El ejercicio tiene que hacerse de la forma planteada, ya que anteriormente ya he tenido que hacerlo de formas alternativas.
Por cierto, si podeis echarle un vistazo también al método Descodifica os lo agradecería, porque también me ha dado problemas en otro de los ejercicios.