//Ejercicio 2
#include <iostream>
#include <vector>
#include <cstdlib>
#include <time.h>
#include <algorithm>
using namespace std;
vector <int> gen_vector(int n){
vector <int> vec(n);
for(int i = 0; i<n; i++){
vec[i] = ((rand()%n)+1);
}
return vec;
}
void rango(vector <int> x, int &d_max, int &d_min){
d_min = x[0];
d_max = *(x.end()-1); // Es x.end()-1 porque x.end() me da el primer elemento después del último
//Como para el momento de unar esta función el vector ya esta ordenado escomo como min y max al primer y último
//elemento respectivamente
}
vector <int> Vector_Moda(vector <int> x){
//Este vector tienen dimensión n, siendo n el mayor numero del vector x, y en cada espacio almacena
//cuántas veces se repitió el número, es decir si en la posición 5 está un 3 el número 5 se repitió 3
//veces en el vector x.
vector <int> res(*(x.end()-1)); //La dimensión es el número mayor de x, y x está ordenado, por eso escojo el último
int cont = 0;
for(int i = 0; i<=res.size(); i++){
for(int j = 0; j<x.size(); j++){
if(x[j] == (i+1)){
cont++; //Cuenta cuantas veces se repite un numero
}
}
res[i] = cont;
cont = 0;
}
return res;
}
int maxi(vector <int> x){ //Me retorna el número máximo del vector x
int maxi = 0; //Como x solo tiene valores mayores o iguales a 1 inicializo el mayor numero como 0.
for(int i = 0; i<x.size(); i++){
if(x[i] > maxi){
maxi = x[i];
}
}
return maxi;
}
vector <int> Moda(const vector <int> &Vect_Mod){ //Me devuelve en un vector los números que se repiten mas veces, es decir la moda
vector <int> Moda;
int max_mod = maxi(Vect_Mod);
for(int i = 0; i<Vect_Mod.size(); i++){
if(Vect_Mod[i] == max_mod){
Moda.push_back(i+1);
}
}
return Moda;
}
void mostrar(vector <int> x){ //En lugar de escribir el codigo cada vez que muestro un vector escribo una funcion para eso
cout<<endl;
for(int i = 0; i<x.size(); i++){
cout<<x[i]<<"\t";
}
}
int main(){
srand(time(NULL));
vector <int> x;
int max, min, n;
cout<<"Ingrese n > 2: "; cin>>n;
x = gen_vector(n);
cout<<"\nEl vector generado es: "<<endl;
mostrar(x);
sort(x.begin(),x.end()); //Ordena el vector
rango(x,max,min);
vector <int> Vect_Mod = Vector_Moda(x);
cout<<"\n\nMo: "<<endl;
mostrar(Vect_Mod);
cout<<"\n\nmax:"<<max<<" min:"<<min<<" rango:"<<max-min;
vector <int> mod = Moda(Vect_Mod);
cout<<"\n\nLa moda es:";
mostrar(mod);
return 0;
}