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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Error al pasar un vector de una funcion a otra
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Error al pasar un vector de una funcion a otra  (Leído 1,749 veces)
loadenro

Desconectado Desconectado

Mensajes: 16


Ver Perfil
Error al pasar un vector de una funcion a otra
« en: 28 Mayo 2014, 17:05 pm »

Tengo dos funciones, en la primera construyo dos vectores, uno de ellos lo declaro en una estructura y lo nombro elementos,
Código:
struct temporales
{std::vector<float> c; //guarda la suma de frecuencias
std::vector<int> cc;//guarda cuantos simbolos suman cada frecuencia
std::vector<float> d;
std::vector<int> elementos;
int XXX;
int numcol;//numero de columna en dic
int numfil;//numero de fila en dic
std::vector<int> posiciones;// nos dice cual fue la posicion del simbolo que salio
int contiteraciones;//numero de iteraciones, se guarda en numerobits
std::vector<float> finalfrecuencias; //las frecuencias pasan a este vector cuando ya se obtiene el codigo para el respectivo simbolo
int tamanovectord;
}paquete;

la funcion en la cual lo construyo es la siguiente:
Código:
void funcionprincipal(datos &prioritarios, temporales &secundarios)
{if (secundarios.XXX>0) //para q copie d en c despues de la primera iteración
      {
                      secundarios.tamanovectord=secundarios.d.size();
                  secundarios.c.clear();
                  secundarios.cc.clear();
                  for(int iii=0;iii<secundarios.elementos.size();iii++)
                    {cout<<"\n d["<<iii<<"]="<<secundarios.d[iii];
                    cout<<"\n elementos["<<iii<<"]="<<secundarios.elementos[iii];}
                  for (int i=0;i<secundarios.tamanovectord;i++)
                  { secundarios.c.push_back(secundarios.d[i]); //copio d en c
                  secundarios.cc[i]=secundarios.elementos[i];// copio elementos en cc
                 
                  }           
      }  secundarios.tamanovectord=secundarios.d.size();

                    secundarios.XXX++;
                    secundarios.d.clear();
                    secundarios.elementos.clear();
                    for(int iii=0;iii<secundarios.c.size();iii++)
                    {cout<<"\n c["<<iii<<"]="<<secundarios.c[iii];
                    cout<<"\n cc["<<iii<<"]="<<secundarios.cc[iii];}
                   
int t=0;
int v=0;
int w=0;

int u=0;

for (;;)//en este ciclo se cambia de columna en el vector c
{
    float valortomadoc=secundarios.c[w];
    u=0;
        if (secundarios.cc[w]>1)//necesitamos mas de un simbolo para dividir el valor guardado en c[w]
                    {float sumaparcial=0;
                    while (sumaparcial<=valortomadoc/2)//operacion principal de shannon-fano, ir dividiendo en la mitad las frecuencias
                    {sumaparcial=sumaparcial+prioritarios.frecuencias[v];
           u=u+1;
                 v=v+1;
           }
              if (u>1) //quito una para q qde siempre por debajo de la mitad o en la mitad
              {
                           sumaparcial=sumaparcial-prioritarios.frecuencias[v-1];
                           u=u-1;
                          }
secundarios.d.push_back(sumaparcial);
secundarios.elementos.push_back(u);
secundarios.d.push_back(secundarios.c[w]-secundarios.d[t]);
secundarios.elementos.push_back(secundarios.cc[w]-secundarios.elementos[t]);
for(int iii=0;iii<secundarios.elementos.size();iii++)
                    {cout<<"\n d["<<iii<<"]="<<secundarios.d[iii];
                    cout<<"\n elementos["<<iii<<"]="<<secundarios.elementos[iii];}
v=0;
                for (int i=0;i<secundarios.d.size();i++)
{v=v+secundarios.elementos[i];
}
t=t+2;
w=w+1;
        if (w+1>secundarios.tamanovectord)
      {         
        break;
        }
}// termina if para armar d
else {w=w+1;}
}//termina for para armar d
}
despues lo paso a la siguiente funcion:
Código:
void asignacion(diccionario &prioritarios1, temporales &secundarios1)
{secundarios1.numfil=0;
int enemigo=secundarios1.d.size();
for (int au=0;au<enemigo;au++)
{   cout<<"\n"<<secundarios1.elementos.size();
    int valord=secundarios1.elementos[au];
    int p=0;
    int pop=1;
    //cout<<"\n numfil="<<numfil;
    while (p<valord)
    {     while (pop<=secundarios1.posiciones.size())//buscamos los simbolos que ya tienen un codigo, para no poner bits en sus codigos
          {     if (secundarios1.numfil==secundarios1.posiciones[pop-1])
                    {//cout<<"\n no entre a fila="<<secundarios.numfil;
                   secundarios1.numfil++;
                   pop=1;
                   }
                   else
                   {pop++;
                   }
          }
          int residuo=au%2;//miramos si la posicion es par o impar, asi sabemos si debemos poner 0 o 1
          if (residuo==0)
          {
                     //cout<<"\n numfil="<<numfil;
                     prioritarios1.dic[secundarios1.numfil][secundarios1.numcol]=0;
          }
          else
          {
              prioritarios1.dic[secundarios1.numfil][secundarios1.numcol]=1;
          }
          secundarios1.numfil++;
          p++;
    }
  }
secundarios1.numcol++;
}   


