]> git.llucax.com Git - z.facultad/75.52/treemulator.git/blob - src/random.cpp
Agrego emision de excepsiones en caso de error.
[z.facultad/75.52/treemulator.git] / src / random.cpp
1
2 #include "random.h"
3
4 std::map<int, std::string> Random::productos;
5 std::map<int, std::string> Random::marcas;
6
7 int Random::productos_cant = 0;
8 int Random::marcas_cant = 0;
9
10 void Random::Init ()
11 {
12         srand (time (NULL));
13
14         GetFile ("productos.txt", Random::productos, Random::productos_cant);
15         GetFile ("marcas.txt", Random::marcas, Random::marcas_cant);
16 }
17
18 void Random::GetFile (const char *f, std::map<int,std::string> &out, int &cant)
19 {
20         std::ifstream reader (f);
21         cant = 0;
22
23         if (!reader.is_open ()) return;
24
25         char l[100];
26
27         while (!reader.eof ()) {
28                 reader.getline (l, 100);
29                 out[cant] = std::string (l);
30                 cant++;
31         }
32 }
33
34 void Random::Ints (std::list<int> &lst, uint n)
35 {
36         /* Genero N numeros aleatorios entre -3*n y 3*n */
37         bool *numeros = new bool [6*n+1];
38         int random;
39
40         memset (numeros, 0, (6*n+1)*sizeof (bool));
41
42         srand (time (NULL));
43         for (uint i=0; i < n; i++) {
44                 do {
45                         random = 1 + (int)(6.0f * n * rand () / (RAND_MAX + 1.0f) - 3.0f * n);
46                 } while (numeros[random + 3 * n] == true);
47                 numeros[random + 3 * n] = true;
48                 lst.push_back (random);
49         }
50
51         delete [] numeros;
52 }
53
54 void Random::Strings (std::list<std::string> &lst, uint n)
55 {
56         int random1, random2;
57         /* TODO : Evitar repetidos */
58         for (uint i=0; i < n; i++) {
59                         random1 = 1 + (int)(productos_cant * (float)rand () / (RAND_MAX + 1.0f));
60                         random2 = 1 + (int)(marcas_cant * (float)rand () / (RAND_MAX + 1.0f));
61
62                         lst.push_back (productos[random1-1] + " " + marcas[random2-1]);
63         }
64 }
65
66 double Random::Double (double min, double max)
67 {
68         return min + max * (float)rand () / (RAND_MAX + 1.0f);
69 }
70