-->

Menú principal

viernes, 28 de octubre de 2016

TIC 2º BCH: TEMA 1.- Estructuras de almacenamiento de datos: arrays, ..

TEMA 1.- Estructuras de almacenamiento de datos: arrays, ..

 ÍNDICE

1.- Introducción a las estructuras de datos
2.- Arrays unidimensionales: Los vectores
3.- Operaciones con vectores o arrays
   3.1.- Asignación
   3.2.- Lectura/escritura de datos
   3.3.- Acceso secuencial al vector (recorrido)
   3.4.- Actualización de un vector
4.- Arrays de varias dimensiones
   4.1.- Arrays bidimensionales (tablas/matrices)
5.- Arrays multidimensionales


1.- INTRODUCCIÓN A LAS ESTRUCTURAS DE DATOS

Un array (matriz, tabla, arreglo) es una secuencia de posiciones de memoria central al las que se puede acceder directamente, que contiene datos del mismo tipo y pueden ser seleccionados individualmente mediante el uso de subíndices. Este capítulo estudia el concepto de arrays unidimensionales y multidimensionales, así como el procesamiento de los mismos.

Una estructura de datos es una colección de datos que pueden ser caracterizados por su organización y las operaciones que definen en ella. Las estructuras de datos son muy importante en los sistemas informáticos. Los tipos de datos más frecuentes utilizados en los diferentes lenguajes de programación son:

Los tipos de datos simples o primitivos significan que no están compuestos de otras estructuras de datos, los más frecuentes y utilizados por casi todos los
lenguajes son: enteros, reales y carácter. (char). Los tipos de datos compuestos
están construidos basados en tipos de datos primitivos; el ejemplo mas representativo es la cadena (string)de caracteres. Los tipos de datos simples
pueden ser organizados en diferentes estructuras de datos: estáticas y  dinámicas.

Las estructuras estáticas son aquellas en las que el tamaño ocupado en memoria se define antes de que el programa se ejecute y no puede modificarse dicho tamaño durante la ejecución del programa. Estas estructuras están implementadas en casi todos los lenguajes; array (vectores / tablas-matrices),registros, ficheros.

Las estructuras de datos dinámicas no tienen las limitaciones o restricciones en el tamaño de memoria ocupada que son propias de las estructuras estáticas.
Mediante el uso de un tipo de datos específico, denominado puntero, es posible
consumir estructuras de datos dinámicas que son soportadas por la mayoría de los lenguajes, y en aquellos que sí tienen esas características ofrecen soluciones
eficaces y efectivas en la solución de problemas complejos. La estructura dinámica por excelencia son las listas – enlazadas, pilas, colas - , árboles – binarios, árbol-b, de búsqueda binaria – y grafos.

Una característica importante que diferencia a los tipos de datos es la siguiente:
los tipos de datos simples tienen como característica común que cada variable
representa a un elemento; los tipos de los datos estructurados tienen como
característica común que un identificador (nombre) puede representar múltiples
datos individuales, pudiendo cada uno de éstos ser referenciado
independientemente.

2. ARRAYS UNIDIMENSIONALES: LOS VECTORES

Un array (matriz o vector) es un conjunto finito y ordenado de elementos homogéneos. La propiedad “ordenado” significa que el elemento primero, segundo, tercero,..., enésimo de un array puede ser identificado. Los elementos de un array son homogéneos, es decir, del mismo tipo de datos. Un array puede ser compuesto de todos sus elemento de tipo entero, etc.

Los arrays se conocen también como matrices – en matemática – y tablas – en cálculos financieros. El tipo mas simple de array es el array unidimensional o vector (matriz de dimensión). Un vector de una dimensión denominado NOTAS que consta de n elementos se puede representar por la Figura.

El subíndice o índice de un elemento (1, 2, ..., i, n) designa su posición en la ordenación del vector. Otras posibles notaciones del vector son:

     a1, a2,......ai ,.......an           A(1) , A(2), ......., A(i), ......A(n)

como ejemplo de un vector o array unidimensional, se puede considerar el vector TEMPERATURA, que contiene las temperaturas diarios registradas en una ciudad durante los días del mes. Este vector constará de 31 elementos de tipo real ya que las temperaturas normalmente no serán enteras siempre. Si consideramos las temperaturas máxima y mínima del día tendremos una matriz bidimensional, y así sucesivamente.

 El número de elementos de un vector se denomina rango del vector. T(1,n) en este vector el rango es n. Los vectores, como ya se ha comentado, pueden contener datos no numérico, es decir, tipo “carácter”. Por ejemplo, los nombres de los alumnos de un curso.

Los vectores se almacenan en memoria central del ordenador en un orden adyacente. Así, un vector de cincuenta números denominado NUMEROS se
representa gráficamente por cincuenta posiciones de memoria sucesivas:


 Cada elemento de un vector se puede procesar como si fuese una variable simple al ocupar una posición de memoria. Así, NUMEROS [25] ! 72 almacena el valor entero real 72 el la posición 25a del vector NUMEROS y la instrucción de salida:

escribir (NUMERO [25] )

visualiza el valor almacenado en la posición 25a , en este caso 72.

Esta propiedad significa que cada elemento de un vector —y posteriormente una tabla o matriz —es accesible directamente. Ésta será una de las ventajas mas importantes de usar un vector: almacenar un conjunto de datos. Consideremos un vector x de ochoe elementos:


Puedes descargar la ficha1 en formato pdf en este enlace. Puedes ver una captura de la ficha en la imagen siguiente:


A continuación puedes descargar la ficha 2 en formato pdf con la segunda parte del tema. Puedes ver una captura de la ficha 2 en la siguiente imagen.


Vamos a seguir este Blog para realizar un curso completo de programación en Gambas3:

Un curso para iniciarse en la programación visual, en gnu/linux, usando un lenguaje fácil pero potente.

TIC 2º BACHILLERATO. Contenidos según la LOMCE

CONTENIDOS TIC II 2º Bachillerato (Lomce 16-17)

Bloque 1. Programación

> Tema 1.­ Estructuras de almacenamiento de datos: arrays, ..

> Tema 2.­ Introducción a las bases de datos. Modelo entidad­-relación. SQLite.

> Tema 3.­ Introducción a la programación.

> Tema 4.Elementos de un programa: datos, variables, funciones básicas, bucles, funciones condicionales, operaciones aritméticas y lógicas.

> Tema 5.­ Algoritmos y estructuras de resolución de problemas.

> Tema 6.­ Programación en distintos lenguajes: Visual Basic, Gambas.

> Tema 7.­ Diseño de aplicaciones móviles para uso en diversos dispositivos móviles.

> Tema 8.­ Depuración, compilación y ejecución de programas.

Bloque 2. Publicación y difusión de contenidos.

>Tema 9.­ La web social: evolución, características y herramientas disponibles.
Situación actual y tendencias de futuro.

>Tema 10.­ Plataformas de trabajo colaborativo: herramientas síncronas y
asíncronas.

>Tema 11.­ Herramientas de creación y publicación de contenidos en la web
(páginas web, blogs, wikis).

>Tema 12.­ Nuevas tecnologías y su desarrollo futuro para su aplicación en el
entorno de trabajos colaborativos. Realidad aumentada, Internet de las Cosas
(IoT).

Bloque 3. Seguridad

> Tema 13.­ Definición de seguridad activa y pasiva.

> Tema 14.­ Seguridad activa: uso de contraseñas seguras, encriptación de datos y uso de software de seguridad.

>Tema 15.­ Seguridad pasiva: dispositivos físicos de protección, elaboración de
copias de seguridad y particiones del disco duro.

> Tema 16.­ Riesgos en el uso de equipos informáticos. Tipos de malware.

> Tema 17.­ Instalación y uso de programas antimalware.

Creación de una aplicación en Gambas3 para gestión de calificaciones con SQLite

Este es un ejemplo para el desarrollo de una aplicación de gestión de notas de alumnos utilizando el entorno de programación de Gambas 3.9.90 con base de datos SQlite, en un equipo con Ubuntu 16.04 LTS.


El entorno de programación de Gambas se ha convertido en un auténtico heredero del popular entorno de Visual Basic 6.0 y una delicia para los programadores que trabajan y conocen sus entresijos, ya que no solo emula a Visual Basic 6.0 sino que lo mejora en muchos aspectos.

Gambas solo funciona en sistemas operativos Linux, aunque muchos buscan formas alternativas para ejecutar Gambas en Windows con máquinas virtuales como VirtualBox y otros similares, que en mi opinión todavía no dan la talla, ya que presentan problemas de lentitud y son engorrosas de implementar.

Lo mejor es trabajar en un entorno Linux con Gambas directamente, para obtener la máxima eficacia y rendimiento.

Este artículo está dirigido al alumnado que se inicia en la programación de aplicaciones sencillas en la asignatura de Tecnologías de la Información y la Comunicación (TIC), aunque puede servir a cualquiera que se inicie en el tema.

Por tanto, veremos este ejemplo desde un enfoque didáctico, haciendo hincapié en los conceptos fundamentales de la programación y de los contenidos relacionados con esta asignatura.

Para el desarrollo de nuestra aplicación vamos a seguir dos manuales sencillos:

- Manual paso a paso de Gambas:  Donde se describe paso a paso el desarrollo de una aplicación para Listín de datos.

- Bases de datos SQLite desde Gambas3: Donde nos describe como crear una sencilla aplicación con acceso a una base de datos creada con SQLite.

El primer paso es la instalación de la aplicación gambas desde el gestor de software de sistema Linux:


Una vez instalada la última versión de gambas, procedemos a la instalación de los complementos de Bases de datos para Gambas, entre ellos SQLite, en el caso de que no se hayan instalado al instalar Gambas.

También podemos descargar dos programas de gestión de bases de datos Sqlite como DB Browser for SQLite y SQLiteman:



Pero la opción que más recomiendo para gestionar bases de datos Sqlite es el complemento del navegador Firefox llamado "SQLite Manager", que se instala fácilmente desde el gestor de complementos del navegador.



1.- ESTRUCTURAS DE DATOS:

En Gambas como en la mayoría de los lenguajes de programación, los datos se definen utilizando un estructura determinada para cada tipo de dato. En nuestro ejemplo tenemos que definir los siguientes datos:

Public Struct alumno ' ejemplo de estructura


  Id As Integer ' id: identificador del alumno variable tipo numero entero

  Nombre As String ' nombre: variable donde guardaremos el nombre del alumno

  Apellidos As String' apellidos: variable donde guardaremos los apellidos del alumno

 Centro as String   'Nombre del centro de enseñanza
 Curso As String ' Identificación del curso que que realiza el alumnos (3ºESO,2º BCH,..)
 Asignatura as String  'Asignatura que se está evaluando.
 Actividad as String   'Nombre de la actividad que se califica, ej: Exámen Tema 7
 Fechaentrega as Date  'Variable con la fecha de entrega  realización de la prueba.
 Nota as numeric   'Variable con la nota en formato numérico
 promedio_notas As Float 'variable con el promedio de las notas que tenga el alumno
 Obser as String     'Una variable para guardar las observaciones que creamos necesarias.


End Struct

En este ejemplo hemos definido los datos tipo texto como String, los datos numéricos se pueden definir con entero corto, entero largo o de coma flotante y los datos de tipo fecha como Date.

También existen otros tipos de datos como arrays, que son matrices o vectores, donde se almacena valores de tablas y booleanos que son datos del tipo verdadero o falso.

- Primer paso: creación del formulario en Gambas3



Creamos el formulario con los campos definidos en la estructura de datos. El formulario va a contener además un Grisview para visualizar los registros de la tabla.

- Segundo paso: selección del fichero de base de datos

Vamos a utilizar una base de datos sqlite3. Crearemos una opción de menú para seleccionar una ubicación distinta del fichero de base datos. Con la combinación de teclas Ctrl+E abrimos el editor de menús:

 Creamos dentro del menú opciones un item que llamamos "Selección de la Bases de datos", en la que añadimos el siguientes código.

Public Sub Menu_SelectBD_Click()
  ' Inicializar valores
  Dialog.Path = User.Home
  DirViewBD.Root = Dialog.Path
  FileViewBD.Dir = DirViewBD.Current
  FrameSelecBD.visible = True
  FrameSelecBD.Enabled = True
End

 
     En este código activamos y hacemos visible el marco "FrameSelecBD" que contiene los controles Dirview y Fileview.
     En la parte de la derecha he incluido el frame en fondo naranja que incluye los dos controles: DirviewBD y un FileviewBD, que nos van a servir para seleccionar una base de datos, en caso de que no se haya definido al abrir el formulario o que se haya cambiado o movido de directorio.


El código que contienen estos controles es el siguiente:

Public Sub DirViewBD_Click()
  rutaBD = DirViewBD.Current
  FileViewBD.Dir = DirViewBD.Current
End


Public Sub FileViewBD_Click()
  rutaBD = FileViewBD.Current
  'Message(rutaBD)
End


Al hacer clic en el DirViewBD ponemos en la varible rutaBD el directorio seleccionado, y actualizamos en directorio en el control FileViewBD. Cuando hacemos clic en el control FileViewBD actualizamos la variable ruta con la ruta del fichero de base de datos seleccionado.

En el frame colocamos dos botones: El botón seleccionar y cancelar con el siguiente código:

Public Sub Boton_AceptarBD_Click()
  rutaBD = DirViewBD.Current & "/" & FileViewBD.Current
  'Message(rutaBD)
  Conexion = New Connection
  Conexion.Type = "sqlite3"
  Conexion.Host = DirViewBD.Current
  Conexion.Name = FileViewBD.Current
  Try Conexion.Open()
  If Error Then
    Message.Error("Error al conectar a la base de datos.")
    Conexion = Null
  Else
    TablaNotas = Conexion.Exec("Select * from Notas")
    If TablaNotas.Available Then MostrarCampos
    TextAreaMensaje.Text = "Conexión establecida con Base de datos: " & rutaBD
    'Message.info("Conexión establecida con Base de datos: " & rutaBD)
    FMain.Text = "CALIFICACIONES --->" & "  Ruta de la Base de datos: " & rutaBD
    FrameSelecBD.visible = False
    FrameSelecBD.Enabled = False
    definirGridviewDatos()
    rellenadatosGridview()
    Gridviewdatos.mode = Select.Single
  End If
End


En este botón abrimos la conexión y asignamos el tipo ("sqlite3"), la ruta del directorio y el nombre de la base de datos. Probamos la conexión, en caso de error enviamos un mensaje por pantalla y en caso de que conecte ejecutamos la sentencia SQL que nos carga los datos de la tabla notas. Después mostramos un mensaje en un texbox para nos informe de que se ha establecido conexión con la base de datos. Además ponemos la ruta de la base de datos en el texto de cabecera del formulario. Después ocultamos el marco de selección de la base de datos y rellenamos los datos del Gridview.

En el botón cancelar cerramos el frame de selección de base de datos sin hacer nada.

Public Sub Boton_CancelarBD_Click()
  FrameSelecBD.visible = False
  FrameSelecBD.Enabled = False
End


- Declaraciones de variables:

' Gambas class file

Public rutaBD As String
Private Conexion As Connection
Private TablaNotas As Result


- Código que se ejecuta a la apertura del formulario:

Public Sub Form_Open()
 Me.center()
 Conexion = New Connection
 Conexion.Type = "sqlite3"
 Conexion.Host = "/home/francisco/Datos"
 Conexion.Name = "Calificaciones.sqlite"
 Try Conexion.Open()
 If Error Then
    Message.Error("Error al conectar a la base de datos. Selecciones una BD")
    Conexion = Null

    Menu_SelectBD_Click()
 Else
    TablaNotas = Conexion.Exec("Select * from Notas")
    If TablaNotas.Available Then MostrarCampos
    definirGridviewDatos()
    rellenadatosGridview()
    Gridviewdatos.mode = Select.Single
 End If
 rutaBD = "/home/francisco/Datos" & "/" & "Calificaciones.sqlite"
 FMain.Text = FMain.Text & "  Ruta de la Base de datos: " & rutaBD
 TextAreaMensaje.Text = "Área de mensajes de la aplicación"
End


Vamos a introducir el código necesario para añadir un registro en la base de datos con el botón "Insertar":

Para añadir un registro seleccionamos en el menú de operaciones de la aplicación la opción de "Insertar":

Hay que poner el siguiente código para que se ejecute al hacer clic en Insertar:




Public Sub Boton_Insertar_Click()

  Dim VarResult As Result
 
  VarResult = Conexion.Create("Notas")
  VarResult["Nombre"] = textbox_Nombre.Text
  VarResult["Apellidos"] = textbox_apellidos.Text
  VarResult["Centro"] = ComboBox_Centro.Text
  VarResult["Curso"] = ComboBox_Curso.Text
  VarResult["Asignatura"] = ComboBox_Asignatura.Text
  VarResult["Actividad"] = ComboBox_Actividad.Text
  VarResult["Fecha"] = DateboxFecha.Value
  VarResult["Nota"] = ComboBox_Nota.Text
  VarResult["Obser"] = TextBox_Obser.Text
  VarResult.Update
  TablaNotas = Conexion.Exec("Select * from Notas")
  Boton_Ultimo_Click
  TextAreaMensaje.Text = "Se ha añadido el registro: " & TablaNotas["Id"] & " ---> " & textbox_Nombre.Text & " " & textbox_apellidos.Text
 
  Boton_Insertar.Enabled = False
  Boton_Modificar.Enabled = False
  Boton_Primero.Enabled = True
  Boton_Anterior.Enabled = True
  Boton_Siguiente.Enabled = True
  Boton_Ultimo.Enabled = True

End