Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: indict en 22 Enero 2013, 17:52 pm



Título: calcular moda c++
Publicado por: indict en 22 Enero 2013, 17:52 pm
Hola,

podrías decirme que debo corregir en mi programa para que me calcule la moda de un vector dado,

La moda es el elemento que más veces se repite en el vector.

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

int main(){

int edad,personas,i,j,aux,suma_edad;
int moda,frecuencia,frecuencia_moda;
cout<<"introduzca el numero de personas"<<endl;
cin>>personas;

vector<int>v(personas);
for(i=0;i<v.size();i++){
                        cout<<"introduzca las edades"<<endl;
                        cin>>edad;
                        v[i]=edad;
                       
                        }
//moda

for(i=0;i<personas-1;i++)
for(j=0;j<personas-i;j++)

if(edad[j]>edad[j+1]){
                      aux=edad[j];
                      edad[j]=edad[j+1];
                      edad[j+1]=aux;}
frecuencia=0;
frecuencia_moda=0;
moda=-1;

for(i=0;i<personas-1;i++)
if(edad[i]==edad[i+1])
                       if(++frecuencia>frecuencia_moda){
                                                        frecuencia_moda=frecuencia;
                                                        moda=edad[i];}
                       else frecuencia=0;

system("PAUSE");
return 0;
}
                     


Gracias por la ayuda :)


Título: Re: calcular moda c++
Publicado por: BlackZeroX en 22 Enero 2013, 19:56 pm
Para calcular la MODA puedes usar map<int, int> en lugar de vector<int>... y con una iteración puedes obtener el elemento con mayor cantidad...

edad NO ES UN ARRAY!¡, mejor lee un manual/tutorial/guia al respecto.
Código
  1. int main(){
  2.  
  3. int edad,personas,i,j,aux,suma_edad;
  4. int moda,frecuencia,frecuencia_moda;
  5.  
  6.    cout<<"introduzca el numero de personas"<<endl;
  7.    cin>>personas;
  8.  
  9.    vector<int>v(personas);
  10.    for(i=0;i<v.size();i++)
  11.    {
  12.        cout<<"introduzca las edades"<<endl;
  13.        cin>>edad;
  14.        v[i]=edad;
  15.    }
  16. //moda
  17.  
  18.    for(i=0;i<personas-1;i++)
  19.        for(j=0;j<personas-i;j++)
  20.            if(edad[j]>edad[j+1])
  21.            {
  22.                aux=edad[j];
  23.                edad[j]=edad[j+1];
  24.                edad[j+1]=aux;
  25.            }
  26.    frecuencia=0;
  27.    frecuencia_moda=0;
  28.    moda=-1;
  29.  
  30.    for(i=0;i<personas-1;i++)
  31.        if(edad[i]==edad[i+1])
  32.            if(++frecuencia>frecuencia_moda)
  33.            {
  34.                frecuencia_moda=frecuencia;
  35.                moda=edad[i];
  36.            }
  37.            else
  38.                frecuencia=0;
  39.  
  40.    system("PAUSE");
  41.    return 0;
  42. }
  43.  

Código
  1. #include <iostream>
  2. #include <map>
  3. using namespace std;
  4.  
  5. int main(){
  6.  
  7.    map<uint32_t, uint32_t> cantMap;
  8.    map<uint32_t, uint32_t>::iterator maxEdad;
  9.    uint32_t cantPersonas,
  10.             edad;
  11.  
  12.    cout << "introduzca el numero de personas" << endl;
  13.    cin >> cantPersonas;
  14.  
  15.    cout<<"introduzca las edades"<<endl;
  16.  
  17.    for (uint32_t i = 0;
  18.         i < cantPersonas;
  19.         ++i)
  20.    {
  21.        cout << "Edad Numero: " << i << endl;
  22.        cin >> edad;
  23.        cantMap[edad]++;
  24.    }
  25.  
  26.    maxEdad = cantMap.begin();
  27.  
  28. /**
  29. Calcular moda con un For mira este enlace y a ver si se te prende el foco:
  30. http://www.cplusplus.com/reference/map/map/begin/
  31. */
  32.  
  33.    cout << maxEdad->first << " => " << maxEdad->second << endl;
  34.  
  35.    cin.sync();
  36.    cin.get();
  37.  
  38.    return 0;
  39. }
  40.  

Dulces Lunas!¡.


Título: Re: calcular moda c++
Publicado por: leosansan en 23 Enero 2013, 15:33 pm
....................................................

La moda es el elemento que más veces se repite en el vector.


Y sin recurrir a la librería map:
Código
  1. #include <iostream>
  2. #include<vector>
  3. #include<cstdlib>
  4. using namespace std;
  5.  
  6. int main(){
  7.  
  8.    int edad,personas,i,j,moda=0,frecuencia;
  9.    cout<<"introduzca el numero de personas: ";
  10.    cin>>personas;
  11.    vector<int>v(personas);
  12.    vector<int>n(personas);
  13.    for(i=0;i<personas;i++){
  14.        cout<<"Ingrese la edad de la "<<i+1<<" persona: ";
  15.        cin>>edad;
  16.        v[i]=edad;
  17.        for( j = i-1; j >=0 ; j--){
  18.            if(v[i] == v[j]){
  19.                n[j]++;
  20.                if(n[j]>moda){
  21.                  moda=i;frecuencia=n[j];
  22.                }
  23.            }
  24.        }
  25.    }
  26.    cout<<endl<<"Moda= "<<v[moda]<<"=> "<<frecuencia+1<<endl;
  27.    system("PAUSE");
  28.    return 0;
  29. }
  30.  
Saluditos!,
P.D: Muy interesante la mencionada librería. ;)


Título: Re: calcular moda c++
Publicado por: indict en 23 Enero 2013, 16:19 pm
Gracias BlackZeroX (Astaroth) por enseñarme la librería map, :D

Gracias leosansan por ayudarme con vectores ¡eres increíble! :D



Título: Re: calcular moda c++
Publicado por: flony en 24 Enero 2013, 15:04 pm
mi codigo es por lejos mas largo  :-\...buen code leosansan ;-)