los arrays

17
Los Arrays o arreglos son conjuntos de Variables Agrupadas con un nombre, que se pueden manejar juntas o individualmente, en Visual Basic .Net se pueden tener arreglos desde una dimensión y hasta un máximo de 32 dimensiones. Como se definen Para definir un arrays se utiliza Dim, Private, Friend o Public según el alcande del mismo, por ejemplo la orden: Dim Cursos( , ) As String Define el array Cursos sin asignarle la cantidad de elementos de cada dimensión. El array anterior tendrá que redefinirse a nivel de procedimiento usando la instrucción Redim, está funciona unicamente cambiando el tamaño de la última dimensión. Generalmente se usa una variable que va aumentando, suponer que la variable Incluidos es la utilizada, la instrucción podría ser como la siguiente: Redim Cursos(2,Incluidos) y para conservar los datos actuales en el Array se utiliza la palabra Preserve: Redim Preserve Cursos(2,Incluidos) Algo de lo que contiene Todos los elementos del arrays deben ser del mismo tipo.En Visual Studio .Net los arrays derivan de la clase Arrays del NameSpace System. Esta Clase (Array) proporciona los métodos para crear, manipular, realizar busquedas y ordenación de arrays. Un elemento es un valor de Array, al que se puede acceder haciendo uso del indice o indices según las dimensiones. Por ejemplo, para acceder al elemento de la segunda fila y la tercera columna del arrays bidimensional con nombre Cursos se debe escribir Cursos(1,2), cabe adelantar que en Visual Basic .Net el valor inicial de cada dimensión es CERO. El métodoGetLowerBound permite obtener el límite inferior de una determinada dimensión. Para el límite superior de la dimensión especificada se utiliza el método GetUpperBound. La longitud de Array es el número total de elementos que puede contener. El método GetLength permite obtener el número de elementos de un array.

Upload: manuel-trujillo-lopez-haya

Post on 14-Apr-2016

221 views

Category:

Documents


2 download

DESCRIPTION

arrays

TRANSCRIPT

Page 1: Los Arrays

Los Arrays o arreglos son conjuntos de Variables Agrupadas con un nombre, que se pueden manejar juntas o individualmente, en Visual Basic .Net se pueden tener arreglos desde una dimensión y hasta un máximo de 32 dimensiones.

Como se definenPara definir un arrays se utiliza Dim, Private, Friend o Public según el alcande del mismo, por ejemplo la orden:

Dim Cursos( , ) As String

Define el array Cursos sin asignarle la cantidad de elementos de cada dimensión. El array anterior tendrá que redefinirse a nivel de procedimiento usando la instrucción Redim, está funciona unicamente cambiando el tamaño de la última dimensión. Generalmente se usa una variable que va aumentando, suponer que la variable Incluidos es la utilizada, la instrucción podría ser como la siguiente:

Redim Cursos(2,Incluidos)

y para conservar los datos actuales en el Array se utiliza la palabra Preserve:

Redim Preserve Cursos(2,Incluidos)

 

Algo de lo que contieneTodos los elementos del arrays deben ser del mismo tipo.En Visual Studio .Net los arrays derivan de la clase Arrays del NameSpace System. Esta Clase (Array) proporciona los métodos para crear, manipular, realizar busquedas y ordenación de arrays.

Un elemento es un valor de Array, al que se puede acceder haciendo uso del indice o indices según las dimensiones. Por ejemplo, para acceder al elemento de la segunda fila y la tercera columna del arrays bidimensional con nombre Cursos se debe escribir Cursos(1,2), cabe adelantar que en Visual Basic .Net el valor inicial de cada dimensión es CERO. El métodoGetLowerBound permite obtener el límite inferior de una determinada dimensión. Para el límite superior de la dimensión especificada se utiliza el método GetUpperBound.

La longitud de Array es el número total de elementos que puede contener. El método GetLength permite obtener el número de elementos de un array.

El rango de Array es el número de dimensiones de Array. La Propiedad Rank permite obtener el número de dimensiones de una array.

Page 2: Los Arrays

EjemploEl sistema de control de Matriculas de un instituto es muy lento, se necesita que los datos puedan procesarse de manera mas rápida y segura, se decide hacer un sistema por computadora; este deberá registrar según los siguientes productos descritos en la tabla:

Cod. Producto DescripciónIES Computación e

InformáticaSEC Secretariado EjecutivoDBS Da Bussines

 

De acuerdo a los Productos antes registrados pueden crearse cursos o promociones, el sistema ingresará y pedirá: Número de la promoción en el formato 9999-XX donde las 9999 será el año actual y las XX el número del curso registrado en el año, por ejemplo; 01, 02, 03, etc., también deberá registrarse la descripción del curso, la fecha de inicio, el número de vacantes y la cantidad de matriculados.

Una vez registrado el o los cursos, se podrá matricular alumnos, de los cuales se pedirá el ingreso de Apellidos, Nombres, teléfono y fecha de matricula. Los datos por cada curso deben de registrarse y aparecer en un formulario de reporte.

Esto es los datos que podemos ingresar, si queremos mas datos ingresamos mas en la tabla:

Los datos de la tabla siguiente :

Producto Promociones Matriculados

IES

Computación e Informática

2004-06

Computacion e Informática

Fecha de Inicio: 01/11/2004

Vacantes: 25

Luque Villacorta, Fernando

Telf. 9458548

Fecha: 25/10/2004

2004-07

Computación e Informática

Fecha de Inicio: 05/11/2004

Vacantes: 20

Pereda Geronimo, Luis

Telf. 9444567

Fecha: 28/09/2004Terranova Carrion Esmeralda

Telf. 9499498

Fecha: 30/09/2004

Page 3: Los Arrays

SEC

Secretariado Ejecutivo

2004-10

Secretariado Ejecutivo

Fecha de Inicio: 08/11/2004

Vacantes: 30

Hinostroza Ramirez Carlos

Telf. 9645676

Fecha: 30/09/2004Villacorta Acosta, Carol

Telf. 96442567

Fecha: 30/09/2004

2004-12

Secretariado Ejecutivo

Fecha de Inicio: 12/11/2004

vacantes: 25

Bolivar Saldaña, Silvia

Telf. 96656443

Fecha: 30/09/2004Sanchez Campos, Julia

Telf. 9644444

Fecha: 01/10/2004

Este es el código en Visual .net:

A continuación sigue parte del código en Visual Basic:

En el Módulo:

 

'************* MODULO *******************

 'Programación: Ing. Fernando Luque Sánchez

 'Noviembre 2004

 Module SistMatriculas

     'Definicion de las variables para Productos

     Public vProducto As String

     'Para saber el Número de Promociones Aperturadas

     Public vNumPromos As Integer

Page 4: Los Arrays

  

    'Para saber el Número de Alumnos Matriculados

     Public vNumAlumnos As Integer

     '''' ARREGLOS PARA ALMACENAR LOS DATOS

     'Para Alamcenar los datos de las promociones

     Public aPromos(,) As String  'CódPromo, Descrip, Fecha, Vacantes, Matriculados

     'Para Alamcenar los datos de los alumnos

     Public aAlumnos(,) As String  ' CodAlumno, CodPromo, Descrip,

     '                               Nombre, Telefono y Fecha Matricula

 

    'Para el Título del Reporte

     Public VTitulo As String

 

    'Datos de un Curso Aperturado

     Public vDescrip As String

     Public vCodigo As String

     Public Vfechainicio As Date

     Public vVacantes As Integer

 

    'Para saber si los Formularios están abiertos

     Public fPromosA As Integer

 

End Module

 

 

Page 5: Los Arrays

 

En el formulario Principal

 

Public Class frmPrincipal

     Inherits System.Windows.Forms.Form

 

#Region " Código generado por el Diseñador de Windows Forms "

 

               *** codigo eliminado

 

#End Region

 

 

    Private Sub Reportes(ByVal sender As System.Object, _

         ByVal e As System.EventArgs) Handles mnuRepPromos.Click

        

         If sender Is mnuRepPromos Then

             'REPORTE SOLAMENTE DE LAS PROMOCIONES ABIERTAS

             Dim NReporte As New frmReportes()

             VTitulo = "Reporte de Promociones"

             NReporte.ShowDialog()

         ElseIf sender Is mnuRepAlumnosPromo Then

             'Reporte de los alumnos por Promocion

             Dim RepAlumnos As New frmRepAlumnxPromo()

             RepAlumnos.ShowDialog()

Page 6: Los Arrays

         End If

     End Sub

 

    Private Sub Salir(ByVal sender As System.Object, _

         ByVal e As System.EventArgs) Handles mnuSalir.Click

         Application.Exit()

     End Sub

 

    'MUESTRA EL FORMULARIO DE INGRESO DE PROMOCIONES.

     Private Sub mnuIngPromo_Click(ByVal sender As System.Object, _

         ByVal e As System.EventArgs) Handles mnuIngPromo.Click

         mnuIngPromo.Enabled = False

         Dim iPromos As New frmPromociones()

         iPromos.MdiParent = Me

         iPromos.Show()

     End Sub

 

    'Procedimientos para la Inserción de Alumnos

     Private Sub mnuIngAlumnos_Click(ByVal sender As System.Object, _

             ByVal e As System.EventArgs) Handles mnuIngAlumnos.Click

         Dim formAlumnos As New fAlumnosMatri()

         Me.mnuIngAlumnos.Enabled = False

         formAlumnos.ShowDialog()

     End Sub

 

    'ACERCA DE....

Page 7: Los Arrays

     Private Sub AcercaDe(ByVal sender As System.Object, _

         ByVal e As System.EventArgs) Handles MenuItem2.Click

         Dim fAcerca As New frmAcerca()

         fAcerca.ShowDialog()

     End Sub

 

    'Para determinar si el número de Promociones es Mayor a Cero

     Private Sub mnuMoves_Click(ByVal sender As System.Object, _

         ByVal e As System.EventArgs) Handles mnuMoves.Click, mnuMoves.Select

         If fPromosA = 0 Then mnuIngPromo.Enabled = True _

             Else mnuIngPromo.Enabled = False

         If vNumPromos = 0 Then mnuIngAlumnos.Enabled = False _

             Else mnuIngAlumnos.Enabled = True

     End Sub

 

    Private Sub mnuReporte_Select(ByVal sender As Object, ByVal e As System.EventArgs) Handles mnuReporte.Select

         If vNumPromos = 0 Then mnuRepPromos.Enabled = False _

                     Else mnuRepPromos.Enabled = True

         If vNumPromos = 0 OrElse vNumAlumnos = 0 Then mnuRepAlumnosPromo.Enabled = False _

             Else mnuRepAlumnosPromo.Enabled = True

     End Sub

 End Class

 

Otro ejemplo de progamacion con Arrays:

Page 8: Los Arrays

Option Strict On

'<summary>

' Colección de objetos de tipo Control

'</summary>

Public Class ControlArray

Inherits CollectionBase

'

Private mNombre As String

'

Public Sub New()

MyBase.New()

End Sub

Public Sub New(ByVal elNombre As String)

MyBase.New()

mNombre = elNombre

End Sub

'

Public Function Add(ByVal ctrl As Control) As Integer

Return MyBase.List.Add(ctrl)

End Function

'

' Asignar los controles que contendrá esta colección (14/Nov/02)

Public Sub AsignarControles(ByVal ctrls As Control.ControlCollection, _

Optional ByVal elNombre As String = "")

' Asignar los controles a los arrays,

' para que esto funcione automáticamente los nombres de los controles

' deberían tener el formato: nombre_numero

' nombre del control seguido de un guión bajo y el índice

If elNombre = "" Then

elNombre = mNombre

End If

' si no se indica el nombre de los controles a añadir,

Page 9: Los Arrays

' lanzar una excepción

If elNombre = "" Then

Throw New ArgumentException( _

"No se ha indicado el nombre base de los controles")

Exit Sub

End If

'

Me.Clear()

asignarLosControles(ctrls, elNombre)

Me.Reorganizar()

End Sub

Private Sub asignarLosControles( _

ByVal ctrls As Control.ControlCollection, _

ByVal elNombre As String)

Dim ctr As Control

'

For Each ctr In ctrls

' Hacer una llamada recursiva por si este control "contiene" otros

asignarLosControles(ctr.Controls, elNombre)

'

If ctr.Name.IndexOf(elNombre) > -1 Then

Me.Add(ctr)

End If

Next

End Sub

'

Public Function Contains(ByVal ctrl As Control) As Boolean

list.Contains(ctrl)

End Function

'

Public Function IndexOf(ByVal ctrl As Control) As Integer

Return list.IndexOf(ctrl)

End Function

'

Public Function Index(ByVal name As String) As Integer

Page 10: Los Arrays

Dim ctrl As Control

Dim i As Integer

Dim hallado As Integer = -1

'

For i = 0 To List.Count - 1

ctrl = CType(list(i), Control)

If StrComp(ctrl.Name, name, CompareMethod.Text) = 0 Then

hallado = i

Exit For

End If

Next

Return hallado

End Function

Public Function Index(ByVal ctrl As Control) As Integer

Dim i As Integer

'

i = ctrl.Name.LastIndexOf("_")

' Si el nombre no tiene el signo _

If i = -1 Then

i = list.IndexOf(ctrl)

Else

i = CInt(ctrl.Name.Substring(i + 1))

End If

Return i

End Function

'

Public Sub Insert(ByVal index As Integer, ByVal ctrl As Control)

List.Insert(index, ctrl)

End Sub

'

Default Public Property Item(ByVal index As Integer) As Control

Get

Return CType(List.Item(index), Control)

End Get

Set(ByVal Value As Control)

list.Item(index) = Value

Page 11: Los Arrays

End Set

End Property

Default Public Property Item(ByVal name As String) As Control

Get

Dim index As Integer = Me.Index(name)

' Si existe, devolverlo, sino, crear uno nuevo

If index = -1 Then

'index = Me.Add(ctrl)

End If

Return CType(List.Item(index), Control)

End Get

Set(ByVal Value As Control)

Dim index As Integer = Me.Index(name)

If index = -1 Then

index = Me.Add(Value)

End If

list.Item(index) = Value

End Set

End Property

Default Public Property Item(ByVal ctrl As Control) As Control

Get

Return CType(List(Me.IndexOf(ctrl)), Control)

End Get

Set(ByVal Value As Control)

List(Me.IndexOf(ctrl)) = Value

End Set

End Property

'

Public Property Nombre() As String

Get

Return mNombre

End Get

Set(ByVal Value As String)

mNombre = Value

End Set

End Property

Page 12: Los Arrays

'

Public Sub Remove(ByVal ctrl As Control)

List.Remove(ctrl)

End Sub

'

' Reorganizar el contenido de la colección y ordenar por índice

Public Sub Reorganizar()

Dim ca As New ControlArray()

Dim ctr As Control

Dim i As Integer

'

For i = 0 To Me.Count - 1

For Each ctr In Me

If i = Me.Index(ctr) Then

ca.Add(ctr)

Exit For

End If

Next

Next

'

Me.Clear()

For Each ctr In ca

Me.Add(ctr)

Next

End Sub

End Class

Option Strict On

Public Class Form1

Inherits System.Windows.Forms.Form

#Region " Código generado por el Diseñador de Windows Forms "

Page 13: Los Arrays

'...

#End Region

'

' Arrays para contener los controles

' (definir los arrays que vamos a usar)

Private m_Label1 As New ControlArray("Label1")

Private m_TextBox1 As New ControlArray("TextBox1")

Private m_RadioButton1 As New ControlArray("RadioButton1")

'

' Asignar los eventos a los controles

Private Sub asignarEventos()

Dim txt As TextBox

Dim opt As RadioButton

'

' Aquí estarán los procedimientos a asignar a cada array de controles

'

For Each opt In m_RadioButton1

AddHandler opt.KeyPress, AddressOf RadioButton1_KeyPress

Next

For Each txt In m_TextBox1

AddHandler txt.Enter, AddressOf TextBox1_Enter

AddHandler txt.KeyPress, AddressOf TextBox1_KeyPress

AddHandler txt.Leave, AddressOf TextBox1_Leave

Next

'

End Sub

'

Private Sub Form1_Load(ByVal sender As Object, _

ByVal e As System.EventArgs) Handles MyBase.Load

'

' Asignar los controles y reorganizar los índices

m_Label1.AsignarControles(Me.Controls)

m_TextBox1.AsignarControles(Me.Controls)

m_RadioButton1.AsignarControles(Me.Controls)

' Asignar sólo los eventos

Page 14: Los Arrays

asignarEventos()

End Sub

'

Private Sub TextBox1_Enter(ByVal sender As Object, _

ByVal e As System.EventArgs)

'

Dim txt As TextBox = CType(sender, TextBox)

Dim Index As Integer = m_TextBox1.Index(txt)

'

txt.SelectAll()

' resaltar la etiqueta

m_Label1(Index).BackColor = Color.FromKnownColor(KnownColor.ControlDark)

'

End Sub

Private Sub TextBox1_Leave(ByVal sender As Object, ByVal e As EventArgs)

'

Dim txt As TextBox = CType(sender, TextBox)

Dim Index As Integer = m_TextBox1.Index(txt)

'

' poner la etiqueta con el color normal

m_Label1(Index).BackColor = Color.FromKnownColor(KnownColor.Control)

End Sub

Private Sub TextBox1_KeyPress(ByVal sender As Object, _

ByVal e As System.Windows.Forms.KeyPressEventArgs)

'

If e.KeyChar = ChrW(Keys.Return) Then

Dim txt As TextBox = CType(sender, TextBox)

Dim Index As Integer = m_TextBox1.Index(txt)

'

If Index = 2 Then

m_RadioButton1(0).Focus()

Else

m_TextBox1(Index + 1).Focus()

End If

Page 15: Los Arrays

End If

End Sub

'

Private Sub RadioButton1_KeyPress(ByVal sender As Object, _

ByVal e As System.Windows.Forms.KeyPressEventArgs)

If e.KeyChar = ChrW(Keys.Return) Then

Dim opt As RadioButton = CType(sender, RadioButton)

Dim Index As Integer = m_RadioButton1.Index(opt)

'

If Index = 0 Then

m_RadioButton1(Index + 1).Focus()

Else

m_TextBox1(0).Focus()

End If

End If

End Sub

'

Private Sub btnCerrar_Click(ByVal sender As Object, _

ByVal e As System.EventArgs) _

Handles btnCerrar.Click

Me.Close()

End Sub

End Class