X-Git-Url: https://git.llucax.com/z.facultad/75.52/treemulator.git/blobdiff_plain/3a7aa16a342ce2cca383b3e118d4f41ef1c698a4..1c52e3a9be7b82d6ad8f42245ecbd916c7c34d77:/src/main.cpp diff --git a/src/main.cpp b/src/main.cpp index 1eedc01..266ba1d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2,61 +2,61 @@ #include "btree.h" #include "clave_fija.h" - -void generar_random (std::list &lst, uint n); +#include "random.h" int main (int argc, char *argv[]) { - std::list lst; + int bloque, altas, bajas; - BTree tree ("test.idx", 64); - - if (argc != 2) { - printf ("Falta parametro cantidad de elementos a agregar\n"); + if (argc != 4) { + printf ("Uso : %s \n", argv[0]); return 1; } - generar_random (lst, atoi(argv[1])); + bloque = atoi (argv[1]); + altas = atoi (argv[2]); + bajas = atoi (argv[3]); - std::list::iterator it = lst.begin (); - while (it != lst.end ()) { - ClaveFija c(*it); + BTree tree ("test.idx", bloque); + + std::list lst; + std::list::iterator it; + Random::Init (); + Random::Ints (lst, altas); - std::cout << "Agregando " << (*it) << std::endl; - tree.AddKey (c); - it++; - } + double paltas = bajas / (double)altas; it = lst.begin (); + uint i = 0; while (it != lst.end ()) { ClaveFija c(*it); - if (tree.FindKey (c)) - std::cout << (*it) << " encontrada\n"; - else - std::cout << (*it) << " NO encontrada\n"; + double l = Random::Double (0.0f, 1.0f); + std::cout << l << " >= " << paltas << std::endl; + if (l >= paltas) { + tree.AddKey (c); + i++; + } else { + /* Tengo que borrar una clave entre 0 e "i" de la lista + * porque son las que ya agregue. */ + int aborrar = (int)Random::Double (0, i) - 1; + std::list::iterator otro = lst.begin (); + int j = 0; + while (j < aborrar) { + otro++; + j++; + } + ClaveFija c(*otro); + + tree.DelKey (c); + std::string sss = c; + std::cout << "Clave Borrada " << sss << std::endl; + } + it++; } + /* TODO : Hacer verificacion de claves :) */ return 0; } -void generar_random (std::list &lst, uint n) -{ - /* Genero N numeros aleatorios entre -3*n y 3*n */ - bool *numeros = new bool [6*n+1]; - int random; - - memset (numeros, 0, (6*n+1)*sizeof (bool)); - - srand (time (NULL)); - for (uint i=0; i < n; i++) { - do { - random = 1 + (int)(6.0f * n * rand () / (RAND_MAX + 1.0f) - 3.0f * n); - std::cout << random << std::endl; - } while (numeros[random + 3 * n] == true); - numeros[random + 3 * n] = true; - lst.push_back (random); - } -} -