sábado, 12 de junio de 2021

P6-Estructuras

 Estructuras en C

Las estructuras son colecciones de variables relacionadas bajo un nombre.
Pueden contener variables de muchos tipos diferentes de datos

a diferencia de los arreglos que contienen únicamente elementos de un mismo
tipo de datos.

 Definición de estructuras

Las estructuras son tipos de datos derivados, están construidas utilizando
objetos de otros tipos. Considere la siguiente definición de estructura:


struct ejemplo {
char c;
int i;};


La palabra reservada struct indica se está definiendo una estructura. El
identificador ejemplo es el nombre de la estructura. Las variables declaradas
dentro de las llaves de la definición de estructura son los miembros de la estructura. Los miembros de la misma estructura deben tener nombres únicos
mientras que dos estructuras diferentes pueden tener miembros con el mismo
nombre. Cada definición de estructura debe terminar con un punto y coma.
La definición de struct ejemplo contiene un miembro de tipo char y otro
de tipo int. Los miembros de una estructura pueden ser variables de los tipos
de datos básicos (int, char, float,etc) o agregados como ser arreglos y otras
estructuras. Una estructura no puede contener una instancia de si misma.
Declaramos variables del tipo estructura del siguiente modo:
struct ejemplo e1, a[10];
o alternativamente sin usar la palabra struct:
ejemplo e1, a[10];
Las declaraciones anteriores declaran variables e1 de tipo ejemplo y a de tipo
arreglo de ejemplo de dimensión 10.
Se pueden declarar variables de tipo estructura ejemplo colocando sus nombres a continuación de la llave de cierre de la definición de estructura y el punto
y coma, en el caso anterior:
struct ejemplo {
char c;

int i;} e1, a[10];

 Una operación valida entre estructuras es asignar variables de estructura a
variables de estructura del mismo tipo. Las estructuras no pueden compararse entre si.

Estructuras Anidadas

Una estructura puede estar dentro de otra estructura a esto se le conoce como anidamiento o estructuras anidadas. Ya que se trabajan con datos en estructuras si definimos un tipo de dato en una estructura y necesitamos definir ese dato dentro de otra estructura solamente se llama el dato de la estructura anterior.

Ejemplo escrito:

    1. /*
    2.        estructura2.c
    3.          
    4.    Nombre Miembro Tipo
    5.  
    6.    Titulo char[30]
    7.    Artista char[25]
    8.    Precio float
    9.   Total Canciones int
    10.  */

    11. #include <stdio.h>
    12. #include <string.h>

    13. /* creamos nuestra estructura con datos similares */
    14. struct infopersona
    15. {
    16. char direccion[25];
    17. char ciudad[20];
    18. char provincia[20];
    19. long int codigo_postal;
    20. }; /* las estructuras necesitan punto y coma (;) al final */

    21. /* creamos nuestra estructura empleado */
    22. struct empleado
    23. {
    24. char nombre_empleado[25];
    25. /* agregamos la estructura infopersona
    26. * con nombre direcc_empleado
    27. */
    28. struct infopersona direcc_empleado; 
    29. double salario;
    30. }; /* las estructuras necesitan punto y coma (;) al final */

    31. /* creamos nuestra estructura cliente */
    32. struct cliente
    33. {
    34. char nombre_cliente[25];
    35. /* agregamos la estructura infopersona
    36.   con nombre direcc_cliente
    37. */
    38. struct infopersona direcc_cliente;
    39. double saldo;
    40. }; /* las estructuras necesitan punto y coma (;) al final */

    41. int main(void)
    42. {
    43. /* creamos un nuevo cliente  */
    44. struct cliente MiCliente;
    45. /*inicializamos un par de datos de Micliente */
    46. strcpy(MiCliente.nombre_cliente,"Alexis");
    47. strcpy(MiCliente.direcc_cliente.direccion, "Altos del Cielo");
    48. /* notese que se agrega direcc_cliente haciendo referencia 
    49.   a la estructura infopersona por el dato direccion
    50. */
    51. /* imprimimos los datos */
    52. printf("\n Cliente: ");
    53. printf("\n Nombre: %s", MiCliente.nombre_cliente);
    54. /* notese la forma de hacer referencia al dato */
    55. printf("\n Direccion: %s", MiCliente.direcc_cliente.direccion); 
    56. /* creamos un nuevo empleado  */
    57. struct empleado MiEmpleado;
    58. /*inicializamos un par de datos de MiEmplado */
    59. strcpy(MiEmpleado.nombre_empleado,"Alexis");
    60. strcpy(MiEmpleado.direcc_empleado.ciudad,"Nueva York");
    61. /* para hacer referencia a ciudad de la estructura infopersona
    62. * utilizamos direcc_empleado que es una estructura anidada
    63. */
    64. /* imprimimos los datos */
    65. printf("\n");
    66. printf("\n Empleado: ");
    67. printf("\n Nombre: %s", MiEmpleado.nombre_empleado);
    68. /* notese la forma de hacer referencia al dato */
    69. printf("\n Ciudad: %s", MiEmpleado.direcc_empleado.ciudad);
    70. return 0;
    71. }

Arreglos de estructuras 

struct trabajador

{

char nombre[20];

char apellidos[40];

int edad;

};

struct trabajador fijo[20];

Así podremos almacenar los datos de 20 trabajadores. Ejemplos sobre como acceder a los campos y sus elementos: para ver el nombre del cuarto trabajador, fijo[3].nombre;. Para ver la tercera letra del nombre del cuarto trabajador, fijo[3].nombre[2];. Para inicializar la variable en el momento de declararla lo haremos de esta manera:
struct trabajador fijo[20]={{"José","Herrero Martínez",29},{"Luis","García Sánchez",46}};
Typedef

Es posible agrupar un conjunto de elementos de tipo estructura en un array. Esto se conoce como array de estructuras: El lenguaje 'C' dispone de una declaración llamada typedef que permite la creación de nuevos tipos de datos. Ejemplos:
typedef int entero; /* acabamos de crear un tipo de dato llamado entero */
entero a, b=3; /* declaramos dos variables de este tipo */




No hay comentarios.:

Publicar un comentario

P6-Estructuras

 Estructuras en C Las estructuras son colecciones de variables relacionadas bajo un nombre. Pueden contener variables de muchos tipos difere...