コード例 #1
0
ファイル: BTree.cs プロジェクト: ChristianR007/EDD_201504444
    // Elimina el registro
    private void elimarRegistro(Pagina raiz, NodoB clave)
    {
        int   pos = 0;
        NodoB suce;

        if (vacio(raiz))
        {
            this.esta = false;
        }
        else
        {
            pos = buscarNodo(clave, raiz);
            if (esta)
            {
                if (vacio(raiz.ramas[pos - 1]))
                {
                    quitar(raiz, pos);
                }
                else
                {
                    sucesor(raiz, pos);
                    elimarRegistro(raiz.ramas[pos], raiz.claves[pos - 1]);
                }
            }
            else
            {
                elimarRegistro(raiz.ramas[pos], clave);
                if ((raiz.ramas[pos] != null) && (raiz.ramas[pos].cuentas < 2))
                {
                    restablecer(raiz, pos);
                }
            }
        }
    }
コード例 #2
0
ファイル: BTree.cs プロジェクト: ChristianR007/EDD_201504444
    //Eliminar Privado
    private void eliminarPrivad(Pagina raiz, NodoB clave)
    {
        try
        {
            elimarRegistro(raiz, clave);
        }
        catch (Exception e)
        {
            this.esta = false;
            // consola = "error"
        }

        if (!esta)
        {
            // consola = "No se encontro el elemento"
        }
        else
        {
            if (raiz.cuentas == 0)
            {
                raiz = raiz.ramas[0];
            }
            this.p = raiz;
            // consola = "Elemento eliminado"
        }
    }
コード例 #3
0
ファイル: BTree.cs プロジェクト: ChristianR007/EDD_201504444
 public bool editarHorario(int codigo, NodoB nuevo)
 {
     this.editado = false;
     if (this.p.editarHorario(codigo, nuevo))
     {
         return(true);
     }
     editarHorarioPrivado(codigo, nuevo, this.p);
     return(this.editado);
 }
コード例 #4
0
ファイル: BTree.cs プロジェクト: ChristianR007/EDD_201504444
    // Inicia las operaciones de eliminar

    public void eliminarHorario(NodoB clave)
    {
        if (vacio(this.p))
        {
            // NO elimina
        }
        else
        {
            eliminarPrivad(this.p, clave);
        }
    }
コード例 #5
0
ファイル: BTree.cs プロジェクト: ChristianR007/EDD_201504444
 //Metodo privado que hace el llamado a las demas metodos
 private void insertaPrivado(NodoB clave, Pagina raiz)
 {
     empujar(clave, raiz);
     if (this.empA)
     {
         this.p           = new Pagina();
         this.p.cuentas   = 1;
         this.p.claves[0] = this.x;
         this.p.ramas[0]  = raiz;
         this.p.ramas[1]  = this.xr;
     }
     // "Arbol B insercion completa"
 }
コード例 #6
0
ファイル: BTree.cs プロジェクト: ChristianR007/EDD_201504444
    // Metodo Encargado de Meter Hoja
    private void meterHoja(NodoB clave, Pagina raiz, int k)
    {
        int i = raiz.cuentas;

        while (i != k)
        {
            raiz.claves[i]    = raiz.claves[i - 1];
            raiz.ramas[i + 1] = raiz.ramas[i];
            i--;
        }
        raiz.claves[k]    = clave;
        raiz.ramas[k + 1] = this.xr;
        raiz.cuentas      = ++raiz.cuentas;
    }
コード例 #7
0
ファイル: ArbolB.cs プロジェクト: jocaqes/EDD_201212921
 public void insertar(Ataque valor)
 {
     if (isEmpty())
     {
         raiz         = new NodoB();
         raiz.valores = new Lista <Ataque>();
         raiz.valores.push(valor);
     }
     else
     {
         raiz = insertar(raiz, null, valor);
     }
     count++;
 }
