Está en la página 1de 52

1

Diego Gutirrez
Tema 22. Mezcla binaria de ficheros y vectores
ordenados
3
Diego Gutirrez
Recorrido simultneo de dos ficheros
Ejemplo: Comparacin de dos ficheros secuenciales.
Dados dos ficheros de datos de tipo tpFichero, parmetros del
procedimiento, devolver a travs de un tercer parmetro un valor
lgico cierto si y slo si los contenidos de ambos ficheros son
idnticos.
Para ello es necesario que ambos ficheros tengan el mismo nmero
de datos almacenados y que sus elementos homlogos sean iguales.
4
Diego Gutirrez
algoritmo sonIguales (ES f,g:tpFichero; ES loSon:booleano)
{ Pre: ---
Post: El parmetro loSon toma un valor cierto si y slo los ficheros f y g
almacenan secuencias idnticas de datos }
variables
datoF,datoG: tpD;
iguales: booleano;
principio
iniciarLectura(f); iniciarLectura(g);
{ Resolucin del problema para dos secuencias vacas }
iguales:= cierto;
mientrasQue finFichero(f) Y finFichero(g) Y iguales hacer
{ Compara los siguientes elementos de f y g y actualiza la solucin del problema
(valor de iguales) }
leer(f,datoF); leer(g,datoG);
iguales:= (datoF=datoG);
finMQ
loSon:= (iguales Y finFichero(f) Y finFichero(g));
Fin.
5
Diego Gutirrez
Gestin
6
Diego Gutirrez
Mezcla de dos ficheros secuenciales ordenados
Mezcla de los datos almacenados en dos ficheros secuenciales
ordenados para obtener un tercer fichero secuencial que
almacene una secuencia de datos, tambin ordenados, que
integre los datos almacenados en los dos primeros ficheros y slo
stos.
7
Diego Gutirrez
La principal dificultad del algoritmo a disear radica en la forma
de acceso a los datos de los dos ficheros a mezclar:
Estos deben ser ledos y almacenados temporalmente en dos
variables que han sido denominadas dato1 y dato2.
El proceso de mezcla se desarrolla comparando los valores de estas
dos variables hasta que se alcanza el final de uno de los dos ficheros.
En ese momento no hay que olvidar que adems, de los datos que
restan de ser ledos en el otro fichero, quedan tambin por ser
aadidos al fichero f los datos almacenados temporalmente en las
variables dato1 y dato2.
8
Diego Gutirrez
9
Diego Gutirrez
dato1
dato2
10
Diego Gutirrez
dato1
dato2
11
Diego Gutirrez
dato1
dato2
12
Diego Gutirrez
dato1
dato2
13
Diego Gutirrez
dato1
dato2
14
Diego Gutirrez
dato1
dato2
15
Diego Gutirrez
dato1
dato2
16
Diego Gutirrez
dato1
dato2
17
Diego Gutirrez
dato1
dato2
18
Diego Gutirrez
dato1
dato2
19
Diego Gutirrez
dato1
dato2
20
Diego Gutirrez
dato1
dato2
21
Diego Gutirrez
dato1
dato2
22
Diego Gutirrez
dato1
dato2
Se alcanza el final de f2
23
Diego Gutirrez
dato1
dato2
Se comparan los valores de dato1 y dato2
(igual que antes). Una vez escrito dato2
24
Diego Gutirrez
dato1
se copia el resto del fichero que
an no ha terminado
25
Diego Gutirrez
El algoritmo realiza la mezcla en dos etapas:
En la primera itera copiando en el fichero f los datos
correspondientes de los otros dos ficheros f1 y f2 hasta llegar
al final de al menos uno de los dos
En cada iteracin se toma un dato de cada uno de estos ficheros
como candidato a ser copiado en f. Se copia el que presenta un
menor valor de su medida (segn el criterio de comparacin)
En la segunda etapa se contina el proceso de comparacin y
copia hasta copiar el ltimo dato de uno de los ficheros. Se
procede a continuacin a copiar en f los datos restantes que
an no han sido copiados del otro fichero.
26
Diego Gutirrez
algoritmo mezclarFicheros (ES f1,f2,f: tpFichero)
{ Pre: Los datos almacenados en f1 y en f2 estn ordenados en sentido creciente
segn
Post: f es un fichero cuyos datos estn ordenados en sentido creciente segn y
son el resultado de mezclar todos los datos almacenados en los ficheros f1 y f2 }
variables
dato1,dato2: tpD;
27
Diego Gutirrez
Si hay datos, se lee un dato de cada fichero
28
Diego Gutirrez
Si algn fichero no tiene datos, se copia
el otro
29
Diego Gutirrez
principio { de mezclarFicheros }
iniciarLectura(f1); iniciarLectura(f2); iniciarEscritura(f);
si finFichero(f1) entonces { el fichero f1 contiene, al menos, un dato }
leer(f1,dato1);
si finFichero(f2) entonces { el fichero f2 contiene, al menos, un dato }
leer(f2,dato2);
si_no { el fichero f2 no almacena ningn dato }
escribir(f,dato1); copiarResto(f1,f);
finSi
si_no { el fichero f1 no almacena ningn dato }
copiarResto(f2,f);
finSi
fin
Instrucciones de mezcla
30
Diego Gutirrez
Mientras queden datos en ambos ficheros,
leemos, escribimos, avanzamos
31
Diego Gutirrez

mientrasQue finfichero(f1) Y finFichero(f2) hacer


si dato1dato2 entonces
escribir(f,dato1); leer(f1,dato1);
si_no escribir(f,dato2); leer(f2,dato2);
finSi
finMQ

En la primera itera copiando en el fichero f los datos


correspondientes de los otros dos ficheros f1 y f2 hasta llegar al final
de al menos uno de los dos
En cada iteracin se toma un dato de cada uno de estos ficheros como
candidato a ser copiado en f. Se copia el que presenta un menor valor de
su medida (segn el criterio de comparacin)
32
Diego Gutirrez
Si ha terminado f1, comparo dato a dato
como antes hasta escribir dato1, y copio
el resto de f2
33
Diego Gutirrez

si finFichero(f1) entonces { Ledos todos los datos de f1 }


mientrasQue dato1>dato2 Y finFichero(f2) hacer
escribir(f,dato2); leer(f2,dato2);
finMQ
si dato1dato2 entonces
escribir(f,dato1); escribir(f,dato2);
copiarResto(f2,f);
si_no { Ledos todos los datos de f2 }
escribir(f,dato2); escribir(f,dato1);
finSi

En la segunda etapa se contina el proceso de comparacin y copia


hasta copiar el ltimo dato de uno de los ficheros. Se procede a
continuacin a copiar en f los datos restantes que an no han sido
copiados del otro fichero.
34
Diego Gutirrez
Si ha terminado f2, comparo dato a dato
hasta escribir dato2, y copio el resto de f1
35
Diego Gutirrez

si_no { Ledos todos los datos de f2 }


mientrasQue dato2>dato1 Y finFichero(f1) hacer
escribir(f,dato1); leer(f1,dato1);
finMQ
si dato2dato1 entonces
escribir(f,dato2); escribir(f,dato1);
copiarResto(f1,f);
si_no { Ledos todos los datos de f1 }
escribir(f,dato1); escribir(f,dato2);
finSi

En la segunda etapa se contina el proceso de comparacin y


