Académique Documents
Professionnel Documents
Culture Documents
HolaMundo.pascal(online):Captulo9
Ms Siguienteblog
Crearblog Acceder
.c
.java
2 4 DE AG O STO DE 2 0 0 7
Captulo 9
.
Encapsulamiento de Estrucuras
Las clases permiten encapsular la implementacin de la funcionalidad de los objetos. El
usuario (programa que utitiliza los objetos) no necesita conocer como est programado el
objeto que est utilizando. Solo necesita conocer su interface. Es decir: los mtodos
(procedimientos y funciones) definidos en la parte pblica de la clase.
Para probar esto desarrollaremos la clase Pila. Primero implementaremos la pila en un array.
Luego programaremos otra versin que implemente la pila sobre una lista enlazada.
Al programa principal no le debe interesar como est programada (por dentro) la pila. Si
funciona bien entonces la usa y punto.
>> Click para Ms Informacin <<
uPila.pas
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:
39:
38:
Recursos / Download
unituPila;
interface
const
MAX_PILA=100;
type
Pila=class
private
arr:array[1..100]ofinteger;
len:integer;
public
constructorcreate();
procedureponer(v:integer);
functionsacar():integer;
end;
implementation
constructorPila.create();
begin
len:=0;
end;
procedurePila.poner(v:integer);
begin
len:=len+1;
arr[len]:=v;
end;
functionPila.sacar():integer;
begin
sacar:=arr[len];
len:=len1;
end;
end.
http://holamundopascal.blogspot.mx/2007/08/capitulo9_24.html
1 Introduccin
2 Operadores
3 Procedimientos y Funciones
4 Corte de Control
5 Arrays
6 Archivos de Registros
7 Estructuras Dinmicas
8 Arboles y Recursividad
9 Teora de Objetos (intro)
EjemplosResueltos
Ahora en Video!
1/7
15/10/2015
HolaMundo.pascal(online):Captulo9
Si analizamos la seccin public vemos que la clase Pila tiene un constructor y dos mtodos:
poner y sacar.
Las variables de instancia son arr (el array sobre el que implementamos la pila) y len (la
variable que indica la cantidad de elementos que se encuentran apilados).
La variable len debe comenzar en cero (ya que al inicio la pila no tiene elementos). Esta
asignacin la hacemos en el constructor.
Luego, analizando la seccin implementation vemos la implementacin de los mtodos poner
y sacar.
En la implemencin de poner primero incrementamos len y luego asignamos en arr[len] el
elemento v que vamos a meter en la pila. En la implementacin de sacar primero asignamos el
elemento arr[len] como valor de retorno de la funcin y luego decrementamos len.
No al blog de Java
usesuPila_lista;
varp:Pila;
begin
p:=Pila.create();
p.poner(1);
p.poner(2);
p.poner(3);
Super Baterista
writeln(p.sacar());
writeln(p.sacar());
writeln(p.sacar());
end.
Vemos que el programa principal simplemente crea una instancia de Pila y la utiliza. En el
programa no nos "preocupamos" por manejar el len ni el array. Simplemente trabajamos con la
pila.
Ahora analizaremos otra versin de la clase Pila, la cual implementaremos sobre una lista
enlazada.
Sitios Relacionados
PascAlgo (por Lic. Hugo Cuello)
Algoritmia.net
Java Algorithm Framework
Para esto primero vamos a definir un registro Nodo y un tipo PNodo como ^Nodo. Los
definiremos un una unit (untNodo.pas) separada porque los vamos a volver a utilizar ms
adelante, cuando analicemos la clase ListaOrdenada.
untNodo.pas
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
unituntNodo;
interface
type
PNodo=^Nodo;
Nodo=record
info:integer;
sig:PNodo;
end;
implementation
end.
http://holamundopascal.blogspot.mx/2007/08/capitulo9_24.html
2/7
15/10/2015
HolaMundo.pascal(online):Captulo9
unituPila;
interface
usesuntNodo;
type
Pila=class
private
p:PNodo;
public
constructorcreate();
procedureponer(v:integer);
functionsacar():integer;
end;
implementation
constructorPila.create();
begin
end;
procedurePila.poner(v:integer);
varnuevo:PNodo;
begin
new(nuevo);
nuevo^.info:=v;
nuevo^.sig:=p;
p:=nuevo;
end;
functionPila.sacar():integer;
varaux:PNodo;
begin
sacar:=p^.info;
aux:=p;
p:=p^.sig;
dispose(aux);
end;
end.
Clase ListaOrdenada
Para terminar, analizaremos una clase que implementa una lista sobre la cual se podrn
insertar valores ordenados en forma ascendente, con y sin repeticin.
unituListaOrdenada;
interface
usesuntNodo;
type
ListaOrdenada=class
private
lst:PNodo;
actual:PNodo;
http://holamundopascal.blogspot.mx/2007/08/capitulo9_24.html
3/7
15/10/2015
HolaMundo.pascal(online):Captulo9
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
public
constructorcreate();
//buscaelvalorvretorna
//true=>esta,false=>noesta
functionbuscar(v:integer):boolean;
//inserta(ordenado)unvalor
functioninsertar(v:integer
;okRep:boolean):boolean;
//liberalosnodosdelalista
procedureliberar();
//asignaelsiguientevalordelalista
//enlavariablevyretornatrueofalse
//siexisteonounproximovalor
functionsiguiente(varv:integer):boolean;
end;
//:
//masabajoestalaseccionimplementation
//:
implementation
functionListaOrdenada.buscar(v:integer):boolean;
varaux:PNodo;
begin
aux:=lst;
while((aux<>NIL)AND(aux^.info<>v))dobegin
aux:=aux^.sig;
end;
if(aux<>NIL)thenbegin
buscar:=true;
endelsebegin
buscar:=false;
end;
end;
constructorListaOrdenada.create();
begin
lst:=NIL;
actual:=NIL;
end;
http://holamundopascal.blogspot.mx/2007/08/capitulo9_24.html
4/7
15/10/2015
HolaMundo.pascal(online):Captulo9
functionListaOrdenada.insertar(
v:integer
;okRep:boolean):boolean;
varaux,ant,nuevo:PNodo;
begin
//lalistaestavacia...
if(lst=NIL)thenbegin
new(nuevo);
nuevo^.info:=v;
nuevo^.sig:=NIL;
lst:=nuevo;
insertar:=false;
exit;
end;
//elvaloresanterioralprimero
if(v<lst^.info)thenbegin
new(nuevo);
nuevo^.info:=v;
nuevo^.sig:=lst;
lst:=nuevo;
insertar:=false;
exit;
end;
aux:=lst;
ant:=NIL;
while((aux<>NIL)AND(aux^.info<=v))dobegin
ant:=aux;
aux:=aux^.sig;
end;
//llegoalfinaldelalista
if(aux=NIL)thenbegin
new(nuevo);
nuevo^.info:=v;
ant^.sig:=nuevo;
nuevo^.sig:=NIL;
insertar:=false;
exit;
end;
//elvalorexiste...
if(aux^.info=v)thenbegin
if(okRep)thenbegin
new(nuevo);
nuevo^.info:=v;
nuevo^.sig:=aux^.sig;
aux^.sig:=nuevo;
end;
//estaba...retornotrue
insertar:=true;
exit;
end;
//encontreunomayor...
//insertamosentreantyaux
new(nuevo);
nuevo^.info:=v;
nuevo^.sig:=aux;
ant^.sig:=nuevo;
insertar:=false;
end;
functionListaOrdenada.siguiente(
varv:integer):boolean;
begin
if(actual=NIL)thenbegin
http://holamundopascal.blogspot.mx/2007/08/capitulo9_24.html
5/7
15/10/2015
HolaMundo.pascal(online):Captulo9
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
actual:=lst;
v:=actual^.info;
siguiente:=true;
endelsebegin
actual:=actual^.sig;
if(actual<>NIL)thenbegin
v:=actual^.info;
siguiente:=true;
endelsebegin
siguiente:=false;
end;
end;
end;
Esta funcin es "nueva". Permite iterarar la lista. La primera vez que la invocamos retorna (en
el parmetro v) el valor del primer nodo. La segunda vez retorna el valor del segundo nodo y
as hasta el ltimo nodo.
La funcin retorna true o false segn exista un nodo ms para iterar por lo tanto en un
programa podremos iterar la lista (recorrerla de principio a fin) as:
while( lista.siguiente(v) ) do begin ....
procedureListaOrdenada.liberar();
varauxSig,aux:PNodo;
begin
aux:=lst;
while(aux<>NIL)dobegin
auxSig:=aux^.sig;
dispose(aux);
aux:=auxSig;
end;
end;
end.
Ahora veamos un programa principal que utiliza un objeto de la clase ListaOrdenada. Pide al
usuario que ingrese valores y los agrega a la lista. Cuando el usuario finaliza el ingreso de
datos (ingresando un valor cero) itera la lista para mostrar su contenido y luego la libera.
testListaOrdenada.pas
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
usesuListaOrdenada;
var
lista:ListaOrdenada;
valor,iOkRep:integer;
okRep:boolean;
begin
lista:=ListaOrdenada.create();
write(
'Ingrese[valor,repetido(1=>si,0=>no)]:');
readln(valor,iOkRep);
while(valor<>0)dobegin
if(iOkRep>0)thenbegin
okRep:=true;
endelsebegin
okRep:=false;
end;
lista.insertar(valor,okRep);
http://holamundopascal.blogspot.mx/2007/08/capitulo9_24.html
6/7
15/10/2015
HolaMundo.pascal(online):Captulo9
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
write(
'Ingrese[valor,repetido(1=>si,0=>no)]:');
readln(valor,iOkRep);
end;
writeln('[LISTA]');
//iteramoslalistaconelmetodosiguiente()
while(lista.siguiente(valor))dobegin
writeln(valor);
end;
lista.liberar();
end.
No hay comentarios:
Publicar un comentario en la entrada
Entrada ms reciente
Pgina principal
Entrada antigua
http://holamundopascal.blogspot.mx/2007/08/capitulo9_24.html
7/7