maxdevm.pas
{ ppc386 -va -vh *.pas }
{ COMIENZO DE DESCRIPCION
Dada una secuencia de numeros (a_1,a_2,...,a_n), vamos a
decir que su "maxima desviacion", es la maxima
diferencia (en valor absoluto) entre todos sus numeros:
maxdev(a_1,a_2,...,a_n) = max_(j=1,n) a_j - min_(j=1,n) a_j
Escribir una funcion "function MAX\_DEV\_M(L:lista; m:integer) :
integer;" que retorna el maximo de las maximas desviaciones de las
subsecuencias de L de longitud m.
Por ejemplo, si (1,3,5,4,3,5), entonces MAX\_DEV\_N(L,3)
debe retornar 4 ya que la maxima desviacion se da en la primera
subsecuencia (1,3,5) y es 4. Se sugiere el siguiente algoritmo,
para cada posicion p en la lista hallar la maxima
desviacion de los m elementos siguientes (incluyendo a
p). Hallar la maxima de estas desviaciones. Keywords: lista
FIN DE DESCRIPCION }
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
{ $ Id: separa.pas 2002/04/05 18:15 jdelia Exp jdelia $}
program maxdevm_p;
uses u_listpi;
type
lista = listpi ;
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
function MAX_DEV_M(L : lista; m:integer): integer;
var
p,q : posicion;
val_p,val_q,retval,c : integer;
begin
p := L.primero;
retval := 0;
while p<>L.fin do
begin
val_p := L.recupera(p);
q:=L.siguiente(p);
c:=2;
while (q<>L.fin) and (c<=m) do
begin
val_q := L.recupera(q);
if (val_q-val_p)>retval then retval := val_q-val_p;
q:=L.siguiente(q);
c:= c+1;
end;
p:=L.siguiente(p);
end;
MAX_DEV_M := retval;
end; { MAX_DEV_M }
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
var
L : Lista;
j,val,m,N : integer;
begin
L.anula;
N := 3;
L.inserta(1,L.fin);
L.inserta(3,L.fin);
L.inserta(5,L.fin);
L.inserta(4,L.fin);
L.inserta(3,L.fin);
L.inserta(5,L.fin);
{ genera una lista creciente aleatoria }
{ randomize;}
{ val := 0;}
{ for j:=1 to 20 do}
{ begin}
{ val := val + random(2*N+1) - N;}
{ L.inserta(val,L.fin);}
{ end;}
L.imprime ('L:');
writeln('MAX_DEV_M: ', MAX_DEV_M(L,3));
end.
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
Generated by GNU enscript 1.6.1.