Vous êtes sur la page 1sur 29

Estructuras de Datos (ARREGLOS)

Asignatura: Computacin I UNA Cl Cojedes Elaborado por: Ing. Zamantha Gonzlez

Arreglos (array)
Un arreglo est formado por un nmero 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 nmero 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 subndice. Acceso directo o aleatorio a los elementos individuales del array.

Arreglos (array)

dominio = I codominio = C En trminos matemticos abstractos la transformacin (mapeo) puede anotarse: A:I C En Pascal puede anotarse, la definicin del nuevo tipo A segn: 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. Tambin suele llamarse tipo base. Importa insistir en que todas las componentes deben ser de igual tipo. El tipo estructurado A queda completamente definido, si estn previamente definidos los tipos I y C.

Clasificacin de los Arreglos


Los arrays se clasifican en:
Unidimensionales (vectores o listas)

Multidimensionales ( tablas o matrices)

Arreglos Unidimensionales
Un array de una dimensin vector o lista es un tipo de datos estructurados compuesto de un nmero de elementos finito, tamao fijo y elementos homogneos. Finitos, indica que hay un ltimo elemento, tamao fijo significa que el tamao del array debe ser conocido en tiempo de compilacin, homogneo 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
Elementos

Mi_vector

Nombre de la variable

Posicin : 1 Contenido : 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; var suma, 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 nmeros es, suma); end.

Declaracin del tipo arreglo

Declaracin 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 nmeros es, suma); end.

Declaracin de Vectores
Los arreglos son estructuras de datos, por lo tanto las mismas deben ser declaradas. Esta operacin se realiza en la seccin 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 declaracin 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 Nmero de evaluaciones 3 Nmero de asignaturas 6 Nmero de alumnos por curso 20
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;

Const

Con los elementos de un array se puede realizar las mismas operaciones que el tipo base al que pertenecen.

Vectores Manejo de ndices


Asignacin de valores
Texto[3] := a; Precios[0] := 23.50;

Recuerden, los ndices de un arreglo pueden ser: entero, lgico, carcter, enumerado o subrango.

Vectores Operaciones
Con la siguiente declaracin:
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] )

Vectores Operaciones
Con la siguiente declaracin:
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];

Vectores Ejemplos Resueltos


Ej2.- Dados 50 nmeros enteros, obtener el promedio de ellos. Mostrar por pantalla dicho promedio y los nmeros 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 nmero, numeros[i], es mayor al promedio); end.

Vectores Ejemplos Resueltos


Ej3.- Dados n nmeros, obtener e imprimir la suma de todos ellos. A continuacin 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 nmeros a sumar. (Como mximo, 100 nmeros); 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.

Mtodo de Ordenamiento
Los mtodos de ordenamiento son muy tiles porque permiten buscar valores, tanto por valor y por su posicin, de una manera eficiente. Antes de estudiar algunos de los mtodos 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 nmeros en la cantidad representada. Adems, se trataran solamente mtodos de ordenamiento en los que la instruccin base es la comparacin entre dos valores y que se obtiene el ordenamiento por medio de intercambio de valores. Estas consideraciones son la base de los mtodos.
Son muchos los mtodos de ordenamiento, sin embargo, se har nfasis en los siguientes mtodos: Ordenamiento por seleccin, por insercin, burbuja.

Mtodo de Ordenamiento
Para tal efecto asuma las siguientes declaraciones: Type y las siguientes asignaciones:

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. Programacin en Turbo Pascal Ver 5.5, 6.0, 7.0, McGraw-Hill, 2. Edicin, 1993, pp. 412-417. Este mtodo es clsico y muy sencillo aunque poco eficiente. La ordenacin por burbuja [ bubble sort ] se basa en: 1. La comparacin de elementos adyacentes del vector e 2. Intercambio de sus valores si estos estn desordenados

De este modo se dice que los valores ms pequeos burbujean hacia la parte superior de la lista [hacia el primer elemento], mientras que los valores ms grandes se hunden hacia el fondo de la lista en el caso de un ordenamiento ascendente. La tcnica de ordenacin de la lista por burbuja compara elementos consecutivos de la lista de modo que si en una pasada no ocurrieran intercambios, significara 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 10 5 8

Pasada 2 5 10 8

Pasada 3 5 8 10

Mtodo de Ordenamiento (Cont.)


{ este programa lea n nmeros enteros y/o reales y los ordena por el mtodo de ordenacin burbuja en forma ascendente.....compilado en en borland pascal para Windows versin 7.0} Program burbujas; uses wincrt; { utilizando la terminal de windows } { declaracin de variables globales...} var n,i,codg_art:integer; temp:real; x:array [1..100] of real; pausa:char; { procedimiento aplicando el mtodo 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 nmeros...} temp:=x[codg_art]; x[codg_art]:=x[i]; x[i]:=temp; end; end;

Mtodo de Ordenamiento (Cont.)


Begin { programa principal} writeln ('programa de ordenacin de datos numricos enteros y reales....'); writeln ('aplicando el mtodo 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 (homogneo), en el cual el orden de los componentes es significativo y el acceso a ellos tambin es en forma directa por medio de un par de ndices para poder identificar a cada elemento del arreglo. Tambin 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 1 2 3 4 5

2
3 4 15.2

Declaracin 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 subndices, uno para la fila y otro para la columna.

Asignacin Arreglos Bidimensionales


Se considera que este arreglo tiene dos dimensiones (un subndice para cada dimensin) y necesita un valor para cada subndice, y poder identificar un elemento individual. En notacin estndar, normalmente el primer subndice se refiere a la fila del arreglo, mientras que el segundo subndice 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 rengln despus 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 rengln y la columna a que se refiere, por ejemplo, la posicin 3,2:
Pseudocdigo Leer ( Ventas [ 3, 2] ) Escribir ( Ventas [ 3, 2] ) Pascal ReadLn ( Matriz [ 3, 2] ) ; WriteLn ( Matriz [ 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;

Ejemplos Matriz
Calcular el promedio de cada estudiante de una lista de veinticinco alumnos de una clase de informtica 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 lnea 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.

Cualquier duda los espero en el Centro Local.


Reflexiona con lentitud, pero ejecuta rpidamente tus decisiones. Scrates