Apúntate...


Consultas, desarrollo de programas y petición de presupuestos:

Mostrando entradas con la etiqueta arrays. Mostrar todas las entradas
Mostrando entradas con la etiqueta arrays. Mostrar todas las entradas

jueves, 27 de diciembre de 2012

Arrays: Propiedades y Métodos

Un arreglo de objetos de clase es útil cuando se requieren instancias múltiples de la misma clase.

Hay dos formas en las que se pueden relacionar los arreglos con los objetos:

  • Un arreglo puede contener elementos de tipo objetos
  • Una clase puede contener como atributos variables de tipo arreglo


Vamos a hacer un ejemplo con la 2º forma.

Ejemplo: Queremos llevar la gestión de articulos de una pequeña tienda.

Para ello vamos a usar 2 clases:
La clase ClassArticulo: contiene los datos del articulos ademas de varios metodos para modificar los datos del mismo
La clase ClassListaArticulo: contiene un array de objetos de la clase ClassArticulo, mas varios métodos para modificar este array (añadir articulos, buscar, registrar llegadas y salidas de articulos y ver un inventarios de los articulos existentes).

ClassArticulo:
Los articulos tienen las siguientes propiedades:
clave: es un numero que identifica el articulo de una manera unica, por ejemplo 11034
existencia: es un numero que indica la cantidad existente en el almacen de un determinado articulo
precio: precio del articulo

Ademas tiene varios métodos:
inicializa: le dá valores a las propiedades, clave, existencia y precio del objeto articulo
registraEntrada: indica que en el almacen han entrado un determinado numero
registraSalida: indica que del almacen han salido un determinado numero , ademas hace una comprobación, si la salida supera al numero de existencias, te indica un mensaje de error, y no saca ningun articulo.


' Gambas class file

Property clave As Integer
Private hclave As Integer

Property existencia As Integer
Private hexistencia As Integer

Property precio As Float
Private hprecio As Float

Public Sub inicializa(ValorClave As Integer, ValorExistencia As Integer, ValorPrecio As Float)
hclave = ValorClave
hexistencia = ValorExistencia
hprecio = ValorPrecio
End

Public Sub registraEntrada(cant As Integer)
hexistencia += cant
End

Public Function registraSalida(cant As Integer) As Boolean

If cant > hexistencia Then
Return False 'indica que no hubo suficientes articulos
Else
hexistencia -= cant
Return True ' indica que si registró la salida
Endif
End

Private Function clave_Read() As Integer
Return hclave
End

Private Sub clave_Write(Value As Integer)
hclave = Value
End

Private Function existencia_Read() As Integer
Return hexistencia
End

Private Sub existencia_Write(Value As Integer)
hexistencia = Value
End

Private Function precio_Read() As Float
Return hprecio
End

Private Sub precio_Write(Value As Float)
hprecio = Value
End



ClassListaArticulo:

Va a tener una propiedad "lista" que es un array de articulos ( ClassArticulo[] ), manejada por la variable privada "hlista"
Y varios métodos:
anadirArticulo():crea un objeto temporal del tipo classArticulo, nos pide los distintos datos del articulo. y la añade (usando el método add) a la lista de articulos.
verInventario(): devuelve una cadena de texto, con los datos de todos los articulos existentes (recorre con un for next el array "lista"
busca(): dado una clave busca  en la lista, un articulo que tenga esa clave, si no lo encuentra da un mensaje de error y si lo encuentra devuelve la posicion dentro del array del articulo.
registrallegada(): pide la clave del articulo y la cantidad, busca la posicion dentro del array de articulos y le añade la cantidad.
registraSalida(): pide la clave del articulo y la cantidad, busca la posicion dentro del array de articulos, y le quita la cantidad (si no puede, te lo indica en un mensaje)



' Gambas class file

Property lista As ClassArticulo[]
Private hlista As New ClassArticulo[]

Private Function lista_Read() As ClassArticulo[]
Return hlista
End

Private Sub lista_Write(Value As ClassArticulo[])
hlista = Value
End

Public Function verInventario() As String
Dim texto As String
Dim i As Integer
texto = "La lista de articulos en el almacen es la siguiente:" & gb.CrLf
texto &= "Clave" & gb.Tab & "Cantidad en Existencia" & gb.tab & "Precio" & gb.CrLf
For i = 0 To hlista.Max
texto &= hlista[i].clave & gb.Tab & hlista[i].existencia & gb.tab & hlista[i].precio & gb.CrLf
Next
'devuelvo el texto generado de todos los elementos de la lista
Return texto
End

Public Function busca(BuscaClave As Integer) As Integer
Dim i As Integer
Dim posicion As Integer = -1 '-1 indica que no se encontro el artidulo
For i = 0 To hlista.Max
If hlista[i].clave = buscaclave Then
posicion = i 'encontrado el articulo
Return posicion
Endif
Next
Return posicion
End

Public Sub registrallegada()
Dim posicion As Integer, cve As Integer, cantidad As Integer
Print "Cual es la clave del articulo:"
Input cve
'busca la clave en el almacen:
posicion = busca(cve)
If posicion <> -1 Then
Print "Cuantos artículos llegaron: "
Input cantidad
hlista[posicion].registraEntrada(cantidad)
Print "Ok,cantidad introducida...." & gb.CrLf
Else
Print "*** Esa clave no existe ***" & gb.CrLf
Endif
End

Public Sub registraSalida()
Dim posicion As Integer, cve As Integer, cantidad As Integer
Print "¿cual es la clave del articulo? "
Input cve
'busca la clave en el almacen...
posicion = busca(cve)
'[
If posicion <> -1 Then
'{
Print "¿cuantos articulos salieron? "
Input cantidad
If (hlista[posicion].registraSalida(cantidad) = False) Then
Print "No hay suficientes articulos..." & gb.CrLf
Endif
'}
Else
Print "Esa clave no existe" & gb.CrLf
Endif
']
End

Public Sub anadirArticulo()
Dim valorclave As Integer, valorexistencia As Integer, valorprecio As Float
'creo un articulo temporal que sera el que use para los datos iniciales
Dim arttemp As New ClassArticulo
'pregunto y obtengo los valores que me interesa.
Print "Teclea la clave para el articulo:"
Input valorclave
Print "Teclea la existencia del articulo:"
Input valorexistencia
Print "Teclea el precio del articulo:"
Input valorprecio
'inicializo los datos del articulo
arttemp.inicializa(valorclave, valorexistencia, valorprecio)
'añado al array de articulo el nuevo articulo
hlista.Add(arttemp)
End


Ademas de estas dos clases, tenemos el módulo MMain, que contiene una subrutina llamada Main, que va a procesar un pequeño menu, donde el usuario mediante teclas va a introduccir que opcion quiere que se realice.


' Gambas module file

Public Sub Main()
Dim listaArticulos As New ClassListaArticulos
Dim opc As String
Repeat
opc = menu()
Select opc
Case "a"
listaArticulos.anadirArticulo()
Case "b"
Print listaArticulos.verInventario()
Case "c"
listaArticulos.registrallegada()
Case "d"
listaArticulos.registraSalida()
End Select
Until (opc = "e")
'fin del programa
End

Public Function menu() As String
Dim opc As String
Print ""
Print "Menu de Opciones" & gb.CrLf
Print "(a) Añadir Articulo ";
Print "(b) Ver Inventario ";
Print "(c) Registrar una llegada al almacen " & gb.CrLf
Print "(d) Registrar una salida de almacen ";
Print "(e) Salir de la aplicacion" & gb.CrLf
Repeat
Print "Opcion: "
Input opc
Until ((opc >= "a") Or (opc <= "e"))
Return opc
End


Para descargar el ejemplo completo: ejemplo de array de objetos: gestion de articulos

Enlace GambasWiki:
http://gambaswiki.org/wiki/doc/object-model?l=es
http://gambaswiki.org/wiki/cat/object?l=es
http://gambaswiki.org/wiki/lang/type/object



lunes, 27 de agosto de 2012

Arrays: Ejemplos.


Ejemplos de uso de ARRAY

 
Coloca en cada casilla el valor de su subindice: y muetra el contenido del arreglo
Dim k As Integer
Dim arreglo As New Integer[21]

For k = 0 To 20
arreglo[k] = k * 2
Next

For k = 0 To 20
Print "Indice: ", K, "valor: ", arreglo[k]
Next
End


 Suma de valores:
Dim contador As Integer
Dim arr As New Integer[4]
Dim k As Integer

arr[3] = 8
Print "Introduzca un valor:"
Input arr[2]
arr[0] = arr[2] + arr[3]
k = 1
arr[k] = arr[0] + 20

Print "Valores del array:"
For contador = 0 To 3
Print "("; contador; ")="; arr[contador]
Next


Ordenacion de array de numeros enteros, por el método Burbuja:

' Método de ordenamiento de burbuja
Dim pasada As Integer
Dim tamarr As Integer = 9
Dim lista As New Integer[10]
Dim i, k, j As Integer
Dim tmp As Integer

lista[0] = 22
lista[1] = 7
lista[2] = 4
lista[3] = 9
lista[4] = 2
lista[5] = 80
lista[6] = 40
lista[7] = 67
lista[8] = 51
lista[9] = 39

Print "------- Ordenar-------------"
'‘arreglo original
Print "dato sin ordenar: "
For i = 0 To tamarr
Print lista[i], ' muestra el numero y un tabulador
Next

'metodo de ordenamiento de burbuja
' para controlar la cantidad pasadas
For pasada = 0 To tamarr - 1
'para conotrolar el numero de comparaciones por pasada
For k = 0 To tamarr - 1
If (lista[k] > lista[k + 1]) Then
tmp = lista[k]
lista[k] = lista[k + 1]
lista[k + 1] = tmp
Endif
Next
Next
' muestro el arreglo ordenado
Print
Print "los datos ordenados son:"
For j = 0 To tamArr
Print lista[j],
Next
Print ""
Print "-------Fin Ordenar-------------"

Arrays multidimensionales:
Programa que pide una matriz  bidimensional, y la muesta, ademas muestra el valor maximo que contenga y la situacion dentro de la matriz (fila y columna)

Dim A As New Integer[20, 20]
Dim n, m As Integer 'dimension de la matriz
Dim ren, col As Integer ' variable auxiliares para las busquedas
Dim mayor As Integer '‘ variable que guarda el valor mayor
Dim renm, coim As Integer '‘ variables que guardan la fila y la columna en las que se encontro el mayor valor

'‘bucle para introducir datos
'‘primero tenemos que pedirle la dimension filas y columnas.. (cuidado nuestro máximo es 20)
Print "Cuantos renglones tiene la matriz:"
Input n
Print "Cuantos columnas tiene la matriz:"
Input m
'pedimos los datos
For ren = 0 To n - 1
For col = 0 To m - 1
Print "Teclea el valor del elemento ("; ren; ","; col; "): ";
Input a[ren, col]
Next
Next
'muestra la matriz...
For ren = 0 To N - 1
For col = 0 To M - 1
Print A[ren, col]; " ";
Next
Print "\n"
Next
'‘busca el valor mayor de la matriz
mayor = A[0, 0] '‘tomamos el primer valor como si fuera el maximo, para partir de un valor...
renM = 0
coiM = 0
'‘empiezo a hacer comparaciones
For ren = 0 To N
For col = 0 To M
If A[ren, col] > mayor Then
mayor = A[ren, col]
renM = ren
coiM = col
Endif
Next
Next
'‘imprimo el valor mayor...
Print "El valor Mayor es: "; A[renM, coiM]
Print "Y se encuentra dentro de la tabla en:"
Print "Fila: "; renM + 1
Print "Columna: "; coim + 1
Funciones usando arrays:
Dada una lista de precios, usa un funcion para incrementar estos precios, una cantidad fija.
Muestro el programa principal:
 

Dim valor As Float
Dim precios As New Float[5]
Dim preciosIncrementados As New Float[5]

precios[0] = 2
precios[1] = 10
precios[2] = 0
precios[3] = 15
precios[4] = 7

Print " - - - - - - - Incremento de precios a una lista - - - - - - - - - - "
Print "Introduce cantidad fija para aumentar los precios:"
Input valor
Print "Lista precios:"
muestraPrecios(precios)
preciosIncrementados = incrementa(valor, precios)
Print "\nLista precios incrementado:"
muestraPrecios(preciosIncrementados)

End

Funciones:


Public Function incrementa(constante As Float, lista As Float[]) As Float[]

Dim a As Integer

For a = 0 To lista.Max
lista[a] = lista[a] + constante
Next

Return lista

End

Public Sub muestraPrecios(lista As Float[])

Dim a As Integer

For a = 0 To lista.Max
Print lista[a],
Next
Print

End

Descarga de los ejemplo: Enlace

A falta de donativos... un poco de publicidad