calcular moda c++

Iniciado por indict, 22 Enero 2013, 17:52 PM

0 Miembros y 1 Visitante están viendo este tema.

indict

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.

#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 :)

BlackZeroX

#1
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 (cpp,3,20,22,23,24,31,35) [Seleccionar]

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;
}


Código (cpp) [Seleccionar]

#include <iostream>
#include <map>
using namespace std;

int main(){

   map<uint32_t, uint32_t> cantMap;
   map<uint32_t, uint32_t>::iterator maxEdad;
   uint32_t cantPersonas,
            edad;

   cout << "introduzca el numero de personas" << endl;
   cin >> cantPersonas;

   cout<<"introduzca las edades"<<endl;

   for (uint32_t i = 0;
        i < cantPersonas;
        ++i)
   {
       cout << "Edad Numero: " << i << endl;
       cin >> edad;
       cantMap[edad]++;
   }

   maxEdad = cantMap.begin();

/**
Calcular moda con un For mira este enlace y a ver si se te prende el foco:
http://www.cplusplus.com/reference/map/map/begin/
*/

   cout << maxEdad->first << " => " << maxEdad->second << endl;

   cin.sync();
   cin.get();

   return 0;
}


Dulces Lunas!¡.
The Dark Shadow is my passion.

leosansan

#2
Cita de: indict en 22 Enero 2013, 17:52 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 (cpp) [Seleccionar]
#include <iostream>
#include<vector>
#include<cstdlib>
using namespace std;

int main(){

    int edad,personas,i,j,moda=0,frecuencia;
    cout<<"introduzca el numero de personas: ";
    cin>>personas;
    vector<int>v(personas);
    vector<int>n(personas);
    for(i=0;i<personas;i++){
        cout<<"Ingrese la edad de la "<<i+1<<" persona: ";
        cin>>edad;
        v[i]=edad;
        for( j = i-1; j >=0 ; j--){
            if(v[i] == v[j]){
                n[j]++;
                if(n[j]>moda){
                  moda=i;frecuencia=n[j];
                }
            }
        }
    }
    cout<<endl<<"Moda= "<<v[moda]<<"=> "<<frecuencia+1<<endl;
    system("PAUSE");
    return 0;
}

Saluditos!,
P.D: Muy interesante la mencionada librería. ;)

indict

Gracias BlackZeroX (Astaroth) por enseñarme la librería map, :D

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


flony

mi codigo es por lejos mas largo  :-\...buen code leosansan ;-)
si un problema no tiene solucion entonces no es un problema...es algo inevitable