elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema al ejecutar este código
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema al ejecutar este código  (Leído 1,673 veces)
TheFlash

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Problema al ejecutar este código
« en: 3 Enero 2017, 14:07 pm »

Espero que me podais echar una manilla porque por más que lo reviso no se donde puede estar el fallo ya que el código compila perfectamente, el problema está en que cuando lo ejecuto me salta una ventana emergente que dice que el programa dejó de funcionar. Mi hipótesis es que el fallo está en que el programa intenta acceder a una dirección de memoria a la que no tiene acceso por lo que el sistema operativo aborta automáticamente la ejecución del programa, pero como he dicho no se donde puede estar el fallo.

Código
  1. #include <iostream>
  2. using namespace std ;
  3. class SecuenciaEnteros{
  4. private:
  5.   static const int TAMANIO = 50;
  6.   long vector_privado[TAMANIO];
  7.   int total_utilizados;
  8. public:
  9.      ......
  10. };
  11. class SecuenciaCaracteres{
  12. private:
  13.   static const int TAMANIO = 2e6;
  14.   char vector_privado[TAMANIO];
  15.   int total_utilizados;
  16.   }
  17.  
  18. public:
  19.     ............
  20.  
  21. FrecuenciaCaracter Moda(){
  22.  
  23.      SecuenciaCaracteres procesados;
  24.      FrecuenciaCaracter moda;
  25.      char caracter_actual;
  26. SecuenciaEnteros conteo_frecuencia;
  27.      bool encontrado;
  28.  
  29.      moda.frecuencia = 0;
  30.  
  31.      for (int i = 0 ; i < total_utilizados ; i++){
  32.         caracter_actual = vector_privado[i];
  33.         encontrado = false;
  34.  
  35.         for (int j = 0; j < procesados.TotalUtilizados() && !encontrado; j++){
  36.            if (caracter_actual == procesados.vector_privado[j])
  37.               encontrado = true;
  38.         }
  39.  
  40.         if (! encontrado){
  41.            procesados.Aniade(caracter_actual);
  42.            conteo_frecuencia = procesados.PosicionesOcurrencias(caracter_actual, i, procesados.total_utilizados);
  43.  
  44.            if (conteo_frecuencia.TotalUtilizados() > moda.frecuencia) {
  45.               moda.frecuencia = conteo_frecuencia.TotalUtilizados();
  46.               moda.caracter   = caracter_actual;
  47.            }
  48.         }
  49.      }
  50.  
  51.      return moda;
  52. }
  53.  
  54.   SecuenciaEnteros PosicionesOcurrencias(char buscado, int izq, int der){
  55.      SecuenciaEnteros conteo_frecuencia;
  56.  
  57.      for (int k = izq ; k <= der ; k++)
  58.               if (buscado == vector_privado[k])
  59.                  conteo_frecuencia.Aniade(k);
  60.  
  61.      return conteo_frecuencia;
  62.   }
  63. SecuenciaCaracteres Descodifica(){
  64. SecuenciaCaracteres descodificado;
  65. bool anterior_es_blanco;
  66. int i, siguiente;
  67.  
  68.   i = 0;
  69.   anterior_es_blanco = true;
  70.  
  71.   while (i < total_utilizados){
  72.      siguiente = i+1;
  73.  
  74.      if (vector_privado[i] != ' '){
  75.         if (anterior_es_blanco ||
  76.            (siguiente < total_utilizados && vector_privado[siguiente] == ' ')){
  77.  
  78.            descodificado.Aniade(vector_privado[i]);
  79.         }
  80.  
  81.         anterior_es_blanco = false;
  82.      }
  83.      else
  84.         anterior_es_blanco = true;
  85.  
  86.      i = siguiente;
  87.  
  88.   return descodificado;
  89.   }
  90.   }
  91. };
  92. int main(){
  93.   const char TERMINADOR = '#';
  94.   char caracter;
  95.   SecuenciaCaracteres mi_moda;
  96.   FrecuenciaCaracter moda;
  97.  
  98.   //Entrada de datos
  99.   cout << "Moda."
  100.        << "\nIntroduzca caracteres con terminador " << TERMINADOR << "\n";
  101.   caracter = cin.get();
  102.   while(caracter != TERMINADOR && mi_moda.TotalUtilizados() < mi_moda.Capacidad()){
  103.   mi_moda.Aniade(caracter);
  104.   caracter = cin.get();
  105.   }
  106.  
  107.   moda = mi_moda.Moda();
  108.  
  109.  
  110. cout << "\nModa:       " << "<" << moda.caracter << ">"
  111.        << "\nFrecuencia: " << moda.frecuencia;
  112. }

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.


« Última modificación: 3 Enero 2017, 15:25 pm por TheFlash » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines