You are on page 1of 56

GAMBAS 3.

LENGUAJE DE PROGRAMACION
COMENTARIOS
como se hace?
Los comentarios se definen con una apostrofe () y luego el texto.
Con doble apostrofe (''), se marca en negrita el comentario, ver ms abajo la aplicacin que
tiene...
El comentario debe de estar al final del codigo o en una sola linea:
Ejemplo
-->
Comentario
hola
Otro ejemplo
-->
Gambas.....
Public Sub main()
print hola esta linea de cdigo escribe hola en la consola
End

Tipos de datos, tipos de variables


Para que sirven las variables?
Las variables sirven para almacenar el valor de un dato, por ejemplo si la edad de Julio es
39, debemos de crear o definir una variable llamada edad que almacene el valor 39.
Tambin si queremos almacenar el nombre Julio, tendremos que definir una variable para
ello (por ejemplo nombre).
Vemos que esas dos variables nombre y edad, almacenan dos tipos de valores o datos
distintos, una varias letras (una cadena de caracteres) y otra un nmero.

En gambas existen varios tipos de datos, en la siguiente tabla se puede


descripcin, valor por defecto y tamao en memoria:

ver el tipo,

Tipo de
dato

Valor por
defecto

Descripcin

Tamao en memoria

Boolean

Verdadero o falso.

FALSE

1 byte

Byte

0...255

1 byte

Short

-32.768...+32.767

2 bytes

Integer

-2.147.483.648...+2.147.483.647

4 bytes

Long

0
9.223.372.036.854.775.808...+9.223.372.036.8
54.775.807

8 bytes

Single

Como el tipo float de C.

0.0

4 bytes

Float

Como el tipo double de C.

0.0

8 bytes

Date

Fecha y hora, cada una almacenada en un


entero.

NULL

8 bytes

String

Una cadena con un nmero variable de


caracteres.

NULL

4 bytes

Variant

Cualquier tipo de dato.

NULL

12 bytes

Object

Referencia annima a un objeto.

NULL

4 bytes

Pointer

Una direccin de memoria.

4 bytes en sistemas de
32 bits.
8 bytes en sistemas de
64 bits.

Siguiendo con el ejemplo:


Variable............. Almacena..................... tipo
nombre........ cadena de caracteres............ string
edad ............ nmeros enteros .................. integer

Definicin de variables en Gambas.


como se definen las variables en Gambas? variables locales o globales? Alcance de
las variables.
Dependiendo de donde tenga que ser accesible la variable (osea de donde el programador
vaya a tener la necesidad de leerlas y usarlas), se definen de manera diferente:
Locales: Si solo necesitamos que una variable solo sea accesible dentro de una funcin,
subrutina o mtodo, se define asi:
DIM Identificador AS TipoDato [ = Expresin ]

Adems todas las variables locales que se usen en una funcin, subrutina o mtodo, se
tendr que definir antes de usarlas, y antes de cualquier instruccin de la funcin, subrutina o
mtodo.
Un ejemplo de mal uso:

Uso correcto:

Globales: Podemos definir 2 tipos:


[ STATIC ] { PUBLIC | PRIVATE } Identifier AS Datatype [ = Expression ]

1) Si necesitamos que una variable sea accesible a varias subrutinas pero que estn en el
mismo formulario, mdulo o clase, se define:
PRIVATE Identificador AS TipoDato [ = Expresin ]
2)Si necesitamos que una variable sea accesible desde otros formularios, mdulos o clases:
PUBLIC Identificador AS TipoDato [ = Expresin ]
vase tambin Uso del Operador Punto

Cuadro resumen:

[ STATIC ]

La misma variable ser compartida con todos los objetos de esta clase.

Vamos a poner varios ejemplos:


a) Define una variable del tipo cadena que se llame NombreProveedor, y que contenga el
valor inicial de Juan Perez. Ademas esta variable debe de ser accesible a todas las
funciones de un formulario.
PUBLIC NombreProveedor as String=Juan Perez
b) Define una variable que va a contener una fecha, de nombre FechaActual y que sea
accesible solamente en la funcion donde la vayamos a usar:
DIM FechaActual as Date
c) Define una variable que vaya a contener el resultado de una divisin (incluido los
decimales), que se llame resultado y que sea accesible solo a las funciones del mismo
mdulo.
Private resultado as Single
Pero nos preguntamos cuantos decimales tiene que almacenar la variable?, como no lo indica el
enunciado tambin valdra:
Private resultado as Float

USO DE LAS VARIABLES:


Para llamar o usar el valor de una variable, y esta se llama desde el mismo mdulo, formulario o clase
donde fue definida, se emplea su nombre.
Private valor as string
Se le llama asi:
valor
Pero si, se quiere usar desde otro mdulo, formulario o clase, hay que aadir el nombre de donde fue
definida. Me explico, supongamos que tenemos definida esta variable:
Public valor as string
que esta definida dentro en el formulario Fmain.
Para llamarlo desde otro formulario, se hara de la siguiente manera:
Fmain.valor
Si la variable no es Public, no podremos acceder a ella desde un mdulo o formulario distinto desde
donde se defini!!!.
Prctica:
1. En la anterior entrada, hablamos de 2 variables (nombre y edad). Definelas en los siguientes
supuestos:
a) Que tengamos solo acceso local, y con un valor de nombre igual a "Julio" y edad igual a "39"
b) Que tengamos acceso desde otra funcin pero que ambas esten en el mismo formulario.
2. Fjate en el siguiente esquema. Es un tpico proyecto realizado en Gambas, con varios mdulos,
formularios y clases.

Las flechas indican donde tienen que ser visibles, las variables, A,B,C,D y E.
Definelas...

Funciones de Conversin tipos de datos


En muchos programas necesitaremos convertir un tipo de dato a otro tipo.
Gambas proporciona una serie de funciones que realizan distintos tipos de conversin:

CBool

Funciones de Conversin
Convierte un valor en Boolean.

CByte

Convierte un valor en Byte.

CDate

Convierte un valor en Date.

CFloat

Convierte un valor en Float.

CInt

Convierte un valor en Integer.

CLong

Convierte un valor en Long.

Conv$

Convierte una cadena de un juego de caracteres a otro.

CShort

Convierte un valor en Short.

CSng

Convierte un valor en Single.

CStr

Convierte un valor en String.

CVariant Convierte un valor en Variant.


Slo en versin 3.0
DConv$

Convierte una cadena del juego de caracteres del sistema a UTF-8 (juego de caracteres
de la interfaz grfica).

SConv$

Convierte una cadena desde el juego de caracteres UTF-8 (el empleado en la interfaz
grfica) al juego de caracteres del sistema.

Str$

Convierte un nmero o fecha en una cadena.

Val

Convierte una cadena en un nmero o fecha.

Un ejemplo:
Este programa recibe una cadena, lo convierte en un numero, y le suma 23, mostrando el
resultado:
-->
Dim cadena As String
Dim numero As Float
Print "Ejemplo de conversion de tipos:"
Print "Convertir una cadena en un numero"
Input cadena
Print "Esto seria cadena:", cadena
numero = Val(cadena) 'aqui hago uso de la funcin de conversin
Print "Esto seria como un numero: ", numero

numero += 23 'le sumo al numero 23 unidades


Print "Y puedo realizar operaciones con el numero:", numero
Nota:
Aado aqui otro cdigo, este hace uso de la orden Try (ver gestion de excepciones y errores )
Este cdigo "comprueba" que el usuario ha escrito un nmero y no un texto (que origina un error del
tipo "No coinciden los tipos: Requerido Float, obtenido Null en cambio"). En caso de que el usuario
escriba un texto, el programa vuelve a pedir que se introduzca de nuevo un nmero, (para ello usa el
bucle while wend)
' Gambas module file
Public Sub Main()
Dim cadena As String
Dim numero As Float
Dim Nosalir As Float = True
Print "Ejemplo de conversion de tipos:"
Print "Convertir una cadena en un numero"
While Nosalir 'bucle que se repite hasta que se haya introducido un numero
Print "introduce numero:"
Input cadena
Print "Esto seria cadena:", cadena
Try numero = Val(cadena) 'aqui hago uso de la funcin de conversin y de la instruccin Try, que si se
detecta que si se ha producido un error.
If Error Then
Print "El usuario no ha introducido un numero, vuelve a intentarlo"
Nosalir = True
Else
NOsalir = False 'esto hace que al evaluarse la condicion del bucle While, salgamos de este
Endif
Wend
Print "Esto seria como un numero: ", numero
numero += 23 'le sumo al numero 23 unidades
Print "Y puedo realizar operaciones con el numero:", numero
End

Subrutina y Funciones
por qu se usan?
Cuando escribimos nuestro cdigo fuente, es necesario ordenarlo de alguna manera,
organizndolo de forma que no repitamos las mismas ordenes. Para ello podemos usar
subrutinas y funciones.
que diferencia hay?
Las subrutinas, pueden recibir datos, y solo van a contener ordenes.
Las funciones, suelen recibir datos, y adems de contener ordenes, tambin nos van a

devolver un resultado (que ser un tipo de dato).


Esquema de como se declara:
Subrutina
[ FAST ] [ STATIC ] { PUBLIC | PRIVATE } { PROCEDURE | SUB } Identifier ( [ [ BYREF
] Parameter AS Datatype [ , ... ] ] [ , ] [ OPTIONAL [ BYREF ] Optional Parameter AS
Datatype [ , ... ] ] [ , ] [ ... ] )
...
END
Funcin
[ FAST ] [ STATIC ] { PUBLIC | PRIVATE } { FUNCTION | PROCEDURE | SUB } Identifier (
[ [ BYREF ] Parameter AS Datatype [ , ... ] ] [ , ] [ OPTIONAL [ BYREF ] Optional
Parameter AS Datatype [ , ... ] ] [ , ] [ ... ] ) AS Datatype
...
END
Nota:
Toda funcin debe de retornar algn tipo de dato (aunque sea NULL), usando para ello la
orden Return
-->
Al llegar a la orden Return, la funcin se deja de ejecutar y enva el valor especificado como valor de
retorno, que debe de coincidir con el tipo indicado en DataType.
Este seria el esquema de como funciona una funcin:

Public|Private:
Al igual que las variables, las funciones y subrutinas al definirlas le estamos diciendo desde donde se
puede acceder a ellas (desde todos los formularios/modulos (Public), vase Uso del Operador Punto , o
solo desde el mismo formulario o mdulo donde fue declarada (Private) )
Uso de una funcin:
Hay varias formas de llamar a una funcin, dependiendo de lo que se desea hacer con el resultado o
resultados que regrese, pero la regla que siempre se conserva es que la lista de parmetros debe
coincidir con los valores que recibe la funcin en su declaracin en tipo y cantidad.
Un estatuto de asignacin si el valor que regresa es necesario en otra operacin
a = nombre (lista de parmetros)
Una expresin
a = cantidad * nombre (lista de parmetros)
El orden de salida, si solo nos interesa imprimir el resultado, en caso de que no haya parmetros de
referencia

print nombreFuncion (lista de parmetros)


No confundir con
print nombreFuncion
cuyo resultado no tiene nada que ver, ya que imprime el nombre interno de la funcion en el Ide de
Gambas, sin devolvernos ningn calculo ni resultado ninguno.
Una condicin
If (nombre_funcion(lista de parmetros) > 7) then .
En Bucles:
while (nombre_funcion(lista de parmetros) > 7)
Ejemplo:
como declarariamos una funcin, accesible solo al mdulo donde estamos, llamala
promedio y que nos devuelva el promedio de 3 nmeros enteros? Hay que tener en
cuenta que el resultado puede contener nmero decimales.
Private Function promedio(a as integer, b as integer, c as integer) as float
Return (a+b+c)/3
End
Private -> definimos que solo lo podremos usar en el mdulo o formulario donde la hemos definico
Function -> es una funcin, con lo cual nos devolver algo.
promedio -> nombre de la funcin
(a as integer, b as integer, c as integer) -> son los 3 parametros de entrada, que estamos indicando que
son numeros enteros.
as float -> tipo de variable que devolver, en este caso devolvera un float.
Return (a+b+c)/3 -> retornamos el valor de la operacin (a+b+c)/3
End-> fin de la definicin de la funcin
Nota:SobreReturn
Enunafuncinpuedevervariosreturn,ejemplo:
Public Function ver(clave As String) As String
If clave = "OK" Then
Return "Ok, es la clave"
Endif
Return "clave no es valida"
End
En esta funcin, dependiendo del valor que se introduzca, retorna "ok,es la clave", o "clave no es
valida"
como usariamos esta funcin?
public sub main()
dim valor as float 'definimos una variable que ser la que contenga lo que devuelva la funcin
valor= promedio(3,4,2) ' calculamos el promedio de los numeros 3,4 y 2, y se lo asignamos a la
variable valor

print "El promedio es: ";valor ' escribimos el contenido de la variable en la consola
End
Al ejecutar el programa, escribira en la consola:
El promedio es: 3,33333333333333
Otro ejemplo: Usando parmetros opcionales.
Declara una funcin, accesible desde todos los formularios, llamandola sumatorio y que nos sume 2
numero decimales, siendo opcional sumar un 3 nmero. El mdulo donde se encuentra se llama
FuncionesAritmeticas:
Public Function sumatorio(a as float, b as float, optional c as float) as float
return (a+b+c)
end
Uso:
Como es accesible a todos los formularios y mdulos, si la llamamos desde otro lugar que no sea donde
este definida, le aadimos el nombre del mdulo donde est definida: "FuncionesAritmeticas"
-->
Public sub main()
Dim valor As Float
valor = FuncionesAritmeticas.sumatorio(2, 3)
Print "sumatorio:"; valor
End
Como se ve, el hecho de pasarle dos parmetros (los nmeros 2 y 3), no d problemas porque el 3 lo
hemos definido opcional ("optional")

FAST:
Con esta palabra reservamos, hacemos posible que se ejecute ms rpidamente la funcin o subrutina
(disponible desde Gambas3.2)
BYREF
Paso por referencia. Lo veremos ms adelante.
STATIC
El mtodo slo puede acceder a las variables estticas de la clase.
Nota: Si una funcin no se manda llamar, nunca se ejecuta.
Ejemplos:
Ejemplo 1: Se necesita una funcin que calcule la distancia entre 2 puntos con coordenadas

(Xa, Ya) y (Xb, Yb) . Para calcularla se usa la frmula:


DISTANCIA = (xa xb) + (ya yb)
Definicin de Funcin:
Public Function distancia(xx1 As Float, yy1 As Float, xx2 As Float, yy2 As Float) As Float
Dim p1, p2, result As Float
p1 = (xx2 - xx1) ^ 2
p2 = (yy2 - yy1) ^ 2
result = Sqr(p1 + p2)
Return result
End

Progrma principal:
'---------------------' Funcion: Calculo de distancia
'---------------------Dim x1, x2, y1, y2 As Float
Print "Dame las coordenadas del 1 punto:"
Print "X:"
Input x1
Print "Y:"
Input Y1
Print "Dame las coordenadas del 2 punto:"
Print "X:"
Input x2
Print "Y:"
Input Y2
Print "Resultado: ", distancia(x1, y1, x2, y2)

Ejemplo 2:
Se desea obtener el permetro de un tringulo dadas las coordenadas de los 3 puntos.

La definicin de la funcin es la misma que la del ejercicio anterior..(estamos aprovechando el cdigo


de un programa en otro distinto).
Programa Principal:
'---------------------' Funcion: Calculo de perimetro de un triangulo dado por coordenadas
'---------------------Dim x1, y1, x2, y2, x3, y3, p12, p13, p23 As Float 'defino variables para el calculo del
perimetro
Print "Dame las coordenadas del 1er punto "
Input x1
Input y1
Print "Dame las coordenadas del 2do punto "
Input x2
Input y2
Print "Dame las coordenadas del 3er punto "
Input x3

Input y3
' calculando la distancia entre el punto 1 y 2
p12 = distancia(x1, y1, x2, y2)
' calculando la distancia entre el punto 1 y 3
p13 = distancia(x1, y1, x3, y3)
' calculando la distancia entre el punto 2 y 3
p23 = distancia(x2, y2, x3, y3)
Print "El perimetro es ", p12 + p13 + p23
Si deseas usar funciones o subrutinas que esten definidas en otros formularios o mdulos de tu
programa, tendras que declararla como pblicas, y usar el operador punto ".". Para mas detalle visita
este enlace: Uso del Operador Punto

Paso de parmetros por valor y por referencia: BYREF


Parametros por valor
Hasta ahora hemos visto varios ejemplos de funciones, todos ellos, los parmetros han sido pasado por
valor, esto significa lo siguiente:
Cuando un argumento es pasado por valor, se hace una copia del valor del argumento
y se pasa a la funcin que es llamada.
Los cambios a la copia no afectan el valor original de la variable que aparece en la
llamada.
Una desventaja del paso por valor es que una gran cantidad de datos es pasado y
copiado, puede tomar un cantidad considerable de tiempo de ejecucin y espacio de
memoria.
A este tipo de parmetros se les conoce como parmetros de entrada
Ejemplo:
Tenemos esta funcin:
Public sub calc_area(rad as float)
area=3.14*rad^2
return area
end
Y la usamos en esta subrutina principal:
Public sub Mmain()
Dim r as float
print Dame el radio:
input r
print El area del circulo es: ; calc_area(r) ; con un radio de ;r

End
Como ves el valor de la variable "r" no ha cambiado al usarla en la funcin
Otro ejemplo:
Desarrollo un programa que tenga la funcion factorial para calcular la aproximacion de e
(numero de Euler). La aproximacion se vala en la siguiente formula:
e=1/1!+1/2!+1/3!.....+1/N!
Funcion:
Public Function fact(n As Integer) As Integer
Dim pot As Integer = 1
Dim i As Integer
For i = 1 To n
pot = pot * i
Next
Return pot
End
En el programa principal:
Dim euler As Integer
Dim suma As Float = 1
Dim i As Integer
Print "Dame la aproximacion que quieres:"
Input euler
For i = 1 To euler
suma = suma + 1 / fact(i)
Next
Print "El valor de la aproximacion es "; suma
Notas importantes:
Para evitar ambigedad, se recomienda no usar el mismo nombre en los argumentos
pasados a una funcin y los correspondientes parmetros en la definicin de la
funcin.
En la llamada a una funcin el tipo y nmero de parmetros debe coincidir con los de
la definicin de la funcin. ( a menos que tenga sean parametros opcionales, en tal
caso pueden no aparecer.)

Parmetros por referencia

