Académique Documents
Professionnel Documents
Culture Documents
PROGRAMACIÓN 75.40
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
organizació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)
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
antes 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
estructurados un identificador puede representar múltiples datos individuales, pudiendo cada uno de
estos ser referenciados independientemente.
Página 1 de 25
ALGORITMOS y
PROGRAMACIÓN 75.40
Los subíndices 1, 2, k, n, indican la posición del elemento, en Pascal van entre corchetes. El
primer 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:
Página 2 de 25
ALGORITMOS y
PROGRAMACIÓN 75.40
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;
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 Código se programa
desde I = 1 hasta 55 hacer for I = 1 to 55 do
CARGA[I] ← 0 CARGA[I] := 0;
fin desde
desde I = 1 hasta 55
CARGA[I] ← 0
Página 3 de 25
ALGORITMOS y
PROGRAMACIÓN 75.40
Página 4 de 25
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
estructuras repetitivas.
Ejemplo:
Ingresar por teclado cada uno de los 5 elementos de un vector de
nombre vec. Y luego leerlos y presentarlos por pantalla en orden inverso al
que entraron (de 5 a 1)
Página 5 de 25
Algoritmo de escribe
Pseudocódigo en español Código se programa
desde I = 1 hasta 5 hacer for I = 1 to 5 do
comienzo begin
imprimo mensaje write (‘ ‘);
leo y escribo en vec[I] read (vec[I] );
end;
fin desde
desde I = 1 hasta 5
imprimo mensaje
leo vec[I]
Página 6 de 25
ALGORITMOS y
PROGRAMACIÓN 75.40
Algoritmo de lee
Pseudocódigo en español Código se programa
desde I = 1 hasta 5 hacer for I = 1 to 5 do
leo vec[I] read (vec[I] );
fin desde
Su estructugrama tiene la siguiente forma
desde I = 1 hasta 5
imprimo vec[I]
Página 7 de 25
ALGORITMOS y
PROGRAMACIÓN 75.40
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);
{* lee el vector y lo saca por pantalla *}
end; {* fin de lectura *}
Página 8 de 25
ALGORITMOS y
PROGRAMACIÓN 75.40
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 Código se programa
I ← 0 I := 0;
repetir repeat
I ← I +1 I := I + 1;
hasta que U[I] = 0 o i > k until U[I] = 0 or i >q
si i es menor o igual a k if I <= k then
entonces
leo nuevo U[I] read (U[I] )
sino else
imprimo “No más lugar”
writeln(“No mas lugar”)
fin_si
Página 9 de 25
ALGORITMOS y
PROGRAMACIÓN 75.40
Ejemplo:
Dado el vector U de 7 elementos eliminar un elemento al vector
Método rudimentario
Algoritmo de elimina (rudimentario)
Página 10 de 25
ALGORITMOS y
PROGRAMACIÓN 75.40
I ← I +1
U[I] = 0 o I > k
I es menor o igual a k
Método Optimo
Algoritmo de elimina (optimo)
Pseudocódigo en español
Código se programa
I ← 0 I := 0;
Lee Aux Readln(Aux);
repetir repeat
I ← I +1 I := I + 1;
hasta que U[i] = Aux o I > k until U[i] = Aux or I >q
si i es menor o igual a k if I <= k then
entonces
repetir repeat
U[I] ← U[I + 1] U[I] := U[I+1];
I ← I +1 I := I + 1;
hasta que U[i] = 0 o I > k until U[I] = 0 or I >q ;
sino else
imprimo “No existe el elemento” writeln(“No existe el elemento”)
fin_si
Página 11 de 25
ALGORITMOS y
PROGRAMACIÓN 75.40
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
posición adecuada sin que se pierda el orden.
Algoritmo de inserta (Ordenado creciente)
Pseudocódigo en español
Código se programa
I ← 0 I := 0;
Lee Aux Read(Aux);
repetir repeat
I ← I +1 I := I + 1;
hasta que U[i] = 0 o I > B until U[i] = 0 or I >B
si i es menor o igual a B if I <= B then
entonces begin
I ← I -1 I := I - 1;
mientras U[i] > Aux
U[I+1] ← U[I] while U[I] > Aux
I ← I -1 begin
fin mientras U[I+1] := U[I];
I := I - 1;
U[I+1] ← Aux
end;
sino
U[I+1] = Aux;
imprimo “No hay lugar”
end
fin_si
else
writeln(“No hay lugar”)
Página 12 de 25
ALGORITMOS y
PROGRAMACIÓN 75.40
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
(decantación).
Algoritmo de ordena (Ordenado creciente)
Pseudocódigo en español
Código se programa
I ← 0 I := 0;
repetir repeat
I ← I +1 I := I + 1;
hasta que U[i] = 0 o I > B until U[i] = 0 or I > B
P← I -1
P := I - 1;
desde I ← 1 hasta P -1 hacer
desde J ← 1 hasta P - I hacer for I = 1 to P-1 do
si U[J] > U[J +1] for J = 1 to P- I do
entonces (intercambiar) if U[J] > U[J +1] then
Aux ← U[J] begin
Aux := U[J];
U[J] ← U[J +1]
U[J] := U[J +1];
U[J +1] ← Aux
U[J +1] := Aux ;
fin si
end;
fin desde
fin desde
Página 13 de 25
ALGORITMOS y
PROGRAMACIÓN 75.40
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.
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 .
Página 14 de 25
ALGORITMOS y
PROGRAMACIÓN 75.40
Página 15 de 25
ALGORITMOS y
PROGRAMACIÓN 75.40
Página 16 de 25
ALGORITMOS y
PROGRAMACIÓN 75.40
Página 17 de 25
ALGORITMOS y
PROGRAMACIÓN 75.40
Página 18 de 25
ALGORITMOS y
PROGRAMACIÓN 75.40
else
begin
write ('No hay mas lugar en el vector');
Read (H);
end
end; {* fin de agrega *}
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 *}
Página 19 de 25
ALGORITMOS y
PROGRAMACIÓN 75.40
Copia de un array:
Un array puede ser asignado a otro array, si y solo si, ambos tienen el mismo tipo y el mismo
tamaño. Lo que implica que ambos fueron declarados por el mismo identificador o por identificadores
equivalentes.
Página 20 de 25
ALGORITMOS y
PROGRAMACIÓN 75.40
Ejemplo:
Type
XX = array [1..30] of byte;
YY = array [1..30] of byte;
Var:
Alfa, Gama: XX;
Beta: YY;
Página 21 de 25
ALGORITMOS y
PROGRAMACIÓN 75.40
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.
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
ambos 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;
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]);
Página 22 de 25
ALGORITMOS y
PROGRAMACIÓN 75.40
Array multidimensionales
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,
variables que tienen un valor inicial específico en la cabecera del programa.
Ejemplos
const
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);
Página 23 de 25
ALGORITMOS y
PROGRAMACIÓN 75.40
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
forma tal que sin uso de vectores auxiliares. Se pueda calcular la desviación media y ña
desviación estándar
n n
∑ Xj − X
j =1
∑(X − X )
j =1
j
2
MD = S=
N N
Donde Xj, es cada uno de los valores X es el promedio de los valores, y N la cantidad de
valores.
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
caracteres).
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.
7. Dado un vector de 20 posiciones (números enteros). Genere un programa que permita realizar
las siguientes operaciones.
Ingresar un elemento en el final de la cola (primera posición libre del vector).
Página 24 de 25
ALGORITMOS y
PROGRAMACIÓN 75.40
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
mensaje 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 posición para atrás).Comprobando antes del ingreso que existe una posición libre,
sino colocar un mensaje de aviso.
Sacar de la lista el elemento que indica el usuario (si se encuentra, sino colocar un
mensaje 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
redondeo. 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
Página 25 de 25