Las estructuras en Octave
En la lección de hoy, vamos a desentrañar el uso de las estructuras en Octave, todo ello aderezado con ejemplos de aplicación real.
Primero, pongamos las cartas sobre la mesa: ¿Qué son las estructuras? Las estructuras, o arrays de estructuras, guardan cierto parecido con los arrays. No obstante, una de las grandes virtudes de las estructuras es su capacidad para almacenar datos de diversas naturalezas de forma simultánea, organizándolos en campos. Cada campo ostenta un nombre distintivo. Para ejemplificar, podríamos pensar en una estructura como una agenda telefónica.
Cómo crear una estructura
Vamos a construir una estructura para custodiar una agenda telefónica.
Llamaremos a la estructura "agenda". El primer campo de la estructura será el "nombre" de la persona.
>> agenda.nombre="Paul Red";
El segundo integrante de nuestra estructura será el "número de teléfono" del individuo.
>> agenda.telefono=123456789;
Si fuera necesario, los datos de un campo pueden componer un array.
>> agenda(1).telefono=[123456789, 987654321]
Como tercer elemento de la estructura, vamos a incluir la dirección de la persona.
>> agenda.direccion="Roma";
Otra opción es dar vida a una nueva estructura añadiendo todos los campos de golpe, mediante la función struct().
>> agenda = struct('nombre','Paul Red','telefono',123456789, 'direccion', 'Roma')
Acabas de crear una estructura (directorio) con un registro y tres campos (nombre, teléfono, dirección).
Importante recordar: los campos albergan diferentes tipos de datos. Dos de ellos son alfanuméricos (nombre y dirección) y uno numérico (teléfono).
Si te apetece, también puedes crear una nueva estructura albergando varios campos y datos en su interior.
En este caso, es importante que anotes los nombres de los campos únicamente una vez y que alojes los datos de un campo entre llaves.
C = struct('lección',{'Matemáticas', 'Latín', 'Ciencia'},'calificación',{27,30,18})
Cómo mostrar los campos de una estructura
Si quieres visualizar la lista de campos que integran la estructura, puedes valerte de la función fieldnames().
>> fieldnames(agenda)
ans =
{
[1,1] = nombre
[2,1] = telefono
[3,1] = direccion
}
En una estructura, todos los registros presentan la misma cantidad y nomenclatura de campos.
En este caso, nuestra estructura alberga tres campos: nombre, teléfono y dirección.
Cómo añadir datos a una estructura
La estructura te permite incorporar más registros.
Por ejemplo, si deseas añadir un segundo registro, basta con que utilices el nombre de la estructura seguido del número de índice entre paréntesis.
>> agenda(2).nombre="Mario Blanco";
>> agenda(2).telefono=987654321;
Ahora nuestra estructura cuenta con dos registros.
Al añadir un registro a la estructura, no estás obligado a rellenar todos los campos. Puedes optar por dejar algunos en blanco.
Por ejemplo, en el segundo registro de la estructura, puedes optar por no documentar nada en el campo de la dirección.
>> agenda(2)
ans =
scalar structure containing the fields:
nombre = Mario Blanco
telefono = 987654321
direccion = [](0x0)
Por otro lado, también puedes añadir un nuevo registro introduciendo todos los campos a la vez usando la función struct().
>> agenda(3) = struct('nombre','José Verde','telefono',123456789, 'direccion', 'Milán')
Cómo acceder a los datos de la estructura
Para acceder a un elemento de datos dentro de una estructura, lo que necesitas es escribir el nombre de la estructura seguido del índice entre paréntesis, añadir un punto y, finalmente, el nombre del campo que te interesa.
Por ejemplo, para acceder al número de teléfono del primer registro en la estructura, simplemente teclea agenda(1).telefono.
>> agenda(1).telefono
ans = 123456789
Si quieres visualizar el número de teléfono del segundo registro, teclea agenda(2).telefono
>> agenda(2).telefono
ans = 987654321
Para visualizar todos los datos en el campo del número de teléfono, teclea agenda.telefono
>> agenda.telefono
ans = 123456789
ans = 987654321
Si lo que buscas es mostrar todos los datos de un registro específico, teclea agenda(1)
>> agenda(1)
ans =
scalar structure containing the fields:
nombre = Paul Red
telefono = 123456789 987654321
direccion = Roma
Cómo eliminar un campo de una estructura
Para deshacerte de un campo de la estructura, necesitas recurrir a la función rmfield().
Por ejemplo, si decides añadir un nuevo campo a la estructura, ésta pasará a tener cuatro campos.
>> agenda(2).prueba="prueba";
La estructura cuenta ahora con cuatro campos.
>> fieldnames(agenda)
ans =
{
[1,1] = nombre
[2,1] = telefono
[3,1] = direccion
[4,1] = prueba
}
Para eliminar el campo "prueba", teclea rmfield(agenda,"prueba")
>> agenda=rmfield(agenda,"prueba");
El campo "prueba" ha sido erradicado de la estructura.
>> fieldnames(agenda)
ans =
{
[1,1] = nombre
[2,1] = telefono
[3,1] = direccion
}
Ahora, con toda esta información a tu disposición, estás preparado para sumergirte en el trabajo con estructuras en Octave.