Cuando un argumento es pasado por referencia, no se hace una copia del valor del
argumento, sino que se esta pasando la referencia este a la funcin o subrutina.
Los cambios a la copia si afectan el valor original de la variable que aparece en la
llamada.
La ventaja del paso por referencia es el menor consumo tiempo y memoria, ya que no
se tiene que realizar copias de los datos.
Para pasar un parametro por referencia, en la definicin de la funcin, hay que usar: byref
delante del parametro y ademas en la llamada a la funcion o subrutina hay que aadirle
tambien byref
Para mas informacin:
http://gambasdoc.org/help/lang/byref?es&v3
Ejemplo:
Funcion:
Public Sub titulo(ByRef titulo As String)
titulo = "** " & titulo & " **"
End
Uso de la funcin en el programa principal:
Dim palabra As String 'definicion de variable de cadena
Print "Ejemplo de parametro por referencia"
palabra = "hola"
titulo(ByRef palabra)
Print palabra
Fijaos que en la llamada de la funcin tambin he aadido delante del parmetro "palabra" la
orden ByRef. En caso de no aadirla, la subrutina tratara al parmetro como si fuera pasado
por valor:
Resultado de la ejecucin del programa:
Ejemplo de parmetro por referencia
** hola **
NOTA IMPORTANTE:
Los arrays y objetos siempre se pasan por referencia. Osea que si pasas a una funcin
como parmetro un array de elementos integer, al modificarlo, se ver modificado el original.

Operadores: Aritmticos, Asignacin, Lgicos, Construccin de Expresiones


Operadores Aritmticos:
Todos los operadores que se muestran en esta tabla son binarios; es decir, trabajan con dos operandos.
+ suma
- resta
* multiplicacion
/ division
% residuo o resto
^ potencia
Los operadores +, - y * funcionan de la manera conocida.
Si hay operandos de diferentes tipos de datos, se convierten al tipo de datos ms amplio y el tipo del
valor resultante es del tipo ms amplio. Por ejemplo, si hay enteros y flotantes, todos los nmeros se
convierten a flotantes y el resultado se calcula como flotante.
por ejemplo:
4/3 da como resultado 1.33333
El operador % calcula el residuo de la divisin entera y slo existe para datos de tipo entero.
por ejemplo:
10%3 da como resultado 1
Para la potencia:
2^8 da de resultado 256
Operadores de Asignacin:
a=a+b-------------> a+=b
a=a-b--------------> a-=b
a=a*b--------------> a*=b
a=a/b--------------> a/=b
a=a^b-------------->a^=b

Operadores Relacionales

Operadores Lgicos:

Adems esta "NOT", que significa NO, devolviendo el valor contrario a la expresin.
Construccin de expresiones
Una expresin es, normalmente, una ecuacin matemtica, tal como
3 + 5. en esta expresin, el smbolo ms (+) es el operador de suma, y los nmeros 3 y 5 se llaman
operandos.
En sntesis, una expresin es una secuencia de operaciones y operandos que especifica un clculo.
Una expresin es un elemento de un programa que toma un valor, en algunos casos puede tambin
realizar una operacin.
Las expresiones pueden ser valores constantes o variables simples, tales como 25 o z; pueden ser
valores o variables combinadas con operadores; o bien pueden ser valores combinados con funciones
como toupper(b), el cual convierte el argumento b a mayscula.
Por ejemplo:
Expresin para saber si un nmero es par:
(num % 2 = 0)
Expresin para saber si un nmero A est en el rango 5 a 300 incluyendo los extremos
(num >= 5) And (num <= 300)

El operador punto ".": acceso a funciones, subrutinas, propiedades, mtodos,


controles publicos
El operador punto ".", es utilizado para acceder a mtodos y propiedades de los objetos (mdulos,
formularios, clases, controles, arreglos, estructuras, etc) de programacin.
Sintaxis:
[nombre de clase|formulario|mdulo|array|control].[nombre de subrutina|funcion|variable|metodo|
propiedad]
Veremos ms adelante que son estructuras, clases, etc...el objetivo de este post, es que sepas que existe
y que como se utiliza en el Ide de Gambas.
Ejemplo con uso de estructuras: acceso a sus miembros.
Para acceder a los miembros (partes que componen un tipo de dato de estructura), se escribe el nombre
de la instancia de la estructura, seguida de un punto y luego el nombre del miembro:
Primero la tendremos que tener definida el tipo de estructura:

Public Struct alumno


nombre As String
edad As Integer
End Struct
Y luego donde la vallamos a usar, hay que crear la variable:
Dim alum As New Alumno
Y para acceder a los miembros, usamos el operador punto:
'accedemos al miembro "nombre" de la estructura alum.
print alum.nombre
'accedemos al miembro "edad" de la estructura alum.
print alum.edad
Ejemplo de uso del operador en mdulos:
Por ejemplo, si creamos un nuevo mdulo a un proyecto de Gambas, y le aadimos distintas variables,
funciones y subrutinas publicas, para usar estas en otros formularios o mdulos, la forma de hacerlo es
escribir el nombre del mdulo aadir un punto y a continuacin escribir el nombre de la variable,
funcin o subrutina. Veamos las siguientes capturas de pantalla:
Creamos un nuevo mdulo, llamado ModuleComun, y le aado el siguiente cdigo:

Si nos vamos el mdulo Mmain, y escribimos la palabra ModuleComun, veremos que aparece la
siguiente ayuda:

En el menu, aparecern las variables, funciones y subrutinas que sean pblicas. Y eligiendo la que
deseemos, por ejemplo la subrutina "presentacion":
ModuleComunes.presentacion
As podremos acceder desde el mdulo Mmain al contenido del mdulo ModuleComun, a la subrutina
"presentacion".

Vamos a ver otro ejemplo, usando clases.


Vamos a crear una clase, llamada Coordenada, que contenga 2 propiedades X e Y

Ahora creamos una nueva clase, llamada Linea, que use la clase Coordenada

Si instanciamos una clase linea, con "lineatemporal", en el mdulo Mmain, y queremos acceder a la
coordenadaIncial de una linea desde el mdulo Mmain, fijaos como se hace:
Dim lineatemporal As New Linea 'instanciamos la clase linea, creando el objeto
lineatemporal
print lineatemporal.CoordenadaInicial
y si quisieramos acceder a la coordenada X, del objeto "lineatemporal"?
print lineatemporal.CoordenadaInicial.x
Podeis ver como se puede "concatenar" con el operador punto, con las distintas partes "publicas" de
los objetos.
Ahora vamos a hacer un ejemplo con Formularios y Controles.

Para ello, tenemos que hacer que los controles sean publicos, eso se consigue en el menu
Proyecto/Propieades/Opciones, diciendo "Si" a la opcin

