Estructura de datos (arreglos) Vectores y Matrices

29
Página 1 de 13 Apunte del curso ALGORITMOS y PROGRAMACIÓN (FI-UBA, Prof. Ing. F. J. LAGE, J. T. P. Ing. Z. CATALDI; A.T.P. Srta. A Pauluzzi, Sr. C Corradino, Sr. F Gómez Estructura de datos (arreglos) Vectores y Matrices Hasta aquí se han visto distintos tipos de estructuras de control. A partir de este punto se verá la aplicación de las mismas a distintos tipos de problemas. Estructura de datos: Una estructura de datos es una colección de datos que pueden ser caracterizados por su organi- zación y las operaciones que se definen en ella. Dentro de ellas encontramos distintos tipos, los tipos de datos más frecuentes en los diferentes lenguajes son: Tipos de datos entero (integer ) estándar real ( real ) carácter ( char ) simples lógico ( boolean) definidos por el programador subrango ( subrange ) (no estándar) enumerativo ( enumerated ) arrays (vectores/matrices) registros simples o estáticos ficheros conjuntos estructurados cadenas ( string) listas (pilas/colas) compuestos o dinámicos listas enlazadas árboles grafos Las estructuras estáticas son aquellas en las que el tamaño de memoria ocupado se define an- tes de que el programa se ejecute y no puede modificarse durante la ejecución Las estructuras dinámicas son aquellas en las que no se debe definir previamente el tamaño de memoria Los datos simples tienen en común que cada variable representa un elemento, en los estructu- rados un identificador puede representar múltiples datos individuales, pudiendo cada uno de estos ser referenciados independientemente. ARRAY UNIDIMENSIONALES: VECTORES ARRAY (ARREGLO): Es un conjunto finito y ordenado de elementos homogéneos. Ordenado : cada elemento del arreglo puede ser identificado Homogéneo : son del mismo tipo de dato El tipo más simple de arreglo es el unidimensional o vector (matriz de una dimensión).

Transcript of Estructura de datos (arreglos) Vectores y Matrices

Page 1: Estructura de datos (arreglos) Vectores y Matrices

Página 1 de 13

Apunte del curso ALGORITMOS y PROGRAMACIÓN (FI-UBA, Prof. Ing. F. J. LAGE, J. T. P. Ing. Z. CATALDI; A.T.P. Srta. A Pauluzzi, Sr. C Corradino, Sr. F Gómez

Estructura de datos (arreglos)

Vectores y Matrices

Hasta aquí se han visto distintos tipos de estructuras de control. A partir de este punto se verá la aplicación de las mismas a distintos tipos de problemas.

Estructura de datos: Una estructura de datos es una colección de datos que pueden ser caracterizados por su organi-

zación y las operaciones que se definen en ella. Dentro de ellas encontramos distintos tipos, los tipos de datos más frecuentes en los diferentes

lenguajes son:

Tipos de datos entero (integer) estándar real (real) carácter (char) simples lógico (boolean) definidos por el programador subrango (subrange) (no estándar) enumerativo (enumerated) arrays (vectores/matrices) registros simples o estáticos ficheros conjuntos estructurados cadenas (string) listas (pilas/colas) compuestos o dinámicos listas enlazadas árboles grafos

Las estructuras estáticas son aquellas en las que el tamaño de memoria ocupado se define an-tes de que el programa se ejecute y no puede modificarse durante la ejecución

Las estructuras dinámicas son aquellas en las que no se debe definir previamente el tamaño de memoria

Los datos simples tienen en común que cada variable representa un elemento, en los estructu-rados un identificador puede representar múltiples datos individuales, pudiendo cada uno de estos ser referenciados independientemente.

ARRAY UNIDIMENSIONALES: VECTORES

ARRAY (ARREGLO): Es un conjunto finito y ordenado de elementos homogéneos. • Ordenado : cada elemento del arreglo puede ser identificado • Homogéneo : son del mismo tipo de dato

El tipo más simple de arreglo es el unidimensional o vector (matriz de una dimensión).

Page 2: Estructura de datos (arreglos) Vectores y Matrices

Página 2 de 13

Por ejemplo podría ser un vector denominado NOTAS

NOTAS[1] NOTAS[2] NOTAS[k] NOTAS[j] 5 8 .......... 7 ...... 3

Los subíndices 1, 2, k, n, indican la posición del elemento, en Pascal van entre corchetes. El pri-mer elemento es el 5, el segundo es el 8, el elemento k es 7 y el enésimo es 3.

Un array puede ser declarado de dos formas distintas que son:

Declaraciones Tipo Array

En las declaraciones del tipo array usaremos los siguientes pasos.:

1. La estructura del arreglo se describe en Type.

2. Se le asigna ese tipo a una o más variables.

Type XX = array [1..3000] of real;

Var: Alfa : XX;

array y of son obligatorias

[1...3000] indica los valores que toman los índices del vector, son del tipo subrango.

real identifica que tipo de elementos almacena el vector.

Variables Tipo Array

En las declaraciones de variable tipo array se hará de la siguiente forma.:

1. En la declaración se describe la variable.

Var: Alfa : array [1..3000] of real; ;

Los elementos cumplen la misma función que en el caso anterior.

Dentro de los distintos tipos que un array puede almacenar en sus posiciones, puede ser un tipo Array como el del siguiente tipo:

Type Linea = array [1..40] of char; Hoja = array [1..30] of Linea; Libro = array [1..30] of Linea;

Las operaciones que se pueden hacer con un vector son:

• asignación • lectura/escritura • recorrido (acceso secuencial) • actualizar (añadir, borrar, insertar) • ordenación • búsqueda

Asignación: Es darle un valor a un elemento de un vector

Pseudocódigo en español Código se programa A[3] ← 5 A[3] := 5;

Page 3: Estructura de datos (arreglos) Vectores y Matrices

Página 3 de 13

Para la asignación como para otro procesos se debe recurrir a estructuras repetitivas (desde, mientras o repetir).

Ejemplo:

A cada uno de los 55 elementos del vector CARGA se le debe asignar el valor 0

Algoritmo de asigna

Pseudocódigo en español

desde I = 1 hasta 55 hacer

CARGA[I] ← 0

fin desde

Código se programa

for I = 1 to 55 do

CARGA[I] := 0;

Su estructugrama tiene la siguiente forma

desde I = 1 hasta 55

CARGA[I] ← 0

Pseudocódigo del programa

Diagrama N-S

nombre vector1(program); nombre selección1 declaraciones (uses)

Crt, Dos; declaraciones

Crt, Dos

constantes(const) A = 1;

Constantes A, B

B = 55; tipos matriz [55]

tipo (type) matriz = array [1..55] de enteros

Variables Y CARGA

variables (var) I entero CARGA matriz

funciones y procedimientos

funciones(function)(NO hay); comienzo (programa) procedimientos (procedure); limpieza inicio (begin); asigna

limpieza(limpia la pantalla); salida asigna (hace ciclo y asigna); fin (programa) salida

fin(end.)

Como se puede ver tenemos la definición del vector en tipo o type.

Page 4: Estructura de datos (arreglos) Vectores y Matrices

Página 4 de 13

El código del procedimiento es:

procedure asigna; {* comienzo de la asignación *} begin for I := A to B do {* se define el ciclo de 1 a 55*} CARGA[I] := 0; {* asigna los valores *} end; {* fin del ciclo *}

Page 5: Estructura de datos (arreglos) Vectores y Matrices

Página 5 de 13

Quedándonos el programa de la siguiente manera.

Program Vector_1; {* Este es el primer programa con vectores *}

uses Crt, dos; {declaraciones}

const {* constantes *} A = 1; B = 55;

type matriz = array [1..55] of integer;

var I: integer; {* controla el ciclo *} CARGA: matriz;

procedure limpieza; {* comienzo de limpieza de la pantalla *} begin ClrScr; end; {* fin de limpieza de la pantalla *}

procedure asigna; {* comienzo de la asignación *} begin for I := A to B do {* se define el ciclo de 1 a 55 *} CARGA[I] := 0; {* asigna la valores *}

end; {* fin de la asignación *}

procedure salida; {* comienzo del procedimiento salida *} {* solo sirve para ver resultados *} Var H :char;

begin writeln ( 'Presione cualquier tecla '); readln (H); {* esta instrucción y la anterior son para dar tiempo para *} {* ver resultados *} end; {* fin del procedimiento salida *}

begin limpieza; asigna; salida; end.

Lectura/escritura:

Es una operación de entrada salida sobre un vector. Manejado por es-tructuras repetitivas.

Ejemplo:

Ingresar por teclado cada uno de los 5 elementos de un vector de nom-

Page 6: Estructura de datos (arreglos) Vectores y Matrices

Página 6 de 13

bre vec. Y luego leerlos y presentarlos por pantalla en orden inverso al que entraron (de 5 a 1)

Algoritmo de escribe

Pseudocódigo en español

desde I = 1 hasta 5 hacer comienzo imprimo mensaje leo y escribo en vec[I]

fin desde

Código se programa

for I = 1 to 5 do begin write (‘ ‘); read (vec[I] ); end;

Su estructugrama tiene la siguiente forma

desde I = 1 hasta 5

imprimo mensaje

leo vec[I]

El código del procedimiento es:

procedure escribir; {* escribe en el vector *} begin for I := A to B do {* se define el ciclo de 1 a 5 *} begin write ('Ingrese vec(',I:1,') : '); readln(vec[I]); {* escribe en el vector *} end; end; {* fin de escritura *}

Page 7: Estructura de datos (arreglos) Vectores y Matrices

Algoritmos y Programación I

Clase Teórica Nº 7

Vectores y Matrices

Autores : Ings. Cataldi - Lage

ALGORITMOS y PROGRAMACIÓN 75.40 Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluz-zi Sr P. Corradi-no Sr. F. Gómez

Página 7 de 13

Algoritmo de lee

Pseudocódigo en español

desde I = 1 hasta 5 hacer leo vec[I]

fin desde

Código se programa

for I = 1 to 5 do read (vec[I] );

Su estructugrama tiene la siguiente forma

desde I = 1 hasta 5

imprimo vec[I]

El código del procedimiento es:

procedure leer; {* lee el vector *} begin for I := B downto A do {* se define el ciclo de 5 a 1 *} writeln ('vec(',I:1,') = ',vec[I]:2); {* lee el vector y lo saca por pantalla *} end; {* fin de lectura *}

Pseudocódigo del programa Diagrama N-S

Nombre vector2(program); nombre selección1 Declaraciones (uses)

Crt, Dos; declaraciones

Crt, Dos

Constantes(const) A = 1;

Constantes A, B

B = 5; tipo (type)

tipos matriz [5]

Matriz = array [1..5] de enteros variables (var) I entero

Variables I vec

vec matriz funciones y procedimientos Funciones(function)(NO hay); comienzo (programa) Procedimientos (procedure); limpieza

Page 8: Estructura de datos (arreglos) Vectores y Matrices

Algoritmos y Programación I

Clase Teórica Nº 7

Vectores y Matrices

Autores : Ings. Cataldi - Lage

ALGORITMOS y PROGRAMACIÓN 75.40 Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluz-zi Sr P. Corradi-no Sr. F. Gómez

Página 8 de 13

inicio (begin); escribe limpieza(limpia la pantalla); lee escribir (escribe en el vector) salida leer (lee del vector y saca por pantalla) fin (programa) salida

fin(end.) Program Vector_2 {* Este es el segundo programa con vectores *}

uses crt, dos; {declaraciones}

const {* constantes *} A = 1; B = 5;

type matriz = array [1..5] of integer;

var I: integer; {* controla el ciclo *} vec: matriz;

procedure limpieza; {* comienzo de limpieza de la pantalla *} begin ClrScr; end; {* fin de limpieza de la pantalla *}

procedure escribir; {* escribe en el vector *} begin for I := A to B do {* se define el ciclo de 1 a 5 *} begin write ('Ingrese vec(',I:1,') : '); readln(vec[I]); {* escribe en el vector *} end; end; {* fin de escritura *}

procedure leer; {* lee el vector *} begin for I := B downto A do {* se define el ciclo de 5 a 1 *} writeln ('vec(',I:1,') = ',vec[I]:2);

Page 9: Estructura de datos (arreglos) Vectores y Matrices

Algoritmos y Programación I

Clase Teórica Nº 7

Vectores y Matrices

Autores : Ings. Cataldi - Lage

ALGORITMOS y PROGRAMACIÓN 75.40 Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluz-zi Sr P. Corradi-no Sr. F. Gómez

Página 9 de 13

{* lee el vector y lo saca por pantalla *} end; {* fin de lectura *}

procedure salida; {* comienzo del procedimiento salida *} {* solo sirve para ver resultados *} Var H :char; begin writeln ( 'Presione cualquier tecla '); readln (H); {* esta instrucción y la anterior son para dar tiempo para *} {* ver resultados *} end; {* fin del procedimiento salida *}

begin limpieza; escribir; leer; salida; end.

Recorrer: Esta operación se realiza cuando uno lee el vector, y se aplica tanto cuando se busca un elemento de un vector o cuando se desea listar el mismo, como lo vimos en el ejemplo anterior. Actualizar Añadir: Se denomina así a la operación de agregar un nuevo, elemento al final del vector. la única condición necesaria para esta operación consiste en la comprobación de espacio libre en memoria.

Ejemplo: Dado el vector U de 7 elementos añadir un elemento más al vector

Algoritmo de añade

Pseudocódigo en español I ← 0

repetir I ← I +1

hasta que U[I] = 0 o i > k si i es menor o igual a k entonces leo nuevo U[I] sino

Código se programa

I := 0; repeat I := I + 1;

until U[I] = 0 or i >q

if I <= k then

read (U[I] )

else

Page 10: Estructura de datos (arreglos) Vectores y Matrices

Algoritmos y Programación I

Clase Teórica Nº 7

Vectores y Matrices

Autores : Ings. Cataldi - Lage

ALGORITMOS y PROGRAMACIÓN 75.40 Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluz-zi Sr P. Corradi-no Sr. F. Gómez

Página 10 de 13

imprimo “No más lugar” fin_si writeln(“No mas lugar”)

Su estructugrama tiene la siguiente forma

I ← I +1

U[I] = 0 o i > k

I es menor o igual a k

leo nuevo U[I] imprimo “No más lugar El código del procedimiento es:

procedure agrega; {* agrega un elemento al vector *} begin I:=0; repeat I := I + 1; until (U[I]=0) or (I> 7); {* Se repite hasta que se encuentre una bandera o se termine el vector *} if I<= 7 then begin writeln ('Ingrese un nuevo elemento al vector'); read ( U[I]) end else writeln ('No hay mas lugar en el vector'); end; {* fin de agrega *}

Borrar: Es eliminar un elemento de un vector se puede hacer de dos maneras una es reemplazar

el elemento por el utilizado como señal. Puede servir pero no es recomendado en proyectos pequeños. Pero no así en grandes. El otro método consiste en mover los elementos que se encuentran debajo de él una posición hacia arriba, colocando una bandera en la última celda.

Ambos métodos tienen el paso de búsqueda en común utilizado en añadir, lo que varían son los pasos posteriores al Si. (Solo representaremos estos pasos)

Ejemplo: Dado el vector U de 7 elementos eliminar un elemento al vector

Método rudimentario

Page 11: Estructura de datos (arreglos) Vectores y Matrices

Algoritmos y Programación I

Clase Teórica Nº 7

Vectores y Matrices

Autores : Ings. Cataldi - Lage

ALGORITMOS y PROGRAMACIÓN 75.40 Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluz-zi Sr P. Corradi-no Sr. F. Gómez

Página 11 de 13

Algoritmo de elimina (rudimentario)

Pseudocódigo en español Y ← 0

repetir I ← I +1

hasta que U[I] = 0 o I > k si I es menor o igual a k entonces U[I] ← 0

sino imprimo “No existe el elemento” fin_si

Código se programa

I := 0; repeat I := I + 1;

until U[I] = 0 or I >q

if I <= k then

U[I] := 0;

else

writeln(“No existe el elemento”)

Su estructugrama tiene la siguiente forma

I ← I +1

U[I] = 0 o I > k

I es menor o igual a k

U[I] ← 0 imprimo “No existe el elemento”

Método Optimo

Algoritmo de elimina (optimo) Pseudocódigo en español

I ← 0

Lee Aux

repetir I ← I +1

hasta que U[i] = Aux o I > k

si i es menor o igual a k entonces

repetir U[I] ← U[I + 1] I ← I +1

hasta que U[i] = 0 o I > k sino

Código se programa

I := 0;

Readln(Aux);

repeat I := I + 1; until U[i] = Aux or I >q

if I <= k then

repeat U[I] := U[I+1]; I := I + 1;

until U[I] = 0 or I >q ; else writeln(“No existe el elemento”)

Page 12: Estructura de datos (arreglos) Vectores y Matrices

Algoritmos y Programación I

Clase Teórica Nº 7

Vectores y Matrices

Autores : Ings. Cataldi - Lage

ALGORITMOS y PROGRAMACIÓN 75.40 Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluz-zi Sr P. Corradi-no Sr. F. Gómez

Página 12 de 13

imprimo “ No existe el elemento” fin_si

Su estructugrama tiene la siguiente forma

I ← 0

Lee Aux

I ← I +1

U[I] = Aux o I > k

I es menor o igual a k

U[I] ← U[I+1]

I ← I +1 imprimo “ No existe el elemento”

U[I] = 0 o I > k

Insertar: Se debe trabajar sobre un vector ordenado. Consiste en introducir un nuevo elemento al vector sin

que este pierda el orden. Para ello se debe comprobar que haya lugar libre en el vector, luego de lo cual se deberá desplazar hacia bajo los elementos necesarios como para generar un espacio libre en la po-sición adecuada sin que se pierda el orden.

Algoritmo de inserta (Ordenado creciente) Pseudocódigo en español

I ← 0

Lee Aux

repetir I ← I +1

hasta que U[i] = 0 o I > B

si i es menor o igual a B entonces

I ← I -1 mientras U[i] > Aux

U[I+1] ← U[I] I ← I -1

fin mientras

Código se programa

I := 0;

Read(Aux);

repeat I := I + 1; until U[i] = 0 or I >B

if I <= B then begin

I := I - 1;

while U[I] > Aux begin

U[I+1] := U[I]; I := I - 1;

Page 13: Estructura de datos (arreglos) Vectores y Matrices

Algoritmos y Programación I

Clase Teórica Nº 7

Vectores y Matrices

Autores : Ings. Cataldi - Lage

ALGORITMOS y PROGRAMACIÓN 75.40 Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluz-zi Sr P. Corradi-no Sr. F. Gómez

Página 13 de 13

U[I+1] ← Aux sino

imprimo “ No hay lugar” fin_si

end; U[I+1] = Aux;

end else

writeln(“No hay lugar”)

Su estructugrama tiene la siguiente forma

I ← 0

Lee Aux

I ← I +1

U[I] = Aux o I > k I es menor o igual a k

I ← I -1

U[I] > Aux

U[I+1] ← U[I] imprimo “No hay lugar”

I ← I -1

U[I+1] ← Aux

Ordenación:

La ordenación o clasificación es, el proceso de clasificar datos en algún orden o secuencia especí-fica como creciente o decreciente. Existen varios métodos de ellos elegiremos el de intercambio (decan-tación).

Algoritmo de ordena (Ordenado creciente) Pseudocódigo en español

I ← 0

repetir I ← I +1

hasta que U[i] = 0 o I > B P ← I - 1

desde I ← 1 hasta P -1 hacer desde J ← 1 hasta P - I hacer

si U[J] > U[J +1] entonces (intercambiar)

Código se programa

I := 0;

repeat I := I + 1; until U[i] = 0 or I > B

P := I - 1;

for I = 1 to P-1 do for J = 1 to P- I do

if U[J] > U[J +1] then begin

Page 14: Estructura de datos (arreglos) Vectores y Matrices

Algoritmos y Programación I

Clase Teórica Nº 7

Vectores y Matrices

Autores : Ings. Cataldi - Lage

ALGORITMOS y PROGRAMACIÓN 75.40 Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluz-zi Sr P. Corradi-no Sr. F. Gómez

Página 14 de 14

Aux ← U[J] U[J] ← U[J +1] U[J +1] ← Aux

fin si fin desde

fin desde

Aux := U[J]; U[J] := U[J +1]; U[J +1] := Aux ;

end;

Su estructugrama tiene la siguiente forma

I ← 0

I ← I +1

U[I] = 0 o I > k

P ← I -1

I ← 1 hasta P -1

J ← 1 hasta P - I

U[J] > U[J +1]

Aux ← U[J]

U[J] ← U[J +1]

U[J +1] ← Aux

Búsqueda:

La búsqueda de un dato dentro de un array consiste en determinar si un elemento N pertenece o no al conjunto de datos y posición que el ocupa en el conjunto.

Los distintos tipos de búsqueda se pueden clasificar en:

búsqueda secuencial búsqueda binaria búsqueda por transformación de claves (hash)

En este curso solo se verá el primer tipo, ya que las dos siguientes están fuera del alcance del mismo.

Page 15: Estructura de datos (arreglos) Vectores y Matrices

Algoritmos y Programación I

Clase Teórica Nº 7

Vectores y Matrices

Autores : Ings. Cataldi - Lage

ALGORITMOS y PROGRAMACIÓN 75.40 Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluz-zi Sr P. Corradi-no Sr. F. Gómez

Página 15 de 15

Búsqueda Secuencial:

Compara cada elemento del vector con el valor deseado. Si se encuentra

es el método que ofrece menor eficiencia pero el más sencillo.

Esto se puede ver en el ejemplo anterior.

Ejemplo general

Hacer un programa que permita operar con un vector de siete posiciones, que opere con números naturales. Pudiendo agregar, eliminar o insertar un valor, también se podrá listar todos los valores que tiene el vector.

Usaremos como centinela el número 0 (cero) por lo cual lo primero que deberá hacer el programa deberá asignarle a todos los elementos del vector dicho valor .

El programa cuenta con tres llamados.

begin limpieza; {* limpia la pantalla *} asigna; {* asigna los 0 al vector *} menu; {* llama al módulo menú *} end.

Los módulos limpieza y asigna ya se han detallado. En cuanto a menu es un selector.

Algoritmo de menu Pseudocódigo en español

repetir repetir

llama a Limpieza escribir Titulos escribir Opciones leer valor elegido (H)

hasta que H > 0 y H < 7 según sea H hacer

1: llama a Agrega 2: llama a Lista 3: llama a Borra 4: llama a Ordena 5: Inserta sino limpia pantalla

fin según mientras H > 6

Código se programa repeat

repeat limpieza; writeln (' M E N U ');

writeln ( ' 1. Ingresar un valor al vector '); writeln;

write ( ' Elija una opción '); readln (H); {* lee la opción *} until (H > 0) and (H < 7); case H of 1 : Agrega; 2 : Lista; 3 : Borra; 4 : Ordena; 5 : Inserta; else clrscr;

Page 16: Estructura de datos (arreglos) Vectores y Matrices

Algoritmos y Programación I

Clase Teórica Nº 7

Vectores y Matrices

Autores : Ings. Cataldi - Lage

ALGORITMOS y PROGRAMACIÓN 75.40 Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluz-zi Sr P. Corradi-no Sr. F. Gómez

Página 16 de 16

end; until H = 6;

En el procedimiento borra, lo que realiza el algoritmo es desplazar cada uno de los elementos pos-teriores al que queremos eliminar a una posición anterior a la que teníamos. Este procedimiento cuenta con dos partes.

a) encuentra el elemento a borrar b) desplaza los elementos posteriores a una posición anterior, el centinela nos sirve para

optimizar el proceso.

Page 17: Estructura de datos (arreglos) Vectores y Matrices

Algoritmos y Programación I

Clase Teórica Nº 7

Vectores y Matrices

Autores : Ings. Cataldi - Lage

ALGORITMOS y PROGRAMACIÓN 75.40 Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluz-zi Sr P. Corradi-no Sr. F. Gómez

Página 17 de 17

program vectores; {* Programa de subrutinas de vectores *} uses crt, dos; {*declaraciones*}

const {* constantes *} NL = · #13#10; {* Nueva Línea Carrige Return, Line Feed*} A = 1; B = 7;

type vector = array [1..7] of integer;

var I: integer; {* controla el ciclo *} U: vector;

procedure limpieza; {* comienzo de limpieza de la pantalla *} begin ClrScr; end; {* fin de limpieza de la pantalla *}

procedure salida; {* comienzo del procedimiento salida *} {* solo sirve para ver resultados *} Var H :char; begin writeln ( 'Presione cualquir tecla '); readln (H); {* esta instrucci¢n y la anterior son para dar tiempo para *} {* ver resultados *} end; {* fin del procedimiento salida *}

procedure Lugar; {* determina cuantos lugares están ocupados del vector *} begin I:=0; repeat I := I + 1; until (U[I]=0) or (I> 7); {* Se repite hasta que se encuentre una bandera o se termine el vector *} end; {* fin de lugar *}

procedure asigna; {* comienzo de la asignación *}

Page 18: Estructura de datos (arreglos) Vectores y Matrices

Algoritmos y Programación I

Clase Teórica Nº 7

Vectores y Matrices

Autores : Ings. Cataldi - Lage

ALGORITMOS y PROGRAMACIÓN 75.40 Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluz-zi Sr P. Corradi-no Sr. F. Gómez

Página 18 de 18

begin for I := 1 to 7 do {* se define el ciclo de 1 a 7 *} U[I] := 0; {* asigna *} end; {* fin de la asignación *}

procedure Ordena; {* ordena el vector *} var J, P, Aux : integer; begin I := 0; repeat I := I + 1; until (U[I]=0) or ( I>B ); {* Determina cuantos valores validos hay en el vector *} P := I - 1; for I := 1 to P - 1 do {* se define el ciclo hasta el anteúltimo valor cargado *} for J := 1 to P - I do if U[J] > U[J+1] then begin {* Intercambia *} Aux := U[J]; U[J] := U[J+1]; U[J+1] := Aux; end end; {* fin del ordenamiento *}

procedure lista; {* lee y lista el vector *} begin I := 1; while (U[I] <> 0) and (I<= B ) do {* se lee hasta encontrar *} begin {* un centinela o el final del vector *} writeln ('U(',I:1,') = ',U[I]:3); {* lee el vector y lo saca por pantalla *} I := I + 1; end; Salida; end; {* fin de lectura y listado *}

Page 19: Estructura de datos (arreglos) Vectores y Matrices

Algoritmos y Programación I

Clase Teórica Nº 7

Vectores y Matrices

Autores : Ings. Cataldi - Lage

ALGORITMOS y PROGRAMACIÓN 75.40 Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluz-zi Sr P. Corradi-no Sr. F. Gómez

Página 19 de 19

procedure Borra; {* borra un elemento del vector *} var J : integer; H : char; begin I := 1; write ('Ingrese el valor a borrar : '); read (J); while (U[I] <> 0) and (I<= B ) and (U[I] <> J) do {* se hace la búsqueda *} I := I + 1; if U[I] <> J then begin {* No se encontró el valor *} write (' Elemento no encontrado '); readln(H); end else begin while U[I] <> 0 do {* Se borra el valor *} begin U[I] := U[I+1]; I := I + 1; end; write (' Elemento borrado '); readln(H); end; end; {* fin de borrado *}

Page 20: Estructura de datos (arreglos) Vectores y Matrices

Algoritmos y Programación I

Clase Teórica Nº 7

Vectores y Matrices

Autores : Ings. Cataldi - Lage

ALGORITMOS y PROGRAMACIÓN 75.40 Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluz-zi Sr P. Corradi-no Sr. F. Gómez

Página 20 de 20

procedure agrega; {* agrega un elemento al vector *} var H:char; begin Lugar; if I <= 7 then repeat write ('Ingrese un nuevo valor al vector : '); readln ( U[I]); I := I + 1; until (U[I-1] = 0) or (I > B) else begin write ('No hay mas lugar en el vector'); Read (H); end end; {* fin de agrega *}

Page 21: Estructura de datos (arreglos) Vectores y Matrices

Algoritmos y Programación I

Clase Teórica Nº 7

Vectores y Matrices

Autores : Ings. Cataldi - Lage

ALGORITMOS y PROGRAMACIÓN 75.40 Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluz-zi Sr P. Corradi-no Sr. F. Gómez

Página 21 de 21

procedure inserta; {* inserta un elemento al vector ordenado *} var H:char; K, Aux : integer; begin Lugar; if I <= B then begin K := I; write ('Ordeno el vector ? (S/N) '); Read (H); if (H = 'S') or (H = 's') then Ordena; write ('Ingrese el valor a insertar : '); Read (Aux); I := K - 1; while U[I] > Aux do begin U[I+1] := U[I]; I := I - 1; end; U[I+1] := Aux; end else begin write ('No hay mas lugar en el vector'); Read (H); end end; {* fin de agrega *}

Page 22: Estructura de datos (arreglos) Vectores y Matrices

Algoritmos y Programación I

Clase Teórica Nº 7

Vectores y Matrices

Autores : Ings. Cataldi - Lage

ALGORITMOS y PROGRAMACIÓN 75.40 Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluz-zi Sr P. Corradi-no Sr. F. Gómez

Página 22 de 22

procedure menu; {* comienzo del procedimiento menu *} {* genera y maneja un menu de opciones *} Var H :integer; begin repeat repeat limpieza; writeln (' M E N U '); writeln (' ----------- ', NL, NL, NL); writeln ( ' 1. Ingresar un valor al vector ', NL); writeln ( ' 2. Listar el vector ', NL); writeln ( ' 3. Borrar un valor ', NL); writeln ( ' 4. Ordenar el vector ', NL); writeln ( ' 5. Insertar un valor ', NL); writeln ( ' 6. Salir del programa ', NL, NL); write ( ' Elija una opcion '); readln (H); {* lee la opción *} until (H > 0) and (H < 7); case H of 1 : Agrega; {* Llamada al procedimiento de agregar *} 2 : Lista; {* Llamada al procedimiento de listar *} 3 : Borra; {* Llamada al procedimiento de borrar *} 4 : Ordena; {* Llamada al procedimiento de ordenar *} 5 : Inserta; {* Llamada al procedimiento de insertar *} else clrscr; {* Llamada a la salida del programa *} end; until H = 6; end; {* fin del procedimiento menu *}

begin {* Comienzo del programa *} limpieza; {* limpia la pantalla *} asigna; {* asigna los 0 al vector *} menu; {* llama al módulo menú *} end. {* Fin del programa *}

Copia de un array:

Page 23: Estructura de datos (arreglos) Vectores y Matrices

Algoritmos y Programación I

Clase Teórica Nº 7

Vectores y Matrices

Autores : Ings. Cataldi - Lage

ALGORITMOS y PROGRAMACIÓN 75.40 Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluz-zi Sr P. Corradi-no Sr. F. Gómez

Página 23 de 23

Un array puede ser asignado a otro array, si y solo si, ambos tienen el mismo tipo y el mismo ta-maño. Lo que implica que ambos fueron declarados por el mismo identificador o por identificadores equivalentes.

Ejemplo:

Type XX = array [1..30] of byte; YY = array [1..30] of byte;

Var: Alfa, Gama: XX; Beta: YY; Alfa := Gama; {única expresión válida}. Beta := Alfa; Gama := Beta;.

Parámetros de valor y de variable:

Los arrays pueden ser utilizados como parámetros en funciones y procedimientos; sin embargo, el valor de una función no puede ser un array. Las variables tipo array pueden ser utilizadas como paráme-tros en la comunicación entre funciones y procedimientos. El array local se inicializa de modo que con-tiene los mismos valores que el array real correspondiente. El procedimiento manipula el array local y cualquier cambio que se haga en el array local no se refleja en el array real.

type Vector = array [1..10] of real;

var M, N, P : Vector; R : boolean;

function Identidad (A, B : Vector) : boolean; var

end;

procedure Suma (A; B: Vector;

var C: Vector);

end;

R := Identidad(M,N);

Page 24: Estructura de datos (arreglos) Vectores y Matrices

Algoritmos y Programación I

Clase Teórica Nº 7

Vectores y Matrices

Autores : Ings. Cataldi - Lage

ALGORITMOS y PROGRAMACIÓN 75.40 Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluz-zi Sr P. Corradi-no Sr. F. Gómez

Página 24 de 24

Suma (M,N,P);

Pasaje de elementos individuales:

En lugar de pasar todos los elementos del array, se pasan de uno por vez. Para el ejemplo anterior se puede decir:

function Identidad (A, B : real) : boolean; var

end;

R := Identidad(M[3], N[3]);

Array bidimensionales (Tablas)

Un array bidimensional (tabla o matriz) es un array con dos índices, al igual que los vectores que deben ser ordinales o tipo subrango. Para localizar o almacenar un valor en el array se deben especificar dos posiciones (dos subíndices), uno para la fila y otro para la columna. Los elementos se referencian con el formato:

T [3,A] elemento de la fila 3 y columna 4 Los diferentes tipos de índices no necesitan ser subrango del mismo tipo.

Declaración de los arrays bidimensionales

Al igual que en los arrays de una dimensión (los vectores), los arrays multidimensionales (tablas) se crean con declaraciones type y var cuando un programa se codifica en Pascal.

type Tabla = array [1..10,4..25] of real;

type Tabla = array [1..10] of array [4..25] of real;

var M, : array [1..10,4..25] of real;

Manejo de tablas

Para el manejo de tablas, no debemos olvidarnos que las celdas de las mismas se identifican por dos subíndices. Por lo tanto cualquier proceso que queramos realizar sobre la misma, involucrará a am-bos subíndices.

Por ejemplo cuando se desea leer un array se podrá hacer por filas, según se puede ver.

var M, : array [1..10,4..25] of real;

Page 25: Estructura de datos (arreglos) Vectores y Matrices

Algoritmos y Programación I

Clase Teórica Nº 7

Vectores y Matrices

Autores : Ings. Cataldi - Lage

ALGORITMOS y PROGRAMACIÓN 75.40 Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluz-zi Sr P. Corradi-no Sr. F. Gómez

Página 25 de 25

For Fila := 1 to 10 For Columna := 4 to 25 Writeln(A[Fila, Columna]);

Por columnas.

For Columna := 4 to 25 For Fila := 1 to 10 Writeln(A[Fila, Columna]);

Array multidimensionales

Pascal no tiene límite para el número de dimensiones. Pero al usuario corriente no se le reco-mienda superar las 3 dimensiones, ya que se vuelve complejo su manejo.

Declaración de los arrays multidimensionales

Al igual que en los arrays de bidimensionales (las tablas), los arrays multidimensionales se crean con declaraciones type y var cuando un programa se codifica en Pascal.

type Matriz = array [1..10,4..25,´A¨..¨Z¨] of byte;

type Vector = array [1..10] of byte; Matriz = array [4..25,´A¨..¨Z¨] of Vector;

type Vector = array [1..10] of byte; Tabla = array [4..25] of Vector; Matriz = array [´A¨..¨Z¨] of Tabla;

var M, : array [1..10] of array [4..25,] of array [´A¨..¨Z¨] of byte;

CONSTANTES DE TIPO ARRAY (TIPEADAS)

Turbo Pascal permite que las constantes con tipo (tipeadas) puedan ser de casi cualquier tipo. Las constantes con tipo, no son constantes en el estricto sentido, sino variables inicializadas, es decir, varia-bles que tienen un valor inicial específico en la cabecera del programa.

Ejemplos

const

Page 26: Estructura de datos (arreglos) Vectores y Matrices

Algoritmos y Programación I

Clase Teórica Nº 7

Vectores y Matrices

Autores : Ings. Cataldi - Lage

ALGORITMOS y PROGRAMACIÓN 75.40 Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluz-zi Sr P. Corradi-no Sr. F. Gómez

Página 26 de 26

A : array [1..5] of integer = (10,20,30,40,50);

const ( vectores )

Dias Por Mes : array [l..l2] of integer = (31,28,31,30,31,30,31,31,30,31,30,31);

Page 27: Estructura de datos (arreglos) Vectores y Matrices

Algoritmos y Programación I

Clase Teórica Nº 7

Vectores y Matrices

Autores : Ings. Cataldi - Lage

ALGORITMOS y PROGRAMACIÓN 75.40 Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluz-zi Sr P. Corradi-no Sr. F. Gómez

Página 27 de 27

Práctica Nº 7

1. Leer una lista de 10 valores enteros. Listarlos por pantalla en sentido inverso al que ingresaron.

2. Dado un vector 15 valores, hacer un programa que pueda obtener, y sacar por pantalla

§ el mayor de los valores

§ el menor de los valores

§ el más próximo al promedio

3. Suponiendo que los valores del problema anterior fueran mediciones. Se pide modificarlo de for-ma tal que sin uso de vectores auxiliares. Se pueda calcular la desviación media y ña desviación estándar

Donde Xj, es cada uno de los valores X es el promedio de los valores, y N la cantidad de va-lores.

4. Se lee las letras de una palabra carácter a carácter. El último carácter que ingresa es la barra de dividir(/), que indica que la palabra ha finalizado. Escribir un programa que imprima la palabra en el orden que se ingresó y en sentido inverso (pera arep, la palabra podrá tener hasta 20 caracte-res).

5. Diseñar un algoritmo recursivo, que permita invertir el contenido de un vector. Como indica el ejemplo:

Vector original: 28 35 12 43 56 77

Vector invertido: 77 56 43 12 35 28

El algoritmo no podrá usar un vector auxiliar.

6. Hacer un programa que permita realizar la suma y el producto de dos vectores.

§ El usuario puede elegir el tamaño del vector (entre 2 y 10 valores)

§ El usuario elige la operación a realizar.

7. Dado un vector de 20 posiciones (números enteros). Genere un programa que permita realizar

N

XX

MD

n

j

j∑=

−= 1

N

XX

S

n

j

j∑=

= 1

2)(

Page 28: Estructura de datos (arreglos) Vectores y Matrices

Algoritmos y Programación I

Clase Teórica Nº 7

Vectores y Matrices

Autores : Ings. Cataldi - Lage

ALGORITMOS y PROGRAMACIÓN 75.40 Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluz-zi Sr P. Corradi-no Sr. F. Gómez

Página 28 de 28

las siguientes operaciones.

§ Ingresar un elemento en el final de la cola (primera posición libre del vector). Comprobando antes del ingreso que existe una posición libre, sino colocar un mensaje de aviso.

§ Sacar el elemento que se encuentra en la primera posición (si hay, sino colocar un mensa-je de aviso), corriendo luego los demás en la cola una posición hacia delante.

§ Listar en cualquier momento el contenido de la cola del primero al último.

8. Dado un vector de 20 posiciones (números enteros). Genere un programa que permita realizar las siguientes operaciones.

§ Ingresar un elemento en la última posición de la pila (primera posición libre del vector). Comprobando antes del ingreso que existe una posición libre, sino colocar un mensaje de aviso.

§ Sacar el elemento que se encuentra en la última posición (si hay, sino colocar un mensaje de aviso).

§ Listar en cualquier momento el contenido de la pila del primero al último.

9. Dado un vector de 20 posiciones (números enteros). Genere un programa que permita realizar las siguientes operaciones.

§ Ingresar un elemento en la posición que le corresponda de la lista, de manera que la misma se mantenga en orden creciente. (para lo cual desplaza los demás elementos una pos i-ción para atrás).Comprobando antes del ingreso que existe una posición libre, sino colo-car un mensaje de aviso.

§ Sacar de la lista el elemento que indica el usuario (si se encuentra, sino colocar un mensa-je de aviso).

§ Listar en cualquier momento el contenido de la cola del primero al último.

10. Pascal como otros lenguajes operan con números enteros 2,148 109, estos no tienen errores por redondeo. Para valores más grandes se trabajan con reales, pero ellos si tienen errores de re-dondeo. Se le pide a Ud.. Haga un programa que opere con números que poseen entre 10 y 20 cifras, que puedan hacer:

§ Suma

§ Resta

§ Multiplicación

Sin errores, asegurando todas las cifras

Page 29: Estructura de datos (arreglos) Vectores y Matrices

Algoritmos y Programación I

Clase Teórica Nº 7

Vectores y Matrices

Autores : Ings. Cataldi - Lage

ALGORITMOS y PROGRAMACIÓN 75.40 Martes 14 a 17 Hs Jueves 14 a 17 Hs. Prof. Ing. F. J. LAGE J.T.P. Ing. Z. CATALDI A.T.P. Srita. A Pauluz-zi Sr P. Corradi-no Sr. F. Gómez

Página 29 de 29

** Se recomienda hacer todos los problemas de esta práctica.