コード例 #8
0
ファイル: BTree.cs プロジェクト: ChristianR007/EDD_201504444
 private NodoB buscarHorario(int codigo)
 {
     this.buscando = null;
     for (int i = 0; i <= this.p.cuentas; i++)
     {
         if (this.p.claves[i] != null)
         {
             if (this.p.claves[i].numeroAtaque == codigo)
             {
                 this.buscando = this.p.claves[i];
                 return(this.buscando);
             }
         }
     }
     buscarPrivado(codigo, this.p);
     return(this.buscando);
 }
コード例 #9
0
 public bool editarHorario(int codigo, NodoB nuevo)
 {
     for (int i = 0; i < this.cuentas; i++)
     {
         if (claves[i] != null)
         {
             if (claves[i].numeroAtaque == codigo)
             {
                 //claves[i].dia = nuevo.dia;
                 //claves[i].rango = nuevo.rango;
                 //claves[i].refCatedra = nuevo.refCatedra;
                 //claves[i].refCurso = nuevo.refCurso;
                 //claves[i].refSalon = nuevo.refSalon;
                 return(true);
             }
         }
     }
     return(false);
 }
コード例 #10
0
ファイル: BTree.cs プロジェクト: ChristianR007/EDD_201504444
    private int buscarNodo(NodoB clave, Pagina raiz)
    {
        int j = 0;

        if (clave.numeroAtaque < raiz.claves[0].numeroAtaque)
        {
            this.esta = false;
            j         = 0;
        }
        else
        {
            j = raiz.cuentas;
            while (clave.numeroAtaque < raiz.claves[j - 1].numeroAtaque && j > 1)
            {
                --j;
            }
            this.esta = (clave.numeroAtaque == raiz.claves[j - 1].numeroAtaque);
        }
        return(j);
    }
コード例 #11
0
ファイル: BTree.cs プロジェクト: ChristianR007/EDD_201504444
 private void editarHorarioPrivado(int codigo, NodoB nuevo, Pagina raiz)
 {
     if (raiz.cuentas > 0 && raiz.ramas[0] != null)
     {
         for (int i = 0; i <= raiz.cuentas; i++)
         {
             if (raiz.ramas[i] != null)
             {
                 if (raiz.ramas[i].editarHorario(codigo, nuevo))
                 {
                     this.editado = true;
                     return;
                 }
                 else
                 {
                     editarHorarioPrivado(codigo, nuevo, raiz.ramas[i]);
                 }
             }
         }
     }
 }
コード例 #12
0
ファイル: BTree.cs プロジェクト: ChristianR007/EDD_201504444
 private void buscarPrivado(int codigo, Pagina raiz)
 {
     if (raiz.cuentas > 0 && raiz.ramas[0] != null)
     {
         for (int i = 0; i <= raiz.cuentas; i++)
         {
             if (raiz.ramas[i] != null)
             {
                 NodoB aux = raiz.ramas[i].encuentraHorario(codigo);
                 if (aux != null)
                 {
                     this.buscando = aux;
                 }
                 else
                 {
                     buscarPrivado(codigo, raiz.ramas[i]);
                 }
             }
         }
     }
 }
コード例 #13
0
ファイル: BTree.cs プロジェクト: ChristianR007/EDD_201504444
    // Metodo Encargado de empujar
    private void empujar(NodoB clave, Pagina raiz)
    {
        int k = 0;

        this.esta = false;
        if (vacio(raiz))
        {
            this.empA = true;
            this.x    = clave;
            this.xr   = null;
        }
        else
        {
            k = buscarNodo(clave, raiz);
            if (this.esta)
            {
                // consola = "no debe haber claves repetidas"
                this.empA = false;
            }
            else
            {
                empujar(clave, raiz.ramas[k]);
                if (this.empA)
                {
                    if (raiz.cuentas < 4)
                    {
                        this.empA = false;
                        meterHoja(this.x, raiz, k);
                    }
                    else
                    {
                        this.empA = true;
                        dividirNodo(this.x, raiz, k);
                    }
                }
            }
        }
    }
