Professional Documents
Culture Documents
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
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
0.0
4 bytes
Float
0.0
8 bytes
Date
NULL
8 bytes
String
NULL
4 bytes
Variant
NULL
12 bytes
Object
NULL
4 bytes
Pointer
4 bytes en sistemas de
32 bits.
8 bytes en sistemas de
64 bits.
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:
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.
Las flechas indican donde tienen que ser visibles, las variables, A,B,C,D y E.
Definelas...
CBool
Funciones de Conversin
Convierte un valor en Boolean.
CByte
CDate
CFloat
CInt
CLong
Conv$
CShort
CSng
CStr
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$
Val
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
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
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 "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
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.
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
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.)
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 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)
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".
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:
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$
Chr$
String.Chr
Comp
String.Comp
Html$
Cita una cadena para que sea HTML
vlido.
InStr
Busca una cadena dentro de
otra
String.InStr
LCase$
String.LCase
Left$
Len
String.Len
LTrim$
Mid$
String.Mid
Quote$
Quotes a string.
Replace$
Right$
String.Right
RInStr
String.RInStr
RTrim$
Space$
Split
Divide una cadena en
subcadenas.
String$
Subst$
Trim$
UCase$
String.UCase
UnBase64$
UnQuote$
Unquotes a string.
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.
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.
yyyy
Muestra el mes.
mm
mmm
mmmm
Muestra el da.
dd
ddd
dddd
Muestra la hora.
hh
nn
ss
uu
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
Un slo caracter.
[abc]
[x-y]
[^x-y]
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
ESTRUCTURAS DE CONTROL
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
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
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)"
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
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"
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
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
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
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
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.
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,
Bounds
Count
Data
Dim
Length
Max
Type
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
-->
' Gambas module file
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