Estructuras de Datos (Arreglos)

57,692 views
57,318 views

Published on

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

Published in: Technology, Business
2 Comments
12 Likes
Statistics
Notes
No Downloads
Views
Total views
57,692
On SlideShare
0
From Embeds
0
Number of Embeds
632
Actions
Shares
0
Downloads
1,132
Comments
2
Likes
12
Embeds 0
No embeds

No notes for slide

Estructuras de Datos (Arreglos)

  1. 1. Estructuras de Datos (ARREGLOS) Asignatura: Computación I UNA Cl Cojedes Elaborado por: Ing. Zamantha González
  2. 2. 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.
  3. 3. Arreglos (array) dominio = I codominio = C • 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.
  4. 4. Clasificación de los Arreglos • Los arrays se clasifican en: • Unidimensionales (vectores o listas) • Multidimensionales ( tablas o matrices)
  5. 5. 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.
  6. 6. Arreglos Unidimensionales Elementos Mi_vector 9 5 6 2 4 8 3 Nombre de la variable Posición : 1 Contenido : Mi_vector[1] = 9
  7. 7. 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
  8. 8. Ejemplos Arreglos Unidimensionales Program Ejemplo1; {Version 1} type sumandos = array[1..10] of integer; Declaración del tipo arreglo 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]; Suma de los elementos writeln (´La suma de los números es´, suma); end.
  9. 9. 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.
  10. 10. 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;
  11. 11. 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;
  12. 12. 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 20 Const 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.
  13. 13. 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.
  14. 14. 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] )
  15. 15. 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];
  16. 16. Vectores – Ejemplos Resueltos Program Ej2; Ej2.- Dados 50 números const enteros, obtener el promedio max = 50; de ellos. Mostrar por pantalla type dicho promedio y los t_numeros = array[1.. max] of integer; var números ingresados que suma, i : integer; sean mayores que el mismo. 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.
  17. 17. Vectores – Ejemplos Resueltos Program Ej3; Ej3.- Dados n números, const obtener e imprimir la suma max = 100; de todos ellos. A continuación type mostrar por pantalla todos los t_numeros = array[1.. max] of integer; var sumandos. 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.
  18. 18. 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.
  19. 19. Método de Ordenamiento Para tal efecto asuma las siguientes declaraciones: y las siguientes asignaciones: Type v[ 1 ] := 6; vector = array [ 1 .. 25 ] of integer; v[ 2 ] := 25; Var v[ 3 ] := 7; v : vector; i,j,N,aux,p : integer v[ 4 ] := 2; v[ 5 ] := 14; N := 5;
  20. 20. 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.
  21. 21. 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 Pasada 1 Pasada 2 Pasada 3 if v[ i ] > v[ I + 1 ] then 10 5 5 begin 5 10 8 aux := v[ i ]; 8 8 10 v[ i ] := v[ i + 1 ]; v[ i + 1] := aux; desordenado := true; end; end; End.
  22. 22. 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;
  23. 23. 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.
  24. 24. 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
  25. 25. 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.
  26. 26. 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;
  27. 27. 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: Pseudocódigo Pascal Leer ( Ventas [ 3, 2] ) ReadLn ( Matriz [ 3, 2] ) ; Escribir ( Ventas [ 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;
  28. 28. 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.
  29. 29. Cualquier duda los espero en el Centro Local. Reflexiona con lentitud, pero ejecuta rápidamente tus decisiones. Sócrates

×