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 :)
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.
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;
}
#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!¡.
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:#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. ;)
Gracias BlackZeroX (Astaroth) por enseñarme la librería map, :D
Gracias leosansan por ayudarme con vectores ¡eres increíble! :D
mi codigo es por lejos mas largo :-\...buen code leosansan ;-)