Вы находитесь на странице: 1из 16

ALGORITMOS Y ESTRUCTURAS DE DATOS - 2017 Apuntes teóricos- Arreglos

Prof. Lic. Ma. Gabriela Cerra

ESTRUCTURAS DE DATOS.

En el proceso de resolución de un problema el primer paso es la detección de los datos que


conforman el universo del mismo. Por lo tanto, la selección de datos y su posterior organización es
fundamental para definir y resolver el problema. Todas las formas en que los datos primitivos
extraídos del enunciado del problema y que se deducen de él se relacionan lógicamente, definen
distintas estructuras de datos.

Definición: Una estructura de datos es un mecanismo de almacenamiento de datos.

Las estructuras de datos se pueden clasificar bajo distintos criterios, a saber:

a) según la cantidad de datos que permiten almacenar en: simples


compuestas

homogéneas
b) según el tipo de datos que almacena en: heterogéneas

c) por el tiempo que permanecen asignadas en la memoria en: temporales


permanentes

d) de acuerdo al uso que hacen de la memoria (es decir, dependiendo del momento en que se reserva
espacio de memoria y cuando se libera y la cantidad que necesitan) en: estáticas
dinámicas

e) por el lugar donde residen los datos que se almacenan internas (RAM)
externas (memoria auxiliar)

Las diferentes estructuras de datos mencionadas se diferencian por la forma en que sus
componentes se relacionan, y por el tipo de las mismas. Todos los datos estructurados deben ser
construidos a partir de datos primitivos.

Estructuras de datos compuestas.

Una estructura de datos compuesta es un conjunto de datos reunidos bajo un nombre único y
colectivo, con una organización particular y un conjunto de operaciones válidas.

El nombre genérico permite identificar al conjunto como un todo, luego para trabajar con cada uno
de los elementos del conjunto deberá tenerse en cuenta su organización, por ello analizaremos este
tema en particular en cada caso respectivamente. (no será lo mismo referenciar un elemento de un
1
ALGORITMOS Y ESTRUCTURAS DE DATOS - 2017 Apuntes teóricos- Arreglos
Prof. Lic. Ma. Gabriela Cerra

vector que el de un registro o una matriz, depende de la estructura interna u organización del
mismo)

A las estructuras de datos compuestas las dividiremos en homogéneas y heterogéneas para su


estudio.
En las homogéneas sólo se pueden almacenar datos de un mismo tipo base ( ej. los elementos del
conjunto son todos reales, o todos enteros, o todos carácter, ... o todos del mismo tipo definido por
el usuario, por ej. Conjunto de alumnos).
En las heterogéneas el conjunto de datos puede ser una combinación de tipos.

Estructuras de datos homogéneas.

Arreglos.

Una estructura de datos de tipo arreglo es un conjunto finito y ordenado de elementos


homogéneos.

Ordenado: porque cada elemento ocupa un lugar u orden dentro del conjunto o sea podemos hablar
de 1º, 2º, 3º.....n-ésimo elemento
Homogéneo: todos los elementos son del mismo tipo base de datos
Finito: tiene una cantidad limitada y conocida de elementos

Como característica fundamental podemos mencionar que todos los elementos de un arreglo se
almacenan en posiciones sucesivas de la memoria Ram, por lo cual son est. de datos temporales.
Como definición alternativa decimos que un arreglo es un conjunto de datos o de variables del
mismo tipo.

El número de componentes del conjunto o la cantidad de elementos del mismo recibe el nombre de
DIMENSION, RANGO o TAMAÑO del arreglo. La dimensión de un arreglo es INVARIABLE,
es decir que no se puede modificar durante la ejecución del programa que lo declara y usa. Como
alternativa puede plantearse la posibilidad de no hacer uso de todas las posiciones del arreglo, pero
su tamaño no crece ni se achica. Así mismo la dimensión se conoce siempre antes del inicio de la
ejecución del programa. Por ambas razones los arreglos son estructuras de datos estáticas.

Los arreglos se clasifican en:


a) unidimensionales o vector
b) bidimensionales o matriz
c) tridimensionales o tensor
d) n- dimensionales, para n>3

Vectores

Un vector es una E. De D. Compuesta homogénea donde sus elementos son accedidos o


referenciados por la posición u orden que tienen dentro del conjunto.

Para llegar a la descripción de los vectores hagamos primero el estudio de un problema particular
que nos justifique la necesidad de usarlos.
2
ALGORITMOS Y ESTRUCTURAS DE DATOS - 2017 Apuntes teóricos- Arreglos
Prof. Lic. Ma. Gabriela Cerra

Enunciado: Una empresa recibe mensualmente información sobre las ventas de cada una de sus 3
sucursales, y desea obtener un listado de las sucursales que superan el promedio de ventas de las
mismas.

Como vemos, primero debemos calcular el promedio de ventas de las sucursales, y luego determinar
cuál de ellas supera ese promedio. Un primer planteo del algoritmo puede ser: calcular el promedio
de ventas y luego comprobar cuáles sucursales tienen ventas superiores al promedio
Para implementar este algoritmo en pseudocódigo tenemos varias opciones. Empezaremos por la
más natural.

Programa ventas;
variables
ventas1, ventas2, ventas3, promedio : real 5,2;

Hacer
Imprimir: ‘Ingrese las ventas de la sucursal 1, luego de la 2 y de la 3’
Leer: ventas1, ventas2, ventas3 /* lee las ventas de cada suc. */
promedio := (ventas1 + ventas2 + ventas3) / 3 /*promedia las ventas*/
Si (ventas1 > promedio) entonces /* deter.cual suc.supera al prom.*/
Imprimir: 'Sucursal 1:', ventas1
FinSi
Si (ventas2 > promedio) entonces
Imprimir: 'Sucursal 2:', ventas2
FinSi
Si (ventas3 > promedio) entonces
Imprimir: 'Sucursal 3:', ventas3
FinSi
FinHacer
FinPrograma.

Notemos que este programa es válido sólo para 3 sucursales, pues ¿Cómo resolveríamos el mismo
problema para 100 sucursales?. Si usamos el mismo enfoque que para el algoritmo anterior,
deberíamos definir 100 variables ventas1, ventas2, ...., ventas100. Y tendríamos entonces lo
siguiente:

Programa ventas;
variables
ventas1, ventas2, ...., ventas100 , promedio : real 5,2;

Hacer
Imprimir:’ ingrese las ventas de la suc1, 2,3,…..100’
Leer: ventas1, ventas2, ...., ventas100
promedio := (ventas1 + ventas2 + ... + ventas100) / 100
Si (ventas1 > promedio) entonces
Imprimir: 'Sucursal 1:', ventas1
FinSi
Si (ventas2 > promedio) entonces
Imprimir: 'Sucursal 2:', ventas2
FinSi
3
ALGORITMOS Y ESTRUCTURAS DE DATOS - 2017 Apuntes teóricos- Arreglos
Prof. Lic. Ma. Gabriela Cerra

.
.
.
Si (ventas100 > promedio) entonces
Imprimir: 'Sucursal 100:', ventas100
FinSi
FinHacer
FinPrograma.

Los puntos suspensivos denotan la lectura y cálculo de las ventas de las 100 sucursales. Pero bien
sabemos que ninguna computadora entiende los puntos suspensivos, lo cual significa que para
escribir este programa en una de ellas, será necesario escribir explícitamente cada una de las
variables y acciones que aquí hemos representado por puntos suspensivos. Así tendremos 100
variables y 100 estructuras de decisión.
¿Es lógico plantear una solución de ese tipo?. ¿Y si el número de sucursales es mayor aún?.
Veamos entonces una forma más eficiente de resolver este problema.
Vamos a reunir los datos de las ventas de las 100 sucursales bajo un nombre único: Venta. Y
representaremos esquemáticamente a Venta como una tabla lineal:

Nro. de
elemento

V 1° 2° 3 4 98 99 100°
E
N 120 578 12 ...... 56.3 5 38.5 6
T
A
venta de cada sucursal

Para designar uno de los 100 valores de esta tabla utilizamos su ubicación dentro de la misma:

Por ejemplo: Venta(3) representa el valor de venta de la tercera sucursal (o sea que ha vendido $12).

Así, la posición nos indica el número de la sucursal y Venta(posición) la venta de dicha sucursal.

Esta organización de los datos en esta tabla lineal, constituye un arreglo lineal o unidimensional o
vector, cuyo nombre es Venta y su tamaño es 100 elementos. Para designar cada elemento
utilizamos el nombre único y colectivo Venta, seguido de una expresión encerrada entre paréntesis.
El valor de esta expresión nos da la ubicación del elemento dentro del arreglo.

Cada componente de un arreglo se denota, explícitamente, y es accedida, directamente,


mencionando el nombre del arreglo seguido de una expresión encerrada entre paréntesis, a la que
llamamos índice del arreglo (variable subindicada)

El número o cantidad de componentes o elementos del arreglo se indica explícitamente cuando se


declara el mismo, y queda desde entonces INVARIABLE. A este número lo llamamos dimensión
del arreglo.

4
ALGORITMOS Y ESTRUCTURAS DE DATOS - 2017 Apuntes teóricos- Arreglos
Prof. Lic. Ma. Gabriela Cerra

El índice del arreglo toma valores entre 1 y la dimensión del mismo. Si se direcciona una posición
que no se encuentre entre dichos límites, producirá un error de ejecución, pues se estará intentando
acceder a una zona de memoria indefinida (pues el vector está definido entre las posiciones 1 y
dimensión).
A un arreglo lineal se lo denomina arreglo unidimensional o de una dimensión, y usa un solo índice
para denotar a sus elementos.

Formalmente: Un vector es una E. De D. Compuesta homogénea donde sus elementos son


accedidos o referenciados por la posición u orden que tienen dentro del conjunto.

Todo vector tiene un nombre genérico y único que denota al conjunto y cada elemento se referencia
a través de un subíndice que indica la posición del mismo dentro del vector.
Los vectores se almacenan en memoria Ram y cada elemento ocupa una celda contigua de la
memoria.
Para poder hacer uso de un vector es necesario que esté definido el tipo correspondiente y declarada
la variable de dicho tipo.

Declaración de vectores.

Los vectores se definen en la zona de declaración del programa. Dicha definición se encabeza con la
palabra estructuras. Para declararlos se explicita el nombre del mismo, acompañado de su
dimensión, y a continuación se pone el tipo de sus elementos. Todos los elementos de un vector
serán del mismo tipo: standard (enteros, reales, lógicos, carácter) o definido por el usuario.

SINTAXIS

Programa .....;
tipos estructurados
nombre-del-tipo= arreglo ( dimensión ) : tipo de sus elementos;
variables
....nombre_del_vector : nombre-del-tipo ;
.
.
.
FinPrograma.

Ejemplo:

tipos estructurados
vect= arreglo(10) : entero2 ;
variables
v : vect ;

Almacenamiento de vectores en memoria.

Los elementos de un arreglo lineal se almacenan en posiciones sucesivas de memoria, es decir, un


elemento al lado del otro. Si cada elemento de un arreglo de dimensión k, ocupa x posiciones,
entonces el arreglo ocupa en total k * x posiciones. El almacenamiento es igual al de las variables,

5
ALGORITMOS Y ESTRUCTURAS DE DATOS - 2017 Apuntes teóricos- Arreglos
Prof. Lic. Ma. Gabriela Cerra

con la particularidad que ahora el conjunto de variables ocupa posiciones sucesivas o contiguas de
la memoria.

Operaciones con vectores.

Una vez definido el tipo vector podemos declarar tantas variables de ese tipo como sean necesarias
en nuestro algoritmo.
Para poder trabajar con vectores debemos tener en cuneta cuáles son las operaciones básicas que se
pueden aplicar sobre los mismos: asignación de valor (carga e inicialización), impresión, recorrido
(standard es el secuencial), ordenamiento, búsqueda e intercalación.

1- Asignación de valores

Si se cuenta con un arreglo de nombre V, de 30 elementos podemos asignar valor a los mismos de
varias maneras.
Son válidas las formas de asignación de valor vistas para variables: carácter, constante, aritmética,
lógica, de memoria a memoria y desde dispositivos externos.
Veamos las particularidades de las asignaciones de valor para arreglos.
Si quisiéramos darle valor a un elemento en particular, usamos la asignación habitual:

V(4) := 43 /* asignación constante */

Esto provocaría que se almacene como contenido de V(4) un 43. En otras palabras el cuarto
elemento del vector vale 43. Así se puede hacer con cualquier elemento del arreglo, y usando las
formas de asignación conocidas. De esta manera se está manejando cada elemento como una
variable tradicional.

Otros ejemplos:

V(2) := 2 * sen(45) /* asig. Aritmética */


V(15) := V(2) + V(7) - A /* asig. de memo a memo */
Leer: V(28) /* asig. por disp. externo */
V1(5) := 'hoy llueve' /* asig. carácter, siendo V1 vector de caracteres */

En general el tratamiento de los vectores implica el procesamiento de todos sus elementos. Por ello
uno tiende a usar estructuras de control repetitivas para acceder y usar los elementos de un vector.
Así si se quiere inicializar a los elementos de un vector con un mismo valor , se lo podrá expresar
de la siguiente forma:

Repetir Para: I :=1,30 recorrido secuencial standard


V(I) := 0
FinRepetirPara
(usamos una e. de control repetitiva incondicional pues sabemos de antemano la cantidad total de
elementos del vector y sabemos que deseamos aplicar a cada uno de sus elementos el mismo
proceso).

De la misma manera que para variables, podemos darles valor a los elementos de un vector a través
de operaciones de entrada de datos por teclado.

6
ALGORITMOS Y ESTRUCTURAS DE DATOS - 2017 Apuntes teóricos- Arreglos
Prof. Lic. Ma. Gabriela Cerra

Repetir Para: I:=1,30


Imprimir:’ingrese un valor’
Leer: V(I)
FinRepetirPara.

Esto se interpreta como la lectura de 30 valores que son asignados como contenido de 30 posiciones
sucesivas de memoria que corresponden al vector de nombre V.
La misma operación la podemos representar así:

Una vez que le hemos asignado valor a los elementos del vector, se hace uso de tales elementos con
la sola mención de su nombre. Así, si antes al definir una variable B, y darle valor, luego la
referenciábamos por su nombre, ahora haremos lo mismo con el vector y sus elementos. La lectura
sobre el vector sólo sirve para darles valor a sus componentes, y de allí en adelante se los usa como
variables: por su nombre.

Muestra del contenido de un vector

Finalmente nos queda como operación la de mostrar el contenido de un vector.


Si lo que se desea es mostrar el contenido de un elemento particular se lo expresa como siempre:

Imprimir: V(26)

Si se desea mostrar todo el vector, se usa la repetición:

Repetir Para: I:=1,30


Imprimir: V(I)
FinRepetirPara

Ordenamiento, intercalación y búsqueda serán objeto de estudio más adelante.

Ejemplos básicos de Aplicación.

Con este nuevo concepto, re-escribimos el programa anterior para las 100 sucursales, haciendo uso
del arreglo como estructura de datos.

Programa ventas;
tipos estructurados
vector=arreglo(100) : real 5,2; /*guarda las ventas de cada suc. */
variables
suma, promedio : real 5,2; /*guardan la suma de ventas y prom.*/
I : entera 3;
Venta :vector ;

Hacer
suma := 0 /*inicializo suma */
Repetir Para: I:=1,100 /* carga las ventas de las 100 sucursales y las suma*/
Imprimir: ’ingrese las ventas de la sucursal:’, I
7
ALGORITMOS Y ESTRUCTURAS DE DATOS - 2017 Apuntes teóricos- Arreglos
Prof. Lic. Ma. Gabriela Cerra

Leer: Venta(I)
suma := suma + Venta(I)
FinRepetirPara
promedio := suma / 100 /*calcula prom. */

Repetir Para: I:=1,100 /*determina qué suc. supera al prom.*/


Si ( Venta(I) > promedio ) entonces
Imprimir: 'Sucursal:', I, Venta(I)
FinSi
FinRepetirPara
FinHacer
FinPrograma.

