jueves, 28 de junio de 2012

Diapositivas sobre Gambas

Hola!.

Encontré estas diapositivas sobre Gambas.

Aunque son para versiones algo más antiguas, explican información
que puede ser interesante para todos sobre nuestro entorno favorito
de programación.

Diapositivas 1

Diapositivas 2

Diapositivas 3

Referencia:

Portal educativo Extremeño


martes, 19 de junio de 2012

Cómo funcionan los controles de alineación

En este ejemplo veréis como funcionan los controles de alineación:

  • Hbox
  • Vbox
  • HPanel
  • VPanel

 Estos controles son contenedores y permiten alinear sus objetos
 o componentes que están dentro de el. Ya sea verticalmente
 u horizontalmente.

Tenemos propiedades como Padding que le dice cuanto es la separación
en pixels entre componentes (hijos) de su contenedor (el control de alineación).




En el ejemplo debemos seleccionar uno de los 4 tipos y luego
seleccionar las imágenes, que irán llenando "de una forma"
típica de cada control de alineación.Podréis llenar
cada contenedor hasta un máximo que os avisara.

EjemploControlesAlineación



Buscar estos componentes en:

GambasDoc

También encontrareis información en el manual de Gambas:

Alineación de controles en la pagina 114



sábado, 16 de junio de 2012

Como hacer una calculadora


Vamos a crear una aplicación muy conocida cuando empezamos con
un entorno visual. Una calculadora.

La imagen final sera así:

Con esta calculadora podrás hacer las operaciones básicas.
La pantalla se borrara cada vez que hagamos una operación
para mostrar el resultado.

Empezamos por un formulario:

Esta formulario tiene:

Propiedad Height (Altura) del formulario: 272
Propiedad Width (Ancho) del formulario: 232

Como no queremos que la imagen se agrande, cambiaremos
la propiedad Resizable a False. Desaparecerá el icono de maximizar.

Necesitaremos para comenzar una etiqueta que sera nuestra pantalla LCD.
Dentro de un formulario tenemos unas coordenadas X e Y. Fijaros en las propiedades de este. Luego,vamos a la caja de herramientas, que tenemos todos nuestros componentes y seleccionamos label.

Situamos la etiqueta en:
X =11 e Y =15

Si no podéis colocarlo con el cursor el componente.
Usar sus propiedades X e Y. ;-)

Le damos un alto y un ancho.

Height: 32 y Width: 208

Ahora fijaros. La etiqueta debería dar la sensación de que tiene profundidad.
Así que cambiaremos su propiedad Border a Sunken.(Hundida).
Probar a ver que pasa si cambiareis a otros modos.

Para que los números comiencen por su derecha, debemos cambiar su alineación. Así que en la propiedad Align cambiaremos a RIGHT (derecha).

Vamos a la propiedad nombre y la cambiamos a Pantalla

Ya tenemos nuestro LCD.

Ahora vamos a crear una botonera. Tendremos:

  • Los números.
  • Las operaciones.
  • El signo igual
  • La coma o punto decimal.

Con esto, podemos darnos cuentas de que tenemos unos grupos de botones divididos según función

Estos grupos de controles son los conocidos como “Matriz de controles”.
Ganamos en claridad de código y usamos un mismo código para cada 
grupo de botones.

Vamos a crear el primer botón para los números.
Necesitaremos 10 botones.

Comenzaremos por el 0.
Vamos a nuestra caja de herramientas o componentes y pulsamos en el
botón que tiene ok en su interior.

Hacemos doble clic sobre el.

Grande,¿ verdad ?.Con este botón vamos a crear todo el resto de botones
de los números.

Vamos a cambiar su alto y ancho:

Height : 42 y su Width: 49

Vamos a cambiar su nombre:
Name: Boton0

Y vamos a cambiar su propiedad de texto.
Text: 0

Como es un conjunto de botones o grupo. Todos estos botones tienen
su índice, que lo identifica en su grupo, con la propiedad “Tag”

En la que iremos añadiendo un índice. Como boton0 es el primero de todos.
cambiaremos la propiedad Tag a 0 y así iremos haciéndolo con cada grupo
de botones. El boton0 es 0, el boton1 es 1, el boton3
es 3, etc.

¿ Estas contento con ese tamaño de letra para tu botón ?.

Puedes cambiarlo en la propiedad Font del botón.
Yo lo deje a 11.

Parece que ya de principio nuestro número esta alineado.
Vamos a desplazar el botón.

Seleccionamos nuestro botón.Nos valemos del lateral de la etiqueta
y lo llevamos hasta abajo.

Podemos colocarlo en:
X: 8
Y: 216

Nos vamos a la propiedad Group del botón
Y escribiremos: Números

Ahora viene lo interesante. Tenemos seleccionado nuestro botón 0 y 
con el botón derecho del ratón, mostramos el “menú emergente” y seleccionamos “Copiar”.

Nuestro botón se ha copiado a la memoria y ahora queremos tener otro igual sobre el formulario. Usamos de nuevo el “menú emergente” con el botón derecho y “Pegamos”.

Tenemos nuestra copia de botón arriba. Lo bajamos y lo colocamos encima del primer botón.

Fijaros ahora en las propiedades Name y Group, automáticamente su nombre ha cambiado a boton1 y se ha incluido en el grupo Numeros. Tenemos que cambiar la propiedad “Tag”,manualmente.

Como aun tenemos en memoria el primer botón. Volvemos a usar “Pegar” del menú emergente (Botón Derecho). Una vez mas hasta tener una fila de tres botones.

Veremos algo así:


Ahora seleccionaremos los tres botones de la misma fila. Iremos desde el primero al tercero. Dejaremos pulsado el botón izquierdo y seleccionamos los tres botones.

Cuando los tengamos seleccionados, usaremos el menús emergente y usamos “Copiar”.
Tendremos tres botones en memoria. Que vamos a Pegar ahora dos veces, para completar los diez botones de la calculadora.Las tres filas. :-)

Fijaros que al pegar los botones están seleccionados, vamos a ellos con el botón izquierdo y los ponemos encima de la primera fila de tres botones.

Una vez mas. “Menú emergente” y “Pegar”.

Ya tenemos nuestro grupo de botones “Números”.

Ahora hay que cambiar el contenido del texto de cada botón
y observar también como han ido cambiando sus nombres según
hemos ido pegando estos,sobre el formulario.No olvidar cambiar
su propiedad Tag.

Cambiamos el contenido del texto y queda así:


Vamos a crear ahora nuestros botones para las operaciones.

Seleccionamos un botón de los números ,lo copiamos,pegamos y lo situamos
a la derecha del 9.

Tenemos que cambiar sus propiedades de nombre,grupo,texto y tag.

A su nombre: BotonDiv
Grupo: Operaciones
Text: /
Tag: 0

Ahora que tenemos seleccionado el botón de dividir. Copiamos y Pegamos,
debajo del botón dividir. Hasta tres botones más.

Cambiamos de estos tres, sus propiedades nombre,texto y tag.
Nombrándolos y poniendo su signo de operación.

BotonPor
BotonMenos
BotonMas

Y tendremos una imagen así:



Para la coma o punto y el signo igual usaremos botones que no van en un grupo.
Son dos botones independientes.
 
Así que seleccionamos un botón cualquiera,copiamos y pegamos.
Y lo colocamos debajo del 2, el botón para el punto o coma y hacemos
de nuevo la misma operación y colocamos nuestro igual.

Vamos a los dos botones y cambiamos para “el punto decimal”.Usaremos un punto.
Su nombre: BotonComa
Borramos su grupo y su tag (índice).

Y hacemos lo mismo con el botón de igual.
Nombre: BotonIgual
Borramos su grupo y su tag

Tenemos todos los botones de nuestra calculadora.



Es muy importante que para el futuro sepáis crear vuestros grupos de controles.

Comencemos con el código.

Vamos a definir unas variables que son comunes a todo el formulario.

---código---
Private operando1 As Float
Private operando2 As Float
Private operador As String
Private Borrapantalla As Boolean
Private resultado As Float
---código---

Pasamos al formulario y ahora pulsa sobre cualquier botón de los números.
Fíjate que ha salido como nombre del evento Click , el grupo que pertenece.
Con esto, tenemos el mismo código común para todos esos botones.

Vamos a programar su respuesta.

Fijaros en la variable Borrapantalla.
---código---
Public Sub Números_Clic()
If Borrapantalla Then
    Pantalla.Text = ""
    Borrapantalla = False
Endif
Pantalla.Text = Pantalla.Text & Last.Text
End
---código---

Es una variable Booleana. No se esta comparando, pero se esta
comprobando su valor.

Como la variable Booleana por defecto vale “False” al comienzo.
IF comprueba si es True para saber si estamos con el primer operando
o con el segundo.

Cada vez pulsemos una tecla de los números su
contenido de texto se añade al contenido de texto de la etiqueta.

Pantalla.Text = Pantalla.Text & Last.Text

Al comienzo Pantalla.Text esta vacío
Last.Text nos dice, que de su propiedad texto de cualquier botón del 
grupo Números (el ultimo pulsado),  se añadirá a la pantalla y se 
mostrara en esta.

Así se van añadiendo números.

Veamos el código de las operaciones.
Vamos a usar una instrucción “condicional selectiva múltiple”


---código---
Public Sub Operacion_Clic()

Select Case Last.tag
Case 0
    operando1 = CFloat(Pantalla.Text)
    operador = "+"
    Pantalla.Text = ""
Case 1
     operando1 = CFloat(Pantalla.Text)
     operador = "-"
     Pantalla.Text = ""
Case 2
     operando1 = CFloat(Pantalla.Text)
     operador = "*"
     Pantalla.Text = ""
Case 3
     operando1 = CFloat(Pantalla.Text)
     operador = "/"
     Pantalla.Text = ""
End Select
End
---código----

La propiedad Tag de Last nos devuelve su índice
“Cada botón de operación tiene que tener en su propiedad
Tag un valor, de 0 a 3 en este caso”, que son el número de
operaciones.

Cuando es 0, convierte el contenido de la pantalla al tipo Real
su operador es “+” y limpia la pantalla.
Habremos almacenado el primer operando y su operador.

Podríamos haber usado el propio contenido del botón para saber
su operador, ya que este se encuentra en la propiedad de texto
del botón del grupo operaciones.

Y así sucesivamente según su índice realizara una operación u otra.

El botón de punto o coma.....
---código---
Public Sub BotonComa_Clic()
If InStr(Pantalla.Text, ".") = False Then
Pantalla.Text = Pantalla.Text & "."
Endif
End
---código---

Este grupo de instrucciones lo que hace es buscar la coma dentro
del texto contenido en la etiqueta que es la pantalla. Si existe la coma
no volverá a escribirse en la pantalla, otra coma.


Y por ultimo nuestro botón igual:

---código---
Public Sub BotonIgual_Clic()
operando2 = CFloat(Pantalla.Text)
If operador = "+" Then resultado = operando1 + operando2
If operador = "-" Then resultado = operando1 - operando2
If operador = "*" Then resultado = operando1 * operando2
If operador = "/" And operando2 <> 0 Then resultado = operando1 / operando2
Pantalla.Text = resultado
End
---código----


En este grupo de instrucciones, almacenamos el segundo operando
y comprobamos cual es la operación que quiere que hagamos.
También comprueba que si la operación es dividir,que su operando2 no sea 0
para que no de error.

Hemos hecho nuestra primera aplicación.
Hay muchas funciones que se le pueden añadir .Que el contenido de la
pantalla no pase de una cantidad de números. Etc

Recordar que al pegar las comillas del blog al editor de gambas, hay que cambiarlas.No son el mismo tipo de comillas.Gambas no la interpreta igual.

Ah, para el icono de nuestra calculadora.Ir a propiedades del formulario y usar
la propiedad Icon. ;-)

jueves, 14 de junio de 2012

Ejemplo.Otros dibujos 2

Aquí tenéis otro generador de  formas y dibujos.

La aplicación contiene dos controles sliders. Debes usar los dos sliders 
para generar el dibujo. Tienen un valor mínimo de tres y máximo de cien.

Use una sentencia condicional para asegurarme de que cada slider tuviera
un valor y que no fuera 0 en uno de los dos.

Ejemplo: Usar primero un poco el de forma y luego el de repetición.

Os muestro algunas de las imágenes que genera:








 GeneraDibujos2


martes, 12 de junio de 2012

Lanzador para Fuse.Emulador de Spectrum

Esta es una mini-aplicación para usar junto con el emulador de Spectrum.Fuse.
Permite escoger el directorio donde están  las cintas ya sean en formato .TAP
o .TZX, seleccionar y lanzar el emulador para probarlas.

He añadido "por ahora" la opción de usar dos modelos:
- 48K
- 128k Plus 2A

Además de poder seleccionar si quieres que la carga sea lenta.


La mayoría de estos lanzadores se le conocen como Front-End.

Lanzador para Fuse

Mas información sobre Fuse en:

Pagina de Free Unix Emulator Spectrum.(FUSE)

Ejemplo.Texto a Voz

Este es un pequeño ejemplo de como convertir un texto a voz,
usando la utilidad del sintetizador de voz "espeak" que nos proporciona
el centro de software que incorpora nuestra distro.




Recordar que hace falta tener instalado espeak para que funcione.

Texto a voz

lunes, 11 de junio de 2012

Función de cadena Split


Como dividir una variable de cadena en un array o matriz de cadena.

Olvide esta función cuando tratamos el tema del manejo de cadenas.
Y es una función muy importante.

Permite que una frase, un texto, podamos dividirla en palabras y
almacenarlas en un array, teniendo en cuenta el uso de un “separador”.

El separador puede ser cualquier carácter, símbolo, espacio,etc.

Una sintaxis básica puede ser esta:

Matriz o array de cadena=Split (cadena,separador)

---código---
DIM atexto AS STRING[]
DIM sfrase AS STRING

sfrase=”En un lugar de la Mancha, de cuyo nombre no quiero acordarme, no ha mucho tiempo que vivía un hidalgo de los de lanza en astillero, adarga antigua, rocín flaco y galgo corredor.”

atexto=Split(sfrase,” “)

---código---

El separador seria el espacio y cada palabra seria almacenada en el array o matriz con
un índice diferente. De esta manera seria muy fácil hacer un contador de palabras.

Para averiguar el numero de elementos de un array usamos la propiedad “count”.

El primer índice del array es cero. Así si el numero de palabras es 2.
El índice cero seria una y el índice 1 seria la segunda.

Count nos devolvería 2. Contando con el cero.

Solo tenemos que añadir al final del código:

PRINT atexto.count

Como veis he utilizado el prefijo ”a” delante de texto
y “s” delante de frase. “A” de array y “s” de string.

Es una manera fácil de deducir rápidamente que tipo de variables
es cuando estés viendo el código y la encuentres en cualquier
parte.

Mas información en el manual de Gambas en la pagina 59.
O también en:

domingo, 10 de junio de 2012

Circulos.Partes.Polígonos regulares

En este ejemplo encontré dos maneras de dividir el circulo en n partes.
Como también gracias al segundo ejemplo, encontré la forma de hacer
un polígono regular de n lados.

Quizás el primer modo no salga bien a veces cuando el número de partes
es impar.

Con la segunda manera encuentro los puntos sobre la circunferencia.
Tales como la x y la y.Así que fue cuestión de crear un array
de estos puntos y luego pasarlos a la función.

Draw.Poligon





Círculos y Polígonos

Mas información en:

Función Draw.Poligon

sábado, 9 de junio de 2012

Ejemplo.Busca clones de M.A.M.E

Esta aplicación fue la primera que hice aprovechando brevemente
los recursos que ofrece Gambas para manejar cadenas.

Para poder usarla,necesitáis tener instalado en el sistema
M.A.M.E. El multi arcade emulador. Sin este, no funcionara.

La aplicación aprovecha la posibilidad de búsqueda de clones y
la muestra en un componente Gridview.



Esta aplicación no baja ningún archivo.Solo trabaja con una lista que ofrece
el emulador. ;-)

Cuando el nombre no lo reconoce, mostrara un mensaje.La aplicación
es un ejemplo de como podemos aprovechar Gambas para algo que nos
gusta.Tu proyecto, llevado a Gambas.


Aquí tenéis el código:

BuscaClonesM.A.M.E 

Mas información sobre M.A.M.E

Enlace a la web de MameDev

viernes, 8 de junio de 2012

Manejo de cadenas.Continuación


Continuamos donde lo dejamos. Sigamos con las muchas de las operaciones
que podemos hacer con el manejo de cadenas.

Los espacios en una cadena.

Hay veces que nos interesa eliminar los espacios contenidos en una variable de cadena.
Ya sea por el comienzo, por el final o en ambos lados.

Para eliminar por la izquierda usamos:
Ltrim$(cadena)

Imaginar que nuestro usuario entra una palabra y ha añadido, espacios al principio
que no tienen utilidad.

En el caso de un nombre.

---código---
DIM nombre AS STRING

nombre=” Luisa”
PRINT nombre

nombre= LTrim$(nombre)
PRINT nombre
---código---

Por la derecha lo haríamos con  la función RTrim$

---código---
DIM nombre AS STRING

nombre=”Luisa ”
PRINT nombre

nombre= RTrim$(nombre)
PRINT nombre
---código---

Observar los puntos en la salida de consola.

Ahora usemos Trim$. Con esta función eliminaremos los espacios
contenidos en la variable de cadena, tanto al comienzo como al final.

---código---
DIM frase AS STRING

frase=” En un lugar de la Mancha ”
PRINT frase

frase= RTrim$(frase)
PRINT frase

