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.




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: