Estructuras de Datos (Arreglos)

29
Estructuras de Datos (ARREGLOS) Asignatura: Computación I UNA Cl Cojedes Elaborado por: Ing. Zamantha González

description

Estructuras de Datos Estáticas (Arreglos) en Pascal para la Asignatura Computación I, de la UNA Cl Cojedes

Transcript of Estructuras de Datos (Arreglos)

Page 2: Estructuras de Datos (Arreglos)

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.

Page 3: Estructuras de Datos (Arreglos)

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

Page 4: Estructuras de Datos (Arreglos)

Clasificación de los Arreglos

• Los arrays se clasifican en:

• Unidimensionales

(vectores o listas)

• Multidimensionales

( tablas o matrices)

Page 5: Estructuras de Datos (Arreglos)

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.

Page 6: Estructuras de Datos (Arreglos)

Arreglos Unidimensionales

Mi_vector

Nombre de la variable

9 35 4 826

Elementos

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

Page 7: Estructuras de Datos (Arreglos)

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

Page 8: Estructuras de Datos (Arreglos)

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

Page 9: Estructuras de Datos (Arreglos)

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.

Page 10: Estructuras de Datos (Arreglos)

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;

Page 11: Estructuras de Datos (Arreglos)

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;

Page 12: Estructuras de Datos (Arreglos)

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.

Page 13: Estructuras de Datos (Arreglos)

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.

Page 14: Estructuras de Datos (Arreglos)

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] )

Page 15: Estructuras de Datos (Arreglos)

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];

Page 16: Estructuras de Datos (Arreglos)

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.

Page 17: Estructuras de Datos (Arreglos)

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.

Page 18: Estructuras de Datos (Arreglos)

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.

Page 19: Estructuras de Datos (Arreglos)

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;

Page 20: Estructuras de Datos (Arreglos)

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.

Page 21: Estructuras de Datos (Arreglos)

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

Page 22: Estructuras de Datos (Arreglos)

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;

Page 23: Estructuras de Datos (Arreglos)

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.

Page 24: Estructuras de Datos (Arreglos)

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

Page 25: Estructuras de Datos (Arreglos)

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.

Page 26: Estructuras de Datos (Arreglos)

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;

Page 27: Estructuras de Datos (Arreglos)

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] ) ;

Page 28: Estructuras de Datos (Arreglos)

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.