Bueg, negrada de la UADE de usar pilas y cosads.
En fin.
El ejercicio pide que cargue datos en dos pilas, A y B, independientemente.
Luego, evaluar si los elementos de B están incluidos entre los elementos de A.
Sin importar su orden.
Es decir, si tengo una pila A:
A|1 0 4 6 7 3 2 5
y otra pila B|2 5 0
tengo que decir si B está incluído en A...
O no [b|2 5 8 por ej]
No tengo que evaluar si justo 2 5 0 estan magicamente dentro de a [a|1 0 2 5 0, por ej]
En fin.
Solamente puedo usar operaciones de pilas:
inicializarpila(PILA): la limpia de cualquier basura
tope(PILA): el tope
apilar(PILA,variable): mete como tope de la pila esa variable.
desapilar(PILA): saca el tope de esa pila
Pilavacía(PILA): determina si está vacía
whiles [sin contadores ni cosas rarasd] o ifs
hasta el momento tengo esto:
El coso funciona de maravillas. El problema es que solo me anda si están ordenados. O sea, si por ejemplo, tengo una pila
A|5 6 7 0 2 1* (1 es tope)
y
B|5 0 2
Funciona joya. No le importa que haya elementos en el medio ni nada por el estilo. Lo que si le importa es que el 5 0 2 este en orden. Si fuera 5 2 0, cagué. El programa no vuelve a analizar para atrás. Es obvio que el 5 el 2 y el 0 están dentro de A, pero buep...
Ese es el problema y no sé como lograr que analice para atrasdsd =(
No seg, kpoyo? diablo? [ngds]
En fin.
El ejercicio pide que cargue datos en dos pilas, A y B, independientemente.
Luego, evaluar si los elementos de B están incluidos entre los elementos de A.
Sin importar su orden.
Es decir, si tengo una pila A:
A|1 0 4 6 7 3 2 5
y otra pila B|2 5 0
tengo que decir si B está incluído en A...
O no [b|2 5 8 por ej]
No tengo que evaluar si justo 2 5 0 estan magicamente dentro de a [a|1 0 2 5 0, por ej]
En fin.
Solamente puedo usar operaciones de pilas:
inicializarpila(PILA): la limpia de cualquier basura
tope(PILA): el tope

apilar(PILA,variable): mete como tope de la pila esa variable.
desapilar(PILA): saca el tope de esa pila
Pilavacía(PILA): determina si está vacía
whiles [sin contadores ni cosas rarasd] o ifs
hasta el momento tengo esto:
Código:
program tp1;
uses pilacola;
var
e: integer;
PilaA: pila;
PilaB: pila;
PilaAux: pila;
begin
InicializarPila(PilaA);
InicializarPila(PilaB);
InicializarPila(PilaAux);
writeln('Ingrese elementos para pila A. -1 para detener el programa');
Read(e);
While e<>-1 do
begin
Apilar(PilaA,e);
Read(e);
end;
writeln('ingrese elementos para pila B. -1 para detener el programa');
Read(e);
While e<>-1 do
begin
Apilar(PilaB,e);
Read(e);
end;
while NOT(Pilavacia(PilaA)) AND NOT(pilavacia(pilaB)) do
begin
while NOT(Pilavacia(PilaA)) AND NOT(Pilavacia(PilaB)) do
begin
if Tope(PilaA)=Tope(PilaB) then
begin
apilar(pilaaux,tope(pilaA));
Desapilar(PilaA);
Desapilar(PilaB);
end
else
begin
Apilar(PilaAux,Tope(PilaA));
Desapilar(PilaA);
end;
end;
end;
while NOT(Pilavacia(PilaAux)) do
begin
apilar(PilaA,Tope(PilaAux));
Desapilar(PilaAux)
end;
if Pilavacia(pilaB) then
begin
WriteLn('B esta incluida en A');
end
else
begin
WriteLn('B no esta incluida en A');
end
end.
El coso funciona de maravillas. El problema es que solo me anda si están ordenados. O sea, si por ejemplo, tengo una pila
A|5 6 7 0 2 1* (1 es tope)
y
B|5 0 2
Funciona joya. No le importa que haya elementos en el medio ni nada por el estilo. Lo que si le importa es que el 5 0 2 este en orden. Si fuera 5 2 0, cagué. El programa no vuelve a analizar para atrás. Es obvio que el 5 el 2 y el 0 están dentro de A, pero buep...

Ese es el problema y no sé como lograr que analice para atrasdsd =(
No seg, kpoyo? diablo? [ngds]



Comentario