Apúntate...


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

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

viernes, 24 de agosto de 2012

Funciones de Conversión tipos de datos

-->
En muchos programas necesitaremos convertir un tipo de dato a otro tipo. 

Gambas nos proporciona una serie de funciones que realizan distintos tipos de conversión:

Funciones de Conversión
CBool 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.
Sólo en versión 3.0
DConv$ Convierte una cadena del juego de caracteres del sistema a UTF-8 (juego de caracteres de la interfaz gráfica).
SConv$ Convierte una cadena desde el juego de caracteres UTF-8 (el empleado en la interfaz gráfica) al juego de caracteres del sistema.
Str$ Convierte un número o fecha en una cadena.
Val Convierte una cadena en un número o fecha.

Mas información:  http://gambasdoc.org/help/cat/conv?en&v3 y http://gambasdoc.org/help/cat/conv?es&v3

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 función de conversión
Print "Esto seria como un numero: ", numero

numero += 23 'le sumo al numero 23 unidades
Print "Y puedo realizar operaciones con el numero:", numero

Descarga del ejemplo completo: Enlace


Nota:
Añado aqui otro código, este hace uso de la orden Try (ver gestion de excepciones y errores )
Este código  "comprueba" que el usuario ha escrito un número 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 número, (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 función de conversión y de la instrucción 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

Descarga del código de ejemplo: enlace





jueves, 23 de agosto de 2012

Arreglos, Arrays, Vectores, Matrices


Arreglos de una dimension

Los arreglos de una dimensión, también 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 explicártelo... imagina el nombre de los alumnos de una clase, que lo tienes que poner en un programa. Podíamos 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....

Fíjate como quedaría:


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 veríamos el nombre del alumnos
print Alumno[2] -> equivale a ->print Alumno_tercero


Es un poco más fácil que usar nombre como _primero, _segundo, ¿verdad?

Además 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

Fíjate lo fácil 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 programación) 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[tamaño] ‘ para una dimension 

Para arreglos de varias dimensión (normalmente llamadas matrices):
Public/Private/Dim nombre AS New tipo_dato[tamaño1,tamaño2] ‘ para dos dimensiones,

Public/Private/Dim nombre AS New tipo_dato[tamaño1,tamaño2,tamaño3,....] ‘ 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).
Tamaño representa la cantidad de casillas que se reservan para el arreglo. En Gambas todos los arreglos empiezan en el subíndice 0 y llegan al subíndice tamaño-1.
Por ejemplo:
dim arr as new integer[6] ‘ arreglo de 6 elementos enteros, los subíndices 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 función 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]



Enlace a la documentación oficial:
http://gambaswiki.org/wiki/lang/arraydecl?l=es





Estructuras

Una estructura es :
  • Es una colección 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.

Las estructuras funcionan como clases (estás las veremos en más adelante), que solo tienen propiedades y el método NEW para crear nuevas instancias de ella.

La declaración 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 definición 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 imprimiría la información 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 función nos devuelva varios datos:
Es un programa que pide 5 artículos y su coste,  va sumando el valor de los artículos, 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 función:

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 función 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

Fíjate 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.

Enlace de descarga de los ejemplo: enlace





Para más información:
http://gambaswiki.org/wiki/lang/structdecl
http://gambaswiki.org/wiki/lang/new

A falta de donativos... un poco de publicidad