stride.pas
{ ppc386 -va -vh *.pas }
{ COMIENZO DE DESCRIPCION
Escribir un procedimiento
STRIDE (L1: lista ; var L2: lista; c, f, i: integer);
que retorna en L2 los elementos que ocupan las posiciones
desde el comienzo "c" hasta el final "f" (inclusive), a
intervalos "i", pero sin incluir las posiciones iguales
o mayores que FIN de lista. Es decir, debe retornar
los elementos en las posiciones: c, c+i, c+2*i, ...,
mientras \'estas sean menores o iguales que "f" y est\'en
dentro del rango de posiciones v\'alidas en la lista.
Por ejemplo, si L1 = (3,2,1,5,4,2,3,2,6) y llamamos
STRIDE (L1, L2, 2, 8, 3), entonces debe retornar
L2 = (2, 4, 2); mientras que si hacemos
STRIDE (L1, L2, 3, 20,4) debe retornar
L2 = (1,3) [Ejercicio tomado en el final del 27-Feb-2003].
keywords: lista
FIN DE DESCRIPCION }
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
{ $ Id: stride.pas 2003/02/11 18:15 jdelia Exp jdelia $ }
program stride_p;
uses u_listpi;
type
lista = listpi ;
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
procedure stride (L1: lista; var L2: lista; c,f,i: integer);
var
j, k: integer;
p1 : posicion;
begin
L2.ANULA;
p1 := L1.PRIMERO ;
for j := 1 to (c - 1) do begin {avanza c posiciones en L1}
if (p1 = L1.FIN) then exit;
p1 := L1.SIGUIENTE (p1);
end ; {j}
{empieza a recorrer L1 extrayendo a saltos i}
j := c ;
while (j <= f) and (p1 <> L1.FIN) do begin
L2.INSERTA ( L1.RECUPERA (p1), L2.FIN );
for k := 1 to i do begin
p1 := L1.SIGUIENTE (p1);
if ( p1 = L1.FIN ) then exit;
end ; {k}
j := j + i;
end ; {while}
end;
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
var
j : integer;
L1, L2 : Lista;
begin
randomize;
L1.ANULA;
L2.ANULA;
{ejemplo 1: genera 9 datos pseudo-aleatorios }
for j := 1 to 9 do L1.INSERTA (random (10), L1.FIN);
writeln ;
L1.IMPRIME ('L1: lista dato');
STRIDE (L1, L2, 2, 9, 3);
L2.IMPRIME ('L2 = STRIDE (L1, L2, 2, 9, 3) ' );
{ejemplo 2: agrega 11 datos pseudo-aleatorios a L1 }
for j := 1 to 11 do L1.INSERTA (random (10), L1.FIN);
writeln ;
L1.IMPRIME ('L1: lista dato');
STRIDE (L1, L2, 5, 30, 5);
L2.IMPRIME ('L2 = STRIDE (L1, L2, 5, 30, 5) ' );
end.
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
Generated by GNU enscript 1.6.1.