13-06-2012, 22:24
Cita:Ahora que miro tb me faltó poner la pilaAuxiliar en nil al inicio del while. Lo cambié pero me sigue fallando.
Lo agregue y anduvo! Tambien le hice un par de cambios en el medio, no me acuerdo que pero la cuestion es que ahora anda
Ahí dejo el ejercicio terminado con una prueba (es una pila con los numeros 2, 2, 3, 3, 2)
type
tPunt = ^tNodo;
tNodo = record
info:integer;
sig:tPunt;
end;
procedure crearPila(var p:tPunt);
var nuevo:tPunt;
begin
new(nuevo);
nuevo^.info:=2;
nuevo^.sig:=nil;
p:=nuevo;
new(nuevo);
nuevo^.info:=3;
nuevo^.sig:=p;
p:=nuevo;
new(nuevo);
nuevo^.info:=3;
nuevo^.sig:=p;
p:=nuevo;
new(nuevo);
nuevo^.info:=2;
nuevo^.sig:=p;
p:=nuevo;
new(nuevo);
nuevo^.info:=2;
nuevo^.sig:=p;
p:=nuevo;
end;
function sacar(var p:tPunt):integer;
var aux:tPunt;
begin
sacar:=p^.info;
aux:=p^.sig;
dispose(p);
p:=aux;
end;
procedure meter(var p:tPunt; valor:integer);
var nuevo:tPunt;
begin
new(nuevo);
nuevo^.info:=valor;
nuevo^.sig:=p;
p:=nuevo;
end;
var
nroActual,cantActual,cantMax,nro,nroMax:integer;
pila,pilaAuxiliar:tPunt;
begin
cantMax:=0;
crearPila(pila);
while (pila<>nil) do begin
pilaAuxiliar:=nil;
nroActual := sacar(pila);
cantActual :=1;
while (pila<>nil) do begin
nro := sacar(pila);
if (nro = nroActual) then begin
cantActual:= cantActual +1;
end else begin
meter(pilaAuxiliar,nro);
end;
end;
if(cantActual > cantMax) then begin
nroMax := nroActual;
cantMax := cantActual;
end;
pila := pilaAuxiliar;
end;
writeln('El numero que mas se repite es el ',nroMax);
end.