AnteriorPosterior

4.3. Estructuras o registros

  Curso: Programación en C# (2015), por Nacho Cabanes

4.3. Estructuras o registros

4.3.1. Definición y acceso a los datos

Un registro es una agrupación de datos, llamados campos, los cuales no necesariamente son del mismo tipo. Se definen con la palabra "struct".

En C# (al contrario que en C), primero deberemos declarar cual va a ser la estructura de nuestro registro, lo que no se puede hacer dentro de "Main". Más adelante, ya dentro de "Main", podremos declarar variables de ese nuevo tipo.

Los datos que forman un "struct" pueden ser públicos o privados. Por ahora, a nosotros nos interesará que sean accesibles desde el resto de nuestro programa, por lo que siempre les añadiremos delante la palabra "public" para indicar que queremos que sean públicos.

Ya desde el cuerpo del programa, para acceder a cada uno de los datos que forman el registro, tanto si queremos leer su valor como si queremos cambiarlo, se debe indicar el nombre de la variable y el del dato (o campo) separados por un punto:

// Ejemplo_04_03_01a.cs
// Registros (struct)
// Introducción a C#, por Nacho Cabanes
 
using System;
 
public class Ejemplo_04_03_01a
{
    struct tipoPersona
    {
        public string nombre;
        public char   inicial;
        public int    edad;
        public float  nota;
    } 
 
    public static void Main()
    {
        tipoPersona persona;
 
        persona.nombre = "quot;Juan";
        persona.inicial = 'J';
        persona.edad = 20;
        persona.nota = 7.5f;
        Console.WriteLine("La edad de {0} es {1}", 
            persona.nombre, persona.edad);
    }
}
 

Ejercicios propuestos:

Ejercicio propuesto 4.3.1.1: Crea un "struct" que almacene datos de una canción en formato MP3: Artista, Título, Duración (en segundos), Tamaño del fichero (en KB). Un programa debe pedir los datos de una canción al usuario, almacenarlos en dicho "struct" y después mostrarlos en pantalla.

4.3.2. Arrays de structs

Hemos guardado varios datos de una persona. Se pueden almacenar los de varias personas si combinamos el uso de los "struct" con las tablas (arrays) que vimos anteriormente. Por ejemplo, si queremos guardar los datos de 100 personas podríamos hacer:

// Ejemplo_04_03_02a.cs
// Array de struct
// Introducción a C#, por Nacho Cabanes
 
using System;
 
public class Ejemplo_04_03_02a
{
    struct tipoPersona
    {
        public string nombre;
        public char   inicial;
        public int    edad;
        public float  nota;
    } 
 
    public static void Main()
    {
        tipoPersona[] personas = new tipoPersona[100];
 
        personas[0].nombre = "Juan";
        personas[0].inicial = 'J';
        personas[0].edad = 20;
        personas[0].nota = 7.5f;
        Console.WriteLine("La edad de {0} es {1}", 
            personas[0].nombre, personas[0].edad);
 
        personas[1].nombre = "Pedro";
        Console.WriteLine("La edad de {0} es {1}", 
            personas[1].nombre, personas[1].edad);
    }
}
 

La inicial de la primera persona sería "personas[0].inicial", y la edad del último sería "personas[99].edad".

Al probar este programa obtenemos

La edad de Juan es 20
La edad de Pedro es 0
 

porque cuando reservamos espacio para los elementos de un "array" usando "new", sus valores se dejan "vacíos" (0 para los números, cadenas vacías para las cadenas de texto).

Ejercicios propuestos:

Ejercicio propuesto 4.3.2.1: Amplia el programa del ejercicio 4.3.1.1, para que almacene datos de hasta 100 canciones. Deberá tener un menú que permita las opciones: añadir una nueva canción, mostrar el título de todas las canciones, buscar la canción que contenga un cierto texto (en el artista o en el título).
Ejercicio propuesto 4.3.2.2: Crea un programa que permita guardar datos de "imágenes" (ficheros de ordenador que contengan fotografías o cualquier otro tipo de información gráfica). De cada imagen se debe guardar: nombre (texto), ancho en píxeles (por ejemplo 2000), alto en píxeles (por ejemplo, 3000), tamaño en Kb (por ejemplo 145,6). El programa debe ser capaz de almacenar hasta 700 imágenes (deberá avisar cuando su capacidad esté llena). Debe permitir las opciones: añadir una ficha nueva, ver todas las fichas (número y nombre de cada imagen), buscar la ficha que tenga un cierto nombre.

4.3.3. structs anidados

Podemos encontrarnos con un registro que tenga varios datos, y que a su vez ocurra que uno de esos datos esté formado por varios datos más sencillos. Por ejemplo, una fecha de nacimiento podría estar formada por día, mes y año. Para hacerlo desde C#, incluiríamos un "struct" dentro de otro, así:

// Ejemplo_04_03_03a.cs
// Registros anidados
// Introducción a C#, por Nacho Cabanes
 
using System;
 
public class Ejemplo_04_03_03a
{
    struct fechaNacimiento 
    {
        public int  dia;
        public int  mes;
        public int anyo;
    }
 
    struct tipoPersona
    {
        public string nombre;
        public char   inicial;
        public fechaNacimiento diaDeNacimiento;
        public float  nota;
    } 
 
    public static void Main()
    {
        tipoPersona persona;
 
        persona.nombre = "Juan";
        persona.inicial = 'J';
        persona.diaDeNacimiento.dia = 15;
        persona.diaDeNacimiento.mes = 9;
        persona.nota = 7.5f;
        Console.WriteLine("{0} nació en el mes {1}", 
            persona.nombre, persona.diaDeNacimiento.mes);
    }
}
 

Ejercicios propuestos:

Ejercicio propuesto 4.3.3.1: Amplia el programa 4.3.2.1, para que el campo "duración" se almacene como minutos y segundos, usando un "struct" anidado que contenga a su vez estos dos campos.

Actualizado el: 30-11-2014 01:42

AnteriorPosterior