Una vez hecho esto, creamos otro formulario, y lo llamamos "FormSegundo", a este le aadimos un
control tipo textbox, llamandolo textbox1.
En el formulario de inicio (Fmain), aadimos un botn con la siguiente cdigo:
Public Sub Button1_Click()
'modificamos el valor de inicio del control
FormSegundo.TextBox1.text = "Valor incial es Curso de Gambas3"
'accedemos al metodo "show" del formulario
FormSegundo.Show
End
El cdigo, hace un cambio en la propiedad text, del Textbox1, iniciandolo con un valor ("Valor inicial
es Curso de Gambas3"), y luego mostramos el formulario FormSegundo usando la el mtodo "Show".
El resultado de cuando pulsemos en el boton del formulario Fmain, es que saldr el formulario
FormSegundo, con su textbox rellenado:

Funciones con cadenas de caracteres

Funcion
&

UTF-8
equivalent

Descripcion
Concatena cadenas.
Ver tambien operadores con cadenas

String.Code

Asc
Devuelve el cdigo ASCII de un
carcter en una cadena.
Base64$

Encode a string in Base64.


Since 3.2 version

Chr$

Devuelve un carcter a partir de su


cdigo ASCII.

String.Chr

Comp

Compara dos cadenas.

String.Comp

Html$
Cita una cadena para que sea HTML
vlido.

InStr
Busca una cadena dentro de
otra

String.InStr

LCase$

Convierte una cadena a minsculas.

String.LCase

Left$

Devuelve los primeros caracteres de una String.Left


cadena.

Len

Devuelve la longitud de una cadena.

String.Len

LTrim$

Elimina espacios en blanco de la parte


inicial de una cadena

Mid$

Devuelve parte de una cadena.

String.Mid

Quote$

Quotes a string.

Replace$

Reemplaza, dentro de una cadena, una


subcadena por otra.

Right$

Devuelve los ltimos caracteres de una


cadena.

String.Right

RInStr

Busca una cadena dentro de otra


empezando por su final.

String.RInStr

RTrim$

Elimina espacios en blanco de la parte

final de una cadena.


Scan

Splits a string against a regular


expression pattern.

Space$

Devuelve una cadena que contiene slo


espacios.

Split
Divide una cadena en
subcadenas.
String$

Devuelve la misma cadena concatenada varias veces.

Subst$

Sustituye cadenas en un patrn

Trim$

Elimina espacios en blanco del final de


una cadena.

UCase$

Convierte una cadena a maysculas.

String.UCase

UnBase64$

Decode a Base64 string.


Since 3.2 version

UnQuote$

Unquotes a string.

Para ms informacin: http://www.gambasdoc.org/help/cat/string?en&v3


Ejemplo de uso de alguna de las funciones ms usadas:
Dim a As Integer '
Dim cadena1 As String
Dim cadena2 As String
Dim cadena3 As String
Dim cadenasuma As String
Dim array_cadena As New String[]
cadena1 = "Hola"
cadena2 = "esto es"
cadena3 = " Gambas"
Print "---------------------"
Print "Funciones con Cadenas"
Print "---------------------"
cadenasuma = cadena1 & " " & cadena2 & cadena3
Print "Concatenar (suma) de cadenas:"; cadenasuma
Print "---------------------"
Print "Asc y Chr$"
Print "La letra A es en ascii: "; Asc("A")
Print "El numero 120 en ascii es el caracter: "; Chr$(120)
Print "---------------------"
Print "Buscar palabra dentro de una frase, y escribe en que caracter empieza:"

Print "Busco dentro de \"" & cadenasuma & "\" la cadena \"" & cadena2 & "\""
Print "La cadena empieza en el caracter:"; InStr(cadenasuma, cadena2)
Print "---------------------"
Print "Ucase$: Pone la cadena en mayusculas: " & UCase$(cadenasuma)
Print "Lcase$: Pone la cadena en mayusculas: " & LCase$(cadenasuma)
Print "---------------------"
Print "Uso de Split: divide una cadena y crea un array"
array_cadena = Split(cadenasuma, " ")
For a = 0 To array_cadena.max
Print " Cadena ("; a; "): "; array_cadena[a]
Next
Print "---------------------"
Print "Uso de Subst$: Sustituciones en cadena: Hola soy &{1}, bienvenido a &{2}"
cadenasuma = Subst$("Hola soy &{1}, bienvenido a &{2}", "Julio", "Dos Hermanas")
Print "Queda asi: "; cadenasuma
Lo que mostrara la consola es:
--------------------Funciones con Cadenas
--------------------Concatenar (suma) de cadenas:Hola esto es Gambas
--------------------Asc y Chr$
La letra A es en ascii: 65
El numero 120 en ascii es el caracter: x
--------------------Buscar palabra dentro de una frase, y escribe en que caracter empieza:
Busco dentro de "Hola esto es Gambas" la cadena "esto es"
La cadena empieza en el caracter:6
--------------------Ucase$: Pone la cadena en mayusculas: HOLA ESTO ES GAMBAS
Lcase$: Pone la cadena en mayusculas: hola esto es gambas
--------------------Uso de Split: divide una cadena y crea un array
Cadena (0): Hola
Cadena (1): esto
Cadena (2): es
Cadena (3): Gambas
--------------------Uso de Subst$: Sustituciones en cadena: Hola soy &{1}, bienvenido a &{2}
Queda asi: Hola soy Julio, bienvenido a Dos Hermanas
Nota:
Subst: es aconsejable usar en vez de &1, usar &{1}, para no dar problemas con sustituciones mayores
a 9 elementos.

Las Funciones FORMAT y LIKE

Format:
Formatea una expresin, segn el formato especificado, devolviendo una cadena de caracteres.
String = Format$ ( Expression [ , Format ] )
Estos son los caracteres que se usan en el formato que tendremos que especificar
Para Nmeros:
+ Muestra el signo de un nmero.
- Muestra el signo de un nmero solo si es negativo.
# Muestra un dgito solo si es necesario. El nmero se rellena con espacios a la izquierda de modo
que el nmero de caracteres impresos antes del punto decimal es mayor o igual al nmero de #
antes del punto decimal.
0 Simepre se muestra el digito, rellenando con ceros si es necesario.
. Muestra el separador decimal.
, Muestra el separador de miles
% Multiplica el nmero por 100 y muestra el smbolo porcentaje.
E Presenta la parte exponencial de un nmero del tipo Float. El signo del exponente se imprime
siempre.
Ejemplo:
PRINT Format$(Pi / 10, "###.# %")
Se obtiene: 31.4 %
Para Moneda:
$ Muestra el smbolo de la moneda nacional.
$$ Cuando $ es doble en su lugar se muestra el smbolo de moneda internacional.
(

Muestra la representacin negativa de monedas. Este debe ser el primer caracter de la cadena de
formato. Puede especificar una llave de cierre ) al final del formato.

PRINT Format$(-1972.06, "($$,#.###)")


Se obtiene:
(USD 1,972.06)
Para fechas:
yy

Muestra el ao con 2 digitos.

yyyy

Muestra el ao con 4 digitos.

Muestra el mes.

mm

Muestra el mes con 2 digitos.

mmm

Muestra el mes en un formato de cadena abreviado.

mmmm

Muestra el mes en un formato de cadena completo.

Muestra el da.

dd

Muestra el da con 2 digitos.

ddd

Muestra el da de semana en un formato de cadena abreviado.

dddd

Muestra el da en un formato de cadena completo.

Muestra el separador de fecha.

Muestra la hora.

hh

Muestra la hora con 2 dgitos.

Muestra los minutos.

nn

Muestra los minutos con 2 dgitos

Muestra los segundos.

ss

Muestra los segundos con 2 dgitos.

Muestra el separador de hora.

Muestra un punto y los milisegundos, si son diferentes de cero.

uu

Imprime un punto y los milisegundos con 3 dgitos.

AM/PM Muestra la hora en formato AM o PM de acuerdo a la hora. Fuerza a la hora estar


comprendida entre 1 y 12.
Por ejemplo:
Print Format$(Now, "dddd dd mmmm yyyy")
Muestra al fecha actual (Now), con el siguiente formato:
martes 04 septiembre 2012
Para ms informacin: Format http://gambasdoc.org/help/lang/format?v3
http://gambasdoc.org/help/cat/userformat?es&v3

Like:
Comprueba que una cadena contiene un patrn, devolviendo si es asi True , en caso de que no lo
encuentre devuelve False
Result = Expression [ NOT ] LIKE Pattern AS Boolean
El patrn puede usar estos caracteres:
Caracter
genrico

Concuerda

Cualquier nmero o caracter.

Un slo caracter.

[abc]

Cualquier caracter entre los corchetes.

[x-y]

Cualquier caracter del intervalo.

[^x-y]

Cualquier caracter que no est en el intervalo.

space

Cualquier nmero de espacios o caracteres con un cdigo ASCII menor que 32.

{aaa,bbb,... Una de la cadena entre corchetes. Las cadenas son separadas por comas.
}
Slo en versin 3.0
\x

El carcter x, incluso si se trata de un carcter genrico. Se utiliza para encontrar


un carcter genrico.

Para ms informacin: Like http://gambasdoc.org/help/lang/like?v3


Por ejemplo:
Print "Gambas" Like "?am*" 'contiene "Gambas", el primer caracter cualquiera, luego el 2 caracter
la "a", el 3 caracter "m", y el resto cualquiera?
Print "Gambas" Like "[^z]?????" ' el primer caracter no es z y los 5 caracteres siguientes cualquiera?
Print "GambAs" Like "Gam{bas,BAS}" ' contiene Gam y luego "bas"Print "GamBZS" Like
"Gam{bas,BZS}" ' contiene Gam y luego "bas" o "BZS"
Todas las comprobaciones anteriores son TRUE

Funciones para manejar ficheros y directorios


Ficheros y directorios:
Gambas3 contiene una serie de ordenes que nos van a ayudar a manejar archivos y directorios:
Entre ellas:
CHMOD : Cambia el permiso de un archivo, ejemplo: : Chmod "~/Documents" To "rwxr-x---"
COPY : Copia un archivo, ejemplo: COPY User.Home &/ ".config/gambas/gambas.conf" TO
"/mnt/save/gambas.conf.save"
Exist : Comprueba si existe un fichero o directorio. Ejemplo: PRINT Exist(user.home &
"/gambas.txt")
IsDir : Devuelve si es un directorio la ruta pasada
KILL : Borra un fichero

MKDIR: crea un directorio


MOVE : mueve o cambia de nombre un fichero. Ejemplo: MOVE OldName TO NewName
RMDIR : borra un directorio vacio
Stat : Obtienes informacin de un fichero:
Temp$ : crea un nombre temporal para un fichero.
Adems la clase file, tiene una serie de mtodos que devuelven parte del nombre de fichero:
.Name : nombre sin extensin
.Basename : nombre con extensin
.Ext: extensin del fichero
.Dir: directorio del fichero
Exemplo de uso de mtodos de file:
Ejemplo de un boton llamado "ButtonDisplayPath", el cual al hacer click sobre el, despliega un cuadro
de dialogo para elegir un fichero, y luego nos da los datos del fichero (ruta, nombre, extension)
PUBLIC SUB ButtonDisplayPath_Click()
IF Dialog.OpenFile() THEN RETURN
PRINT "Nombre completo del fichero: " & Dialog.Path
PRINT "Nombre del fichero (con extension) " & File.Name(Dialog.Path)
PRINT "Nombre del fichero (sin extension): " & File.BaseName(Dialog.Path)
PRINT "Extension del fichero: " & File.Ext(Dialog.Path)
PRINT "Directorio del fichero: " & File.Dir(Dialog.Path)
END

Ejemplo de funcin para copia recursiva de archivos y directorios:


Esta funcin recursiva, sirve para copiar todos los archivos y carpetas de una carpeta a otra. Tiene un
parmetro opcional para seleccionar el tipo de ficheros que queremos copiar:
PUBLIC SUB copia_dir(path_origen AS String, path_destino AS String, OPTIONAL tipo as String)
DIM arDir AS string[]
DIM arFile AS string[]
DIM nombredir, nombrefile AS String
IF NOT tipo then tipo="*"
IF NOT Exist(path_destino) THEN
MKDIR path_destino
ENDIF
arfile = Dir(path_origen, tipo, gb.file) 'extraemos los ficheros

FOR EACH nombrefile IN arfile 'los copiamos


COPY path_origen &/ nombrefile TO path_destino &/ nombrefile
NEXT
ardir = Dir(path_origen, "*", gb.Directory)
FOR EACH nombredir IN arDir 'extraemos los subdirectorios
copia_dir(path_origen &/ nombredir, path_destino &/ nombredir) 'usamos la recursividad
NEXT
END

Clculo con fechas: DateAdd y DateDiff

Clculo con fechas: DateAdd y DateDiff


Tenemos 2 funciones:
DateAdd: aade (o resta) un periodo de tiempo a una fecha dada, devolviendonos la fecha resultante
Result = DateAdd ( Date as Date , Period AS Integer , Count AS Integer ) AS Date
DateDiff: restar dos fechas, devolviendo el peridos de tiempo pasado. Nos puede indicar dias, meses,
aos , horas, etc:
Count = DateDiff ( Date1 AS Date , Date2 AS Date , Period AS Integer ) AS Integer
Ejemplo:
Dim date1 As Date
Dim date2 As Date
'ejemplo para que calcula que fecha obtenemos si restamos 27 dias a la fecha actual
date1 = Date(Year(Now), Month(Now), Day(Now))
date2 = DateAdd(date1, gb.Day, -27)
Print "Fecha actual: ", date1, " menos 27 dias, date2 quedaria ", date2
'ejemplo: a la fecha actual, le restamos la fecha "date2", que diferencia saldr
'
Print "Fecha actual: ", date1, " le restamos la fecha date2, saldria: ", DateDiff(date1, date2, gb.day)

ESTRUCTURAS DE CONTROL

Estructuras de control: Condiciones IF...Then


Estructuras de control
Las estructuras de control controlan el flujo de un programa o funcin.
Permiten combinar instrucciones o sentencias individuales en una simple unidad lgica
con un punto de entrada y un punto de salida.
Estatuto if
EnGambas , la estructura de control de seleccin principal es un estatuto if.
El estatuto if tiene el siguiente formato:
IF Expression [ { AND IF | OR IF } Expression ... ] [ THEN ] ... [ ELSE IF Expression [ { AND
IF | OR IF } Expression ... ] [ THEN ] ... ] [ ELSE ... ] ENDIF
IF Expression [ { AND IF | OR IF } Expression ... ] THEN ...
Traducido sera como sigue
Si....expresion.... Y Si | O Si ....expresion... Entonces .... Sino Si ....expresion... Y Si | O Si ... expresion
Entonces .... Sino ... FinSi
Si ...expresion... Y Si | O Si ... expresion.... Entonces .....
Forma en que se ejecuta:
La orden se ejecuta de la siguiente manera:
Cuando se alcanza la estructura IF dentro de un programa, se evala la condicin (o codiciones). Si la
condicin es verdadera, se ejecuta las ordenes que sigan al THEN, en caso de que no se cumpla, se
ejecutaran las ordenes que sigan al ELSE,y si no las hay no se ejecuta nada.
Uso: If..then..endif
Dim num As Integer
Print "Introduce un numero para comprobar que sea divisible entre 3:"
Input num
If (num % 3) = 0 Then
Print "Es divisible entre 3"
Endif
Uso: If ... then ... else ... endif
Dim nota As Float
Print "Introduce la nota del alumno:"
Input nota
If nota >= 5 Then
Print " Aprobado"

Else
Print "Suspenso"
Endif

Condiciones Anidadas
Las ordenes if implementan decisiones que implican una o dos alternativas, una orden
if es anidada cuando la sentencia de la rama verdadera o la rama falsa es a su vez
una sentencia if.
Una orden if anidada se puede utilizar para implementar decisiones con varias
alternativas o multi-alternativas

Ejemplo de uso:
Este programa, pide 2 nmeros al usuario, y te dice cual es mayor. En caso de que sean iguales,
tambin te lo dice.
' Gambas module file
Public Sub Main()
Dim a, b As Integer ' Definimos las variables locales, que vamos a usar
Print "Programa para mostrar el uso del If...Then..."
Print "Este programa compara dos numeros introducidos por el usuario, y te dice cual es el
mayor"
Print "Introduce el 1 numero:"
Input a
Print "Introduce el 2 numero:"
Input b
If (a > b) Then
Print "El mayor es: "; a
Else
If a = b Then
Print "Son iguales"
Else
Print "El mayor es: "; b
Endif
Endif
Print "Fin del programa"
End
Otro ejemplo de uso:
Pedir 3 nmeros, y ordenarlos de mayor a menor:

Dim a, b, c As Float
Print "Dame los 3 numeros "
Input a
Input b
Input c
If (a > b) Then
If (b > c) Then
Print a; " "; b; " "; c
Else
Print a; " "; c; " "; b
Endif
Else
If (a > c) Then
Print b; " "; a; " "; c
Else If (b > c) Then
Print b; " "; c; " "; a
Else
Print c; " "; b; " "; a
Endif
Endif
Nota:
No es bueno abusar de este tipo de anidamientos, (por ejemplo hacer este mismo problema pero con 5
numeros), ya que nos podemos perder con tanto anidamiento, y es muy dficil de encontrar errores...
Para estos casos es mejor usar la orden Select...Case o Choose-

Actividades IF...THEN
1. Determinar los divisores de un nmero introducido por teclado.
Por ejemplo si digito 10 debe responder 1,2,5,10
2. Determinar si un nmero es o no es primo. Un nmero es primo si sus nicos divisores posibles son la unidad
y el propio nmero. Ejemplo el nmero 11.
3. Determinar si un nmero es o no es perfecto.
Un numero es perfecto si la suma de sus divisores sin incluir el propio nmero es igual a este
4. Escribir un algoritmo que pida un valor entero que equivale a una cantidad de DINERO y calcule a
cuantos billetes de 50.000, 20.000, 10.000, 5.000, 2.000, y 1.000 equivalen.
Si el usuario digita 282000 el programa debe responder cinco billetes de 50.000, un billete de veinte mil, un
billete de diez mil, un billete de dos mil.
5. Telefnica realiza los clculos del costo de una llamada de telfono siguiendo los clculos as:
Cuando se descuelga el telfono los primeros 3 minutos (banderazo) cuestan 200 pesos y cada minuto
adicional cuesta 50 pesos.
Escriba un programa que permita calcular el costo de una llamada dados los minutos de duracin.

SELECT CASE
Esta orden se utiliza para seleccionar una de entre mltiples alternativas.
Es especialmente til cuando la seleccin se basa en el valor de una variable simple o de una expresin simple
denominada expresin de control o selector.

Se utiliza para ejecutar acciones diferentes segn el valor de una expresin o una variable. Consiste en una
serie de etiquetas case y un case por omisin Case Else default.

Formato:
SELECT [ CASE ] Expression
[ CASE [ Expression ] [ TO Expression #2 ] [ , ... ]
[ CASE [ Expression ] [ TO Expression #2 ] [ , ... ]
[ CASE LIKE Expression [ , ... ] ... ]
[ { CASE ELSE | DEFAULT } ... ]
END SELECT

... ]
... ]

Explicacion:
Select variable
case valor1
accion1
case valor2
accion2
......
case valorN
accionN
case else
accionD
End Select
La accin 1 se ejecuta si la variable adquiere el valor1.
La accin 2 se ejecuta si la variable adquiere el valor 2.
La accin n se ejecuta si la variable adquiere el valor n.
Cualquier otro valor de la variable conduce a la realizacin de la secuencia accionD, indicada
por la palabra reservada case else.
La secuencia case else puede omitirse
Para ms informacin visite gambasdoc: http://gambasdoc.org/help/lang/select?en&v3
Ejemplo de uso: Menu en modo consola (usando numeros)
Dim opcionN As Integer
Print "Ejemplo de uso de Select Case: Menu"

Print ""
Print ".....Menu......"
Print "1) Escribir \"hola\""
Print "2) Escribir \"adios\""
Print "3) Escribir \"Gambas\""
Print ""
Print "Escriba la opcion: 1/2/3:";
Input opcionN
Print "La opcion elegida es..."; opcionN
Select opcionN
Case 1
Print "hola"
Case 2
Print "adios"
Case 3
Print Gambas"
Case Else
Print "La opcion es descnocida"
End Select

Ejemplo de uso: Menu en modo consola (usando letras)


Dim opcion As String
Print "Ejemplo de uso de Select Case: Menu"
Print ""
Print ".....Menu......"
Print "a) Escribir \"hola\""
Print "b) Escribir \"adios\""
Print "c) Escribir \"Gambas\""
Print ""
Print "Escriba la opcion: a/b/c:";
Input opcion
Print "La opcion elegida es..."; opcion
Select opcion
Case "a"
Print "hola"
Case "b"
Print "adios"
Case "c"
Print "Gambas"
Case Else
Print "La opcion es descnocida"
End Select

Ejemplo 2: Traducir Palabras

Dim opcion As String


Print "Ejemplo 2"
Print "-------------"
Print "rojo"
Print "verde"
Print "azul"
Print "-------------"
Print "Escriba un color (rojo/verde/azul): ";
Input opcion
Select opcion
Case "rojo"
Print "en ingles es RED"
Case "AZUL"
Print "en ingles es BLUE"
Case "verde"
Print "en ingles es GREEN"
Case Else
Print "No se traducir la palabra "; opcion
End Select

Ejemplo: Intervalos numericos


Dim opcion As Integer
Print ""
Print "Introduzca un numero entre el 1 al 10:"
Input opcion
Select opcion
Case 1 To 5
Print "Esta entre el 1 al 5"
Case 6 To 10
Print "Esta entre el 6 al 10"
Case Else
Print "fuera del intervalo..."
End Select

Actividades SELECT CASE


1. Solicite al usuario el ultimo digito de la matricula de su vehculo y dgale que da de la semana puede cogerlo,
sabiendo que el lunes paran 0,1,2,3; los martes 4,5,6,7; los mircoles 8,9,0,1; los jueves 2,3,4,5 y los viernes
6,7,8,9
2. En las elecciones de Dos Hermanas hay cinco mesas de votacin. Para saber en qu mesa debe votar un
ciudadano, se toma el ltimo digito de la carnet de identidad (cedula) y se distribuye as.
Dgitos 1 y 2 en la mesa A,
Dgitos 3 y 4 en la mesa B,
Dgitos 5 y 6 en la mesa C,
Dgitos 7 y 8 en la mesa D,
Dgitos 9 y 0 en la mesa E.
Escriba un programa que determine en que mesa debe votar un ciudadano.

3. Solicite al usuario su mes de nacimiento y diga cuales son los signos zodiacales a los que posiblemente
pertenece.
4. Solicite al usuario el valor a pagar por un recibo del servicio de acueducto y alcantarillado. As mismo solicite
el estrato social del cliente y aplique los siguientes descuentos o incrementos segn el caso.
-> Al estrato uno se le descuenta el 50% del valor del recibo,
-> Estrato dos 25% de descuento, estrato 3 y 4 no tiene descuento ni incremento
-> Estrato cinco se le incrementa el 25% sobre el valor del recibo
-> Al Estrato seis se le incrementa el 50%.

Choose
Esta orden es una simplificacin de Select Case, que nos ahorra bastantes lineas de cdigo, la podemos
usar algunas veces.
Value = Choose ( Choice , Result1 , Result2 [ , ... ] )
Choise: es una variable, que si vale 1 devolver el Result1, si vale 2, devolver el Result2, y si el valor
supera a los resultados que escribamos, devuelve NULL
Ejemplo de uso: Dia de la semana
Dim dia_semana As String
Dim x As Integer
Print "Di un numero entre el 1 y el 7:"
Input x
dia_semana = Choose(X, "Lunes", "Martes", "Miercoles", "Jueves", "Viernes", "Sabado",
"Domingo")
Print dia_semana
En este ejemplo, al escribir 1 devuelve Lunes, si escribimos 8 devuelve NULL.
Tambin se puede hacer con Select Case, pero es mucho ms largo:
Dim dia_semana As String
Dim x As Integer
Print "Di un numero entre el 1 y el 7:"
Input x
Select x
Case 1
dia_semana = "lunes"
Case 2
dia_semana = "Martes"
Case 3
dia_semana = "Miercoles"
Case 4

dia_semana = "Jueves"
Case 5
dia_semana = "Viernes"
Case 6
dia_semana = "Sabado"
Case 7
dia_semana = "Domingo"
Case Else
Print Null
End Select
Print dia_semana

Bucles, Repeticiones o Ciclos


Un ciclo o bucle, es cualquier construccin de programa que repite una sentencia o
secuencia de sentencias un nmero de veces.
La sentencia o grupo de sentencias que se repite en un bloque se denomina cuerpo del ciclo
y cada repeticin del cuerpo del ciclo se llama iteracin del ciclo.
En gambas existen varias ordenes para realizar repeticiones, que nos van a ayudar a
controlar los bucles.
DO ... LOOP -> Bucle infinito.
FOR ... NEXT -> Bucle con contador
FOR EACH ... NEXT -> Bucle de enumeracin.
REPEAT ... UNTIL -> Bucle con una comprobacin de salida al final.
WHILE ... WEND -> Bucle con una comprobacin de salida al inicio.
Adems existen estas dos ordenes relacionadas con los bucles:
BREAK
Abandona un bucle inmediatamente.
CONTINUE Salta a la siguiente iteracin de un bucle.

While...Wend
Un ciclo while tiene una condicin del ciclo, una expresin lgica que controla la secuencia
de repeticin.

La posicin de esta condicin del ciclo es delante del cuerpo del ciclo y significa que un ciclo
while es un ciclo de preverificacin de modo que cuando se ejecuta el mismo, se evala la
condicin
antes de que se ejecute el cuerpo del ciclo.
Sintaxis
WHILE Expresin-condicion
.instrucciones
WEND
Aqu se ejecuta el (las) orden (es) mientras la condicin es verdadera; al momento de ser
falsa termina el ciclo.
Si la condicin es falsa la primera vez nunca se
ejecuta(n) el (las) orden (es).
Ejemplos:
Programa que pide 10 nmeros y calcula y muestra la suma de todos los que fueron pares.
Dim suma As Integer = 0
Dim cont As Integer = 10
Dim numero As Integer
Print "Programa que pide 10 nmeros y calcula y muestra la suma de todos los que fueron
pares."
While (cont > 0)
Print "Dame numero :"
Input numero
If numero % 2 = 0 Then suma += numero
cont -= 1
Wend
Print "Suma de numeros pares, es:", suma
Ejemplo II : Obtener el promedio de calificaciones de un grupo de 20 estudiantes
Dim total, contador, calif As Integer
Dim promedio As Float
total = 0
contador = 1
Print "Obtener el promedio de calificaciones de un grupo de 20 estudiantes"
While (contador <= 20)
Print "Dame calificacion:"
Input calif
total += calif
contador += 1
Wend
promedio = total / 20
Print "El promedio es: ", promedio

REPEAT....UNTIL
Esta orden se utiliza para especificar un ciclo condicional que se ejecuta al menos una vez.
Este ciclo se presenta en algunas circunstancias en las que se ha de tener la seguridad de
que una determinada accin se ejecutara una o ms veces, pero al menos una vez.
Sintaxis
Repeat
... instrucciones
Until Expresin-condicion
El bucle se repite hasta que la Expresin-condicion es cierta.
Ejemplo:
Contar cuantos digitos de un nmero
Dim x As
Integer
Dim cant As Integer
Print "Contador de digitos de un numero"
Print "Teclea un numero, y contare los digitos que tenga"
Input x
Repeat
x = x / 10
cant += 1
Until (x = 0)
Print "El numero tiene: "; cant; " digitos"
Ejemplo II:
Pedir un nmero, y omprobar si un numero esta entre el intervalo del 10 al 20, y sino seguir
pidiendolo.
Dim num As Integer
Repeat
Print "Dame un numero:"
Input num
Until ((num >= 10) And (num <= 20))
Print "numero dentro del rango (10 a 20)"

For .... Next


For ... Next es un mtodo para ejecutar un bloque de sentencias un nmero fijo de veces.
El ciclo for se diferencia del ciclo while, en que las operaciones de control del ciclo se sitan en un solo sitio: la
cabecera de la orden
Sintaxis

FOR Variable = Expression { TO | DOWNTO } Expression [ STEP ExpressionStep ]


...
{ordenes}
...
NEXT
Funcionamiento del For
1. Evala la condicin, si es verdadera entra al ciclo : variable=Expression
2. Ejecuta el o las ordenes: {ordenes}
4.Incrementa o decrementa, dependiendo del valor ExpressionStep, el valor de la Variable y regresa al punto 1
Para ms informacin: GambasDoc
Ejemplos:
'Mostrar los 30 primeros nmeros de la serie de Fibonacci. La serie es 1,1,2,3,5,8,13....
Dim a As Integer = 1
Dim b As Integer = 1
Dim i As Integer
Dim fibo As Integer
Print "Mostrar los 30 primeros nmeros de la serie de Fibonacci."
For i = 3 To 31
fibo = a + b
Print fibo
a=b
b = fibo
Next
Ejemplo II: Sumar todos los nmeros nones desde 1 hasta 30
Dim num, suma As Integer = 0
Print "Sumar todos los numeros impares, del 1 al 30"
For num = 1 To 30 Step 2
suma += num
Print "Suma de nones:"; suma
Next

Ejemplo III: Sumar todos los numeros pares desde el 2 al 40


Dim num, suma As Integer = 0
Print "Sumar todos los numeros pares, del 2 al 40"
For num = 0 To 40 Step 2
suma += num
Print "Suma de pares:"; suma
Next

For ... Each


Repite un bucle mientras se enumera un objeto, dicho objeto debe de ser enumerable ( por ejemplo, una
coleccin, o una matriz.)
Sintaxis:
FOR EACH Variable IN Expresin
...
NEXT
Expresin : debe de ser un objeto enumerable
Ejemplo:
Con una matriz de cadenas:

Dim Dict As New String[]


Dim Elemento As String
Dict.add("Azul")
Dict.add("Rojo")
Dict.add("Verde")
For Each Elemento In Dict
Print Elemento
Next

ORDENES ESPECIALES DENTRO DE LOS BUCLES

Break y Continue
Estas dos instrucciones se usan dentro de los bucles.
Break: hace que salgamos del bucle o ciclo sin terminar de ejecutar las ordenes que le sigan
Continue: hace que saltemos del el ciclo actual, continuando el bucle de repeticin

Veamos dos ejemplos:


Ejemplo de Break:

'ejemplo de uso de break:


Dim limite, a As Integer
Print "Introduce un numero del 1 al 10, para salir del bucle cuando llegue a el:"
Input limite
For a = 1 To 10
If a = limite Then
Print "Salgo del bucle..."
Break
Endif
Print "Numero ", a 'esto no se ejuctara una vez que a llegue a ser igual que limite
Next
Print "Fin del ejemplo"

Y un ejemplo de Continue:
Print "Usando Continue"
Print "Introduce un numero del 1 al 10, para salte a la siguiente iteracin del bucle cuando llegue a el:"
Input limite
For a = 1 To 10
If a = limite Then
Print "Salto a la siguiente iteracin del bucle..."
Continue
Endif
Print "Numero ", a 'esto no se ejuctara una vez que a llegue a ser igual que limite
Next
Print "Fin del ejemplo de uso de Continue"

La salida generada, si le doy el valor de limite=3:


Usando Break
Introduce un numero del 1 al 10, para salir del bucle cuando llegue a el: 3
Numero 1
Numero 2
Salgo del bucle...
Fin del ejemplo de uso de Break
Usando Continue
Introduce un numero del 1 al 10, para salte a la siguiente interacin del bucle cuando
llegue a el: 3
Numero 1
Numero 2
Salto a la siguiente iteracin del bucle...
Numero 4
Numero 5
Numero 6
Numero 7
Numero 8
Numero 9
Numero 10
Fin del ejemplo de uso de Continue

Bucles Infinitos.
Cuando en un ciclo la condicin siempre es verdadera se dice que es un ciclo infinito, pues nunca saldr del
ciclo y el programa no termina.

Ejemplo:
While TRUE
....
....
Wend
Para evitarlos hay que estar seguros que en el bloque de ordenes haya una orden que modifique el valor de la
condicin de tal modo que llegue a ser falsa, o que haya una orden BREAK que se ejecute aunque sea una
vez o en determinadas circunstancias.

Ejemplo:
Este del bucle While-Wend nunca saldremos...
Dim cont As Integer = 6
Dim a As Integer = 10
Dim suma As Integer
While (cont > 1)
suma = suma + cont
a -= 1
cont += 1 'cada vez el contador es mayor, por lo tanto siempre sera mayor que 1 (se va acumplir la condicion
siempre)
Print suma, a, cont
Wend

cual sera la forma de corregirlo?


Podamos incluir una condicin que al cumpliese salga del bucle:
Dim cont As Integer = 6
Dim a As Integer = 10
Dim suma As Integer
While (cont > 1)
suma = suma + cont
a -= 1
cont += 1 'cada vez el contador es mayor, por lo tanto siempre sera mayor que 1 (se va acumplir la
condicion siempre dentro (cont>1)
Print suma, a, cont
If cont = 25 Then 'condicion que si se cumple...
Break ' salimos del bucle
Endif
Wend
De esta forma convertimos el bucle infinito, en un bucle normal, de que el programa saldr al ejecutarse varios
ciclos.
Otra forma de corregir el bucle, es usar la variable a, en la condicion del bucle (cont<1) cambiarlo a (a<1), con
el cual llegar un momento en que se salga del bucle.

Actividades con While y For


Actividad con While
0. Calcular el mximo de nmeros positivos introducidos por teclado, sabiendo que metemos
nmeros hasta que introduzcamos uno negativo. El negativo no cuenta.
1. Solicite un numero al usuario y diga cul es su factorial
2. Solicitar al usuario un nmero de hasta 9 dgitos e imprimirlo en orden contrario.
Ej. digito 6754 imprimo 4576.
3.Calcular la operacin x elevado a la n. No utilice el operador potencia (^)
4. Solicitar 2 nmeros al usuario e imprimir el cociente y el residuo del mayor dividido en el
menor. No utilice el operador de divisin ( / ) ni el mod ( % )

Actividades con el For


1. Solicite al usuario un numero de inicio, un numero de finalizacin y una cantidad para
incrementar o decrementar. Implemente un programa que permita visualizar la serie de
nmeros segn los datos introducidos.

2. Escribir un programa que visualice la siguiente figura, utilizando ciclos. El usuario decide
cuantas lneas quiere imprimir
*
**
***
****
*****
******
*******
********
*********
3. Averige en qu consiste la serie de Fibonacci. Implemente un programa que imprima esta
serie con un nmero de elementos introducidos por teclado.
4. Determinar si un nmero es o no es primo. Un nmero es primo si sus nicos divisores
posibles son la unidad y el propio nmero.
Ejemplo: 11. (Use la solucin que implica ciclos o repeticiones)
5. Determinar si un nmero es o no es perfecto. Un numero es perfecto si la suma de sus
divisores sin incluir el propio nmero es igual a este

MAS SOBRE DATOS

Estructuras
Una estructura es :
Es una coleccin de variables, la cual puede poseer distintos tipos de datos.
Es un tipo de dato definido por el usuario.
Ayudan a organizar y manejar datos complicados en programas debido a que agrupan diferentes tipos
de datos a los que se los trata como una sola unidad en lugar de ser vistas como unidades separadas.
La declaracin de estructuras :
PUBLIC STRUCT Identifier
Field 1 [ Embedded array declaration ] AS [ Datatype ]
Field 2 [ Embedded array declaration ] AS [ Datatype ]
. . .
Field n [ Embedded array declaration ] AS [ Datatype ]
END STRUCT
En la definicin del tipo de estructura, se especifican los elementos que la componen as como sus
tipos. Cada elemento es llamado miembro
Por ejemplo:
Public Struct alumno ' ejemplo de estructura
id As Integer ' id: identificador del alumno

nombre As String ' nombre: variable donde guardaremos el nombre del alumno
apellidos As String' apellidos: variable donde guardaremos los apellidos del alumno
curso As Integer ' curso: variable tipo numero integer que guarda en que curso esta (1,2,3,..)
promedio_notas As Float 'variable que guarda el promedio de las notas que tenga el alumno
End Struct

En este caso, el tipo de estructura es alumno


Y los miembros: id,nombre,apellidos,curso,promedio_notas
Para definir una variable que sea de tipo estructura alumno:
Dim alum As New Alumno

El acceso a los miembros de la estructura es por medio del operador Punto de la siguiente manera:
alum.id = 12
alum.nombre = "Julio"
alum.apellidos = "Sanchez Berro"
alum.curso = 1
alum.promedio_notas = 5.5

Si tenemos que volver a usar la variable, en este caso alum, reiniciarla con otros datos debemos usar la
orden NEW
alum = New Alumno

Y ya podremos darle nuevos valores:


alum.id = 13
alum.nombre = "Fernando"
alum.apellidos = "Bonzalez"
alum.curso = 3
alum.promedio_notas = 8

Y esta linea nos imprimira la informacin que guarda la estructura:


Print alum.id, alum.nombre, alum.apellidos, alum.curso, alum.nombre

Un ejemplo completo de uso:


Dim nota As Float 'variable donde guarda la nota que pide
Dim i As Integer 'variable para el bucle For... Next
Dim acumulada As Float 'va acumulando las notas del alumno
Dim numero_asignaturas As Integer = 5 'suponemos que tiene 5 asignaturas
Dim r1 As New Alumno
r1.nombre = "Julio"
r1.apellidos = "Perez"
r1.id = 32
r1.curso = 1
'pido las notas del alumno..
For i = 1 To numero_asignaturas
Print "Introduce lan nota de la asignatura "; i; ": "
Input nota
acumulada += nota
Next
' calculo el promedio:

r1.promedio_notas = acumulada / numero_asignaturas


'Escribo datos del alumno:
Print "Id del alumno:"; r1.id
Print "Nombre Completo:"; r1.nombre;" "; r1.apellidos
Print "Cursa en: "; r1.curso
Print "Nota promedio: "; r1.promedio_notas

Ahora otro ejemplo, esta vez usamos una estructura para que una funcin nos devuelva varios datos:
Es un programa que pide 5 artculos y su coste, va sumando el valor de los artculos, mostrando los
valores, y al final muestra el total de la compra
1 definimos el tipo estructura
Public Struct dato
cadena As String
valor As Float
End Struct

2 Definimos el programa principal, que es el encargado de sumar los datos, y hacer las llamadas a la
funcin:
Dim lista As New Dato
Dim a As Integer
Dim suma As Float
Print "----------------------------------------"
Print " Lista de la Compra"
Print "----------------------------------------"
For a = 1 To 5
lista = PeticionDatos("Lista de la Compra")
suma += lista.valor
Print lista.cadena, lista.valor
Next
Print "----------------------------------------"
Print "La suma total es: ", suma

3 Definimos una funcin que nos piden los datos, y nos devuelve la estructura:
Public Function PeticionDatos(nombre As String) As Dato
Dim dat As New Dato
Print "******* " & nombre & " **********"
Print "Introduce el nombre del articulo:"
Input dat.cadena
Print "Introduce el valor del articulo:"

Input dat.valor
Return dat
End

Fjate que la variable que devuelve Return, es del tipo estructura Dato (llamada dat), que es la que se le
asigna, en el programa principal a otra variable estructura Dato, llamada Lista.

Arreglos, Arrays, Vectores, Matrices


Arreglos de una dimension

Los arreglos de una dimensin, tambin llamados vectores, o arrays , es


"es un tipo de dato estructurado que permite guardar colecciones de elementos del mismo tipo,
donde los elementos del arreglo se enumeran consecutivamente 0,1,2,3,"

Vamos a poner un ejemplo para explicrtelo... imagina el nombre de los alumnos de una
clase, que lo tienes que poner en un programa. Podamos hacerlo as:
alumno_primero=Julio
alumno_segundo=Jesus
alumno_tercero=Maria
alumno_cuarto=Eva
Como ves, tenemos los nombres de los alumnos los asociamos al nombre de una variable.
El problema nos viene al intentar hacer cosas con ellas, por ejemplo escribir una lista los
nombres:
print alumno_primero,alumno_segundo,alumno_tercero,alumno_cuarto
Y si fueran cientos de alumnos? Seria imposible poderlo hacerlo asi...
que podemos usar entonces? Pues para eso tenemos los arreglos
Imagina que tienes una tabla de una columna por muchas filas, llamada alumno,

Las filas de la tabla , las vamos a enumerar.


Se enumeran empezando por el numero 0 (ver nota), que seria la fila que contiene el dato "Julio". La
fila 1, seria el dato "Jesus", y asi sucesivamente....

Fjate como quedara:

Ahora, el arreglo lo usamos asi: Alumno[ numero_indice ], indicando en el numero_indice la fila.


Llamamos indice del arreglo, al n de fila.
Para ver el dato de una fila concreta, podemos poner Alumno[2], y veramos el nombre del
alumnos
print Alumno[2] -> equivale a ->print Alumno_tercero
Es un poco ms fcil que usar nombre como _primero, _segundo, verdad?
Adems tiene otras ventajas, una de ellas es que podemos operar muy facilmente con bucles
(por ejemplo el for next) para manejarlo.
Vamos a escribir la lista de alumnos, usando arreglos:
for a=0 to 3
print alumnos[a]
next
Fjate lo fcil que es... incluso si fueran cientos de alumnos, podiamos usar este mismo
bucle, cambiando unicamente el 3, por el numero de alumnos menos 1, (ya que empezamos
por el 0 )
Notas:
por que empiezo por a=0? Los arreglos (en Gambas y en otros lenguajes de programacin)
siempre empieza por la fila 0. Osea, para ver el 1 elemento, escribimos Alumnos[0], para
ver el 2 elemento ponemos Alumnos[1], y asi...esto hay que tenerlo en cuenta en nuestros
programas !!!.
Declaracion de arreglos:
Al igual que con cualquier tipo de variable, se debe declarar un arreglo antes de utilizarlo,
Para declarar un arreglo se utiliza las siguiente sintaxis:
Public/Private/Dim nombre AS New tipo_dato[tamao] para una dimension
Para arreglos de varias dimensin (normalmente llamadas matrices):
Public/Private/Dim nombre AS New tipo_dato[tamao1,tamao2] para dos dimensiones,
Public/Private/Dim nombre AS New tipo_dato[tamao1,tamao2,tamao3,....] para dos
dimensiones,
Se pueden declarar hasta 8 dimensiones...

Donde tipo_dato es el tipo de los datos que almacenar el arreglo.


Es importante mencionar que se pueden declarar arreglos de los tipos primitivos de
Gambas(integer, float, ), o bien de tipos definidos por el usuario (estructuras, clases).
Tamao representa la cantidad de casillas que se reservan para el arreglo. En Gambas
todos los arreglos empiezan en el subndice 0 y llegan al subndice tamao-1.
Por ejemplo:
dim arr as new integer[6] arreglo de 6 elementos enteros, los subndices van del 0 al
5
dim alumnos as new string[6] arreglo de 6 elementos de cadenas de caracteres
dim tabla2d as new float[40,100] ' esto seria una matriz de 40 filas por 100 columnas
Es importante distinqueir que los arreglos usan corchetes [ ] y no parentecis ( ) , no
confundir a la hora de definirlos y usarlos...
Si intentas acceder a un arreglo con parentesis, el programa interpreta que es una funcin lo
que estamos usando, y dar un error.
Ejemplo:
Dim tabla As New Float[10, 20]
tabla[0, 2] = 34.34
Print tabla[0, 2]

Arrays: Propiedades y Mtodos


-->
Con el operador Punto ., tenemos las siguientes propiedades y mtodos:
Propiedades

Bounds
Count
Data
Dim
Length
Max
Type

Devuelve el nombre de la clase virtual


Devuelve el numero de elementos del array
Devuelve el puntero del array
Devuelve el numero de dimensiones del array
Igual que count
Devuelve el indice mayor del array, es el count-1
Devuelve el tipo de array (integer, float, etc).
Para ms detalles: http://gambasdoc.org/help/cat/constant?
v3

Mtodos:
Clear
Remove
Resize

Limpia el array, segn el tipo, pone todos los valores a Cero o Null
Borra uno o varios elementos del array
http://gambasdoc.org/help/comp/gb/array/remove?v3
Amplia o reduce el array. No se puede usar en array multi-dimensionales.
http://gambasdoc.org/help/comp/gb/array/resize?v3

Ms Mtodos:
Add
Copy
Delete
Exist
Extract
Fill

Find
Insert
Pop
Push
Read
Reverse
Sort
Write

Aade un elemento al final o en una determinada posicion


http://gambasdoc.org/help/comp/gb/float%5B%5D/add?v3
Devuelve una copia del array entera o parcial, segn se le indique
http://gambasdoc.org/help/comp/gb/float%5B%5D/copy?v3
Extrae elementos de un array,
http://gambasdoc.org/help/comp/gb/float%5B%5D/delete?v3
Devuelve si existe o no un elemento (verdadero a falso)
Extrae elementos de un array,
http://gambasdoc.org/help/comp/gb/boolean%5B%5D/extract?v3
Rellena con un valor, el array, dandole el indice de inicio y el indice
final
http://gambasdoc.org/help/comp/gb/float%5B%5D/fill?v3
Devuelve el indice, donde se encuentre un valor
http://gambasdoc.org/help/comp/gb/float%5B%5D/find?v3
Inserta un array dentro de otro, en la posicion indicada.
http://gambasdoc.org/help/comp/gb/float%5B%5D/insert?v3
Borra el ultimo elemento y lo retorna
http://gambasdoc.org/help/comp/gb/float%5B%5D/pop?v3
Aado al final de la lista un elemento
http://gambasdoc.org/help/comp/gb/float%5B%5D/push?v3
Rellena la matriz tomando los datos directmanete de un flujo.
http://gambasdoc.org/help/comp/gb/integer%5B%5D/read?v3
Invierte el orden de los elementos de un array
http://gambasdoc.org/help/comp/gb/integer%5B%5D/reverse?es&v3
Ordena los elementos de un array, ascendente o descendentemente
http://gambasdoc.org/help/comp/gb/integer%5B%5D/sort?v3
Escribe los contenidos de una matriz en un Flujo.
http://gambasdoc.org/help/comp/gb/integer%5B%5D/write?es&v3

-->
' Gambas module file

Public a As New Integer[7]


Public b As New Integer[7]
Public Sub Main()
a[0] = 1
a[1] = 2
a[2] = 5
a[3] = 9
a[4] = 10
a[5] = 8
a[6] = 7
'b.bounds = a.Bounds
Print a.Bounds
Print "count: "; a.Count
Print a.Data
Print a.Dim
Print "length: "; a.Length
Print "max: "; a.Max
Print "tipo: "; a.Type
'aadir el elemento "-1" en la posicion 3
a.Add(-1, 3)
escribe(a)
'copia parte del array "a" desde la posicion 3, y solo 4 elementos
b = a.Copy(3, 4)
escribe(b)
'Extrae parte del array "b" desde la posicion 1, y 2 elementos,
escribe(b.Delete(1, 2))
escribe(b)
'Exist:
Print "Existe el elemento -1: ", b.Exist(-1)
'Relleno: fill
Print "Relleno del array b, con 8"
b.Fill(21, 0, b.count)
escribe(b)
'Find: encuentra un valor dentro de un array, devolviendo el indice
Print "Posicion del indice: "; a.Find(9)
'inserto el array b en el a,en la posicion 4

Print "A:";
escribe(a)
Print "B:";
escribe(b)
a.Insert(b, 4)
Print "Escribo resultado:"
escribe(a)
Print "Usando Pop:"; a.Pop()
Print "Queda el array: ";
escribe(a)
Print "Usando Push,a aado al final de la lista el n -33"
a.Push(-33)
Print "Queda el array: ";
escribe(a)
Print ""
Print "Devuelve un array invertido:"
b = a.Reverse()
escribe(b)
escribe(a)
Print ""
Print "Array ordenado (ascendentemente):"
a.Sort(gb.Ascent)
escribe(a)
End
Public Sub escribe(array As Integer[])
Dim acontador As Integer
Print "Array: ";
For acontador = 0 To array.Max
Print array[acontador]; " ";
Next
Print
End
Salida generada en la conosla:
(Integer[] 0x1b2b5d8)
count: 7
(Pointer 0x1b2b668)
1
length: 7
max: 6
tipo: 4

Array: 1 2 5 -1 9 10 8 7
Array: -1 9 10 8
Array: 9 10
Array: -1 8
Existe el elemento -1: True
Relleno del array b, con 8
Array: 21 21
Posicion del indice: 4
A:Array: 1 2 5 -1 9 10 8 7
B:Array: 21 21
Escribo resultado:
Array: 1 2 5 -1 21 21 9 10 8 7
Usando Pop:7
Queda el array: Array: 1 2 5 -1 21 21 9 10 8
Usando Push,a aado al final de la lista el n -33
Queda el array: Array: 1 2 5 -1 21 21 9 10 8 -33
Devuelve un array invertido:
Array: -33 8 10 9 21 21 -1 5 2 1
Array: -33 8 10 9 21 21 -1 5 2 1
Array ordenado (ascendentemente):
Array: -33 -1 1 2 5 8 9 10 21 21
Nota:
Los arrays en gambas3 siempre se pasan por referencia a las funciones y subrutinas, con lo cual si
cambiamos algo de ellos dentro de la funcin, modificaremos el original. Para que nos nos ocurra esto,
hay que pasar una copia, y para ello se usa el mtodo .copy del array.
Ejemplo:
mifuncion(miarray.copy())
Para ms informacin:
http://www.gambas-es.org/viewtopic.php?f=1&t=2919
Funciones A aadir:
Join en arrays de cadenas de caracteres (string[])
Esta funcion es muy util, hace lo contrario que la funcion Split, une un array, aadiendo un caracter
separador que le indiquemos. Para mas informacin http://gambasdoc.org/help/comp/gb/string%5B
%5D/join?v3
Ejemplo:
-->
Dim cadena As New String[4]
Dim resultado As String
cadena[0] = "Hola"
cadena[1] = "esto"
cadena[2] = "es"

cadena[3] = "Gambas"
resultado = cadena.Join("|") 'uso como caracter serparador la barra vertical
Print resultado
Salida generada en la consola:
Hola|esto|es|Gambas

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 mtodo Burbuja:
' Mtodo 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 mximo 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