Pascal/Turbo Pascal - Encolar con prioridad

 
Vista:

Encolar con prioridad

Publicado por Nach (6 intervenciones) el 10/04/2008 13:21:36
Hola he tenido que diseñar el procedimiento de encolar con prioridad de la siguiente forma, pero al utilizar el procedimiento encolar normal, me da error al incrementar el final y no se encontrar el porque, espero vuestras respuestas rápidas porfavor, gracias.

PROCEDURE Encolar(VAR cola_circular:t_ColaCircular;proceso:t_proceso);
BEGIN
if ColaCircular_Llena(cola_circular) then {Mientras no este llena...}
writeln('La cola esta llena, desencole primero')
else
begin
inc(cola_circular.final);{...incrementa 1 el final...}
cola_circular.procesos[cola_circular.final]:= proceso;{... y añade el proceso}
end;
END;

PROCEDURE Encolar_Con_Prioridad (proc:t_proceso; VAR cola:t_ColaCircular);
VAR i:integer;cola_aux:t_ColaCircular;
BEGIN
if ColaCircular_Llena(cola) then
writeln('La cola esta llena, desencole primero')
else {Mientras la cola circular no este llena...}
begin
i:=cola.frente;{"i" es el contador que ira avanzando el frente}
repeat
begin
if Prioridad_Mayor(cola.procesos[i],proc) then {Si la prioridad es mayor...}
begin
Encolar(cola_aux,proc);{1º Introduce el proceso del fichero...}
Encolar (cola_aux,cola.procesos[i]);
{...y luego el correspondiente a la posición que tocara}
end {END del if del Repeat:"Prioridad Mayor"}
else {Si la prioridad no es mayor...}
Encolar(cola_aux,cola.procesos[i]); {En cola el proceso correspondiente}
inc(i); {Incrementa el frente}
end;{END del Repeat}
until Prioridad_Mayor(cola.procesos[i],proc) or (i=cola.final);
{Lo repite hasta que se haya introducido el proceso del fichero, o hasta
que se llegue al final de la cola}
if (i=cola.final) then {Si la cola a llegado a su fin...}
begin
Encolar(cola_aux,proc); {...encola finalmente el proceso del fichero...}
cola:=cola_aux; {...y asigna la cola utilizada en el programa principal
a la cola auxiliar utilizada en el procedimiento}
end
else {Si el proceso del fichero se ha introducido ya..}
begin
repeat
Encolar(cola_aux,cola.procesos[i]);
inc(i);
{Continua encolando todos los demás hasta llegar al final de la cola}
until (i=cola.final);
cola:=cola_aux; {Y asigna la cola a la cola auxiliar utilizada}
end; {END del 3º ELSE: "Fichero ya introducido"}
end; {END del 1º ELSE: "Mientras la cola circular no este llena"}
END;
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder