C/Visual C - Listar un conjunto de numeros aleatorios con su numero de apariciones

 
Vista:
sin imagen de perfil

Listar un conjunto de numeros aleatorios con su numero de apariciones

Publicado por White (2 intervenciones) el 17/12/2015 09:55:02
Buenas, soy nuevo en el foro y me gustaría perdiles que me ayudaran con un problema que tengo entre manos:

Tengo que insertar en una lista un cojunto de enteros aleatorios entre 1 y 100, y que aparezca junto con un número que indica el número de apariciones.

Una vez que tengo esa lista tengo que hacerle una serie de modificaciones:

- Tengo que sustituir el número de apariciones de cada número por su frecuencia relativa (frecuencia-relativa = apariciones * 100/total-apariciones)
- Tengo que ordenar la lista por esta frecuencia relativa
- Tengo que construir una nueva lista con los 10 números más frecuentes
- Tengo que imprimir por pantalla cada uno de los anteriores resultados


El código que tengo es el siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <iostream>
#include <list>
#include <ctime>
#include <cstdlib>
using namespace std;
 
/**
 * @brief Imprime una lista de tipo T sobre el flujo de salida
 * @param s: flujo de salida. Es MODIFICADO
 * @param l: la lista con los elementos a imprimi
 * */
template <class T>
ostream & operator<<(ostream & s, const list<T> & l){
 
  typename list<T>::const_iterator i;
 
  for (i=l.begin(); i != l.end(); i++)
      s << (*i) << " ";
 
  return s;
}
 
/**
 * @brief Inicializar el generador de numero aleatorios
 *        Esta funcion debe ser llamada antes de usar rand
**/
 
void InicializarSemilla(){
  srand(time(0));
}
 
/**
 * @brief Genera numero enteros positivos aleatorios en el rango [min,max]
**/
 
int generaEntero(int min, int max){
    int tam= max -min+1;
    return ((rand()%tam)+min);
}
int main(){
 
  list<int> l;
 
  InicializarSemilla();
 
  for (int i=0;i<10;i++)
    l.push_back(generaEntero(1,100)); //inserta un entero generado aleatoriamente en el rango 1-100
  cout<<endl<<l;
}


No sé como tengo que seguir para hacer los pasos que me indican. Estaba pensando en hacer una lista de map, para poner el número aleatorio con el número de apariciones, siendo el primero la key y las apariciones el value.
En la ordenación ando perdido totalmente.

¿Alguien podría echarme una mano y arrojarme algo de luz?

Gracias!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Listar un conjunto de numeros aleatorios con su numero de apariciones

Publicado por Tom (619 intervenciones) el 17/12/2015 15:15:47
Debería valerte un simple array, o un container que permita acceder por indice:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <cstdlib>
#include <ctime>
#include <array>
#include <iostream>
 
/* */
int main(int argc, char *argv[]) {
        // int numbers[100]
	std::array<int, 100> numbers;
	std::srand(time(0));
 
	numbers.fill(0);
 
	for(int i = 0; i < 10; i++) {
		int v = rand() % 100;
		numbers[v]++;
	}
	for(int i = 0; i < 10; i++) {
		for(int j = 0; j < 10; j++) {
			std::cout << numbers[(i * 10) + j] << " ";
		}
		std::cout << std::endl;
	}
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Listar un conjunto de numeros aleatorios con su numero de apariciones

Publicado por Whithe (2 intervenciones) el 17/12/2015 15:23:23
Gracias por tu respuesta, el problema es que creo que no me sirve, porque no busco un array de 100 elementos, busco algo más dinámico, ya que no sé cuántos pueden entrar, no tiene un tamaño fijo.

Además, no sé como podría añadir así a cada número su número de aparición.

Gracias de todas formas!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Listar un conjunto de numeros aleatorios con su numero de apariciones

Publicado por Tom (619 intervenciones) el 17/12/2015 17:54:57
"Tengo que insertar en una lista un cojunto de enteros aleatorios entre 1 y 100"

Si no es 100, cámbialo por una variable en los sitios dónde haga falta ¿no?.

Y, por si no has entendido el ejemplo :

1
2
3
for(int i = 0; i < 100; i++) {
			std::cout << "El número " << i << " ha salido " <<  numbers[i] << " veces" << std::endl;
	}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar