39
Arreglos

Arreglos

Embed Size (px)

Citation preview

Page 1: Arreglos

Arreglos

Page 2: Arreglos

Los Arrays(arreglos) son parecido a grupos de variables de el mismo tipo que guardan informacion relacionada.◦ Un arreglo de una dimension es util cuando se

esta trabajando con un solo conjunto de data.◦ Un arreglo multidimensional puede ser utilizado

para trabajar con multiples conjuntos de data.

Introduccion

Page 3: Arreglos

ARREGLOS

Un arreglo es como un grupo de variables con un solo nombre. Guardas valores en el arreglo utilizando un subscrito.

Page 4: Arreglos

Un arreglo multiples valores de el el mismo tipo◦ Un grupo de variables con un solo nombre

Todas las variables adentro de un arreglo se llaman elemento y tienen que ser de el mismo tipo.

Puedes accesar los elementos de un arreglo por medio de subscritos.

Caracteristicas de un Arreglo

Page 5: Arreglos

Un subscripto, tambien llamado un “index”, es el numero que identifica a un elemento adentro de un arreglo.

La numeracion de Subscriptos trabaja como un “list box index”:◦ La numeracion de Subscriptos empiezan en 0◦ El primer elemento en un arreglo siempre tiene el

subscrito 0◦ El ultimo elemento es el total – 1

Caracteristicas de un Subscrito

Page 6: Arreglos

Se declara un arreglo muy parecido a como se hace una varibala

◦ ArrayName es el nombre de el arreglo◦ UpperSubscript es el valor maximo de sunscrito

que tendra el arreglo. Debe ser un entero positivo Debe ser nombrado una constante O un numero positivo entero

◦ DataType seria el tipo de data que guardaria el arreglo

Declarando un Arreglo

Dim ArrayName (UpperSubscript) As DataType

Page 7: Arreglos

Ejemplo de la declaracion de un arreglo

Dim intHours(6) As Integer

Page 8: Arreglos

Todos los elementos de un arreglo de tipo entero son inicialos a cero.◦ Lo mismo que sucede con una variable de tipo

entero. Cada elemento de un arreglo es inicializado

exactamente igual que una variable de el mismo tipo.◦ Numeros decimales son igualados a cero(0.0)◦ Elementos de tipo string son inicializados a el

valor especial Nothing

Inicializacion por defecto

Page 9: Arreglos

Un arreglo puede ser inicializado cuando se declara:

Este arreglo tiene un tamano especifico◦ El subscrito es dejado en blanco◦ Numero de elementos se deduce de su

inicializacion.◦ Subscrito de 5 es deducido.◦ El resultado es un arreglo de 6 elementos.

Dando valores especificos a los arreglos.

Dim intNumbers() As Integer = { 2, 4, 6, 8, 10, 12 }

Page 10: Arreglos

Una constante declarada puede ser utilizada como un subscrito de un array en vez de un numero.

Utilizando constantes en la declaracion de un arreglo.

Const intMAX_SUBSCRIPT As Integer = 100Dim intArray(intMAX_SUBSCRIPT) As Integer

Page 11: Arreglos

Puedes guardar un valor en el elemento de un array con una simple igualacion.

Trabajando con los elementos de un Array

intNumbers(0) = 100intNumbers(1) = 200intNumbers(2) = 300intNumbers(3) = 400intNumbers(4) = 500intNumbers(5) = 600

Page 12: Arreglos

Los elementos de un arreglo pueden guardar datos entrados por el usuario.

Usando los elementos de un arreglo para guardar datos de usuario

Const intMAX_SUBSCRIPT As Integer = 9Dim intSeries(intMAX_SUBSCRIPT) As IntegerDim intCount As Integer

For intCount = 0 To intMAX_SUBSCRIPT intSeries(intCount) = CInt(InputBox("Enter a number."))Next

Page 13: Arreglos

Los arreglos tienen una propiedad llamada Length ◦ Guardan el numero de elementos que tiene el

arreglo Por ejemplo

◦ strNames.Length – 1como el limite mayor de el loop

◦ La propiedad Length es 1 mas que el subscript

Obteniendo cuan largo es un arreglo

Dim strNames() As String = { "Joe", "Geri", "Rose" }For intCount = 0 to strNames.Length – 1 MessageBox.Show(strNames(intCount))Next

Page 14: Arreglos

Los elementos de un arreglo puedenser usados como cualquier variable en una operacion.◦ Por ejemplo

Multiplicacion

Suma

Editando un string String

Procesando el contenido de un arreglo

decGrossPay = intHours(3) * decPayRate

intTallies(0) += 1

MessageBox.Show(decPay(5).ToString("c"))

Page 15: Arreglos

El For Each loop can puede simplificar el proceso de un arreglo. ◦ Accesa el valor de los

elementos.◦ No puede modificar valores

El siguiente es el formato:

var es el nombre de l;a variable de el loop

◦ type es el tipo de dato de el ‘loop’

◦ array es el nombre de el arreglo

Supongamos que tenemos la siguiente declaracion de un arreglo:

El siguiente loop ensena los valores en el list box llamado lstShow:

Accesando los elementos de un arreglo con un ‘loop’

For Each var As type In array statementsNext

Dim intArray() As Integer = {10, 20, 30, 40, 50, 60}

For Each intVal As Integer In intArray lstShow.Items.Add(intVal)Next

Page 16: Arreglos

MAS SOBRE COMO PROCESAR ARREGLOS

Existen muchos usos para los arreglos y muchas tecnicas de programacion pueden ser aplicadas a ellos.

Page 17: Arreglos

Para sumar los valores adentro de un arreglo◦ Utiliza un For…Next con una variable

acumulador

Como encontrar el total de los valores adentro de un arreglo

Const intMAX_SUBSCRIPT As Integer = 24Dim intUnits(intMAX_SUBSCRIPT) As Integer

Dim intTotal As Integer = 0Dim intCount As Integer

For intCount = 0 To (intUnits.Length – 1) intTotal += intUnits(intCount)Next

Page 18: Arreglos

Tambien puedes usar unFor Each loop con una variable acumulador

Como encontrar el total de los valores adentro de un arreglo

Const intMAX_SUBSCRIPT As Integer = 24Dim intUnits(intMAX_SUBSCRIPT) As IntegerDim intTotal As Integer = 0

For Each intVal As Integer In intUnits intTotal += intValNext

Page 19: Arreglos

Suma los valores de el arreglo Divide la suma entre la cantidad de elemntos

Calculando el valor promedio en los valores de un arreglo

Const intMAX_SUBSCRIPT As Integer = 24Dim intUnits(intMAX_SUBSCRIPT) As IntegerDim intTotal As Integer = 0Dim dblAverage As DoubleDim intCount As Integer

For intCount = 0 To (intUnits.Length – 1) intTotal += intUnits(intCount)Next' Use floating-point division to compute the average.dblAverage = intTotal / intUnits.Length

Page 20: Arreglos

Mas alto Mas bajo

Como encontrar el valor mas alto o el mas bajo dentro de un arreglo

Dim intUnits() As Integer = {1, 2, 3, 4, 5}Dim intCount As IntegerDim intHighest As Integer

' Get the first element.intHighest = intUnits(0)

' Search for the highest value.For intCount = 1 To (intUnits.Length - 1) If intUnits(intCount) > intHighest Then intHighest = intNumbers(intCount) End IfNext

Dim intUnits() As Integer = {1, 2, 3, 4, 5}Dim intCount As IntegerDim intLowest As Integer

' Get the first element.intLowest = intUnits(0)

' Search for the lowest value.For intCount = 1 To (intUnits.Length - 1) If intUnits(intCount) < intLowest Then intLowest = intNumbers(intCount) End IfNext

Page 21: Arreglos

Se debe usar un loop para copiar los valores de un arreglo hacia otro.

Copiando los valores de un arreglo hacia otro

For intCount = 0 To (intOldValues.Length-1) intNewValues(intCount) = intOldValues(intCount)Next

Page 22: Arreglos

El metodo basico para buscar adentro de arreglo se llama sequential search◦ Utiliza un loop para

examinar los elementos de un arreglo

◦ Compara cada elemento con el valor de busqueda

◦ La busqueda para cuando el valor es encontrado o cuando se acaba

El Pseudocodigo para el loop es:

Dale search a un arreglo

found = Falsesubscript = 0Do While found is False and subscript < array's length If array(subscript) = searchValue Then found = True position = subscript End If subscript += 1End While

Page 23: Arreglos

Los programadores a veces desean organizar los elementos de un arreglo en orden ascendente◦ Los valores organizados

de menor a mayor El menor es guardado

en el primer elemento El valor mas alto es

guardado en el ultimo elemento

Para organizar los arreglos en orden ascendente◦ Debes utilizar el metodo

Array.Sort

Este es el formato general:

ArrayName is the name of the array you want to sort

◦ For example:

Organizando los arreglos

Array.Sort(ArrayName)

Dim intNumbers() As Integer = {7, 12, 1, 6, 3}

Array.Sort(intNumbers)

Page 24: Arreglos

Cuando pasas un arreglo al metodo Array.Sort el arreglo es organizado en orden ascendente◦ El el orden ocurre en

orden alfabetico Digitos numericos

primero Letras mayusculas Metras minusculas

Por ejemplo:

Organizando un arreglo

Dim strNames() As String = {"dan", "Kim", "Adam", "Bill"}Array.Sort(strNames)

Page 25: Arreglos

Utilazando ReDim puedes cambiar de elementos que tiene un arreglo

◦Preserve es opcional Los valores existentes de un arreglo son preservados Si no usas preserved los valores del arreglo se

destruyen◦Arrayname es el nombre de el arreglo siendo

cambiado◦UpperSubscript es el nombre del subscrito

Debe ser un numero positivo entero

Cambia el tamano de un arreglo

ReDim [Preserve] Arrayname (UpperSubscript)

Page 26: Arreglos

PROCEDIMIENTOS Y FUNCIONES QUE TRABAJAN CON LOS ARREGLOS

Se pueden pasar arreglos como argumentos para funciones y procedimientos. Esta capacidad te permite escribir procedimientos y funciones que hagan funciones con arreglos.

Page 27: Arreglos

Se pueden escribir ‘procedures’ para procesar data en arreglos◦ Guardar Data en los arreglos◦ Ensenar el contenido de un arreglo◦ Sumar o sacar el promedio de los

datos de un arreglo◦ Es sencillo, solo pasale el nombre de

el arreglo como el argumento al ‘procedure’ o funcion

Pasando Arreglos como argumentos

Page 28: Arreglos

Los elementos de un arreglo pueden accesado o modificados si pasados como ByVal o ByRef.◦ ByVal previene que un arreglo sea asignado a otro arreglo.◦ ByRef permite que un arreglo sea asignado a otro arreglo.

Despues que ResetValues sea ejecutado◦ Si fue pasado como ByVal, intNumbers no es cambiado y se

queda con los mismos valores { 1, 2, 3, 4, 5 }◦ Si fue pasado como ByRef, intNumbers va ser igual a los

valores de newArray { 0, 0, 0, 0, 0 }

Pasando arreglos by Value y by Reference

Dim intNumbers() As Integer = { 1, 2, 3, 4, 5 }ResetValues(intNumbers)Sub ResetValues(ByVal intArray() As Integer) Dim newArray() As Integer = {0, 0, 0, 0,0} intArray = newArrayEnd Sub

Page 29: Arreglos

Devolviendo un arreglo de una funcion

' Pideles tres nombres al usuario y devuelvelos como un arreglo de de strings.Function GetNames() As String() Const intMAX_SUBSCRIPT As Integer = 2 Dim strNames(intMAX_SUBSCRIPT) As String Dim intCount As Integer

For intCount = 0 To 3 strNames(intCount) = InputBox("Enter name " & (intCount + 1).ToString()) Next

Return strNamesEnd Function

Dim strCustomers() As StringstrCustomers = GetNames()

Un arreglo devolvido de una funcion debe ser devolvido a un arreglo del mismo tipo.

Page 30: Arreglos

ARREGLOS MULTIDIMENSIONALES

Se pueden crear arreglos con mas de dos dimensiones que son capaces de guardar datos complejos.

Page 31: Arreglos

Un arreglo con un suscrito es util paraone-dimensional array◦ Guardar y trabajar con un grupo de datos simples

Un arreglo de dos dimensiones es como un arreglo de arreglos◦ Se usa para guardar multiples grupos de datos◦ Se puede comparar con una tabla como la que se

presenta aqui.

Arreglos de dos dimensiones

Page 32: Arreglos

Un arreglo de dos dimensiones requiere dos suscritos.◦ El primer suscrito es para las lineas horizontales◦ El segundo suscrito es para las columnas

ArrayName es el nombre de el arreglo UpperRow es el valor mas alto de la linea vertical

Tiene que ser un valor entero positivo UpperColumn es el valor mas alto de la columna

Tiene que ser un valor entero positivo DataType es el tipo de valor de el dato

Ejemplo de una declaracion de un arreglo:

Declarando arreglos de dos dimensiones

Dim ArrayName (UpperRow,UpperColumn) As DataType

Dim dblScores (2, 3) As Double

Page 33: Arreglos

Usen nombres de constantes para especificar el suscrito de mas arriba.

Procesando datos en un arreglo de dos dimensiones

Const intMAX_ROW As Integer = 2Const intMAX_COL As Integer = 3Dim dblScores(intMAX_ROW, intMAX_COL) As Double

Page 34: Arreglos

Los elementos en el row 0.

Los elementos en el row 1.

Los elementos en el row 2.

Procesando datos en un arreglo de dos dimensiones

dblScores(0, 0) ' Elementos en row 0, column 0dblScores(0, 1) ' Elementos en row 0, column 1dblScores(0, 2) ' Elementos en row 0, column 2dblScores(0, 3) ' Elementos en row 0, column 3

dblScores(1, 0) ' Elementos en row 1, column 0dblScores(1, 1) ' Elementos en row 1, column 1dblScores(1, 2) ' Elementos en row 1, column 2dblScores(1, 3) ' Elementos en row 1, column 3

dblScores(2, 0) ' Elementos en row 2, column 0dblScores(2, 1) ' Elementos en row 2, column 1dblScores(2, 2) ' Elementos en row 2, column 2dblScores(2, 3) ' Elementos en row 2, column 3

Page 35: Arreglos

Ejemplo de como guardar un numero en un elemento del arreglo.

Ejemplo de como preguntarle al usuario una valor para guardar en el arreglo.

Ejemplo de como ensenar al usuario los elementos de el arreglo.

Procesando datos en un arreglo de dos dimensiones

dblScores(2, 1) = 95

For intRow = 0 To intMAX_ROW For intCol = 0 To intMAX_COL dblScores(intRow, intCol) = CDbl(InputBox("Enter a score.")) NextNext

For intRow = 0 To intMAX_ROW For intCol = 0 To intMAX_COL lstOutput.Items.Add(dblScores(intRow, intCol).ToString()) NextNext

Page 36: Arreglos

Cuando se va a proveer una lista de inicilizacion mantener siempre en mente que:◦ No puedes You cannot

provide the upper subscript numbers

◦ Debe escribir una coma para indicar el numero de dimensiones

◦ Los valores para cada row estan encerrados en sus propios parentesis.

Inicializacion de un Arreglo de dos dimensiones

Dim intNumbers(,) As Integer = { {1, 2, 3} , {4, 5, 6} , {7, 8, 9} }

intNumbers(0, 0) es igual a 1intNumbers(0, 1) es igual a 2intNumbers(0, 2) es igual a 3

intNumbers(1, 0) es igual a 4intNumbers(1, 1) es igual a 5intNumbers(1, 2) es igual a 6

intNumbers(2, 0) es igual a 7intNumbers(2, 1) es igual a 8intNumbers(2, 2) es igual a 9

Esta es la manera de declarar un arreglo con tres rows y tres columnas.

Page 37: Arreglos

El loop de afuera controla el suscrito de la columna. El loop de adentro suma el suscrito de el row.

Sumando las columna de un arreglo de dos dimensiones

' Suma de las columnas.For intCol = 0 To intMAX_COL ' Inicializa el acumulador. intTotal = 0 ' Suma todos los rows. For intRow = 0 To intMAX_ROW intTotal += intValues(intRow, intCol) Next ' Ensena la suma de la columna. MessageBox.Show(“Suma de las columnas" & intCol.ToString() & " is " & intTotal.ToString())Next

Page 38: Arreglos

Se pueden crear arreglos de hasta 32 dimensiones. El siguiente es un arreglo de tres dimensiones.

Arreglos de tres dimensiones y mas.

Dim intPages(2, 2, 3) As Decimal

Page 39: Arreglos

Arreglos con mas de tres dimensiones son dificiles de visualizar.◦ Bien utiles en la programacion de algunas aplicaciones.◦ Por ejemplo:

Un almacén de la fábrica donde las cajas de widgets se apilan en palés, una serie de cuatro dimensiones puede almacenar un número de pieza para cada widget

Los cuatro suscritos de cada elemento pueden guardar: Numero de pallet Numero de caja Numero de row Numero de columna

Un arreglo de cinco dimensiones puede ser utilizado para multiples bodegas.

Arreglos de tres dimensiones y mas.