コード例 #14
0
ファイル: BTree.cs プロジェクト: ChristianR007/EDD_201504444
    // Dividir Nodo
    private void dividirNodo(NodoB clave, Pagina raiz, int k)
    {
        int pos    = 0;
        int posmda = 0;

        if (k <= 2)
        {
            posmda = 2;
        }
        else
        {
            posmda = 3;
        }
        Pagina mder = new Pagina();

        pos = posmda + 1;
        while (pos != 5)
        {
            mder.claves[(pos - posmda) - 1] = raiz.claves[pos - 1];
            mder.ramas[pos - posmda]        = raiz.ramas[pos];
            ++pos;
        }
        mder.cuentas = 4 - posmda;
        raiz.cuentas = posmda;
        if (k <= 2)
        {
            meterHoja(clave, raiz, k);
        }
        else
        {
            meterHoja(clave, mder, (k - posmda));
        }
        this.x        = raiz.claves[raiz.cuentas - 1];
        mder.ramas[0] = raiz.ramas[raiz.cuentas];
        raiz.cuentas  = --raiz.cuentas;
        this.xr       = mder;
    }
コード例 #15
0
    public string CargaMaestra(string rut)
    {
        string cuerpo            = "";
        bool   banderaEncabezado = false;
        string path = "";

        if (rut == "usuarios")
        {
            path = (rutaUsuarios);
        }
        else if (rut == "tablero")
        {
            path = (rutaTablero);
        }
        else if (rut == "juegos")
        {
            path = (rutaJuegos);
        }
        else if (rut == "juegoActual")
        {
            path = (rutaJuegoActual);
        }
        else if (rut == "contactos")
        {
            path = rutaContactos;
        }
        else if (rut == "historial")
        {
            path = rutaHistorial;
        }
        try {
            StreamReader leer    = new StreamReader(path);
            string       getLine = leer.ReadLine();
            while (getLine != null)
            {
                if (banderaEncabezado != false)
                {
                    char[]   delimitador = { ',' };
                    string[] dato        = getLine.Split(delimitador);
                    if (rut == "usuarios")  // Insertado Completo
                    {
                        // [0]Nickname, [1]Contraseña, [2]Correo electronico, [3]"Conectado (1 si, 0 no)"
                        nuevoABB.Insertar(dato[0], dato[1], dato[2], dato[3].ToString());
                        //nuevoAE.InsertarEspejo(dato[0], dato[1], dato[2], dato[3].ToString());
                        cuerpo += dato[0] + " - " + dato[1] + " - " + dato[2] + " - " + Convert.ToInt32(dato[3].ToString()) + ";\n";
                    }
                    else if (rut == "tablero")// Insertado Medio
                    {
                        // [0]jugador, [1]columna, [2]fila, [3]unidad, [4]"destruida(0 si,1 no)"
                        int queNiveles = aNivel(dato[3]);
                        if (queNiveles == 1)
                        {
                            // Envia a Cubo en coordenadas segund nivel de retorno de funcion
                            nuevoC.ingresarAMatriz(dato[1].ToString(), dato[2].ToString(), dato[0].ToString(), dato[3].ToString(), dato[4].ToString(), dato[1].ToString(), dato[2].ToString(), queNiveles.ToString(), 5, 1, 2, 10, true, false, true, true, true, true);
                            n1.ingresarAMatriz(dato[1].ToString(), dato[2].ToString(), dato[0].ToString(), dato[3].ToString(), dato[4].ToString(), dato[1].ToString(), dato[2].ToString(), queNiveles.ToString(), 5, 1, 2, 10, true, false, true, true, true, true);
                        }
                        else if ((queNiveles == 21) || (queNiveles == 22))
                        {
                            if (queNiveles == 21)
                            {
                                // Envia a Cubo en coordenadas segund nivel de retorno de funcion
                                nuevoC.ingresarAMatriz(dato[1].ToString(), dato[2].ToString(), dato[0].ToString(), dato[3].ToString(), dato[4].ToString(), dato[1].ToString(), dato[2].ToString(), queNiveles.ToString(), 6, 1, 3, 15, true, true, true, true, true, true);
                                n2.ingresarAMatriz(dato[1].ToString(), dato[2].ToString(), dato[0].ToString(), dato[3].ToString(), dato[4].ToString(), dato[1].ToString(), dato[2].ToString(), queNiveles.ToString(), 6, 1, 3, 15, true, true, true, true, true, true);
                            }
                            else if (queNiveles == 22)
                            {
                                // Envia a Cubo en coordenadas segund nivel de retorno de funcion
                                nuevoC.ingresarAMatriz(dato[1].ToString(), dato[2].ToString(), dato[0].ToString(), dato[3].ToString(), dato[4].ToString(), dato[1].ToString(), dato[2].ToString(), queNiveles.ToString(), 5, 6, 3, 10, true, true, true, true, true, true);
                                n2.ingresarAMatriz(dato[1].ToString(), dato[2].ToString(), dato[0].ToString(), dato[3].ToString(), dato[4].ToString(), dato[1].ToString(), dato[2].ToString(), queNiveles.ToString(), 5, 6, 3, 10, true, true, true, true, true, true);
                            }
                        }
                        else if ((queNiveles == 31) || (queNiveles == 32) || (queNiveles == 33))
                        {
                            if (queNiveles == 31)
                            {
                                // Envia a Cubo en coordenadas segund nivel de retorno de funcion
                                nuevoC.ingresarAMatriz(dato[1].ToString(), dato[2].ToString(), dato[0].ToString(), dato[3].ToString(), dato[4].ToString(), dato[1].ToString(), dato[2].ToString(), queNiveles.ToString(), 9, 1, 3, 15, true, true, true, true, true, true);
                                n3.ingresarAMatriz(dato[1].ToString(), dato[2].ToString(), dato[0].ToString(), dato[3].ToString(), dato[4].ToString(), dato[1].ToString(), dato[2].ToString(), queNiveles.ToString(), 9, 1, 3, 15, true, true, true, true, true, true);
                            }
                            else if (queNiveles == 32)
                            {
                                // Envia a Cubo en coordenadas segund nivel de retorno de funcion
                                nuevoC.ingresarAMatriz(dato[1].ToString(), dato[2].ToString(), dato[0].ToString(), dato[3].ToString(), dato[4].ToString(), dato[1].ToString(), dato[2].ToString(), queNiveles.ToString(), 9, 1, 2, 20, true, true, true, true, true, true);
                                n3.ingresarAMatriz(dato[1].ToString(), dato[2].ToString(), dato[0].ToString(), dato[3].ToString(), dato[4].ToString(), dato[1].ToString(), dato[2].ToString(), queNiveles.ToString(), 9, 1, 2, 20, true, true, true, true, true, true);
                            }
                            else if (queNiveles == 33)
                            {
                                // Envia a Cubo en coordenadas segund nivel de retorno de funcion
                                nuevoC.ingresarAMatriz(dato[1].ToString(), dato[2].ToString(), dato[0].ToString(), dato[3].ToString(), dato[4].ToString(), dato[1].ToString(), dato[2].ToString(), queNiveles.ToString(), 7, 0, 5, 10, false, true, false, false, false, false);
                                n3.ingresarAMatriz(dato[1].ToString(), dato[2].ToString(), dato[0].ToString(), dato[3].ToString(), dato[4].ToString(), dato[1].ToString(), dato[2].ToString(), queNiveles.ToString(), 7, 0, 5, 10, false, true, false, false, false, false);
                            }
                        }
                        else if (queNiveles == 4)
                        {
                            // Envia a Cubo en coordenadas segund nivel de retorno de funcion
                            nuevoC.ingresarAMatriz(dato[1].ToString(), dato[2].ToString(), dato[0].ToString(), dato[3].ToString(), dato[4].ToString(), dato[1].ToString(), dato[2].ToString(), queNiveles.ToString(), 6, 0, 2, 10, false, true, false, false, false, false);
                            n4.ingresarAMatriz(dato[1].ToString(), dato[2].ToString(), dato[0].ToString(), dato[3].ToString(), dato[4].ToString(), dato[1].ToString(), dato[2].ToString(), queNiveles.ToString(), 6, 0, 2, 10, false, true, false, false, false, false);
                            prueba += dato[0].ToString() + ",";
                        }
                        else
                        {
                            // Envia a Cubo en coordenadas segund nivel de retorno de funcion
                            nuevoC.ingresarAMatriz(dato[1].ToString(), dato[2].ToString(), dato[0].ToString(), dato[3].ToString(), dato[4].ToString(), dato[1].ToString(), dato[2].ToString(), queNiveles.ToString(), 6, 0, 2, 10, false, true, false, false, false, false);
                        }

                        cuerpo += dato[0].ToString() + " - " + dato[1].ToString() + " - " + dato[2].ToString() + " - " + dato[3].ToString() + " - " + dato[4].ToString() + ";\n";
                    }
                    else if (rut == "juegos") // Insertado Completo
                    {
                        // [0]Usuario Base, [1]Oponente, [2]unidades desplegadas, [3]unidades sobrevivientes, [4]Unidades Destruidas, [5]"Gano (1 si, 0 no)"
                        nuevoABB.InsertarJuegos(dato[0], dato[1], dato[2], dato[3], dato[4], dato[5].ToString());
                        //nuevoAE.InsertarJuegos(dato[0], dato[1], dato[2], dato[3], dato[4], dato[5].ToString());
                        cuerpo += dato[0] + " - " + dato[1] + " - " + Convert.ToInt32(dato[2].ToString()) + " - " + Convert.ToInt32(dato[3].ToString()) + " - " + Convert.ToInt32(dato[4].ToString()) + " - " + Convert.ToInt32(dato[5].ToString()) + ";\n";
                    }
                    else if (rut == "juegoActual")
                    {
                        // [0]Nickname1, [1]Nickname2, [2]Naves Nivel 1, [3]Naves Nivel 2,	[4]Naves Nivel 3, [5]Naves Nivel 4,
                        // [6]Tamaño X, [7]Tamaño Y, [8]"Variante (1 = normal, 2 = tiempo, 3=base)", [9]Tiempo
                        //string mandar = dato[0].ToString() + "," + dato[1].ToString() + ","+dato[2].ToString() + ","+dato[3].ToString() + "," +dato[4].ToString() + ",";
                        //mandar += dato[5].ToString() + "," + dato[6].ToString() + "," + dato[7].ToString() + "," + dato[8].ToString() + "," + dato[9].ToString();
                        //string mandar = dato[8];
                        guardarValoresModoJuego(getLine);
                        cuerpo += dato[0] + " - " + dato[1] + " - " + Convert.ToInt32(dato[2].ToString()) + " - " + Convert.ToInt32(dato[3].ToString()) + " - " + Convert.ToInt32(dato[4].ToString()) + " - " + Convert.ToInt32(dato[5].ToString()) + " - " + Convert.ToInt32(dato[6].ToString()) + " - " + Convert.ToInt32(dato[7].ToString()) + " - " + Convert.ToInt32(dato[8].ToString()) + " - " + dato[9].ToString() + ";\n";
                    }
                    else if (rut == "contactos")
                    {
                        // [0]Usuario padre, [1]Nickname, [2]ContraseNa, [3]correo electronico
                        AgregarContacto(dato[0].ToString(), dato[1].ToString(), dato[2].ToString(), dato[3].ToString());
                    }
                    else if (rut == "historial")
                    {
                        //[0]Coordenada X [1]Coordenada Y [2]Unidad Atacante [3]Resultado (golpe = 0 eliminacion de objetivo = 1) [4]Unidad
                        //Int32.Parse
                        NodoB nuevoNodoB = new NodoB(dato[0].ToString(), Int32.Parse(dato[1]), dato[2].ToString(), Int32.Parse(dato[3]), dato[4].ToString(), "", "", "8/01/2017", "02:00", 1);
                        nuevoAB.insertarNuevoHorario(nuevoNodoB);
                    }
                }
                banderaEncabezado = true;
                getLine           = leer.ReadLine();
            }
            leer.Close();
        }
        catch (Exception e) {
            Console.WriteLine("Exception: " + e.Message);
        }
        // Crea el dot y el png
        string cadena = "";

        if (rut == "usuarios")
        {
            //string etiqueta;
            //etiqueta = "label=\"Altura: " + nuevoABB.altura() + "\nRamas: " + nuevoABB.ramas() + "\nHojas: " + nuevoABB.hojas() + "\"";
            cadena = "digraph G {\nlabel = \"Arbol de Usuarios\nAltura: " + nuevoABB.altura() + "\nRamas: " + nuevoABB.ramas() + "\nHojas: " + nuevoABB.hojas() + "\";\n" + nuevoABB.dotArbol() + "\n}";
            crearDot(cadena, rut);
            crearPng(rut);
            //cadena = "";
            //cadena = "digraph G {\nlabel = \"Arbol de Usuarios Espejo\";\n" + nuevoAE.dotArbolEspejo() + "\n}";
            //crearDot(cadena, "usuariosEspejo");
            //crearPng("usuariosEspejo");
        }
        else if (rut == "tablero")
        {
            cadena = "digraph G{\nnode[shape=box, style=filled, color=Gray95];edge[color=black];rankdir=UD;\nlabel = \"Nivel 0\";\n" + nuevoC.textoParaGraficarMatriz() + "}";
            crearDot(cadena, "tablero");
            crearPng(rut);
            cadena = "digraph G{\nnode[shape=box, style=filled, color=Gray95];edge[color=black];rankdir=UD;\nlabel = \"Nivel 1 - Submarinos\";\n" + n1.textoParaGraficarMatriz() + "}";
            crearDot(cadena, "nivel1");
            crearPng("nivel1");
            cadena = "digraph G{\nnode[shape=box, style=filled, color=Gray95];edge[color=black];rankdir=UD;\nlabel = \"Nivel 2 - Barcos\";\n" + n2.textoParaGraficarMatriz() + "}";
            crearDot(cadena, "nivel2");
            crearPng("nivel2");
            cadena = "digraph G{\nnode[shape=box, style=filled, color=Gray95];edge[color=black];rankdir=UD;\nlabel = \"Nivel 3 - Aviones\";\n" + n3.textoParaGraficarMatriz() + "}";
            crearDot(cadena, "nivel3");
            crearPng("nivel3");
            cadena = "digraph G{\nnode[shape=box, style=filled, color=Gray95];edge[color=black];rankdir=UD;\nlabel = \"Nivel 4 - Satélites\";\n" + n4.textoParaGraficarMatriz() + "}";
            crearDot(cadena, "nivel4");
            crearPng("nivel4");
        }
        else if (rut == "juegos")
        {
            cadena = "digraph G {\nlabel = \"Arbol de Usuarios y Juegos\";\n" + nuevoABB.dotArbol() + "\n}";
            crearDot(cadena, rut);
            crearPng(rut);
            //cadena = "";
            //cadena = "digraph G {\nlabel = \"Arbol de Usuarios y Juegos Espejo\";\n" + nuevoAE.dotArbolEspejo() + "\n}";
            //crearDot(cadena, "juegosEspejo");
            //crearPng("juegosEspejo");
        }
        else if (rut == "juegoActual")
        {
            //cadena = "";
        }
        else if (rut == "contactos")
        {
            cadena = "digraph G {\nlabel = \"Arbol de Usuarios y Contactos\";\n" + nuevoABB.dotArbol() + "\n}";
            crearDot(cadena, rut);
            crearPng(rut);
        }
        else if (rut == "historial")
        {
            cadena = "digraph G {\nlabel = \"Historial\";\n" + nuevoAB.graficarArbol() + "\n}";
            crearDot(cadena, rut);
            crearPng(rut);
        }

        return(cuerpo);
    }
