Programación C: registros como estructuras de datos
La serie de artículos sobre programación en C se acerca al final, ya que con este artículo explicando las estructuras de datos tipo registros, y con otro más para los algoritmos de ordenamiento y búsqueda con apuntadores, se terminaría. Aunque eventualmente pueda publicar algo más complementando la serie de programación.
Por cierto, no debes confundir este tema con los famosos arreglos o arrays, aunque tienen algunas similitudes y son también un tipo de estructura de datos estática. Si no los recuerdas, puedes leer más sobre ellos en este enlace…
Registro
No pienses en un registro como algo físico, como las pequeñas memorias de los procesadores. En el caso de la programación se refiere a un tipo de estructuras de datos estáticas con una estructura y definidas que se emplean para poder almacenar datos diferentes en un asola variable.
Los datos almacenados pueden ser simples (caracteres, enteros, coma flotante, etc.) y también compuestos como los arreglos (vectores, listas, estructuras anidadas, etc.). Además, la estructura se debe definir antes de usarlas en la declaración de variables. Aunque hay varias formas de definir un registro, la más habitual, y la que recomiendo yo para evitar problemas, es:
/*Tipo de estructura de registro*/ struct identificador_registro { tipodato1 campo1, campo2, campo3; tipodato2 campo4, campo5, campo6; tipodato3 campo7, campo8, campo9; }; //Para su declaración se hace como cualquier otra identificador_registro identificador_variable;
Como ves, se usa struct seguido del nombre que le quieres dar al registro. Luego se crea la estructura con los diferentes tipos de datos y los campos. Por supuesto, lo anterior solo es un ejemplo genérico, podría haber más o menos tipos y más o menos campos. En cuanto a la declaración, como ves se puede hacer usando el nombre elegido para el registro seguido del identificador de la variable.
Además, debes saber que en C se puede dar un nuevo nombre a tipos de datos ya existentes, haciendo así el código fuente más intuitivo al identificarlos con un nombre representativo. Eso se consigue con typedef identificador_tipo identificador_tipo_nuevo;:
#include<stdio.h> #include<conio.h> typedef int entero; int main() { entero edad1,edad2; edad1=5; edad2=7; printf("Las edades son :%i y %i",edad1,edad2); getch(); return 0; }
Esto se puede combinar también con las estructuras tipo registro. Por ejemplo, en el siguiente ejemplo también se puede ver esto, y cómo se podrían asignar valores a los campos del registro y cómo se podrían acceder a los valores asignados:
/*Comparador de precios de dos productos*/ #include<stdio.h> #include<conio.h> typedef struct { int codigo; char descripcion[41]; float precio; } tipo_producto; int main() { tipo_producto producto1,proproducto2; printf("Introduce el código del producto:"); scanf("%i",&producto1.codigo); fflush(stdin); printf("Introduce la descripción:"); gets(producto1.descripcion); printf("Introduce el precio:"); scanf("%f",&producto1.precio); printf("Introduce el código del producto:"); scanf("%i",&producto2.codigo); fflush(stdin); printf("Introduce la descripción:"); gets(producto2.descripcion); printf("Introduce el precio:"); scanf("%f",&producto2.precio); if (producto1.precio>producto2.precio) { printf("El producto %s es más caro",producto1.descripcion); } else { if (producto2.precio>producto1.precio) { printf("El producto %s es más caro",producto2.descripcion); } else { printf("El precio es igual"); } } getch(); return 0; }