arreglos
TRANSCRIPT
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
ARREGLOS
Un arreglo es como un grupo de variables con un solo nombre. Guardas valores en el arreglo utilizando un subscrito.
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
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
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
Ejemplo de la declaracion de un arreglo
Dim intHours(6) As Integer
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
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 }
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
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
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
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
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"))
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
MAS SOBRE COMO PROCESAR ARREGLOS
Existen muchos usos para los arreglos y muchas tecnicas de programacion pueden ser aplicadas a ellos.
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
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
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
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
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
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
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)
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)
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)
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.
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
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
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.
ARREGLOS MULTIDIMENSIONALES
Se pueden crear arreglos con mas de dos dimensiones que son capaces de guardar datos complejos.
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
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
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
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
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
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.
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
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
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.