コード例 #16
0
ファイル: ArbolB.cs プロジェクト: jocaqes/EDD_201212921
        private NodoB insertar(NodoB raiz, NodoB padre, Ataque valor)
        {
            if (raiz.paginas == null)     //si no tiene paginas
            {
                raiz.valores.push(valor); //agrego directamente el valor al nodo
            }
            else//si tiene paginas
            {
                Nodus <NodoB>  pagina_actual = raiz.paginas.raiz;
                Nodus <Ataque> padre_aux     = raiz.valores.raiz;
                while (pagina_actual.siguiente != null)                           //mientras no sea la ultima pagina
                {
                    if (frenoEnQuePaginaInserto(valor, pagina_actual, padre_aux)) //si valor es menor que el ultimo valor de la pagina actual
                    {
                        break;
                    }

                    /* if (valor.Y < pagina_actual.Item.valores.fin.Item.Y || valor.Y < padre_aux.Item.Y)//si valor es menor que el ultimo valor de la pagina actual
                     *   break;*/
                    if (pagina_actual != null)
                    {
                        pagina_actual = pagina_actual.siguiente;
                    }
                    padre_aux = padre_aux.siguiente;
                }
                insertar(pagina_actual.Item, raiz, valor);                         //inserto en la pagina
            }
            quickSort(raiz.valores, 0, raiz.valores.count - 1);                    //ordeno los valores
            if (raiz.valores.count == grado)                                       //si tengo un numero valores iguales al grado, mientras deberia ser grado -1
            {
                Nodus <Ataque> aux     = raiz.valores.pull((grado / 2) - 1, true); //porque -1? para agarrar el nodo izq para subir, sin -1 toma el der pero aun asi seria correcto
                bool           derecha = false;                                    //esta bandera me ayuda a saber si se generan 2 paginas, o 1 al dividir
                if (padre == null)                                                 //si no hay un nodo superior a este
                {
                    padre         = new NodoB();                                   //creo un nuevo padre
                    padre.valores = new Lista <Ataque>();                          //inicializo su lista de valores
                    padre.paginas = new Lista <NodoB>();                           //inicializo su lista de paginas
                    derecha       = true;
                }
                padre.valores.push(aux.Item);       //ingreso el nuevo valor
                NodoB izq = new NodoB();            //hago un nodo b auxilliar
                izq.valores = new Lista <Ataque>(); //inicializo su lista de valores
                int i;
                for (i = 1; i < (grado / 2); i++)
                {
                    izq.valores.push(raiz.valores.pop());//agrego los valores al nuevo nodo
                }
                #region Recuperar paginas izq
                if (raiz.paginas != null && raiz.paginas.count > grado)
                {
                    izq.paginas = new Lista <NodoB>();
                    for (i = 0; i < (grado / 2); i++)
                    {
                        izq.paginas.push(raiz.paginas.pop());
                    }
                }
                #endregion

                #region Posicionar Pagina
                if (!derecha)
                {
                    Nodus <NodoB> aux_pp = padre.paginas.raiz;
                    int           limite = padre.paginas.count;

                    for (i = 0; i < limite; i++)
                    {
                        if (frenoDondeInsertoPagina(izq, aux_pp))
                        {
                            break;
                        }

                        /*if (izq.valores.fin.Item.Y < aux_pp.Item.valores.raiz.Item.Y)//busco entre que paginas va la nueva pagina
                         *  break;*/
                        aux_pp = aux_pp.siguiente;
                    }
                    //padre.paginas.push(izq);
                    if (i == 0 && aux_pp == padre.paginas.raiz)//si debe ser la primera pagina
                    {
                        padre.paginas.pushTop(izq);
                    }
                    else
                    {
                        padre.paginas.pushAt(izq, i);//si debe ser posicionado en medio
                    }
                }
                #endregion
                else//si padre empezo como null le agrego 2 paginas nuevas, pero si no lo es solo le agrego 1 y la otra solo pierde n valores
                {
                    padre.paginas.push(izq);

                    NodoB der = new NodoB();
                    #region Recuperar paginas
                    if (raiz.paginas != null && izq.paginas != null)
                    {
                        der.paginas = new Lista <NodoB>();
                        while (raiz.paginas.count != 0)
                        {
                            der.paginas.push(raiz.paginas.pop());
                        }
                    }
                    #endregion
                    der.valores = new Lista <Ataque>();
                    while (raiz.valores.count != 0)
                    {
                        der.valores.push(raiz.valores.pop());
                    }
                    padre.paginas.push(der);
                }
            }

            if (padre == null)
            {
                return(raiz);
            }
            else
            {
                return(padre);
            }
        }
コード例 #17
0
ファイル: BTree.cs プロジェクト: ChristianR007/EDD_201504444
 // Metodo publico encargado de hacer la insercion
 public void insertarNuevoHorario(NodoB clave)
 {
     insertaPrivado(clave, this.p);
 }
コード例 #18
0
ファイル: ArbolB.cs プロジェクト: jocaqes/EDD_201212921
        private bool frenoDondeInsertoPagina(NodoB a_insertar, Nodus <NodoB> paginas)
        {
            /*if (izq.valores.fin.Item.Y < aux_pp.Item.valores.raiz.Item.Y)
             *  break;*/
            switch (patron)
            {
            case "CoordenadaY":
                if (a_insertar.valores.fin.Item.Y < paginas.Item.valores.raiz.Item.Y)
                {
                    return(true);
                }
                return(false);

            case "CoordenadaX":
                if (a_insertar.valores.fin.Item.X.CompareTo(paginas.Item.valores.raiz.Item.X) < 0)
                {
                    return(true);
                }
                return(false);

            case "Resultado":
                if (a_insertar.valores.fin.Item.Resultado.CompareTo(paginas.Item.valores.raiz.Item.Resultado) < 0)
                {
                    return(true);
                }
                return(false);

            case "Emisor":
                if (a_insertar.valores.fin.Item.Emisor.CompareTo(paginas.Item.valores.raiz.Item.Emisor) < 0)
                {
                    return(true);
                }
                return(false);

            case "Receptor":
                if (a_insertar.valores.fin.Item.Receptor.CompareTo(paginas.Item.valores.raiz.Item.Receptor) < 0)
                {
                    return(true);
                }
                return(false);

            case "Fecha":
                if (a_insertar.valores.fin.Item.Fecha.CompareTo(paginas.Item.valores.raiz.Item.Fecha) < 0)
                {
                    return(true);
                }
                return(false);

            case "Tiempo Restante":
                if (a_insertar.valores.fin.Item.Tiempo_restante.CompareTo(paginas.Item.valores.raiz.Item.Tiempo_restante) < 0)
                {
                    return(true);
                }
                return(false);

            case "No. Ataque":
                if (a_insertar.valores.fin.Item.Numero_ataque < paginas.Item.valores.raiz.Item.Numero_ataque)
                {
                    return(true);
                }
                return(false);

            case "Tipo Unidad":
                if (a_insertar.valores.fin.Item.Tipo_unidad_danyada.CompareTo(paginas.Item.valores.raiz.Item.Tipo_unidad_danyada) < 0)
                {
                    return(true);
                }
                return(false);

            case "Unidad Atacante":
                if (a_insertar.valores.fin.Item.Atacante.CompareTo(paginas.Item.valores.raiz.Item.Atacante) < 0)
                {
                    return(true);
                }
                return(false);

            default:
                return(true);
            }
        }
コード例 #19
0
ファイル: ArbolB.cs プロジェクト: jocaqes/EDD_201212921
 public ArbolB()
 {
     raiz  = null;
     count = 0;
     //par = esPar(grado);
 }