Estructuras de Datos
(ARREGLOS)
Asignatura: Computación I
UNA Cl Cojedes
Elaborado por: Ing. Zamantha González
Arreglos (array)
• Un arreglo está formado por un número fijo de
elementos contiguos de un mismo tipo. Al tipo se le
llama tipo base del arreglo. Los datos individuales se
llaman elementos del arreglo.
• Para definir un tipo estructurado arreglo, se debe
especificar el tipo base y el número de elementos.
• Un array se caracteriza por :• Almacenar los elementos del array en posiciones de memoria
continua.
• Tener un único nombre de variable que representa a todos los
elementos, y éstos a su vez se diferencian por un índice o subíndice.
• Acceso directo o aleatorio a los elementos individuales del array.
Arreglos (array)
• En términos matemáticos abstractos la transformación (mapeo) puede
anotarse:
A:I C
• En Pascal puede anotarse, la definición del nuevo tipo A según:
type A = array [I] of C;
• I se denomina tipo del índice, y debe ser un tipo ordinal.
• C es el tipo del contenido, o de las componentes. También suele llamarse
tipo base. Importa insistir en que todas las componentes deben ser de
igual tipo.
• El tipo estructurado A queda completamente definido, si están
previamente definidos los tipos I y C.
dominio = I codominio = C
Clasificación de los Arreglos
• Los arrays se clasifican en:
• Unidimensionales
(vectores o listas)
• Multidimensionales
( tablas o matrices)
Arreglos Unidimensionales
• Un array de una dimensión – vector o lista – es un
tipo de datos estructurados compuesto de un número
de elementos finito, tamaño fijo y elementos
homogéneos.
• Finitos, indica que hay un último elemento, tamaño
fijo significa que el tamaño del array debe ser
conocido en tiempo de compilación, homogéneo
significa que todos los elementos son del mismo tipo.
• Los elementos del array se almacenan en posiciones
contiguas de memoria, a cada una de las cuales se
puede acceder directamente.
Arreglos Unidimensionales
Mi_vector
Nombre de la variable
9 35 4 826
Elementos
Posición : 1Contenido : Mi_vector[1] = 9
Ejemplos Arreglos Unidimensionales
• Resolvamos este primer ejemplo: (ejemplo 1)
• 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
Ejemplos Arreglos Unidimensionales
Program Ejemplo1; {Version 1}
type
sumandos = array[1..10] of integer;
varsuma, i : integer;
vec_sumandos : sumandos;
begin
suma := 0;for i:= 1 to 10 do
read(vec_sumandos[i] )
for i := 1 to 10 do
suma:= suma +vec_sumandos[i];
writeln (´La suma de los números es´, suma);end.
Declaración del tipo arreglo
Declaración de la variable arreglo
Lectura de los elementos del arreglo
Suma de los elementos
Ejemplos Arreglos Unidimensionales
Program Ejemplo1; {Version 2}
type
sumandos = array[1..10] of integer;
var
suma, i : integer;
vec_sumandos : sumandos;
begin
suma := 0;
for i:= 1 to 10 do
begin
read(vec_sumandos[i] )
suma:= suma +vec_sumandos[i];
end;
writeln (´La suma de los números es´, suma);
end.
Declaración de Vectores
• Los arreglos son estructuras de datos, por lo tanto las mismas
deben ser declaradas. Esta operación se realiza en la sección
“Type” de un programa en Pascal. (como puede verse en el
ejemplo1)
• Formato
type
nombre_del_tipo = array[tipo_subindice * ] of tipo;
• Debe ser de tipo ordinal: boolean, char, enumerado o subrango
• Luego de la declaración del tipo, se declara la variable.
• Formato
var
nombre_variable: nombre_del_tipo;
Ejemplo 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;
Ejemplo Declaraciones(cont.)
Array para almacenar las notas correspondientes a todos los alumnos de un colegio.
Suponiendo lo siguiente:• Numero de cursos 5
• Grupos por curso 3
• Número de evaluaciones 3
• Número de asignaturas 6
• Número de alumnos por curso 20Const
Numcurso=5;
Numasig=6;
Numalum=20;
Type
Cursos=1.. numcurso;
Grupos='A'..'C';
Eval=(primera,segunda,tercera);
Asign=1.. numasin;
Alum=1. .numalum;
Tiponotas=array[cursos,grupos,eval,asign,alum] of real;
Var
Notas:tiponotas;
Curso:cursos;
Grupo:grupos;
Evaluacion:eval;
Materia:asign;
Alumno:alum;
Con los elementos de un array se puede realizar las mismas operaciones que el tipo base al que
pertenecen.
Vectores – Manejo de Índices
• Asignación de valores
Texto[3] := ´a´;
Precios[0] := 23.50;
Recuerden, los índices de un arreglo pueden ser: entero,
lógico, carácter, enumerado o subrango.
Vectores – Operaciones
• Con la siguiente declaración:type
T_Notas = array [1..30] of integer;
var
Notas: T_Notas;
• Lectura de un vectorfor i:= 1 to 30 do
read(Notas[i] )
• Escritura de un vectorfor i:= 1 to 30 do
writeln(Notas[i] )
Vectores – Operaciones
• Con la siguiente declaración:type
T_Notas = array [1..30] of integer;
var
Notas, Aux_Notas: T_Notas;
• Copia de vectoresfor i:= 1 to 30 do
Aux_Notas[i]:= Notas[i];
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;
for i:= 1 to max do
begin
read(numeros[i] )
suma:= su12a +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.
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);
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.
Método de Ordenamiento
• Los métodos de ordenamiento son muy útiles porque permiten buscar
valores, tanto por valor y por su posición, de una manera eficiente.
Antes de estudiar algunos de los métodos de ordenamiento es
necesario definir el problema y el entorno en el cual se desea trabajar.
• Para realizar un ordenamiento se necesita un conjunto de valores
ordenables, es decir, que exista un criterio de ordenamiento, por
ejemplo las letras se basan en el alfabeto, los números en la cantidad
representada. Además, se trataran solamente métodos de
ordenamiento en los que la instrucción base es la comparación entre
dos valores y que se obtiene el ordenamiento por medio de intercambio
de valores. Estas consideraciones son la base de los métodos.
• Son muchos los métodos de ordenamiento, sin embargo, se hará
énfasis en los siguientes métodos: Ordenamiento por selección, por
inserción, burbuja.
Método de Ordenamiento
Para tal efecto asuma las siguientes declaraciones: y las siguientes asignaciones:
Type
vector = array [ 1 .. 25 ] of integer;
Var
v : vector;
i,j,N,aux,p : integer
v[ 1 ] := 6;
v[ 2 ] := 25;
v[ 3 ] := 7;
v[ 4 ] := 2;
v[ 5 ] := 14;
N := 5;
Ordenamiento por Burbuja
Ref: Luis Joyanes Aguilar. Programación en Turbo Pascal Ver 5.5, 6.0, 7.0,
McGraw-Hill, 2ª. Edición, 1993, pp. 412-417.
Este método es clásico y muy sencillo aunque poco eficiente. La ordenación
por burbuja [ bubble sort ] se basa en:
1. La comparación de elementos adyacentes del vector e
2. Intercambio de sus valores si estos están desordenados
De este modo se dice que los valores más pequeños burbujean hacia la parte
superior de la lista [hacia el primer elemento], mientras que los valores más
grandes se hunden hacia el fondo de la lista en el caso de un ordenamiento
ascendente.
La técnica de ordenación de la lista por burbuja compara elementos
consecutivos de la lista de modo que si en una pasada no ocurrieran
intercambios, significaría que la lista esta ordenada.
Ordenamiento por Burbuja
{ Ordenamiento por burbuja mejorado en forma ascendente }
desordenado := true;
while desordenado do
begin
desordenado := false;
for i:= 1 to n - 1 do
if v[ i ] > v[ I + 1 ] then
begin
aux := v[ i ];
v[ i ] := v[ i + 1 ];
v[ i + 1] := aux;
desordenado := true;
end;
end;
End.
Pasada 1 Pasada 2 Pasada 3
10 5 5
5 10 8
8 8 10
Método de Ordenamiento (Cont.)
{ este programa lea n números enteros y/o reales y los ordena por el método de ordenación burbuja en forma
ascendente.....compilado en en borland pascal para Windows versión 7.0}
Program burbujas;
uses wincrt; { utilizando la terminal de windows }
{ declaración de variables globales...}
var
n,i,codg_art:integer;
temp:real;
x:array [1..100] of real;
pausa:char;
{ procedimiento aplicando el método de burbuja }
procedure burbuja;
begin
for codg_art:=1 to n-1 do
for i:=codg_art+1 to n do
if x[i]<x[codg_art] then
begin { intercambiando los números...}
temp:=x[codg_art];
x[codg_art]:=x[i];
x[i]:=temp;
end;
end;
Método de Ordenamiento (Cont.)
Begin { programa principal}
writeln ('programa de ordenación de datos numéricos enteros y reales....');
writeln ('aplicando el método de burbuja....');
write ('cuantos registros introducira? ');
readln (n);
writeln;
for i:=1 to n do
begin
write ('x[',i:3,']=? ');
readln (x[i]);
end;
burbuja;
writeln;
writeln (' registros ordenados en forma ascendente');
pausa:=readkey;
end.
Arreglos Bidimensionales (Tablas)
• Es un conjunto de elementos, todos del mismo tipo (homogéneo), en
el cual el orden de los componentes es significativo y el acceso a ellos
también es en forma directa por medio de un par de índices para
poder identificar a cada elemento del arreglo.
• También se les llama Matriz o Tabla.
• Los elementos se referencian con el formato:T [3,4] elemento de la fila 3 y columna 4.
• Los arreglos bidimensionales se usan para representar datos que
pueden verse como una tabla con filas y columnas
Matriz
1 2 3 4 5
1
2
3 15.2
4
Declaración Arreglos Bidimensionales
• Al igual que en los arrays unidimensionales o vectores, se crean
con declaraciones type y var y deben ser de tipo ordinales o
subrango. Se deben indicar:
• El nombre del array
• Tipo del array
• Rango permitido
• Ejemplo:
Type
Tabla = array [1..25,1..4] of real;
Var
Grados : Tabla;
• Para localizar o almacenar un valor en el array se deben
especificar dos posiciones o subíndices, uno para la fila y otro
para la columna.
Asignación Arreglos Bidimensionales
• Se considera que este arreglo tiene dos dimensiones (un
subíndice para cada dimensión) y necesita un valor para cada
subíndice, y poder identificar un elemento individual.
• En notación estándar, normalmente el primer subíndice se
refiere a la fila del arreglo, mientras que el segundo subíndice
se refiere a la columna del arreglo. Es decir, Matriz(I,J), es el
elemento de Matriz que ocupa la I-ésima fila y la J-ésima
columna.
• Para tener acceso a un elemento de la matriz se tiene que
especificar primero el renglón después una coma y por último la
columna a la que se quiere tener acceso.
Ejemplo:
• Matriz [ 3, 2] : = 15.2;
Lectura/Escritura Arreglos
Bidimensionales
• Si se deseara leer un solo elemento de un arreglo bidimensional debe
especificarse el renglón y la columna a que se refiere, por ejemplo, la
posición 3,2:
• Pero si el objetivo es, leer o escribir la matriz completa entonces al
igual que con los arreglos unidimensionales se deben usar estructuras
iterativas.
• Escriturar en una Matriz
For fila := 1 to 3 do
Begin
For Columna := 1 to 4 do
Write (A[Fila, Columna]:4);
End;
Pseudocódigo Pascal
Leer ( Ventas [ 3, 2] ) ReadLn ( Matriz [ 3, 2] ) ;
Escribir ( Ventas [ 3, 2] ) WriteLn ( Matriz [ 3, 2] ) ;
Ejemplos Matriz
Calcular el promedio de cada estudiante de una lista de veinticinco alumnos de una clase de informática con notas en
cuatro asignaturas.
Program Promedio;
Var
Notas : Array [1..25,1..4] of real;
I,J : Integer;
Suma,Prom : Real;
Begin
For I := 1 to 25 do
Begin
Write (`Notas del estudiante: ,́I:1);
Writeln (`En una misma línea digite todas las notas )́;
Suma := 0;
For J := 1 to 4 do
Begin
Read (Notas[I,J]);
Suma := Suma + Notas[I,J]
End;
Readln;
Prom := Suma/4;
Writeln (`La nota promedio del estudiante `,I:1,´ es `,Prom:1:1)
End
End.
Reflexiona con
lentitud, pero ejecuta
rápidamente tus
decisiones.
Sócrates
Cualquier duda los espero en el
Centro Local.
Top Related