Ejercicios.

Enunciado: Se leen 50 números enteros de 2 dígitos y se los carga en un vector. Se quiere saber:
- cuántos son positivos y están en posiciones pares del vector;
- las posiciones en las que hay múltiplos de 3
- imprimir todos los valores > 15.

Programa ejem1;

tipos estructurados
vector= arreglo(50) : entero 2;
variable
I, posit, aux : entero 2;
vec :vector ;

Hacer
posit := 0
Repetir Para: I:=1,50 /* carga del vector */
Imprimir: ‘ingrese un nro’
Leer: vec(I)
FinRepetirPara

Repetir Para: I:=1,50 /* busca positivos en pos. pares */


Si ( vec(I) > 0 and (I/2) = int(I/2) ) entonces
posit := posit + 1
FinSi
aux := vec(I) / 3 /* busca pos. de mult. de 3 */

Si aux = int(aux) entonces


Imprimir: ' posicion de mult. de 3:', I
FinSi
Si vec(I) > 15 entonces /* busca elem. > a 15 */
Imprimir: ' Elemento mayor a 15:', vec(I)
FinSi
FinRepetirPara
Imprimir: ' Cantidad de positivos en posiciones pares:', posit
8
ALGORITMOS Y ESTRUCTURAS DE DATOS - 2017 Apuntes teóricos- Arreglos
Prof. Lic. Ma. Gabriela Cerra

FinHacer
FinPrograma.

Enunciado: Generar un vector de 20 elementos enteros de 1 dígito, sumar sus componentes pares,
contar los valores negativos y armar otro vector, que tenga como elementos los del vector original
elevados al cuadrado.

Programa ejem2;
tipos estructurados
vector1=arreglo(20) : entero 1;
vector2=arreglo(20) : entero 2;
variables
k, suma, nega : entero 2;
v :vector1 ;
otro :vector2 ;
Hacer
suma := 0
nega := 0
Repetir Para: k := 1,20 /* carga del vector */
Imprimir: ‘ingrese un nro’
Leer: v(k)
FinRepetirPara
Repetir Para: k:=1,20
Si ( v(k) / 2 ) = int( v(k) / 2 ) entonces /* suma elem pares */
suma := suma + v(k)
FinSi
Si v(k) < 0 entonces /* cuenta negativos */
nega := nega + 1
FinSi
otro(k) := v(k) ** 2 /* genera otro vector con los elementos al cuadrado*/
FinRepetirPara
Imprimir: suma, nega /* imprime resultados */
Repetir Para: k:=1,20 /* imprime vector nuevo */
Imprimir: otro(k)
FinRepetirPara
FinHacer
FinPrograma.

Enunciado: Se leen 150 números enteros de 2 cifras, y se quiere saber cuántos de ellos pertenecían
al intervalo (0-9), cuántos al (10-19), cuántos al (20-29), cuántos al (30-39), ...... y cuántos al (90-
99).
Programa ejem3;
tipos estructurados
vector=arreglo(10) : entero 3;
variables
k : entero 3;
val, aux, j , li, ls : entero 2;
vec :vector ;
9
ALGORITMOS Y ESTRUCTURAS DE DATOS - 2017 Apuntes teóricos- Arreglos
Prof. Lic. Ma. Gabriela Cerra

Hacer
Repetir Para: j :=1,10 /* inicializo vector de contadores */
vec(j) := 0
FinRepetirPara

Repetir Para: k := 1,150


Leer: val /* se ingresan los 150 valores */
aux := int(val / 10 ) + 1 /* se calcula el intervalo. Divide el valor por 10 y toma la parte entera*/
vec(aux) := vec(aux) + 1 /* se usa el intervalo como índice */
FinRepetirPara

Repetir Para: j :=1,10 /* se imprimen los contadores */


li := 10 * j - 10 /* calculo lim. inf. del intervalo */
ls := 10 * j - 1 /* calculo lim. sup. del intervalo */
Imprimir:'La cant. de valores en el intervalo:',li,'-',ls,'es:',vec(j)
FinRepetirPara

FinHacer
FinPrograma.

Arreglos bidimensionales- Matrices

Podemos decir que una matriz es una E. De datos compuesta homogénea con organización de tabla
de doble entrada donde cada elemento se referencia a través de dos índices: uno horizontal o de fila
y uno vertical o de columna. De allí que reciba el nombre de arreglo bidimensional (de la necesidad
de usar 2 índices para ubicar un elemento)

Gráficamente, una matriz la veremos como una cuadrícula donde cada cuadradito representa el lugar
donde se almacena un dato.

col 1 col2 . . . . .

fila 1

fila 2 *

fila 3

.
Podemos ver entonces, que todo dato que guardemos en esta cuadrícula debe ser referenciado a
través de un índice de fila y uno de columna: cada elemento tiene dos entradas, una horizontal o de
fila, y una vertical o de columna. En la intersección de fila y columna se hallará el dato.
En forma similar a un arreglo lineal, la matriz tiene un nombre único y genérico, que respeta las
normas de declaración de variables, y para designar a sus elementos es necesario usar 2 índices.
Así, el nombre de la matriz, seguido de los 2 índices separados por coma, el primero para la fila y el
segundo para la columna, y encerrados entre paréntesis, denota un elemento en particular.

10
ALGORITMOS Y ESTRUCTURAS DE DATOS - 2017 Apuntes teóricos- Arreglos
Prof. Lic. Ma. Gabriela Cerra

Ej.: Mat(2,3) : es el elemento de la matriz Mat que se halla en la intersección de la 2da. fila y 3er.
columna.
Por ser un arreglo homogéneo sus elementos son todos del mismo tipo y precisión: enteros, reales,
lógicos, carácter, arreglos, etc. .
La cantidad total de elementos o dimensión de una matriz, se calcula haciendo el producto entre la
cantidad total de filas por la cantidad total de columnas. En forma genérica, dada una matriz de N
filas por M columnas, tendrá (N*M) elementos.
El espacio que ocupa en memoria una matriz se calcula teniendo en cuenta la cantidad total de
elementos multiplicada por el espacio que ocupa un elemento del tipo y precisión especificado para
dicha matriz. Ejemplo: dada una matriz de N filas por M columnas, de enteros de 2, el espacio que
ocupa en memoria es (N*M*espacio que ocupa un entero de 2).

Almacenamiento de matrices en memoria.

Los elementos de una matriz se almacenan en posiciones sucesivas de memoria Ram, al igual que
los vectores. En otras palabras podemos decir que se almacenan como vectores contiguos: una fila
de la matriz al lado de la otra, y cada elemento de la fila al lado del siguiente. Esto determina que
sea una estructura de datos temporal y estática.

M elementos M elementos

|___|___|___|___|___|___|___|___|___|___|___|___|___|_________|___|___|

Fila 1 Fila 2 .............

Declaración de matrices.

Las matrices se definen en la zona de declaraciones del programa, dentro del bloque de estructuras.
Para ello se especifica: el nombre de la misma seguido de la cantidad total de filas y de columnas,
separadas por coma y encerradas entre paréntesis, y luego se escribe el tipo y precisión de los
elementos.

Programa Uno;
tipos estructurados
nombre_del_tipo= arreglo ( total de filas, total de columnas): tipo de sus elementos;
variables
mat: nombre_del_tipo;
.
.
FinPrograma.

La declaración reserva lugar en memoria, lo asocia con el nombre de la matriz, pero su contenido
queda indeterminado, como ocurre con las variables. Toda declaración crea una plantilla o molde
para posteriores creaciones de variables con esa forma.
Es necesario hacer una operación de asignación de valores, para que la matriz tenga elementos.

11
ALGORITMOS Y ESTRUCTURAS DE DATOS - 2017 Apuntes teóricos- Arreglos
Prof. Lic. Ma. Gabriela Cerra

Operaciones con matrices.

1- Asignación de valor/carga/inicialización

Referenciar un elemento.

Para referenciar un elemento en particular de la matriz, basta con indicar el nombre de la matriz
seguido del valor de la fila y de la columna donde se encuentra ese elemento. Por ejemplo, si
queremos usar el elemento de la fila 2 columna 5 de una matriz mat, escribimos: mat(2,5)
Los índices de una matriz pueden ser constantes o variables. En cualquier caso, no pueden salir del
rango de la definición: el mínimo valor para un índice es 1, y el máximo depende de la cantidad
total de filas/columnas. Cualquier valor fuera de dicho intervalo produce un error en la ejecución del
programa.

La asignación de valores a los elementos de una matriz se puede llevar a cabo de la misma manera
que para vectores. O bien dando valor a algunos elementos en particular, o bien procesando todos
los elementos de la matriz.
Recordemos que son válidas las formas de asignación vistas para variable y vectores: asignación
constante, por operación aritmética, de memoria a memoria, de dispositivo externo, etc.
Así, dada una matriz mat de 5 filas por 4 columnas, y elementos enteros de 1 dígito, tendríamos los
siguientes ejemplos:
mat(1,2) := 3
mat(4,3) := 2*mat(1,2)
Leer: mat(5,4)

2- Recorrido secuencial standard

Como en general lo que queremos es trabajar con la matriz completa, lo que hacemos es usar
estructuras repetitivas que nos permitan expresar en forma general y sintética la carga de valores.
Así la asignación de valores o carga de la matriz se expresa de la siguiente manera:

Por filas:

Repetir Para: I:=1,5


Repetir Para: J:=1,4
Leer: mat(I,J)
FinRepetirPara
FinRepetirPara

Por columnas:

Repetir Para: K:=1,4


Repetir Para: H:=1,5
Leer: mat(H,K)
FinRepetirPara
FinRepetirPara

Donde las variables de control de los lazos repetitivos juegan el papel de índices de la matriz.
El Repetir de más afuera indica el recorrido: si es por fila o por columnas.
12
ALGORITMOS Y ESTRUCTURAS DE DATOS - 2017 Apuntes teóricos- Arreglos
Prof. Lic. Ma. Gabriela Cerra

Lo habitual es recorrer la matriz por filas, pero podemos recorrerla de acuerdo a lo que más nos
convenga: por filas , columnas, de adelante para atrás, de arriba a abajo, las filas pares, las impares,
las columnas pares, impares, la diagonal principal, etc. Sólo hay que cambiar los límites inferior y
superior de los lazos repetitivos, y/o el paso de las repeticiones.

3- Inicialización de la matriz.

Si se quiere inicializar toda la matriz con el mismo valor, se lo expresa así:

Ejemplo:

Repetir Para: I:=1,5


Repetir Para: J:=1,4
mat(I,J) := 0
FinRepetirPara
FinRepetirPara

Una vez cargada la matriz en memoria, se trabaja con sus elementos como si fueran variables
comunes: por su nombre.

4- Mostrar el contenido de una matriz.

Para mostrar el contenido de una matriz recurrimos nuevamente a un proceso repetitivo, excepto
que se quieran mostrar algunos elementos en particular.

Repetir Para: I:=1,5


Repetir Para: J:=1,4
Imprimir: mat(I,J)
FinRepetirPara
FinRepetirPara

Las operaciones de ordenamiento y búsqueda se verán más adelante.

Tiempo de vida de una estructura tipo arreglo.

Los arreglos son estructuras de datos temporarias: almacenan información mientras el programa que
las creó esté activo o en ejecución. Cuando el programa donde se las declara y se las usa se termina,
se pierde toda referencia a dichas estructuras. Por ello cada vez que se trabaje con vectores, matrices
o arreglos multidimensionales, se deber hacer la carga del arreglo antes de procesarlo.

Ejemplos.

a) Leer 30 valores enteros de 3 dígitos y asignarlos a una matriz de 3 filas por 10 columnas. Obtener
e imprimir: la cantidad de elementos mayores a 10; el máximo elemento por cada columna y el
promedio de los elementos de la matriz.

Programa Ejea;

13
ALGORITMOS Y ESTRUCTURAS DE DATOS - 2017 Apuntes teóricos- Arreglos
Prof. Lic. Ma. Gabriela Cerra

tipos estructurados
matriz = arreglo (3,10): entero 3;

variables
I: entero 1; /* índice de fila */
J: entero 2; /* índice columna */
cant: entero 2; /* cantidad de elem. > 10 */
prom: real 5,2; /* promedio de elem. */
max: entero 3; /* máximo por columna */
suma: entero 5; /* suma de los elementos */
mat : matriz /* matriz de datos*/
Hacer
cant := 0 /* inicial. de contador de > 10 */
suma := 0 /* inic. del sumador */
Repetir Para: I:=1,3 /* carga de la matriz por filas */
Repetir Para: J:=1,10
Imprimir: ‘ingrese un valor’
Leer: mat(I,J) /* lectura de datos de entrada */
FinRepetirPara
FinRepetirPara
Repetir Para: J:=1,10 /* recorrido de la matriz por col. */
max := mat(1,j) /* inic. del máximo por col. */
Repetir Para: I:=1,3
suma := suma + mat(I,J) /* suma de elementos */
Si (mat(I,J) > 10) entonces /* cuenta los > 10 */
cant := cant + 1
FinSi
Si (mat(I,J) > max) entonces /* busca el máx. de la col. */
max := mat(I,J)
Finsi
FinRepetirPara
Imprimir: "máximo de columna:',J,'es:',max
FinRepetirPara
prom := suma/30
Imprimir: prom, cant
FinHacer
FinPrograma.

b) Desarrollar el algoritmo que calcule el salario de un grupo de 100 vendedores. Dicho salario se
paga en base a una comisión del 5% sobre todos los artículos que vende. Cada uno de los 100
vendedores comercializa 25 productos. Se procesan N ventas de las cuales se conoce: el código del
vendedor (de 1 a 100), el código del artículo (de 1 a 25), el precio por unidad del artículo ( real de
5,2), y la cantidad que ha vendido del mismo (de 1 a 99).
Imprimir un listado con el código de cada vendedor, su salario y la cantidad de productos distintos
de los cuales no vendió ninguna unidad.

Programa Ejeb;

14
ALGORITMOS Y ESTRUCTURAS DE DATOS - 2017 Apuntes teóricos- Arreglos
Prof. Lic. Ma. Gabriela Cerra

tipos estructurados
matriz= arreglo (100,25): real 7,2;

variables
cuad: matriz; / * matriz de ventas */
I: entero 3; /* índice de fila */
J: entero 2; /* índice columna */
sala: real 9,2; /* salario del vendedor */
vend: entero 3; /* cod. del vendedor */
art: entero 2; /* cod. del artículo */
cant: entero 2; /* unidades vendidas */
precio: real 5,2; /* precio unitario */
gana: real 7,2; /* ganancia por artículo */
cont: entero 2;
Procedimiento Iniciar( ref M:matriz)
Variables
I,j: entero 3
Hacer
Repetir Para: I:=1,100,1
Repetir Para: J:=1, 25, 1
M(I,J):=0
FRP
FRP
Fin hacer
Finprocedimiento

Hacer
Iniciar(mat)
Leer: N
Repetir Para: I:=1,N
Imprimir: ‘ingrese código del vendedor, código del artículo vendido, la cantidad y el precio
unitario’

Leer: vend, art, cant, precio /* lectura de datos de entrada */


gana := cant * precio /* calculo de la ganancia */

cuad(vend,art) := cuad(vend,art) + gana + (5 * gana)/100 /*generación de matriz*/

FinRepetirPara
Repetir Para: I:=1,100 /* recorrido de la matriz
sala := 0 /* inicial. de salario */
cont:=0
Repetir Para: J:=1,25 para calcular el salario */
sala := sala + cuad(I,J)
si cuad(i,j) =0 entonces
cont:= cont + 1 /*cuenta productos diferentes vendidos*/
finsi
FinRepetirPara
Imprimir: ‘Vendedor : ‘, I, ‘Salario: ‘, sala, ‘vendió’, cont , ‘productos diferentes’
FinRepetirPara
15
ALGORITMOS Y ESTRUCTURAS DE DATOS - 2017 Apuntes teóricos- Arreglos
Prof. Lic. Ma. Gabriela Cerra

FinHacer
FinPrograma.

16

Вам также может понравиться