el lio es que al terminar la ejecucion de la segunda funcion el vector me cambia de tamaño sin desear esto, es decir, cuando ejecuto por primera vez construyo un vector de solo 2 posiciones, pero cuando termina la ejecucion de la segunda funcion el vector ha cambiado su tamaño a 11 elementos, y en la segunda funcion lo unico q hago es leer los elementos del vector, nunca los altero


En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Error al pasar un vector de una funcion a otra
« Respuesta #1 en: 28 Mayo 2014, 17:35 pm »

Si en una función un elemento es de solo lectura, etiquétalo con "const" para que te salte un error si alguien intenta modificarlo:

Código
  1. void func( const std::vector< int >& lista_elementos )
  2. {
  3.  lista_elementos.push_back( 1 ); // Error de compilacion
  4. }


En línea

loadenro

Desconectado Desconectado

Mensajes: 16


Ver Perfil
Re: Error al pasar un vector de una funcion a otra
« Respuesta #2 en: 28 Mayo 2014, 18:11 pm »

Sigo teniendo un inconveniente, ya que no puedo dejar constante toda la estructura porque en la segunda funcion necesito cambiar algunos elementos de la estructura (numfil y numcol), como podria realizar dicha excepcion?
En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Error al pasar un vector de una funcion a otra
« Respuesta #3 en: 28 Mayo 2014, 20:21 pm »

La verdad es que viendo el diseño del código es de suponer que el problema lo tienes porque la arquitectura que has elegido no es la más adecuada.

Ahora, que darte más detalles es complicado sin conocer la finalidad de la aplicación y su funcionalidad.
En línea

loadenro

Desconectado Desconectado

Mensajes: 16


Ver Perfil
Re: Error al pasar un vector de una funcion a otra
« Respuesta #4 en: 29 Mayo 2014, 21:19 pm »

Pues la verdad necesito solucionar eso lo antes posible, ya que es parte de mi trabajo de grado, asi q cualquier sugerencia de como atacar el problema seria de gran ayuda, o si necesitas mas informacion solo me dices y listo
En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Error al pasar un vector de una funcion a otra
« Respuesta #5 en: 30 Mayo 2014, 08:20 am »

A ver, en lineas generales el diseño es confuso.

* En "temporales" tienes "tamanovectord" ... si esa variable guarda el tamaño de un vector... eso lo puedes obtener con vector.size( ) y te ahorras esa variable.

* En "temporales" tienes "numcol" y "numfil"... que se refieren a dic... esto no debería estar aquí.

No puedes pretender usar "temporales" como si fuese un cajón de sastre y a la vez tener un diseño de aplicación claro y sencillo de mantener.

Si te parece bien, dame por privado un enlace al código fuente, le echo un vistazo y te comento mis impresiones.

Un saludo.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
pasar/llamar vector a una funcion
Programación C/C++
estivinho 1 1,247 Último mensaje 22 Noviembre 2012, 16:08 pm
por Ferno
Pasar Array de una funcion a otra
Programación C/C++
YDOM 8 2,039 Último mensaje 2 Junio 2014, 01:14 am
por MessageBoxA
como pasar variable de una a otra desde una funcion « 1 2 »
Programación C/C++
geshiro 16 4,279 Último mensaje 22 Mayo 2016, 03:51 am
por geshiro
Error al retornar un vector desde una funcion
Programación C/C++
cNoob 2 1,106 Último mensaje 28 Diciembre 2017, 13:12 pm
por cNoob
Pasar datos de una función a otra
Programación C/C++
Vurkolak 2 1,334 Último mensaje 21 Julio 2020, 10:37 am
por Vurkolak
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines