arreglos-2015

Descargar como pptx, pdf o txt
Descargar como pptx, pdf o txt
Está en la página 1de 36

Algoritmos y Estructuras de Datos

Unidad: ARREGLOS
ARREGLOS
Introducción
– Con lo aprendido hasta ahora ¿como
resolveríamos los siguientes problemas ?
• Ingresar 50 números enteros, obtener el
promedio de ellos. Mostrar por pantalla dicho
promedio y los números ingresados que sean
mayores que él.

• Dados n números, obtener e imprimir la suma


de todos ellos. A continuación mostrar por
pantalla todos los sumandos.

2
ARREGLOS
•¿Es posible resolver estas consignas? ¿Cual es el
inconveniente?
•Una de las principales dificultades que se observan con
estos problemas es que para la resolución de ambos es
necesario almacenar la totalidad de los datos a procesar.
•No sería eficiente crear n cantidad de variables para
guardar estos datos.
•Para realizar programas y/o algoritmos que nos
permitan resolver los problemas planteados, usaremos
una nueva estructura de datos denominada arreglos.

3
ARREGLOS
• Una estructura de datos es un conjunto de datos
con un cierto orden.
• Las estructuras de datos pueden ser dinámicas o
estáticas.
– Estáticas: aquellas a las que se le asigna una
cantidad fija de memoria de acuerdo a lo
definido en la declaración de la variable.
– Dinámicas: son aquellas cuyo tamaño en
memoria aumenta o disminuye en tiempo de
ejecución de acuerdo a las necesidades del
programa.

4
ARREGLOS- Clasificación

Los arreglos se clasifican de acuerdo al número de


dimensiones que tienen:
􀂄Unidimensionales (Vectores)
􀂄Bidimensionales (Matrices o Tablas)
􀂄Multidimensionales (tres o más dimensiones)
Vectores y Matrices
Arreglos dinámicos y estáticos
OBSERVACIÓN:
Lo habitual es que un vector tenga una cantidad fija de memoria asignada, aunque
dependiendo del tipo de vector y del lenguaje de programación un vector podría tener una
cantidad variable de datos.
En este caso, se les denomina vectores dinámicos, en oposición, a los vectores con una
cantidad fija de memoria asignada se los denomina vectores estáticos.

El uso de vectores dinámicos requiere realizar una apropiada gestión de memoria dinámica.
Un uso incorrecto de los vectores dinámicos, o mejor dicho, una mala gestión de la memoria
dinámica, puede conducir a una fuga de memoria. Al utilizar vectores dinámicos siempre
habrá que liberar la memoria utilizada cuando ésta ya no se vaya a seguir utilizando.

Lenguajes más modernos y de más alto nivel, cuentan con un mecanismo denominado
recolector de basura (como es el caso de Java) que permiten que el programa decida si debe
liberar el espacio basándose en si se va a utilizar en el futuro o no un determinado objeto.

6
Vectores

• Qué es un vector? Un vector (o arreglo


unidimensional) es una estructura de datos en la
cual se almacena un conjunto de datos de un
mismo tipo. Es decir que un arreglo es una lista de
n elementos que posee las siguientes
características:
– se identifica por un único nombre de variable
– sus elementos se almacenan en posiciones
contiguas de memoria
– se accede a cada uno de sus elementos en forma
aleatoria

7
Vectores - Declaración
• Como ya dijimos anteriormente, los arreglos son
estructuras de datos, por lo tanto las mismas deben
ser declaradas. Esta operación se realiza en la
seccción “Type” de un programa en Pascal.
• formato
type
nombre_del_tipo = array[tipo_subindice * ] of tipo;

* debe ser de tipo ordinal: boolean, char,


enumerado o subrango

8
Vectores - Declaración
• Luego de la declaración del tipo, se declara la
variable.
• formato
var
nombre_variable: nombre_del_tipo;

9
Vectores - Declaración
• Ejemplos de declaraciones:
•Ej1: type
Valores = array[ -10..10 ] of real;
var
precios: valores;
Ej2: const Max= 500;
type
T_Texto = array[ 1..Max ] of char;
var
Texto: T_Texto;

10
Vectores - Manejo de índices

• Asignación de valores
Texto[3] := ´a´;
Precios[0] := 23.50;

Los índices de un arreglo pueden ser: entero, lógico,


caracter, enumerado o subrango.

11
Vectores - Manejo de índices
Ej3: const
longitud = 40;
altura = 30;
type
horizontal = 1..Longitud;
T_Línea = Array [ horizontal ] of char;
var
Linea: T_Linea

12
Vectores - Manejo de índices

Ej4:
type
DiasSemana = (Lunes, Martes, Miercoles,Jueves,
Viernes, Sabado, Domingo );
T_Dias = array [DiasSemana] of integer;
var
Dias: T_Dias;

13
Vectores - Operaciones
• Con la siguiente declaración:
type
T_Notas = array [1..30] of integer;
var
Notas: T_Notas;
• Lectura de un vector
for i:= 1 to 30 do
read(Notas[i] );

• Escritura de un vector
for i:= 1 to 30 do
writeln(Notas[i] );

14
Vectores - Operaciones
• Con la siguiente declaración:
type
T_Notas = array [1..30] of integer;
var
Notas, Aux_Notas: T_Notas;
Copia de vectores
for i:= 1 to 30 do
Aux_Notas[i]:= Notas[i];

o bien: Aux_Notas:=Notas;

15
Vectores
Mi_vector : arreglo (1..7) de enteros

Nombre de
Definicion de la estructura
la variable

Estructura fisica en memoria 9 5 6 2 4 8 3

Posición : 1
Contenido : Mi_vector[1] = 9

Si deseamos “ver” el contenido de una determinada posición


16
Vectores

• Ejemplos:
– Ejemplo 1. Resolvamos este primer ejemplo:
– Cargar 10 elementos en un vector, sumarlos y
mostrar el resultado por pantalla.
– Pasos para resolver este problema:
• Leer un vector de 10 elementos
• Sumar los elementos
• Mostrar el resultado de la suma por pantalla

17
Vectores - Ejemplo1
Program Ejemplo1; {Version 1}
Declaración del tipo del arreglo
type
sumandos = array[1..10] of integer;
var
suma, i : integer;
vec_sumandos : sumandos; Declaración de la variable arreglo
begin
suma := 0;
for i:= 1 to 10 do
read(vec_sumandos[i] ) Lectura de los elementos del arreglo
for i := 1 to 10 do
suma:= suma +vec_sumandos[i];
writeln (´La suma de los números es´, suma); Suma de los elementos
end.

18
Vectores - Ejemplo1
Program Ejemplo1; {Version 2}
type
sumandos = array[1..10] of integer; Declaración del tipo del arreglo
var
suma, i : integer;
vec_sumandos : sumandos; Declaración de la variable arreglo
begin
suma := 0;
for i:= 1 to 10 do
begin
read(vec_sumandos[i] ); Lectura de los elementos del arreglo
suma:= suma +vec_sumandos[i];
Suma de los elementos
end;
writeln (´La suma de los números es´, suma);
end.

19
Vectores - Ejemplos resueltos
Ej2- Dados 50 números enteros, obtener el promedio de ellos. Mostrar por
pantalla dicho promedio y los números ingresados que sean mayores
que el mismo.

Program Ej2;
const
max = 50;
type
t_numeros = array[1.. max] of integer;
var
suma, i : integer;
promedio: real;
numeros : t_numeros;
begin
suma := 0;

20
Vectores - Ejemplos resueltos

for i:= 1 to max do


begin
read(numeros[i] )
suma:= suma +numeros[i];
end;
Promedio:= suma/max;
writeln (´El promedio es ´,Promedio´);
for i := 1 to 50 do
if numeros[i] > promedio
then
writeln (´El número´, numeros[i], ´es mayor al promedio´);
end.

21
Vectores - Ejemplos resueltos
Ej3 - Dados n números, obtener e imprimir la suma de todos ellos. A
continuación mostrar por pantalla todos los sumandos.

Program Ej3;
const
max = 100;
type
t_numeros = array[1.. max] of integer;
var
suma, i, n : integer;
promedio: real;
numeros : t_numeros;
begin
suma := 0;
write (´Ingrese la cantidad de números a sumar. (Como máximo, 100
números´);
readln(n);
22
Vectores - Ejemplos resueltos

for i:= 1 to n do
begin
read(numeros[i] )
suma:= suma +numeros[i];
end;
writeln (´La suma es ´,suma´);
for i := 1 to n do
writeln (´El sumando´, i, ´es´, numeros[i]);
end.

23
Vectores - Vectores Paralelos
• Dos o más arreglos que utilizan el mismo subíndice
para acceder a elementos de distintos arreglos, se
denominan arreglos paralelos. Estos arreglos
pueden procesarse simultáneamente.
• Ejercicio:
– Se tienen dos arreglos. El primero contiene
nombres de personas y el segundo contiene
los sexos de las personas del primer arreglo,
codificados como ´f´femenino y ´m´
masculino. Obtener a partir de estos otros dos
arreglos, el primero de los cuales debe
contener todos los nombres de los varones y el
segundo, el nombre de todas las mujeres
24
Matrices
• Resolvamos el siguiente problema:
– Un instituto desea controlar los resultados de
los alumnos en las distintas asignaturas de la
facultad de Ingeniería. El programa debe
ingresar las calificaciones de los alumnos y
visualizar en pantalla la media de notas por
alumno y la media de notas por asignatura.
Las asignaturas están codificadas de 1 a 6 y
hay 30 alumnos.

25
Matrices
• Es posible resolver este problema con lo visto
hasta ahora?

• Para realizar el anterior programa , debemos


trabajar con una tabla (o matriz o arreglo
bidimensional)

26
Matrices

Mi_Matriz 9 5 6 2 4 8 3
9 5 6 2 4 8 3
Nombre de 9 5 6 2 4 8 3
la variable

Posición : 3,1
Contenido : Mi_vector[3,1] = 9

27
Matrices - Declaraciones

• Ejemplos de declaraciones:
• Ej1:
type
T_matriz = array[ 1..10, 1..10 ] of real;
var
Matriz: valores;

28
Matrices - Declaraciones

• Ejemplos de declaraciones:
• Ej2:
type
T_matriz = array[ 1..10 ] of array [ 1..10 ] of real;
var
Matriz: valores;

29
Matrices - Declaraciones

• Ejemplos de declaraciones:
• Ej3:
type
T_filas = array[ 1..10 ] of real;
T_Matriz = array[ 1..10 ] of T_filas;
var
Matriz: T_Matriz;

30
Matrices - Operaciones
• Con la siguiente declaración:
type
T_matriz = array[ 1..10 ] of array [ 1..10 ] of real;
var
Matriz: T_matriz;

• Lectura de una matriz


for i:= 1 to 10 do
for j:= 1 to 10 do
readln(Matriz[i,j] )

31
Matrices - Operaciones

• Escritura de una matriz


for i:= 1 to 10 do
for j:= 1 to 10 do
writeln(Matriz[i,j] )

El recorrido de las matrices puede realizarse tanto por filas como por
columnas, de acuerdo al problema a resolver.

32
Matrices - Ejemplos resueltos
Ej4.
Retomemos el planteo que formulamos al inicio del concepto de
Matriz.
Un instituto desea controlar los resultados de los alumnos en las
distintas asignaturas de la facultad de Ingeniería. El programa debe
ingresar las calificaciones de los alumnos y visualizar en pantalla la
media de notas por alumno y la media de notas por asignatura.
Las asignaturas están codificadas de 1 a 6 y hay 30 alumnos.

¿Cómo definiremos la estructura? ¿Quién es fila y quien es columna?


¿Cuántas filas y cuantas columnas?
¿Qué tipo de dato guardaremos en cada celda?

33
Matrices - Ejemplos resueltos
Program Ej4;
const
max_fila = 6 ;
max_col = 30;
type
t_tabla = array[1.. max_fila,max_col ] of integer;
Var i, j: integer;
tabla: t_tabla;
suma: integer;
prom_al, prom_mat:real;
begin
for i:= 1 to max_fila do
for j:= 1 to max_fila do begin
writeln(´Ingrese la nota para la materia´, i, ´del alumno´, j);
readln (tabla[i,j]);
end;
34
Matrices - Ejemplos resueltos
for i:= 1 to max_fila do begin
suma:=0;
for j:= 1 to max_col do
suma:= suma + tabla[i,j];
prom_mat : =suma /i;
writeln (´El promedio de calificaciones para la asignatura´, i, ´es´,
prom_mat);
end;
for i:= 1 to max_col do begin
suma:=0;
for j:= 1 to max_fila do
suma:= suma + tabla[i,j];
prom_al : =suma /i;
writeln (´El promedio de calificaciones para el alumno´, j, ´es´, prom_al)
end;
writeln (´La suma es ´,suma´);
End.
35
Arreglos multidimesionales
Así como hemos trabajado con vectores (arreglos unidimensionales) y
matrices (arreglos bidimensionales), es posible trabajar con arreglos de más de
dos dimensiones, los que son denominados arreglos multidimensionales.
Ejemplos de problemas de aplicación de arreglos multidimensionales
Se desea escribir un programa que permita manejar la información de habitantes
de un complejo habitacional. El mismo posee 7 torres; a su vez cada torre posee
20 pisos y cada piso 6 departamentos.
Se desea saber:
a) Cantidad total de habitantes del complejo
b) Cantidad promedio de habitantes por piso de cada torre
c) Cantidad promedio de habitantes por torre
–¿Cómo definiríamos la estructura?
–¿Te animás a escribir el programa que resuelva el
planteo? 36

También podría gustarte