---código---

Es interesante como podemos manejar la entrada de información y adaptarla
para que nuestro programa nos muestre el resultado que queremos.

Substituir una palabra,una letra dentro de una variable de cadena.

Si queremos realizar esta función debemos usar:

Replace$(Cadena,patrón,remplazo)

Hay situaciones que no necesitamos una asignación de una variable,simplemente
usamos la función para que nos muestre un resultado y no almacenamos
la operación en una variable. Esto es según os convenga hacer.

En este caso no usaremos una variable, solo una cadena de texto
que está dentro de las “”

PRINT Replace$(“como poco coco como poco coco compro”,”o”,”e”)

OJO - Cuidado al copiar y pegar en el editor con las comillas. :-)
Fijaros que no son “” lo que sale a veces al pegar en el editor

Retocar si hace falta en el editor de Gambas.

Cambiar de mayúsculas a minúsculas o viceversa.

A veces necesitamos convertir el contenido de la variable de cadena a mayúsculas
o minúsculas.

---código---
DIM palabra as STRING

palabra=”Aplicación en Basic”
PRINT palabra

PRINT 'Dejamos un espacio

palabra=UCase$(palabra) 'Convertimos a mayúsculas
PRINT palabra

PRINT 'Dejamos un espacio

'Ahora convertimos a minúsculas
palabra=LCase$(palabra)
PRINT palabra

---código---

Para una búsqueda de una palabra y nos indique su lugar.

Hay veces que nos interesa saber si en el contenido de una variable de cadena,
existe una palabra determinada, un carácter,etc. O también su lugar de comienzo.

Usaremos la función:

InStr(cadena,subcadena,posición de comienzo de búsqueda)

No siempre tenemos que especificar desde donde buscar,
en otros caso, si. Por si la palabra se repite y no te interesa
ese lugar de comienzo.

---código----

PRINT InStr(“basic basico”,”bas”)

Nos mostrara el lugar de la primera coincidencia donde se encuentra la palabra “bas”
Pero y si queremos que nos muestre otro lugar. Debemos especificar en la
instrucción una posición.

Existe también otra función que en vez de comenzar la búsqueda por la izquierda
la realiza por la derecha.

RinStr(cadena,subcadena,inicio)

Ambas funciones se complementan con el uso de bucles y las
funciones Left$,Right$ y MID$.

Para añadir espacios

Con esta función obtendremos un número de espacios en una cadena.

variable_de_cadena=Space$(n)

Donde n es el número de espacios que queremos.

jueves, 7 de junio de 2012

Manejo de cadenas


El manejo de las cadenas es fundamental en nuestros programas.
Ya sea para la búsqueda,la presentación,operaciones,etc.

Gambas nos da muchas posibilidades para trabajar con ellas.
Tenemos funciones que el propio lenguaje nos facilita.

Algunas funciones que podemos encontrar:

  • Saber la longitud de una cadena.
  • Presentar un texto desde el comienzo,de izquierda a derecha, derecha a izquierda.
  • Eliminar los espacios,ya sea por la izquierda o la derecha,todos los espacios.
  • Para dividir una cadena en un array de cadena.
  • Para cambiar una palabra por otra.
  • Para cambiar de mayúsculas a minúsculas o viceversa.
  • Para buscar una palabra y que nos diga en que lugar se encuentra. O que existe.
  • Para añadir espacios.

Hay muchas más.
Gambas nos da muchas posibilidades con las funciones propias que incluye.


Longitud de una cadena. Función LEN

Tiene mucho uso. Acompañado de un bucle FOR – NEXT
encontraremos muchas posibilidades para nuestro programa.

Averiguaremos la longitud con la función LEN(variable de cadena)


---código---
DIM cadena AS STRING

cadena=”candelabro”

PRINT LEN(cadena)

---código---

Presentar un texto. Funciones LEFT$,RIGHT$,MID$

Una manera de darnos cuenta de que un comando o función trabaja con cadenas
es que en la propia instrucción suele incluir el carácter “$”

Función LEFT$.

Esta funcione nos mostrara los caracteres de una cadena comenzando por
su izquierda.

---código---
DIM cadena AS STRING

cadena=”candelabro”

PRINT LEFT$(cadena,3)

---código---

Nos mostrara desde la izquierda, 3 caracteres que contienen la variable cadena

Con la aplicación de los bucles ganamos mucho trabajando con estas funciones.

Función RIGHT$

Es a la inversa de la anterior.

---código---
DIM cadena AS STRING

cadena=”candelabro”

PRINT RIGHT$(cadena,3)

---código---

Nos mostrara desde la derecha, 3 caracteres que contienen la variable cadena

Y la que creo que es la más potente.

Función MID$

Es una función capaz de comenzar desde un lugar de la cadena en concreto
y decirle cuantos caracteres queremos que nos muestre.


---código---
DIM cadena AS STRING

cadena=”candelabro”

PRINT MID$(cadena,3,1)

---código---

Con esto logramos decirle que queremos que nos muestre desde el comienzo de la cadena
por la izquierda, se situé en el carácter que ocupa el “lugar” 3 y nos muestre una cantidad
de caracteres. En este caso 1.

Ahora imaginar lo que podríamos hacer con bucles.

Ejemplo con LEFT$

---código---

DIM cadena AS STRING
DIM x as INTEGER

cadena=”escalera”

FOR x=1 TO LEN(cadena)
PRINT LEFT$(cadena,x)
NEXT

---código---


Ejemplo con RIGHT$

---código---
DIM cadena AS STRING
DIM x as INTEGER

cadena=”escalera”

FOR x=1 TO LEN(cadena)
PRINT RIGHTS(cadena,x)
NEXT
---código---

Probar a hacer el bucle FOR a que vaya de mayor a menor usando
estas dos funciones. ;-)

Y ahora MID$.

---código---
DIM cadena AS STRING
DIM x as INTEGER

cadena=”escalera”

FOR x=1 TO LEN(cadena)
PRINT MID$(cadena,x,1)
NEXT
---código---

Ahora viene lo peculiar. Como veis hemos mostrado una letra de una en una.
Y si quisiéramos mostrar una a una con una pausa como si escribiéramos
con una maquina de escribir. :-)

Tendremos que usar la instrucción WAIT para crear una pausa de x's milisegundos.

WAIT 0.1 'Añade 100 milisegundos de retraso
WAIT 0.5 'Añade 500 milisegundos de retraso.

Bien. En el caso de una instrucción PRINT , muestra algo por la consola.
Podemos mostrarla como si fuera una lista o detrás de otro con la ayuda
de “;”

PRINT “José ”;
PRINT “Luis”
También podemos hacer:

PRINT “José ”;”Luis”


Naturalmente queda mas presentable en un componente TextArea

Vamos al ejemplo. ;-)

---código---
DIM cadena AS STRING
DIM x as INTEGER

cadena=”Esto es un mensaje letra por letra.”

FOR x=1 TO LEN(cadena)
PRINT MID$(cadena,x,1);
WAIT 0.2 '
NEXT

---código---
Probar a cambiar el tiempo en wait. :-)

Continuara....

Os añado una aplicación para que veais ejemplos.



Ejemplo:


Mas información en:


miércoles, 6 de junio de 2012

PSeInt

Este programa permite el estudio de la programación a nivel de pseudocódigo.
Es lo mas parecido al lenguaje humano. No se necesita ningún lenguaje
en concreto.Solo este programa.

Entendiendo el pseudocódigo, seremos capaces de llevar nuestro "algoritmo"
a cualquier lenguaje que pretendamos aprender.

PSeInt

En la propia web, dispones del programa para diferentes sistemas operativos.
Vídeos explicativos y disponéis también de  imágenes del programa.

Este programa tiene su propio "interprete" con lo que veremos la salida
de nuestro programa en una consola.

Además permite la creación del "diagrama de flujo" de nuestro "algoritmo".

Ejemplos:




Es ideal para aprender y dar los primeros pasos.
En Youtube tenemos vídeos explicativos de aficionados que han hecho sus
programas y los han publicados en el.


Mas información en:

Algoritmo

Pseudocódigo

Bucles Anidados


Un bucle anidado es un bucle dentro de otro bucle. Así podemos tener varios
bucles anidados según lo que queramos hacer en nuestro programa.

Ejemplo: el caso de que quisiéramos crear todas las tablas de multiplicar del 1 al 10.

Tendríamos que hacer
1 x 1,1 x 2,1 x 3...1 x 10
2 x 1,2 x 2, 2 x 3...2 x 10
.
.
10 x 1,10 x 2,10 x 3.....10 x 10

El primer factor podría ser una variable que iría cambiando 1 al 10
y el segundo seria otra variable que iría cambiando del 1 al 10.

Con eso sabemos que tenemos las variables: factor1,factor2.
Con estas dos variables tenemos las suficientes para nuestro programa.
Podíamos tener una tercera para el resultado, pero no es realmente necesaria.
Usaremos el tipo de bucle que queramos,conociendo como es.

Definimos las variables:

Tipo entero: factor1,factor2

Para factor1 repetir de 1 hasta 10
        Para factor2 repetir de 1 hasta 10
                 Mostrar factor1 & “ * “ & factor2 & “ = “ & (factor1 * factor2)
        Fin Para
Fin Para

Un ejemplo típico de uso de los bucles anidados es con el uso de un array de varias
dimensiones. Si tuviéramos una pizarra en la que vamos a dibujar un punto, necesitaríamos
saber dos coordenadas. La x y la y. Si tuviéramos almacenados en un array estas coordenadas
tal que así:

coordenadas(x,y)

Para leer todas los datos del array coordenadas lo mas aconsejable es usar dos bucles.
Uno dentro del otro. Anidados

Así iríamos leyendo:

coordenadas(0,0),coordenadas(0,1),coordenadas(0,2)....
coordenadas(1,0),coordenadas(1,1),coordenadas(1,2)...
.
.
coordenadas(x,y)

Hasta llegar al ultimo valor almacenado en el array.

Podemos crear una rejilla. Para el uso de gráficas es fundamental.

Bien. Cuando queremos comentar algo en un programa Gambas usamos el símbolo “ ' “
Así una linea de comentario tendría una aspecto como esto.

' Esto es un ejemplo de comentario

En este código fuente que os pongo ahora. Veréis que en FORM_OPEN()
existen lineas comentadas. Cada linea llama a un procedimiento que ejecuta
un tipo distinto de bucle anidado. Como me interesa ver el resultado de uno
de ellos. Comento el resto y dejo solo uno para que se ejecute.

---código---

'Ejemplos de bucles anidados


Public Sub _new()

End

Public Sub Form_Open()

'bucle_repeat
'bucle_while
bucle_for 'Este es el que se ejecuta
'bucle_for_each

End

Public Sub bucle_for()

Dim a As Integer
Dim b As Integer

For a = 1 To 10 'Repetir de una a diez veces
      For b = 1 To 10 'Repetir de una a diez veces
            Print a & " * " & b & " = " & (a * b)
      Next
      Print 'Para dejar un espacio en blanco
Next

End

Public Sub bucle_dowhile()

Dim a As Integer
Dim b As Integer
a = 1
b = 1

Do While a <= 10 'Hacer mientras a sea mayor o igual a 10
      Do While b <= 10 'Hacer mientras a sea mayor o igual a 10
            Print a & " * " & b & " = " & (a * b)
            b = b + 1
      Loop
      Print
      b = 1
      a = a + 1
Loop

End

Public Sub bucle_repeat()

Dim a As Integer
Dim b As Integer
a = 1
b = 1

Repeat 'Repetir
      Repeat 'Repetir
             Print a & " * " & b & " = " & (a * b)
             a = a + 1
      Until (a > 10) 'Hasta que a sea mayor a 10
      Print 'Para dejar un espacio en blanco
      a = 1
      b = b + 1
Until (b > 10) 'Hasta que b sea mayor a 10

End

Public Sub bucle_for_each()

Dim tabla As Integer[] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Dim a, b As Integer

For Each a In tabla ' Por cada numero entero en la tabla
       For Each b In tabla
             Print a & " * " & b & " = " & (a * b)
       Next
       Print 'Para dejar un espacio en blanco
Next

End

---código---

Aquí tenéis un ejemplo de la creación de una rejilla.
Puedes hacer click en las celdas que la forman.




Ejemplo de rejilla

martes, 5 de junio de 2012

Letra del NIF Español

Esta pequeña aplicación os calculara la letra que corresponde a vuestro
documento nacional de identidad. Es muy sencilla.



Letra del NIF

Otros dibujos

Otros dibujos hechos en un DrawingArea.









Si os gusta hacer graficas, el componente es perfecto. ;-)

Dibujos

Los Bucles

Utilizamos los bucles para repetir un grupo de instrucciones.
Tenemos diferentes bucles.

  • Bucle For - Next
  • Bucle Do While - Loop . Existe una variación. While - Wend
  • Bucle Repeat - Until

Existe un cuarto tipo de bucle, que usamos con listas de valores de variables o
con objetos.

       Bucle For Each - Next

Cada bucle contiene una variable que le indica cuando debe acabar 
el bucle o se ejecute este, mientras se cumpla una condición.

Con el bucle For – Next conocemos las veces que se va ejecutar.

Ejemplo:

Vamos a realizar una serie de tablas de multiplicar con diferentes bucles.

---código----
Public Sub Form_Open()
Dim seleccion As String
Repeat
   Print "Selecciona el tipo de bucle:"
   Print "1 - Bucle Do..While"
   Print "2 - Bucle For"
   Input seleccion
   Select Case seleccion
       Case "1"
            Bucle_DoWhile
       Case "2"
            Bucle_For
        Case Else
            Print "No existe esa opción"
    End Select
Until (seleccion = "1") Or (seleccion = "2") 

'Comprobamos la condición al final
'Utilice variable de cadena en vez de número para que no hubiera 
'error con el tipo introducido por teclado. En caso de número o cadena.
'Una cadena puede parecer un número. "1"

End

Public Sub Bucle_For()

Dim x As Integer
Dim tabladel As Integer

tabladel = 2
For x = 1 To 10
      Print x & " * " & tabladel & " = " & (x * tabladel)
Next

End

Public Sub Bucle_DoWhile()

Dim x As Integer
Dim tabladel As Integer

x = 1
tabladel = 3

Do While x <= 10 ' Comprobamos la condición al principio.
       Print x & " * " & tabladel & " = " & (x * tabladel)
       x = x + 1
       'Incrementamos el contador de bucle en 1.
       'Si no fuese así, entraríamos en bucle infinito y colgaríamos el programa
       'ya que siempre se cumpliría la condición del principio.
       'X sería menor de 10 siempre.
Loop

End
---código---

Bien. El programa presenta un menú en la parte de consola. 
Y te da a escoger que bucle quieres ejecutar.

El primer bucle que nos encontramos es “Repeat”.”Repetir”
Con este bucle sabemos que se va ejecutar al menos “una vez” ya que la condición del bucle esta al final.

El uso de Repeat en este lugar esta hecho con la idea de que si se elige una opción  diferente a 1,2 .Se volverá a presentar la opción de que podamos ejecutar la opción 1 y 2, mostrando una vez mas el menú

Until le dice hasta..hasta que la selección sea 1 o 2. Hemos vuelto a usar
un operador lógico. El operador “OR”.El cual le dice, que una de las dos opciones es valida.

En este bucle repeat no hay un número de veces especificadas para que se ejecute. Solo le dice hasta que se cumpla algo.

Vamos con el siguiente:

Bucle Do While - Loop

La primera opción es Do While. “Hacer mientras” se cumpla una condición.

A la variable tabladel le hemos “asignado” un número para que nos diga
la tabla de multiplicar de ese número.


“Hacer mientras que x sea menor o igual a 10.”
Do While x<=10

x nos vale para incrementarla y una vez llega 10 nuestro bucle termina.

He usado x=x+1

Podía haber usado la instrucción INC x .La cual “nos incrementa” x en uno
Siempre incrementara el valor que tenga x en uno hasta cumplir la condición
del bucle.

Como veis, la condición de esta bucle esta al principio. Así que puede ejecutarse o no, depende de su condición.

Se podría decir que recuerda a una “instrucción condicional“ con el añadido de
la repetición.

La variable x actúa como variable de control del bucle. Sin ella nuestro bucle
se ejecutaría hasta el infinito y podríamos perder el control de nuestro programa.

Loop marca el final del bucle.


Bucle For – Next.

En este bucle sabemos de principio a fin que se va ejecutar un numero determinado de veces.

Desde 1 hasta 10.

For x=1 TO 10

x ira almacenando los valores de 1 hasta 10.Cuando llega a 11 sale del bucle.
Si, la x en vez de valer 10 y salir, la variable continua teniendo un valor después
de la ejecución del bucle y su valor es x+1

Hacer la prueba. Después del NEXT
añadir:

PRINT x

El bucle FOR tiene dos características interesantes:

Imagina que queremos que el bucle se ejecute de dos en dos, de tres en tres, etc.
Para eso usamos la instrucción STEP

---código---
DIM x As Integer

FOR x=1 TO 10 STEP 2
PRINT x
NEXT

---código---
Mostrara 1,3,5...9

Podemos hacerlo al revés,que nos cuente de mayor a menor.

---código----
DIM x As Integer

FOR x=10 To 1 STEP -2
PRINT x
NEXT
---código---

Hemos hecho que vaya de 10 a 0 y hemos añadido en STEP el valor -2.
Para que los incrementos sean negativos.

Pregunta.¿ Que bucle debemos usar en nuestro programa ?.
Dependerá de la condición que quieras que haga tu programa.


Para mas información sobre bucles: