AYUDA CON FUNCION C++

Iniciado por DVD116, 23 Octubre 2018, 17:52 PM

0 Miembros y 2 Visitantes están viendo este tema.

DVD116

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 (cpp) [Seleccionar]

void Mediana(std::vector<Sensor> &v)
{

   std::vector<double> med;
   std::cout <<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<std::endl<<std::endl;
   std::cout <<"~~~~~~~~~~~~~~~   MOSTRAR LA MEDIANA DE LOS VALORES DE UN SENSOR   ~~~~~~~~~~~~~~~"<<std::endl<<std::endl;
   std::cout <<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<std::endl<<std::endl;

   std::string refMediana;
   std::cout <<"\t Introduzca la cadena de referencia del sensor que desee: ";
   std::cin>> refMediana;
   std::cout<<std::endl;

   double mediana;

   int num_elements=med.size();
   int elemento_mediana;

   for(auto s:v)
       if(refMediana==s.referencia)
           med.push_back(s.lectura);

   if(num_elements%2!=0)
       elemento_mediana=num_elements/2;

   std::sort(med.begin(),med.end(),comparaValores);
   mediana=med[elemento_mediana];

   std::cout <<"\t La mediana de los valores captados por el sensor "<< refMediana << " es "<< mediana;
   std::cout<<std::endl;
}

ivancea96

¿Qué error?

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

DVD116

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 (cpp) [Seleccionar]
bool comparaValores(const Sensor &s1,const Sensor &s2)
{
    if(s1.lectura<s2.lectura)
        return true;
    else
        return false;
}


Añadiendo ahi el const, ya no me aparecio, y finalmente ya lo resolvi y quedo asi:
Código (cpp) [Seleccionar]
oid Mediana(std::vector<Sensor> &v)
{
    std::cout <<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<std::endl<<std::endl;
    std::cout <<"~~~~~~~~~~~~~~~   MOSTRAR LA MEDIANA DE LOS VALORES DE UN SENSOR   ~~~~~~~~~~~~~~~"<<std::endl<<std::endl;
    std::cout <<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<std::endl<<std::endl;

    std::string refMediana;
    std::cout <<"\t Introduzca la cadena de referencia del sensor que desee: ";
    std::cin>> refMediana;
    std::cout<<std::endl;

    std::vector<Sensor> miVector;
    for(auto s:v)
        if(refMediana==s.referencia)
            miVector.push_back(s);
            //std::cout << "\t \t " << s.getLectura()<< std::endl << std::endl;

    std::sort(miVector.begin(),miVector.end(),comparaValores);
    auto mediana = miVector[miVector.size()/2];
    std::cout <<"\t La mediana de los valores captados por el sensor "<< refMediana << " es "<< mediana.lectura;
    std::cout<<std::endl;}