copia hasta copiar el ltimo dato de uno de los ficheros. Se
procede a continuacin a copiar en f los datos restantes que
an no han sido copiados del otro fichero.
36
Diego Gutirrez
algoritmo copiarResto(ES origen,destino: tpFichero)
{ Pre: ---
Post: Han sido copiados en destino los elementos que estaban pendientes de ser
ledos del fichero origen }
variables
dato: tpD;
principio { de copiarResto }
mientrasQue finFichero(origen) hacer
leer(origen,dato); escribir(destino,dato);
finMQ
fin
37
Diego Gutirrez
38
Diego Gutirrez
Mezcla de estructuras de datos indexadas:
Copiar ordenadamente (mezclar) en una tabla T dos conjuntos de
datos almacenados en dos tablas ordenadas T1 y T2.
Los datos a mezclar son los almacenados en las tablas T1[1..n1]
y T2[1..n2] y el resultado de su mezcla debe quedar almacenado
en la tabla T[1..n1+n2]
T, T1 y T2 son de tipo tpTabla definidas como:
constantes
n = ... ; { Dimensin de las tablas }
tipos
tpndice = 1..n; { ndices de las tablas }
tpTabla = tabla[tpndice] de tpDato;
39
Diego Gutirrez
40
Diego Gutirrez
De nuevo, el algoritmo realiza la mezcla en dos etapas:
En la primera itera hasta haber copiado en la tabla T todos los
datos de una cualquiera de las dos tablas T1 y T2. En cada
iteracin se toma un dato de cada una de stas tablas como
candidato a ser copiado en la tabla T, y se copia el que
presenta un menor valor de su medida (segn el criterio de
comparacin)
En la segunda etapa se procede a copiar en T los datos que
an no han sido copiados de la tabla que no fue copiada en su
totalidad durante la etapa anterior.
41
Diego Gutirrez
algoritmo mezclarTablasOrdenadas (E T1,T2:tpTabla; E n1,n2: entero; ES T: tpTabla)
{ Pre/ Post}
algoritmo copiarResto ( )
tipos
tpndiceAmpliado=0..n;
variables
ndiceT,ndiceT1,ndiceT2:tpndiceAmpliado;
principio
ndiceT1:=0; ndiceT2:=0; ndiceT:=0;
mientrasQue (ndiceT1<n1) Y (ndiceT2<n2) hacer
ndiceT:=ndiceT+1;
si medida(T1[ndiceT1+1])medida(T2[ndiceT2+1])
entonces ndiceT1:=ndiceT1+1;
T[ndiceT]:=T1[ndiceT1];
si_no ndiceT2:=ndiceT2+1;
T[ndiceT]:=T2[ndiceT2];
finSi
finMQ
si ndiceT1<n1 entonces
copiarResto(T1,T,ndiceT1+1,n1,ndiceT+1);
si_no
copiarResto(T2,T,ndiceT2+1,n2,ndiceT+1);
finSi
Fin.
42
Diego Gutirrez
algoritmo mezclarTablasOrdenadas (E T1,T2:tpTabla; E n1,n2: entero; ES T: tpTabla)
{ Pre/ Post}
algoritmo copiarResto ( )
tipos
tpndiceAmpliado=0..n;
variables
ndiceT,ndiceT1,ndiceT2:tpndiceAmpliado;
principio
ndiceT1:=0; ndiceT2:=0; ndiceT:=0;
mientrasQue (ndiceT1<n1) Y (ndiceT2<n2) hacer
ndiceT:=ndiceT+1;
si medida(T1[ndiceT1+1])medida(T2[ndiceT2+1])
entonces ndiceT1:=ndiceT1+1;
T[ndiceT]:=T1[ndiceT1];
si_no ndiceT2:=ndiceT2+1;
T[ndiceT]:=T2[ndiceT2];
finSi
finMQ
si ndiceT1<n1 entonces
copiarResto(T1,T,ndiceT1+1,n1,ndiceT+1);
si_no
copiarResto(T2,T,ndiceT2+1,n2,ndiceT+1);
finSi
Fin.
Pre: Las subtablas T1[1..n1] y T2[1..n2] estn
ordenadas en sentido no decreciente ()
segn el valor de la medida de sus datos
y se satisface que (n1+n2)n
Post: La subtabla T[1..n1+n2] almacena,
ordenados en sentido no decreciente () segn
el valor de su medida, todos los datos de las
subtablas T1[1..n1] y T2[1..n2] }
Pre: Las subtablas T1[1..n1] y T2[1..n2] estn
ordenadas en sentido no decreciente ()
segn el valor de la medida de sus datos
y se satisface que (n1+n2)n
Post: La subtabla T[1..n1+n2] almacena,
ordenados en sentido no decreciente () segn
el valor de su medida, todos los datos de las
subtablas T1[1..n1] y T2[1..n2] }
43
Diego Gutirrez
algoritmo mezclarTablasOrdenadas (E T1,T2:tpTabla; E n1,n2: entero; ES T: tpTabla)
{ Pre/ Post}
algoritmo copiarResto ( )
tipos
tpndiceAmpliado=0..n;
variables
ndiceT,ndiceT1,ndiceT2:tpndiceAmpliado;
principio
ndiceT1:=0; ndiceT2:=0; ndiceT:=0;
mientrasQue (ndiceT1<n1) Y (ndiceT2<n2) hacer
ndiceT:=ndiceT+1;
si medida(T1[ndiceT1+1])medida(T2[ndiceT2+1])
entonces ndiceT1:=ndiceT1+1;
T[ndiceT]:=T1[ndiceT1];
si_no ndiceT2:=ndiceT2+1;
T[ndiceT]:=T2[ndiceT2];
finSi
finMQ
si ndiceT1<n1 entonces
copiarResto(T1,T,ndiceT1+1,n1,ndiceT+1);
si_no
copiarResto(T2,T,ndiceT2+1,n2,ndiceT+1);
finSi
Fin.
44
Diego Gutirrez
algoritmo mezclarTablasOrdenadas (E T1,T2:tpTabla; E n1,n2: entero; ES T: tpTabla)
{ Pre/ Post}
algoritmo copiarResto ( )
tipos
tpndiceAmpliado=0..n;
variables
ndiceT,ndiceT1,ndiceT2:tpndiceAmpliado;
principio
ndiceT1:=0; ndiceT2:=0; ndiceT:=0;
mientrasQue (ndiceT1<n1) Y (ndiceT2<n2) hacer
ndiceT:=ndiceT+1;
si medida(T1[ndiceT1+1])medida(T2[ndiceT2+1])
entonces ndiceT1:=ndiceT1+1;
T[ndiceT]:=T1[ndiceT1];
si_no ndiceT2:=ndiceT2+1;
T[ndiceT]:=T2[ndiceT2];
finSi
finMQ
si ndiceT1<n1 entonces
copiarResto(T1,T,ndiceT1+1,n1,ndiceT+1);
si_no
copiarResto(T2,T,ndiceT2+1,n2,ndiceT+1);
finSi
Fin.
Comenzamos a mezclar por los ndices inferiores
Comenzamos a mezclar por los ndices inferiores
45
Diego Gutirrez
algoritmo mezclarTablasOrdenadas (E T1,T2:tpTabla; E n1,n2: entero; ES T: tpTabla)
{ Pre/ Post}
algoritmo copiarResto ( )
tipos
tpndiceAmpliado=0..n;
variables
ndiceT,ndiceT1,ndiceT2:tpndiceAmpliado;
principio
ndiceT1:=0; ndiceT2:=0; ndiceT:=0;
mientrasQue (ndiceT1<n1) Y (ndiceT2<n2) hacer
ndiceT:=ndiceT+1;
si medida(T1[ndiceT1+1])medida(T2[ndiceT2+1])
entonces ndiceT1:=ndiceT1+1;
T[ndiceT]:=T1[ndiceT1];
si_no ndiceT2:=ndiceT2+1;
T[ndiceT]:=T2[ndiceT2];
finSi
finMQ
si ndiceT1<n1 entonces
copiarResto(T1,T,ndiceT1+1,n1,ndiceT+1);
si_no
copiarResto(T2,T,ndiceT2+1,n2,ndiceT+1);
finSi
Fin.
Se mezclan las dos tablas T1 y T2 hasta agotar
los datos en una de ellas
Se mezclan las dos tablas T1 y T2 hasta agotar
los datos en una de ellas
46
Diego Gutirrez
algoritmo mezclarTablasOrdenadas (E T1,T2:tpTabla; E n1,n2: entero; ES T: tpTabla)
{ Pre/ Post}
algoritmo copiarResto ( )
tipos
tpndiceAmpliado=0..n;
variables
ndiceT,ndiceT1,ndiceT2:tpndiceAmpliado;
principio
ndiceT1:=0; ndiceT2:=0; ndiceT:=0;
mientrasQue (ndiceT1<n1) Y (ndiceT2<n2) hacer
ndiceT:=ndiceT+1;
si medida(T1[ndiceT1+1])medida(T2[ndiceT2+1])
entonces ndiceT1:=ndiceT1+1;
T[ndiceT]:=T1[ndiceT1];
si_no ndiceT2:=ndiceT2+1;
T[ndiceT]:=T2[ndiceT2];
finSi
finMQ
si ndiceT1<n1 entonces
copiarResto(T1,T,ndiceT1+1,n1,ndiceT+1);
si_no
copiarResto(T2,T,ndiceT2+1,n2,ndiceT+1);
finSi
Fin.
Copiamos un nuevo dato en T[indice]
Copiamos un nuevo dato en T[indice]
47
Diego Gutirrez
algoritmo mezclarTablasOrdenadas (E T1,T2:tpTabla; E n1,n2: entero; ES T: tpTabla)
{ Pre/ Post}
algoritmo copiarResto ( )
tipos
tpndiceAmpliado=0..n;
variables
ndiceT,ndiceT1,ndiceT2:tpndiceAmpliado;
principio
ndiceT1:=0; ndiceT2:=0; ndiceT:=0;
mientrasQue (ndiceT1<n1) Y (ndiceT2<n2) hacer
ndiceT:=ndiceT+1;
si medida(T1[ndiceT1+1])medida(T2[ndiceT2+1])
entonces ndiceT1:=ndiceT1+1;
T[ndiceT]:=T1[ndiceT1];
si_no ndiceT2:=ndiceT2+1;
T[ndiceT]:=T2[ndiceT2];
finSi
finMQ
si ndiceT1<n1 entonces
copiarResto(T1,T,ndiceT1+1,n1,ndiceT+1);
si_no
copiarResto(T2,T,ndiceT2+1,n2,ndiceT+1);
finSi
Fin.
Copiamos un nuevo dato en T[indice]
desde T1
Copiamos un nuevo dato en T[indice]
desde T1
48
Diego Gutirrez
algoritmo mezclarTablasOrdenadas (E T1,T2:tpTabla; E n1,n2: entero; ES T: tpTabla)
{ Pre/ Post}
algoritmo copiarResto ( )
tipos
tpndiceAmpliado=0..n;
variables
ndiceT,ndiceT1,ndiceT2:tpndiceAmpliado;
principio
ndiceT1:=0; ndiceT2:=0; ndiceT:=0;
mientrasQue (ndiceT1<n1) Y (ndiceT2<n2) hacer
ndiceT:=ndiceT+1;
si medida(T1[ndiceT1+1])medida(T2[ndiceT2+1])
entonces ndiceT1:=ndiceT1+1;
T[ndiceT]:=T1[ndiceT1];
si_no ndiceT2:=ndiceT2+1;
T[ndiceT]:=T2[ndiceT2];
finSi
finMQ
si ndiceT1<n1 entonces
copiarResto(T1,T,ndiceT1+1,n1,ndiceT+1);
si_no
copiarResto(T2,T,ndiceT2+1,n2,ndiceT+1);
finSi
Fin.
Copiamos un nuevo dato en T[indice]
desde T1
o desde T2
Copiamos un nuevo dato en T[indice]
desde T1
o desde T2
49
Diego Gutirrez
algoritmo mezclarTablasOrdenadas (E T1,T2:tpTabla; E n1,n2: entero; ES T: tpTabla)
{ Pre/ Post}
algoritmo copiarResto ( )
tipos
tpndiceAmpliado=0..n;
variables
ndiceT,ndiceT1,ndiceT2:tpndiceAmpliado;
principio
ndiceT1:=0; ndiceT2:=0; ndiceT:=0;
mientrasQue (ndiceT1<n1) Y (ndiceT2<n2) hacer
ndiceT:=ndiceT+1;
si medida(T1[ndiceT1+1])medida(T2[ndiceT2+1])
entonces ndiceT1:=ndiceT1+1;
T[ndiceT]:=T1[ndiceT1];
si_no ndiceT2:=ndiceT2+1;
T[ndiceT]:=T2[ndiceT2];
finSi
finMQ
si ndiceT1<n1 entonces
copiarResto(T1,T,ndiceT1+1,n1,ndiceT+1);
si_no
copiarResto(T2,T,ndiceT2+1,n2,ndiceT+1);
finSi
Fin.
Discriminamos qu tabla (T1, T2) no ha
sido copiado an ntegramente en T
Discriminamos qu tabla (T1, T2) no ha
sido copiado an ntegramente en T
50
Diego Gutirrez
algoritmo mezclarTablasOrdenadas (E T1,T2:tpTabla; E n1,n2: entero; ES T: tpTabla)
{ Pre/ Post}
algoritmo copiarResto ( )
tipos
tpndiceAmpliado=0..n;
variables
ndiceT,ndiceT1,ndiceT2:tpndiceAmpliado;
principio
ndiceT1:=0; ndiceT2:=0; ndiceT:=0;
mientrasQue (ndiceT1<n1) Y (ndiceT2<n2) hacer
ndiceT:=ndiceT+1;
si medida(T1[ndiceT1+1])medida(T2[ndiceT2+1])
entonces ndiceT1:=ndiceT1+1;
T[ndiceT]:=T1[ndiceT1];
si_no ndiceT2:=ndiceT2+1;
T[ndiceT]:=T2[ndiceT2];
finSi
finMQ
si ndiceT1<n1 entonces
copiarResto(T1,T,ndiceT1+1,n1,ndiceT+1);
si_no
copiarResto(T2,T,ndiceT2+1,n2,ndiceT+1);
finSi
Fin.
Discriminamos qu tabla (T1, T2) no ha
sido copiado an ntegramente en T
Quedan datos por copiar en T1
Discriminamos qu tabla (T1, T2) no ha
sido copiado an ntegramente en T
Quedan datos por copiar en T1
51
Diego Gutirrez
algoritmo mezclarTablasOrdenadas (E T1,T2:tpTabla; E n1,n2: entero; ES T: tpTabla)
{ Pre/ Post}
algoritmo copiarResto ( )
tipos
tpndiceAmpliado=0..n;
variables
ndiceT,ndiceT1,ndiceT2:tpndiceAmpliado;
principio
ndiceT1:=0; ndiceT2:=0; ndiceT:=0;
mientrasQue (ndiceT1<n1) Y (ndiceT2<n2) hacer
ndiceT:=ndiceT+1;
si medida(T1[ndiceT1+1])medida(T2[ndiceT2+1])
entonces ndiceT1:=ndiceT1+1;
T[ndiceT]:=T1[ndiceT1];
si_no ndiceT2:=ndiceT2+1;
T[ndiceT]:=T2[ndiceT2];
finSi
finMQ
si ndiceT1<n1 entonces
copiarResto(T1,T,ndiceT1+1,n1,ndiceT+1);
si_no
copiarResto(T2,T,ndiceT2+1,n2,ndiceT+1);
finSi
Fin.
Discriminamos qu tabla (T1, T2) no ha
sido copiado an ntegramente en T
Quedan datos por copiar en T1
o quedan datos por copiar en T2
Discriminamos qu tabla (T1, T2) no ha
sido copiado an ntegramente en T
Quedan datos por copiar en T1
o quedan datos por copiar en T2
52
Diego Gutirrez
algoritmo mezclarTablasOrdenadas (E T1,T2:tpTabla; E n1,n2: entero; ES T: tpTabla)
{ Pre/ Post}
algoritmo copiarResto ( )
tipos
tpndiceAmpliado=0..n;
variables
ndiceT,ndiceT1,ndiceT2:tpndiceAmpliado;
principio
ndiceT1:=0; ndiceT2:=0; ndiceT:=0;
mientrasQue (ndiceT1<n1) Y (ndiceT2<n2) hacer
ndiceT:=ndiceT+1;
si medida(T1[ndiceT1+1])medida(T2[ndiceT2+1])
entonces ndiceT1:=ndiceT1+1;
T[ndiceT]:=T1[ndiceT1];
si_no ndiceT2:=ndiceT2+1;
T[ndiceT]:=T2[ndiceT2];
finSi
finMQ
si ndiceT1<n1 entonces
copiarResto(T1,T,ndiceT1+1,n1,ndiceT+1);
si_no
copiarResto(T2,T,ndiceT2+1,n2,ndiceT+1);
finSi
Fin.
algoritmo copiarResto (E tablaOriginal:tpTabla; ES
tablaCopia:tpTabla; E primerndice,ultimondice:tpndice;
E ndiceCopia:tpndice)
{ Pre: ---
Post: Copiados en tablaCopia, a partir de su ndice ndiceCopia,
los datos de tablaOriginal cuyos ndices estn comprendidos entre
primerndice y ultimondice }
variables
ndice:tpndice;
principio
para ndice desde primerndice hasta ultimondice hacer
tablaCopia[ndiceCopia+ndice-primerndice]:=
tablaOriginal[ndice];
finPara
Fin.
algoritmo copiarResto (E tablaOriginal:tpTabla; ES
tablaCopia:tpTabla; E primerndice,ultimondice:tpndice;
E ndiceCopia:tpndice)
{ Pre: ---
Post: Copiados en tablaCopia, a partir de su ndice ndiceCopia,
los datos de tablaOriginal cuyos ndices estn comprendidos entre
primerndice y ultimondice }
variables
ndice:tpndice;
principio
para ndice desde primerndice hasta ultimondice hacer
tablaCopia[ndiceCopia+ndice-primerndice]:=
tablaOriginal[ndice];
finPara
Fin.
53
Diego Gutirrez
Conclusiones: