Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: DVD116 en 23 Octubre 2018, 17:52 pm



Título: AYUDA CON FUNCION C++
Publicado por: DVD116 en 23 Octubre 2018, 17:52 pm
tengo un vector con referencias distintas, ejemplo S006,S005 y cada una de ellas varias lecturas, de forma que yo meto una referencia por teclado, y tengo que almacenar las lectura en un nuevo vector, ordenarlo para posteriormente sacar su mediana e imprimirla por pantalla.

tengo un error a la hora creo de las direcciones de memoria y punteros

Código
  1. void Mediana(std::vector<Sensor> &v)
  2. {
  3.  
  4.    std::vector<double> med;
  5.    std::cout <<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<std::endl<<std::endl;
  6.    std::cout <<"~~~~~~~~~~~~~~~   MOSTRAR LA MEDIANA DE LOS VALORES DE UN SENSOR   ~~~~~~~~~~~~~~~"<<std::endl<<std::endl;
  7.    std::cout <<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<std::endl<<std::endl;
  8.  
  9.    std::string refMediana;
  10.    std::cout <<"\t Introduzca la cadena de referencia del sensor que desee: ";
  11.    std::cin>> refMediana;
  12.    std::cout<<std::endl;
  13.  
  14.    double mediana;
  15.  
  16.    int num_elements=med.size();
  17.    int elemento_mediana;
  18.  
  19.    for(auto s:v)
  20.        if(refMediana==s.referencia)
  21.            med.push_back(s.lectura);
  22.  
  23.    if(num_elements%2!=0)
  24.        elemento_mediana=num_elements/2;
  25.  
  26.    std::sort(med.begin(),med.end(),comparaValores);
  27.    mediana=med[elemento_mediana];
  28.  
  29.    std::cout <<"\t La mediana de los valores captados por el sensor "<< refMediana << " es "<< mediana;
  30.    std::cout<<std::endl;
  31. }
  32.  


Título: Re: AYUDA CON FUNCION C++
Publicado por: ivancea96 en 25 Octubre 2018, 22:38 pm
¿Qué error?

Y en cuanto al código, comentar que la mediana... no necesitar hacer el if ese. Simplemente, hazla siempre.


Título: Re: AYUDA CON FUNCION C++
Publicado por: DVD116 en 25 Octubre 2018, 23:20 pm
Si el if, era para ser mas exquisito y decirle si el vector era par que coja uno u otro, sabes?

Y el error era rarisimo, pero finalmente en la funcion de comparaValor que es una simple booleana para comparar el mayor y el menor
Código
  1. bool comparaValores(const Sensor &s1,const Sensor &s2)
  2. {
  3.    if(s1.lectura<s2.lectura)
  4.        return true;
  5.    else
  6.        return false;
  7. }

Añadiendo ahi el const, ya no me aparecio, y finalmente ya lo resolvi y quedo asi:
Código
  1. oid Mediana(std::vector<Sensor> &v)
  2. {
  3.    std::cout <<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<std::endl<<std::endl;
  4.    std::cout <<"~~~~~~~~~~~~~~~   MOSTRAR LA MEDIANA DE LOS VALORES DE UN SENSOR   ~~~~~~~~~~~~~~~"<<std::endl<<std::endl;
  5.    std::cout <<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<std::endl<<std::endl;
  6.  
  7.    std::string refMediana;
  8.    std::cout <<"\t Introduzca la cadena de referencia del sensor que desee: ";
  9.    std::cin>> refMediana;
  10.    std::cout<<std::endl;
  11.  
  12.    std::vector<Sensor> miVector;
  13.    for(auto s:v)
  14.        if(refMediana==s.referencia)
  15.            miVector.push_back(s);
  16.            //std::cout << "\t \t " << s.getLectura()<< std::endl << std::endl;
  17.  
  18.    std::sort(miVector.begin(),miVector.end(),comparaValores);
  19.    auto mediana = miVector[miVector.size()/2];
  20.    std::cout <<"\t La mediana de los valores captados por el sensor "<< refMediana << " es "<< mediana.lectura;
  21.    std::cout<<std::endl;}