URGENTE Bucle infinito en while
Publicado por Daniel (1 intervención) el 18/03/2009 13:58:34
Tengo un programa para calcular la planificación en plazo fijo para un hipermercado. Pero me da un bucle infinito en el primer while. Sé que es en el while porque lo ejecuté con el ddd. Este es es código:
PROCEDURE Planfijo (VAR ListaArray : Lista; NumSuper : integer; VAR SolProb : Solucion);
VAR
i, k, l, r : byte;
BEGIN
ListaArray[0].Plazo := 0;
SolProb[0] := 0;
OrdenarCandidatos (ListaArray, NumSuper);
k := 1;
SolProb[1] := ListaArray[1].Tarea; {La primera tarea siempre se selecciona}
{bucle voraz}
for i := 2 to NumSuper do
begin
r := k;
WHILE (ListaArray[i].Plazo < ListaArray[i-1].Plazo) do
begin
r := r - 1; {Adelantamos la posicion de la tarea i tantas posiciones como sea necesario}
end;
if (Factible (ListaArray, SolProb, i, r) = TRUE) then
begin
for l := k to r + 1 do
begin
if l <= PlazoMax (ListaArray, NumSuper) then
SolProb [l + 1] := SolProb [l];
end;
SolProb [l] := ListaArray[i].Tarea;
k := k + 1;
end;
end;
MostrarSolucion (SolProb, NumSuper);
END;
Es el while en mayúsculas, siempre se queda pensando en la condición del while y no me entra en r := r - 1. La verdad, no tengo ni idea de porque es. Por favor que alguien me ayude es urgente.
PROCEDURE Planfijo (VAR ListaArray : Lista; NumSuper : integer; VAR SolProb : Solucion);
VAR
i, k, l, r : byte;
BEGIN
ListaArray[0].Plazo := 0;
SolProb[0] := 0;
OrdenarCandidatos (ListaArray, NumSuper);
k := 1;
SolProb[1] := ListaArray[1].Tarea; {La primera tarea siempre se selecciona}
{bucle voraz}
for i := 2 to NumSuper do
begin
r := k;
WHILE (ListaArray[i].Plazo < ListaArray[i-1].Plazo) do
begin
r := r - 1; {Adelantamos la posicion de la tarea i tantas posiciones como sea necesario}
end;
if (Factible (ListaArray, SolProb, i, r) = TRUE) then
begin
for l := k to r + 1 do
begin
if l <= PlazoMax (ListaArray, NumSuper) then
SolProb [l + 1] := SolProb [l];
end;
SolProb [l] := ListaArray[i].Tarea;
k := k + 1;
end;
end;
MostrarSolucion (SolProb, NumSuper);
END;
Es el while en mayúsculas, siempre se queda pensando en la condición del while y no me entra en r := r - 1. La verdad, no tengo ni idea de porque es. Por favor que alguien me ayude es urgente.
Valora esta pregunta


0