UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA Lógica de Programación - 204022 DEFINICION Y DECLARACION DE ESTRUCTURAS Las estructuras están compuestas por una serie de componentes individuales llamados miembros, para hacerlo más grafico podemos decir que queremos ingresar datos de una persona como su nombre, apellido, dirección, salario, edad… cada miembro de la estructura es de dato diferente, una estructura no tiene restricciones para contener un número determinado de miembros, e inclusive podemos realizar estructuras que contengan otras estructuras. Veamos un ejemplo: Se desea llevar los datos de una colección de películas, para ello tenemos: Titulo, Protagonista Genero Precio Fecha de compra Para este ejemplo encontramos cinco miembros, ahora debemos deducir que tipo de datos contiene cada uno de ellos. Miembro Titulo Protagonista Genero Precio Fecha de compra Tipo Vector de 30 caracteres titulo [30] Vector de 30 caracteres prota [30] Vector de 10 caracteres genero [10] float Vector de 10 caracteres fecha [10] Si tenemos datos quedara así Miembro Titulo Protagonista Genero Precio Fecha de compra Dato Corto circuito Alambrito Acción 25.580 01/01/05 Bien pero como se declara en un programa, Sencillo 1 UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA Lógica de Programación - 204022 struct película { char titulo[30]; char prota[30]; char genero[10]; float precio; char fecha[10]; } Nombre; // variable que refiere a la estructura Lo mejor es hacerlo con la codificación real de un ejercicio, supongamos que deseamos llevar los datos de básicos de un empleado #include <iostream> using namespace std; struct registro { string nombre; int edad; float salario; } empleado; int main() { cout << "Digite su nombre: "; cin >> empleado.nombre; cout << "Digite su edad: "; cin >> empleado.edad; cout << "Digite su salario: "; cin >> empleado.salario; cout << "\n\nNombre: " << empleado.nombre << "\nSalario: $ " << empleado.salario; cout<< "\n Edad: " << empleado.edad << " años"; } Explicación 1. Creamos una estructura llamada registro con los miembros nombre, edad, salario. 2 UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA Lógica de Programación - 204022 2. Una variable empleado que de tipo registro 3. Observemos que cada vez que hacemos referencia a un miembro de la estructura lo hacemos a través de la variable (empleado), separándolo con un punto Otros ejemplos: Ahora bien definamos una estructura como el conjunto de variables que se referencian bajo el mismo nombre. La sintaxis de la declaración de una estructura en lenguaje C es: struct nombre_estructura { tipo nombre_variable; tipo nombre_variable; ... tipo nombre_variable; } variables_estructura; Algunas características esenciales son: el nombre de la estructura (nombre_estructura), no es obligatorio al momento de declararla los miembros de la estructura pueden tener distintos tipos de datos el nombre de la estructura y la variable de la estructura pueden tener el mismo nombre como se puede ver en algunos ejemplos es aconsejable evitar que el nombre de los miembros de la estructura y la variable_estructura sean iguales Veamos algunos ejemplos de declaración de estructuras: struct LISTA{ int tam; char cadena[50]; }var_lista; struct DATO{ int tam; float vector[3]; struct DATO *siguiente; }; 3 UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA Lógica de Programación - 204022 struct { float a,b; unsigned long i,j; char cadena[5]; }memo[10]; struct ALFA{ int a; float b; }; struct BETA{ struct ALFA alfa; float c,d; }variable; Para referenciar un elemento de una estructura se realiza de la siguiente forma: variables_estructura.nombre_variable; Así, podíamos referenciar los elementos de las estructuras anteriores de la siguiente forma: var_lista.tam; var_list.cadena; var_list.cadena[7]; memo[2].a; memo[6].cadena[3]; variable.alfa.a; variable.c; Un aspecto que es necesario aclarar es el paso de estructuras como parámetros a las funciones. A una función es posible pasarle un elemento de los que componen la estructura, una estructura entera, e incluso, un array de estructuras. En caso de pasarle un elemento de la estructura, el paso se hace siguiendo las reglas del tipo del cual sea ese elemento; en el caso de una estructura entera, C la pasa, a no ser que se le indique lo contrario, por valor, y en el caso de un array de estructuras, como todo array, lo pasara por "referencia". Conviene aclarar en este momento que si la estructura posee en su interior un array de elementos, la estructura puede ser pasada por valor a una función, pero el array será pasado 4 UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA UNAD ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA Lógica de Programación - 204022 siempre por referencia. En concreto a la función se le pasara por valor un puntero al primer elemento del array. Veamos todo esto en un ejemplo: PROGRAMACION EN FALCON C++ #include <iostream> #include <stdlib.h> using namespace std; const int Max=100; struct registro { char nombre[20]; int edad; float salario; } amigos[Max]; // permite almacenar máximo 100 datos para este caso int main() { int num_reg = 0, i; cout <<"Cuántos amigos desea introducir? (máximo " <<Max <<") "; cin >> num_reg; for (i=0;i<num_reg;++i) { cout << "Registro : " << i << "\n"; cout << " Salario: "; cin >> amigos[i].salario; cout << " Nombre : "; cin >> amigos[i].nombre; cout << " Edad : "; cin >> amigos[i].edad; } system("cls"); cout << "________________________\n"; for (i=0; i<num_reg; ++i) cout << i+1 << " " << amigos[i].nombre << " " << amigos[i].edad << " " << amigos[i].salario << endl; cout << "________________________\n"; } Es interesante a realizar la prueba de escritorio de este ejercicio 5