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

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


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

Desconectado Desconectado

Mensajes: 78


Ver Perfil
mediana en c++
« en: 3 Enero 2013, 12:09 pm »

Hola
querría hacer un programa que dado un vector me calculara la mediana.
Si el tamaño del vector es impar la mediana es el valor (N+1)/2.
Si el tamaño del vector es par la mediana será el promedio de el término que ocupa el lugar N/2 con el término que ocupa el lugar (N/2)+1; es decir (N/2+((N/2)+1))/2

He intentado hacerlo, si pudierais corregir me. 

Código:
#include <iostream>
#include<vector>
using namespace std;

double mediana(vector<int>v, double me){
      int i;
     
       for(i=0;i<v.size();i++){
       if (v.size()%2==0){
                        me=v[i]/2;}
       else {me=(v[i]/2+(v[i+1]))/2;}}
       return me;
       }

int main(){
   
    int n,i,e;
    cout << endl << "Entra el número de elementos del vector...";
    cin >> n;
    vector<int> v(n);
    for(i=1;i<n;i++){
                     cout << "Entra el elemento " << i << " del vector...";
                     cin >> e;
                     v[i] = e;}
    cout <<mediana(v)<<endl;


system ("pause");
return 0;
}


En línea

flony


Desconectado Desconectado

Mensajes: 583



Ver Perfil
Re: mediana en c++
« Respuesta #1 en: 3 Enero 2013, 14:00 pm »

si te fijas a la funcion mediana le pasas dos datos un vector y supongo la mediana (me)  :silbar:....cuando deberia ser el resultado que devuelve....es en la parte de
Código:
double mediana(vector<int>v, double me){
y en la parte
Código:
cout <<mediana(v)<<endl;
solo le pasas un dato
...en realidad ni modificacion ...fijate si anda  ;)
Código:
#include <iostream>
#include<vector>
using namespace std;

double mediana(vector<int>v){
      int i;
  double me;
       for(i=0;i<v.size();i++){
       if (v.size()%2==0){
                        me=v[i]/2;}
       else {me=(v[i]/2+(v[i+1]))/2;}}
       return me;
       }

int main(){
   
    int n,i,e;
    cout << endl << "Entra el número de elementos del vector...";
    cin >> n;
    vector<int> v(n);
    for(i=1;i<n;i++){
                     cout << "Entra el elemento " << i << " del vector...";
                     cin >> e;
                     v[i] = e;}
    cout <<mediana(v)<<endl;


system ("pause");
return 0;
}


« Última modificación: 3 Enero 2013, 14:57 pm por flony » En línea

si un problema no tiene solucion entonces no es un problema...es algo inevitable
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: mediana en c++
« Respuesta #2 en: 3 Enero 2013, 16:20 pm »

Como ya te comentaron el segundo parámetro de la función esta de mas ya que ese es su valor de retorno, también deberías pasar el vector por referencia.

El problema se debe a que la división entre dos se debe usar al indicar el indice para así encontrar el elemento (o los dos) al medio. De esta forma:
Código
  1. #include <vector>
  2. using namespace::std;
  3.  
  4. // ...
  5.  
  6. double mediana(vector<int>& v)
  7. {
  8.   vector<int>::size_type i = v.size();
  9.   return i % 2 == 1 ? v[i / 2] : (v[i / 2 - 1] + v[i / 2]) / 2;
  10. }

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
bemone

Desconectado Desconectado

Mensajes: 74



Ver Perfil
Re: mediana en c++
« Respuesta #3 en: 3 Enero 2013, 17:32 pm »

Código
  1. #include <iostream>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #include <vector>
  5.  
  6. using namespace std;
  7.  
  8. int nTamano;
  9. double mediana(vector <int> vector);
  10.  
  11. int main()
  12. {
  13.    srand ( time(NULL) );
  14.    cout << "Elementos del vector: ";
  15.    cin >> nTamano;
  16.  
  17.    vector <int> vNumeros (nTamano);
  18.    for(unsigned int i=0; i<nTamano; i++){
  19.        vNumeros[i] = rand() % 50 + 1;
  20.        cout << vNumeros[i] << " ";
  21.    }
  22.  
  23.    cout << endl << mediana(vNumeros);
  24.    return 0;
  25. }
  26.  
  27. double mediana(vector <int> vVector){
  28.    double media = 0;
  29.    for(unsigned int i=0; i<vVector.size()-1; i++){
  30.        if(vVector.size()/2 == 0)
  31.            media += vVector[i]/2;
  32.        else
  33.            media += ( vVector[i]/2 + vVector[i+1] )/2;
  34.    }
  35.  
  36.    return media;
  37. }
  38.  
En línea

Odio los tipos de variable de Windows.
zonahurbana

Desconectado Desconectado

Mensajes: 178

RS, JC.


Ver Perfil WWW
Re: mediana en c++
« Respuesta #4 en: 3 Enero 2013, 18:42 pm »

Me parece que debería haber algo en el programa que asegure que los elementos en el vector avancen conforme una razón.
En ese caso la media sería la correcta . . .
En línea

Nunca dejar de aprender es importante, más allá del ritmo que se siga ...
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
recomendadme algun receptor wifi de mediana calidad
Materiales y equipos
haochen 1 2,336 Último mensaje 15 Septiembre 2008, 10:14 am
por KARR
Sacar mediana de unas notas
.NET (C#, VB.NET, ASP)
Pablo Videla 0 5,381 Último mensaje 7 Noviembre 2008, 15:28 pm
por Pablo Videla
Ayuda para calcular la nota mediana en c++
Programación C/C++
geisertoaspern 2 9,435 Último mensaje 25 Septiembre 2011, 05:43 am
por LearningSpanishProgrammer
Calcular moda, mediana, media aritmética, media geométrica de n números en C « 1 2 »
Programación C/C++
ERIK546 13 53,944 Último mensaje 30 Noviembre 2013, 19:31 pm
por EnriqueRodriguezM
Mediana en un Array
Programación C/C++
FrnkdOU 3 5,300 Último mensaje 3 Abril 2021, 04:55 am
por WHK
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines