ARCHIVOS en DELPHI Bienvenido al mundo paradigmático..!!
Un día sin sonrisas es un día perdido..!! PARADIGMA
Solo existen dos cosas importantes en la vida:
La primera es el sexo ..
y la segunda,.. no me acuerdo..!!
Woody Allen

QUE ES.? Qué es un ARCHIVO.??
Clases Altas
Característica Consultas
Clases Bajas
Característica Modificar
Característica Bonus
Diseño | VOLVER | | Arbol | | Base de Dato | | Listas | | Matriz y Vector |

Un día sin sonrisas es un día perdido..!! PARADIGMA
Del árbol del silencio
pende el fruto de la seguridad..!!
Proverbio

.. ahora si crees que los árboles solo sirven de inodoro para perros y estas de acuerdo con la Caperucita, que afirma que el Lobo la tiene chica...!!!, te puedo demostrar que ..

Te amo..!! tu tésis es un paradigma..!!

Te amo..!! y el aviso también..!!

.. pero si lo anterior te huele mal, solo necesitas..

Gracias a mis hijos..!! Conceder..

GRACIAS A LA VIDA..!! ..dinero..!!

Un día sin sonrisas es un día perdido..!! PARADIGMA
Si lo que vas a decir no es más bello que el silecio
.. no lo digas ..!!
Proverbio

Volver al principio


ARBOLES en DELPHI Volver al principio
Un día sin sonrisas es un día perdido..!! PARADIGMA
Cuando los que mandan pierden la verguenza
Los que obedecen pierden el respeto..!!
Confucio

ARBOL BINARIO CON ARCHIVO

Mi colega virtual si tienes ganas de leer esta page y piensas que al final serás el mismo, creo que te equivocas, por que es factible que contigo ocurran alguna de las siguientes alternativas..

  1. Que prefieras seguir pensando que la mejor función del árbol es dar frutos.
  2. Que las estructuras de datos manejadas como arboles son un WEBada...!!
  3. Que lo mejor que tiene esta page son sus grafitis.
  4. Que mejor me dedique a otra cosa.
  5. Que logré mi objetivo de compartir contigo mi experiencia.

Cualquiera sea tu opinión, me agradaría conocerla...!!!

Tu deseo a mi email personal: wilucha@hotmail.com
o en mi casa: wilucha@ciudad.com.ar

.. ahora si esta WEBada te importa un comino y estas de acuerdo con Robin, que afirma que Batman la tiene chica...!!!, permite que te demuestre que ..

Te amo..!! cada tucumano es un paradigma..!!

Te amo..!! y los viejos también..!!

.. pero si lo anterior te huele mal, solo ponte a..

GRACIAS A LA VIDA..!! FiloWEBear..!!

Gracias a mis hijos..!! FiloWEBear..más..!!

  1. No cometa errores. Cometa Halley.
  2. Los honestos son inadaptados sociales.
  3. Evite el SIDA: Use guardapolvos.
  4. A Lincoln lo mató Bagley.
  5. Ya vendrán tiempos mejores, dijo una vieja zurciendo un profiláctico.
  6. Si un pájaro te dice que estás loco, debes estarlo pues los pájaros no hablan.

Volver al principio


QUE ES ESTO..???
Variables dinámicas Volver al principio

Vuela tu mente...!! Fuma dinamita..!!!

ARBOL BINARIO

Un árbol binario es un conjunto de elementos que esta vacio o dividido en tres subconjuntos separados.

El primer subconjunto contiene un elemento único llamado la raíz. Los otros dos subconjuntos son por si mismo arboles binarios y se les llama subárboles izquierdo y subárboles derecho.

Cada elemento se denomina nodo. Un Arbol se representa así:



              A
             / \
           B    C
          / \
         D   E
            / \
           F   G

  Si A es raíz de un árbol binario y B es la raíz del subárbol izquierdo o derecho, 
  se dice que

     A es el padre de B
     B es el hijo izquierdo de A,
     C será el hijo derecho de A.

     Un nodo que no tiene hijos se denomina hoja ej: B, D, F, G de la figura.

El nodo n1 es un ancestro de del nodo n2 (y n2 es descendiente de n1) si n1 es el padre de n2 o el padre de algún ancestro de n2.

Por ejemplo A es un ancestro de F y G es descendiente de C. Dos nodos se dicen hermanos si son los hijos derecho e izquierdo del mismo padre.

Si cada nodo que no es una hoja tiene subárboles izquierdo y derecho que no están vacíos, se llama árbol estrictamente binario.

Un árbol estrictamente binario de n hojas siempre tienen 2n-1 nodos.

El nivel de un árbol se define de la siguiente forma, el nivel de la raíz de un árbol es 0, y el nivel de cualquier otro nodo es uno mas que el de su padre.

La profundidad de un árbol es el máximo nivel de cualquier hoja.

La potencia total de la técnica de asignación dinámica con acceso a través de apuntadores es exhibida en aquellas aplicaciones en las cuales la estructura del árbol mismo varia, es decir crece y/o se contrae durante la ejecución del programa.

RECORRER: el árbol que consta en visitar todos los nodos del árbol. Existen tres ordenamientos principales que surgen en forma natural de las estructuras de los árboles.

Al igual que la estructura de árbol, se expresan en forma recursiva.



  1. Preorden : R, A, B	 (visitar el nodo raíz antes que los subárboles)
  2. En orden : A, R, B  
  3. Postorden :A, B, R   (visitar los subárboles antes de la raíz)
 
                   |
                   R
                  /  \
                 A    B

Los árboles binarios se usan para representar un conjunto de datos cuyos elementos se recuperan a través de una llave única.

Si un árbol se organiza en tal forma que para cada nodo Ti todas las llaves en el subárbol izquierdo de Ti sean menores que la llave Ti, y las llaves del subárbol derechos sean mayores que la llave Ti, entonces ese árbol se llama árbol de búsqueda.

Para comenzar es necesario que registres las declaraciones de las estructuras de tus datos


type

 Ficha=RECORD
   Codigo:String[5];
   nombre:String[30];
   SiEsta:Boolean;
 end;

 Nodo=^NodoDeLaLista;

 NodoDeLaLista=RECORD
   Codigo:String[5];
   EstanEn:Integer;
   nombre:String[30];
   Siguiente:Nodo;
  Anterior:Nodo;
 end;

 PunteroArbol=^NodoDelArbol;
 
 NodoDelArbol=RECORD
   Codigo:String[5];
   EstanEn:Integer;
   nombre:String[30];
   RamaDerecha:PunteroArbol;
   RamaIzquierda:PunteroArbol;
 end;
  1. Mi vieja es una yegua. (Ico)
  2. X (un analfabeto)
  3. Tengo todos mis hijos de apellido distinto. (Juan Carlos Distinto)
  4. El maestro se está haciendo la rata. (las tortugas ninja)
  5. Mi marido se vive yendo por las ramas. (la esposa de Tarzán)


Volver al principio


ALTAS
Ingreso de nuevos datos Volver al principio

Si cuando comí huevos me pateó el hígado, cuando coma hígado... ¿me pateará los huevos?

CREACION DE NODOS

En este link veras la manera de crear un nuevo nodo, cargar sus campos luego grabarlo en un archivo


procedure TMiFormulario.FormCreate(Sender: TObject);
begin
     MiFicus:=Nil;
     NodoDeLista:=Nil;
     OpcionDeCambio:=0;
     AssignFILE(Archivo,'DatoPino.dat');
     {$I-}
     Reset(Archivo);
     {$I+}
     if ioresult <> 0 then
     rewrite(Archivo);
     CloseFILE(Archivo);
     CargarFicus;
     CargarLaLista;
     OrdenarLaLista;
end;

procedure TMiFormulario.BotonAltaClick(Sender: TObject);
begin
     PanelDatos.Visible:=true;
     BotonTopeArriba.Visible:=false;
     BotonArriba.Visible:=false;
     BotonAbajo.Visible:=false;
     BotonTopeAbajo.Visible:=false;
     OpcionDeCambio:=1;
     ActivarPanelDatos;
     LimpiarBoxDatos;
end;

Procedure TMiFormulario.CargarFicus;
begin
     Reset(Archivo);
     while not eof(Archivo)do
     begin
          read(Archivo,Registro);
          i:=FilePos(Archivo);
          InsertarDatoEnNodo(MiFicus,Registro,true);
     end;
     CloseFile(Archivo);
end;

Procedure TMiFormulario.InsertarDatoEnNodo(var Raiz:PunteroArbol;FichaLeida:Ficha;bandera:Boolean);
begin
     if Raiz=nil then
     begin
          new(Raiz);
          Raiz^.RamaDerecha:=nil;
          Raiz^.RamaIzquierda:=nil;
          Raiz^.codigo:=FichaLeida.codigo;
          Raiz^.nombre:=FichaLeida.nombre;
          if not bandera then
          seek(Archivo,Filesize(Archivo));
          Raiz^.EstanEn:=Filepos(Archivo)-1;
     end
     else
     if FichaLeida.Codigo< Raiz^.Codigo then
     InsertarDatoEnNodo(Raiz^.RamaIzquierda,FichaLeida,bandera)
     else
     InsertarDatoEnNodo(Raiz^.RamaDerecha,FichaLeida,bandera);
end;

Procedure TMiFormulario.CargarLaLista;
var
   Nuevo:Nodo;
begin
     Reset(Archivo);
     while not eof(Archivo) do
     begin
          read(Archivo,Registro);
          new(Nuevo);
          Nuevo^.Siguiente:=Nil;
          Nuevo^.Anterior:=Nil;
          Nuevo^.Codigo:=Registro.Codigo;
          Nuevo^.nombre:=Registro.nombre;
          Nuevo^.EstanEn:=Filepos(Archivo)-1;
          if NodoDeLista= Nil then
          NodoDeLista:=Nuevo
          else
          begin
               Actual:=NodoDeLista;
               while Actual^.Siguiente<>Nil do
               Actual:=Actual^.Siguiente;
               Actual^.Siguiente:=Nuevo;
               Nuevo^.Anterior:=Actual;
          end;
     end;
end;

Procedure TMiFormulario.OrdenarLaLista;
Var
   bandera:Boolean;
   Codigo:String[5];
   nombre:String[30];
   EstanEn:Integer;
begin
     if NodoDeLista <> NIL then
     repeat
     Actual:=NodoDeLista;
     bandera:=False;
     While(Actual^.Siguiente<>NIL)do
     begin
          Auxiliar:=Actual^.Siguiente;
          if Actual^.Codigo > Auxiliar^.Codigo then
          begin
               Codigo:=Auxiliar^.Codigo;
               nombre:=Auxiliar^.nombre;
               EstanEn:=Auxiliar^.EstanEn;
               Auxiliar^.Codigo:=Actual^.Codigo;
               Auxiliar^.nombre:=Actual^.nombre;
               Auxiliar^.EstanEn:=Actual^.EstanEn;
               Actual^.Codigo:=Codigo;
               Actual^.nombre:=nombre;
               Actual^.EstanEn:=EstanEn;
               bandera:=true;
          end;
          Actual:=Actual^.Siguiente;
     end;
     Until(bandera=false);
end;

Procedure TMiFormulario.PasarDatosFichaANodo(Registro:Ficha);
var
   Nuevo:Nodo;
begin
     new(Nuevo);
     Nuevo^.Codigo:=Registro.Codigo;
     Nuevo^.nombre:=Registro.nombre;
     Nuevo^.EstanEn:=Filepos(Archivo)-1;
     Nuevo^.Siguiente:=nil;
     Nuevo^.Anterior:=nil;
     if NodoDeLista=nil then
     NodoDeLista:=Nuevo
     else
     begin
          Actual:=NodoDeLista;
          while Actual^.Siguiente<> nil do
          Actual:=Actual^.Siguiente;
          Actual^.Siguiente:=Nuevo;
          Nuevo^.Anterior:=Actual;
     end;
end;

Procedure TMiFormulario.GrabarFichaEnArchivo;
begin
     if ElNroDeNodoEs(MiFicus,BoxCodigo.Text)=-1 then
     begin
          Reset(Archivo);
          Registro.Codigo:=BoxCodigo.Text;
          Registro.nombre:=BoxNombre.Text;
          Registro.SiEsta:=false;
          Seek(Archivo,filesize(Archivo));
          write(Archivo,Registro);
          InsertarDatoEnNodo(MiFicus,Registro,false);
          PasarDatosFichaANodo(Registro);
          OrdenarLaLista;
          CloseFILE(Archivo);
     end
     else
         Application.MessageBox('La Ficha con ese codigo ya existe','Atencion',MB_OKCANCEL);
end;

procedure TMiFormulario.BotonAceptarClick(Sender: TObject);
begin
     MiFormulario.Caption:='Estructura Dinamica: Arboles';
     PanelDatos.Visible:=false;
     CASE (OpcionDeCambio) OF
     1:GrabarFichaEnArchivo;
     2:
       Begin
            EliminarNodo(BoxCodigo.Text);
            BorradoFisico;
            Actual:=NodoDeLista;
            while Actual<>Nil do
            Begin
                 NodoDeLista:=Actual^.Siguiente;
                 Dispose(Actual);
                 Actual:=NodoDeLista;
            end;
            NodoDeLista:=Nil;
            CargarLaLista;
            OrdenarLaLista;
            BorrarNodo(MiFicus,BoxCodigo.Text);
       end;
       3: ModificarFicha(BoxCodigo.Text);
     end;
end;

procedure TMiFormulario.BotonGrabarClick(Sender: TObject);
begin
     MiFormulario.Caption:='Estructura Dinamica: Arboles';
     PanelDatos.Visible:=false;
     CASE (OpcionDeCambio) OF
     1:GrabarFichaEnArchivo;
     2:
       Begin
            EliminarNodo(BoxCodigo.Text);
            BorradoFisico;
            Actual:=NodoDeLista;
            while Actual<>Nil do
            Begin
                 NodoDeLista:=Actual^.Siguiente;
                 Dispose(Actual);
                 Actual:=NodoDeLista;
            end;
            NodoDeLista:=Nil;
            CargarLaLista;
            OrdenarLaLista;
            BorrarNodo(MiFicus,BoxCodigo.Text);
       end;
       3: ModificarFicha(BoxCodigo.Text);
     end;
end;


  1. La droga te buelbe vruto.!
  2. La novia de Tarzán es una 'ramera'.
  3. Papa Noél labura una vez al año y encima es mentira.!
  4. Esta obsesión de suicidio me está matando.!
  5. Perro que ladra, no es mudo.


Volver al principio


CONSULTAS
Ver datos Volver al principio

¿Por qué no hay comida para gatos 'con sabor a ratón'?

VER NODOS

Recorriendo los nodos del árbol



procedure TMiFormulario.BotonVerClick(Sender: TObject);
var
   j:integer;
begin
     if BotonVer.Caption='&Grilla' then
       begin
          BotonVer.Caption:='&Cerrar';
          GrillaDeDatos.Visible:=true;
          j:=1;
          GrillaDeDatos.Cells[0,0]:='Codigo';
          GrillaDeDatos.Cells[1,0]:='Nombre';
          InOrden(MiFicus,j);
       end
      else
       begin
          BotonVer.Caption:='&Grilla';
          GrillaDeDatos.Visible:=false;
       end;
end;

Procedure TMiFormulario.ActivarPanelDatos;
begin
     BoxCodigo.Enabled:=True;
     BoxNombre.Enabled:=True;
     BoxCodigo.Visible:=True;
     BoxCodigo.SetFocus;
end;

PROCEDURE TMiFormulario.LimpiarBoxDatos;
begin
BoxCodigo.text:='';
BoxNombre.text:='';
end;


Procedure TMiFormulario.MostrarBoxConDatos(EstanEn:Integer);
begin
     Reset(Archivo);
     Seek(Archivo,EstanEn);
     Read(Archivo,Registro);
     BoxCodigo.Text:=Registro.Codigo;
     BoxNombre.Text:=Registro.nombre;
     CloseFILE(Archivo);
end;

  1. En el escrito me fue bárbaro, pero en el oral me cagaron. (Bernardo, el ayudante del Zorro)
  2. No a la donación de órganos. (Yamaha)
  3. No me banco a Charly García. (una hormiga)
  4. Cleopatra es una puta. (Marco Antonio)
  5. Marco Antonio es un sapo. (Cleopatra)
  6. Yo siempre me voy de boca. (El bambino Veira)



Procedure TMiFormulario.InOrden(Raiz:PunteroArbol;Var j:Integer) ;
begin
     if Raiz<>NIL then
     begin
          InOrden (Raiz^.RamaIzquierda,j);
          GrillaDeDatos.Cells[0,j]:=Raiz^.Codigo;
          GrillaDeDatos.Cells[1,j]:=Raiz^.nombre;
          if j=GrillaDeDatos.RowCount then
          GrillaDeDatos.RowCount:=GrillaDeDatos.RowCount+1;
          j:=j+1;
          InOrden(Raiz^.RamaDerecha,j);
     end;
     while ( GrillaDeDatos.Cells[0,i+1]<>'')do
     begin
          GrillaDeDatos.Cells[0,i+1]:='';
          GrillaDeDatos.Cells[1,i+1]:='';
     end;
end;


  1. Ojo por ojo... ojenta y guatro. (..un gangoso)
  2. Mi amor, no puedo vivir sin voz. (..Pavarotti)
  3. Después de mi... fa. (..Beethoven)
  4. Dejen de sacarme el cuero! (..una vaca)
  5. Cuando venis, me pongo toda colorada. (Siempre Libre)


Volver al principio


BAJAS
Eliminar datos Volver al principio

¿Por qué apretamos más fuerte los botones del control remoto cuando tiene poca batería??

BORRAR NODOS

Ahora te propongo ejemplos de cómo efectuar tanto una baja lógica como una física..



procedure TMiFormulario.BotonBajaClick(Sender: TObject);
begin
     PanelDatos.Visible:=true;
     BotonTopeArriba.Visible:=true;
     BotonArriba.Visible:=true;
     BotonAbajo.Visible:=true;
     BotonTopeAbajo.Visible:=true;
     OpcionDeCambio:=2;
end;

Procedure TMiFormulario.EliminarNodo(CodigoElegido:String);
var
   NroDeFicha:Integer;
begin
     Reset(Archivo);
     NroDeFicha:=ElNroDeNodoEs(MiFicus,CodigoElegido);
     If NroDeFicha <> -1 then
     Begin
          Seek(Archivo,NroDeFicha);
          read(Archivo,Registro);
          Registro.SiEsta:=true;
          if Actual=NodoDeLista then
          Begin
               NodoDeLista:=Actual^.Siguiente;
               NodoDeLista^.Anterior:=nil;
          end
          else
          begin
               Auxiliar:=Actual^.Anterior;
               Auxiliar^.Siguiente:=Actual^.Siguiente;
               if Actual^.Siguiente<>nil then
               begin
                    Auxiliar:=Actual^.Siguiente;
                    Auxiliar^.Anterior:=Actual^.Anterior;
               end;
          end;
          Dispose(Actual);
          Actual:=Auxiliar;
          Seek(Archivo,Filepos(Archivo)-1);
          write(Archivo,Registro);
          BorrarNodo(MiFicus,CodigoElegido);
          Application.MessageBox('El dato se borro','ELIMINACION',MB_OK);
     end
     else
     Application.MessageBox('No se encuentra el nodo','ATENCION',MB_OK);
     CloseFILE(Archivo);
end;
  1. El cuarteto desciende de la Mona. (los cordobeses)
  2. Voy y vuelvo. (un boomerang)
  3. Ayude a los inundados. (Aquaman)
  4. Paty te quiero! (Fargo)
  5. El baile está estrictamente relacionado con el psicoanálisis. (Freud Astaire)



procedure TMiFormulario.BotonCancelarClick(Sender: TObject);
begin
     PanelDatos.Visible:=false;
     LimpiarBoxDatos;
end;

Procedure TMiFormulario.BorrarNodo(var LaRamaNodo:PunteroArbol;CodigoElegido:String);
var
   Auxiliar,Anterior,EstanEn:PunteroArbol;
   EsRamaIzquierda:Boolean;
begin
     if CodigoElegido=LaRamaNodo^.Codigo then
     begin
          if (LaRamaNodo^.RamaDerecha<>nil)and (LaRamaNodo^.RamaIzquierda<>nil )then
          begin
               Auxiliar:=LaRamaNodo^.RamaDerecha;
               while Auxiliar^.RamaIzquierda <> nil do
               Auxiliar:=Auxiliar^.RamaIzquierda;
               Auxiliar^.RamaIzquierda:=LaRamaNodo^.RamaIzquierda;
               Anterior:=LaRamaNodo;
               LaRamaNodo:=Auxiliar;
               Dispose(Anterior);
          end
          else
          if (LaRamaNodo^.RamaDerecha=nil)and (LaRamaNodo^.RamaIzquierda=nil)then
          begin
               Auxiliar:=LaRamaNodo;
               LaRamaNodo:=nil;
               dispose(Auxiliar);
          end
          else
          if LaRamaNodo^.RamaDerecha=nil then
          begin
               Auxiliar:=LaRamaNodo;
               LaRamaNodo:=LaRamaNodo^.RamaIzquierda;
               Dispose(Auxiliar);
          end
          else
          if LaRamaNodo^.RamaIzquierda=nil then
          begin
               Auxiliar:=LaRamaNodo;
               LaRamaNodo:=LaRamaNodo^.RamaDerecha;
               Dispose(Auxiliar);
          end
     end
     else
     begin
          Auxiliar:=LaRamaNodo;
          while (Auxiliar<>nil)and (Auxiliar^.Codigo<>CodigoElegido) do
          begin
               Anterior:=Auxiliar;
               if Auxiliar^.Codigo > CodigoElegido then
               begin
                    Auxiliar:=Auxiliar^.RamaIzquierda;
                    EsRamaIzquierda:=true;
               end
               else
               begin
                    Auxiliar:=Auxiliar^.RamaDerecha;
                    EsRamaIzquierda:=false;
               end;
          end;
          if Auxiliar<>nil then
          begin
               if (Auxiliar^.RamaIzquierda=nil) and (Auxiliar^.RamaDerecha = nil) then
               begin
                    if EsRamaIzquierda then
                    Anterior^.RamaIzquierda:=Auxiliar^.RamaDerecha
                    else
                    Anterior^.RamaDerecha:=Auxiliar^.RamaDerecha;
                    Dispose(Auxiliar);
               end
               else
               if Auxiliar^.RamaDerecha=nil then
               begin
                    if EsRamaIzquierda then
                    Anterior^.RamaIzquierda:=Auxiliar^.RamaIzquierda
                    else
                    Anterior^.RamaDerecha:=Auxiliar^.RamaIzquierda;
                    Dispose(Auxiliar);
               end
               else
               begin
                    EstanEn:=Auxiliar^.RamaDerecha;
                    while EstanEn^.RamaIzquierda<>nil do
                    EstanEn:=EstanEn^.RamaIzquierda;
                    if EsRamaIzquierda then
                    Anterior^.RamaIzquierda:=Auxiliar^.RamaDerecha
                    else
                    Anterior^.RamaDerecha:=Auxiliar^.RamaDerecha;
                    EstanEn^.RamaIzquierda:=Auxiliar^.RamaIzquierda;
                    Dispose(Auxiliar);
               end;
          end
          else
          begin
               Application.MessageBox('El nodo no se encuentra','Baja',MB_OK);
          end;
     end;
end;

Procedure TMiFormulario.BorradoFisico;
var
   Copia:FILE of Ficha;
begin
     AssignFILE(Copia,'Copia.dat');
     rewrite(Copia);
     reset(Archivo);
     while not eof(Archivo) do
     begin
          read(Archivo,Registro);
          if Registro.SiEsta=false then
          begin
               seek(Copia,Filesize(Copia));
               write(Copia,Registro);
          end;
     end;
     CloseFILE(Archivo);
     CloseFILE(Copia);
     Erase(Archivo);
     Rename(Copia,'DatoPino.dat');
     AssignFILE(Archivo,'DatoPino.dat');
end;


  1. Busco dueño. (María de nadie)
  2. A mi no me vengan con vueltas. (la calesita)
  3. A mi no me cagan dos veces. (un pañal descartable)
  4. Yo estuve en la noche de los lápices. (Una mina)
  5. No a los golpes, si a los porrazos. (Bob Marley)


Volver al principio


MODIFICAR
Cambiar datos Volver al principio

¿Por qué los Kamikazes usaban cascos.??

CAMBIANDO LOS CAMPOS

Recuerda que solo podrás modificar los campos de datos del nodo, excepto el campo llave ni los punteros a las ramas




procedure TMiFormulario.BotonCambiosClick(Sender: TObject);
begin
     PanelDatos.Visible:=true;
     ActivarPanelDatos;
     BotonTopeArriba.Visible:=true;
     BotonArriba.Visible:=true;
     BotonAbajo.Visible:=true;
     BotonTopeAbajo.Visible:=true;
     BoxCodigo.Enabled:=false;
     OpcionDeCambio:=3;

end;

Procedure TMiFormulario.ModificarFicha(CodigoElegido:String);
var
   NroDeFicha:Integer;
begin
     Reset(Archivo);
     NroDeFicha:=ElNroDeNodoEs(MiFicus,CodigoElegido);
     if NroDeFicha <> -1 then
     begin
          seek(Archivo,NroDeFicha);
          Registro.nombre:=BoxCodigo.Text;
          Actual^.Codigo:=BoxCodigo.Text;
          Actual^.nombre:=BoxNombre.Text;
          write(Archivo,Registro);
          CambiarPor(MiFicus,BoxCodigo.Text);
          Application.MessageBox('El nodo esta modificado','Cambio de datos',MB_OK);
     end
     else
     Application.MessageBox('Ausencia de datos','El nodo no esta',MB_OK);
     CloseFILE(Archivo);
end;

  1. Sonríe, Odol te ama.
  2. Dios lo sabe todo... mi suegra lo comenta.
  3. La madurez comienza cuando la vida viola la niñez.
  4. Si no eres parte de la solución eres parte del problema.
  5. Si la teoría no corresponde con la realidad, peor para la realidad!


Volver al principio


VARIOS
Accesorios Volver al principio

Si un abogado enloquece... ¿pierde el juicio?

CONTANDO NODOS

Cada nodo es único


Function TMiFormulario.ElNroDeNodoEs(Raiz:PunteroArbol;CodigoElegido:String):Integer;
var
   Auxiliar:PunteroArbol;
begin
     Auxiliar:=Raiz;
     while (Auxiliar<>nil)and (Auxiliar^.Codigo<>CodigoElegido)do
     begin
          if Auxiliar^.Codigo>CodigoElegido then
          Auxiliar:=Auxiliar^.RamaIzquierda
          else
          Auxiliar:=Auxiliar^.RamaDerecha
     end;
     if Auxiliar<>nil then
     begin
          ElNroDenodoEs:=Auxiliar^.EstanEn;
     end
     else
         ElNroDeNodoEs:=-1;
end;

Procedure TMiFormulario.CambiarPor(Raiz:PunteroArbol;CodigoElegido:String);
var
   Auxiliar:PunteroArbol;
begin
     Auxiliar:=Raiz;
     while (Auxiliar<>nil)and (Auxiliar^.Codigo<>CodigoElegido) do
     begin
          if Auxiliar^.Codigo>CodigoElegido then
          Auxiliar:=Auxiliar^.RamaIzquierda
          else
          Auxiliar:=Auxiliar^.RamaDerecha
     end;
     if Auxiliar<>nil then
     begin
          Auxiliar^.nombre:=BoxNombre.Text;
     end
end;

  1. Errar es humano, pero echarle la culpa al otro es mas humano todavía.
  2. Evite la muerte en las calles. Conduzca por la vereda.
  3. Si a la primera no lo haces bien, el paracaidismo no es lo tuyo..!!
  4. No repita el año: Acutalize su almanaque.
  5. La pereza es la madre de todos los Pérez.

AUXILIARES

Estos procedimientos los verás en todos tus programas


procedure TMiFormulario.BotonSalirClick(Sender: TObject);
var
   opcion:integer;
begin
     opcion:=Application.MessageBox('Deseas hacer esto?','Estas por cerrar este programa',MB_OKCANCEL);
     if opcion=IDOK then
     close;
end;


procedure TMiFormulario.BotonAbajoClick(Sender: TObject);
begin
     if Actual^.Siguiente<>nil then
       Actual:=Actual^.Siguiente
    else
       Application.MessageBox('Ojo es la ultima ficha','Tope Bajo',MB_OK);
       MostrarBoxConDatos(Actual^.EstanEn);

end;

procedure TMiFormulario.BotonArribaClick(Sender: TObject);
begin
     if Actual^.Anterior<>nil then
        Actual:=Actual^.Anterior
     else
         Application.MessageBox('Ojo ya estas en el primero mi ficha','Tope superior',MB_OK);
         MostrarBoxConDatos(Actual^.EstanEn);
end;

procedure TMiFormulario.BotonTopeArribaClick(Sender: TObject);
begin
     Actual:=NodoDeLista;
     MostrarBoxConDatos(Actual^.EstanEn);
end;


procedure TMiFormulario.BotonTopeAbajoClick(Sender: TObject);
begin
     While Actual^.Siguiente<>nil do
     Actual:=Actual^.Siguiente;
     MostrarBoxConDatos(Actual^.EstanEn);
end;


procedure TMiFormulario.BotonVolverClick(Sender: TObject);
begin
    PanelDatos.Visible:=false;
end;

  1. Levantare a los caidos y oprimire a los grandes. (El brassier)
  2. La expresión "me importa un pito" carece de sentido. (Florencia de la Vega)
  3. Cuando te fuiste me dejaste un sabor amargo en la boca. (Mónica Lewinski)
  4. A los equipos grandes le vamos a dar pelea... pero a los chicos les vamos a romper el culo. (El Bambino Veira)
  5. Venganzaaaa!! (un ganso)

IMPRIMIR

Te propongo una manera sencilla de imprimir los datos de tus nodos




procedure TMiFormulario.BotonPrintClick(Sender: TObject);
var
   respuesta:integer;
begin
    respuesta:=Application.MessageBox('Tu impresora esta prendida?','Atencion',MB_OKCANCEL);
    if (respuesta=IDOK)then
        PrintDialog.Execute
end;

procedure TMiFormulario.BotonCerrarClick(Sender: TObject);
begin
     PanelDatos.Visible:=false;
     LimpiarBoxDatos;
end;

  1. La leche me la tomo, la silicona la escupo (el hijo de Moria Casán).
  2. ¡Ahora todos!... (Robinson Crusoe).
  3. ¡Somos la rabia! (Luis Pasteur).
  4. ¿Quién dijo que todo está perdido? (Hansel y Gretel).
  5. ¿Me dás una mano? (Clemente).

VARIABLES GLOBALES

Todo lo anterior requiere que declares tus estructuras..!!



var
  MiFormulario: TMiFormulario;
  Registro:Ficha;
  Archivo:FILE of Ficha;
  OpcionDeCambio,i:Integer;
  MiFicus:PunteroArbol;
  NodoDeLista,Actual,Auxiliar:Nodo;

    Procedure ActivarPanelDatos;
    Procedure LimpiarBoxDatos;
    Procedure GrabarFichaEnArchivo;
    Procedure CargarLaLista;
    Procedure CargarFicus;
    Procedure OrdenarLaLista;
    Procedure CambiarPor(Raiz:PunteroArbol;CodigoElegido:String);
    Procedure PasarDatosFichaANodo(Registro:Ficha);
    Procedure InOrden(Raiz:PunteroArbol;Var j:Integer) ;
    Procedure MostrarBoxConDatos(EStanEn:Integer);
    Procedure EliminarNodo(CodigoElegido:String);
    Procedure ModificarFicha(CodigoElegido:String);
    Procedure BorradoFisico;
    Procedure BorrarNodo(var LaRamaNodo:PunteroArbol;CodigoElegido:String);
    Procedure InsertarDatoEnNodo(var Raiz:PunteroArbol;FichaLeida:Ficha;bandera:Boolean);
    Function ElNroDeNodoEs(Raiz:PunteroArbol;CodigoElegido:String):Integer;

  1. El mundo es un pañuelo (Bilardo).
  2. ¿Qué culpa tengo yo si me tocan maridos cornudos? (Silvia Süller)
  3. Yo empece comiendome las uñas. (la Venus de Milo)
  4. Me encanta ir a la escuela. (un piojo)
  5. Hemos batido al enemigo. (Moulinex)

Cuando se 'reproduce' un disco... ¿queda 'encinta'?


Un parto en una calle... ¿es alumbrado público.??

Volver al principio