Академический Документы
Профессиональный Документы
Культура Документы
ESTRUCTURAS
2001
Una estructura es un conjunto de una o mas variables, posiblemente de diferente tipo, agrupadas bajo un mismo nombre para hacer mas efectivo su manejo. En otros lenguajes las estructuras se conocen con el nombre de registros.
Definicin de Estructuras.Las estructuras son tipos de datos derivados, es decir, estn construidas utilizando otros tipos de datos, Considere la siguiente definicin de estructura:
La palabra reservada struct indica al compilador que se est definiendo una estructura, que no es mas que una lista de declaraciones encerradas entre llaves. El identificador fecha es el nombre de la estructura. Las variables declaradas dentro de las llaves de la definicin de la estructura son los miembros de la estructura ( conocidas en otros lenguajes como campos ). terminar con un punto y coma. La definicin anterior no reserva espacio de memoria, es decir, no se han declarado variables, sino que se ha generado un nuevo tipo de datos que se utilizar para declarar variables. Las variables de estructuras se declaran como se declaran las variables de otros tipos. Ejemplo: struct fecha fecha_nac, a[10]; La definicin de la estructura debe
68
Lenguaje C
2001
El enunciado anterior declara una variable fecha_nac como una estructura del tipo struct fecha, y declara un arreglo a con 10 elementos del tipo struct fecha. Las variables de un tipo dado de estructura pueden ser declaradas a la vez que se define la estructura como sigue:
struct fecha { int dia; int mes; int anno; }; fecha_nac, a[10];
El nombre de una estructura es opcional, aunque es una buena prctica de programacin asignarle un nombre. Si la definicin de la estructura no contiene nombre, las variables de este tipo de estructura, pueden ser declaradas nicamente en la definicin de la estructura y no en una declaracin por separado.
Inicializacin de Estructuras.Las estructuras pueden ser inicializadas mediante listas de inicializacin como los arreglos. Para inicializar una estructura, se escribe en la declaracin de la
estructura, despus del nombre de la variable un signo igual, con los inicializadores separados por comas, encerrados entre llaves. Ejemplo: struct fecha fecha_nac = { 24,07,1883 } Las variables de estructura tambin pueden ser incializadas en enunciados de asignacin, asignando valores a los miembros individuales de la misma.
Acceso a los miembros de una Estructura.Para accesar los miembros de una estructura se utilizan dos operadores: el operador de miembro de estructura u operador punto ( . ) y el operador de apuntador de estructura ( ) tambin conocido como el operador flecha.
69
Lenguaje C
Operador Punto.-
2001
El operador de miembro de estructura u operador punto, tiene acceso a un miembro de la estructura mediante el nombre de la variable de la estructura y el nombre del miembro de la estructura. Por ejemplo, el da de la estructura fecha_nac de la declaracin anterior sera: printf(El da de nacimiento es: %d, fecha_nac.dia); Operador Flecha.El operador de apuntador de estructura u operador flecha, que consiste de un signo menos ( - ) y de un signo mayor ( > ) sin espacios intermedios, tiene acceso a un miembro de estructura va apuntador a la estructura. Suponga que el apuntador
fecha_nacptr se ha declarado para apuntar a struct fecha, y que la direccin de la estructura fecha_nac ha sido asignada a fecha_nacptr. Para imprimir el miembro dia de la estructura fecha_nac utilizando el apuntador fecha_nacptr se utiliza: printf(El da de nacimiento es: %d, fecha_nacptr dia); La expresin fecha_nacptr dia, es equivalente a ( * fecha_nacptr).dia;
Typedef.La palabra reservada typedef proporciona un mecanismo para la creacin de sinnimos (o alias), para los tipos de datos anteriormente definidos. Los nombre de los tipos de estructura se definen a menudo utilizando typedef, a fin de crear nombres de tipos mas breves. Por ejemplo, el enunciado typedef struct fecha Fecha; define el nuevo nombre de tipo Fecha como un sinnimo para struct fecha. Los programadores en C a menudo utilizan typedef para definir un tipo de estructura de tal forma que el nombre de estructura no se requerido. Por ejemplo: typedef struct { int dia; int mes; int anno; } Fecha;
Guia Preparada por: .............................................................................................NEREYDA CARRERO MIRANDA
70
Lenguaje C
2001
La definicin anterior crea el tipo de estructura Fecha que puede ser utilizado para declarar estructuras de este tipo. La declaracin: Fecha b[10]; declara un arreglo b de 10 estructuras Fecha.
Una empresa tiene un registro de los datos de sus empleados donde almacena la siguiente informacin:
Cdula del empleado Apellidos y Nombres Edad Antigedad (en meses) Sueldo Base
La entidad desea un programa que permita almacenar los datos conocidos en un arreglo de estructuras y que emita un listado con el nuevo sueldo para los empleados beneficiados, si el mismo se calcular con base en el siguiente criterio: la empresa aumentar el sueldo en un 5% del sueldo base por cada tres aos exactos de antigedad. aumento. Los empleados con menos de tres aos de antigedad no recibirn
71
Lenguaje C
/* Programa de Emleados de una Empresa, con Estructuras */ # # # # include <stdio.h> include <conio.h> include <ctype.h> define MAX 20
2001
typedef struct { char ced[12], nom[35]; int edad, anti; float sueldo; } reg1; void almacenar(reg1 [], int*); void aumentar(reg1 [] ,int);
/* Definicin de la funcin almacenar, para cargar los datos */ void almacenar(reg1 x[ ],int *k) { int i; char resp; reg1 vartem; resp = 'S'; (*k) = 0; while (resp = = 'S' && *k < MAX) { clrscr( ); printf("INDIQUE LOS DATOS DEL EMPLEADO: \ n ");
Guia Preparada por: .............................................................................................NEREYDA CARRERO MIRANDA
72
Lenguaje C
printf("\ nCEDULA: "); fflush(stdin); gets(vartem.ced); printf("\ nAPELLIDO Y NOMBRE: "); gets(vartem.nom); printf("\ nEDAD: "); scanf("%d",&vartem.edad); printf("\ nANTIGUEDAD: "); scanf("%d",&vartem.anti); printf("\ nSUELDO BASE: "); scanf("%f",&vartem.sueldo); x[*k] = vartem; printf("\ n\ nHAY OTRO EMPLEADO?....S/N: "); fflush(stdin); resp=getchar(); resp = toupper(resp); (*k)= (*k) + 1; } }
2001
/* Definicin de la funcin aumentar sueldo */ void aumentar(reg1 x[ ],int k) { int i, fac; float sn; clrscr( ); printf("LISTADO DE LOS EMPLEADOS QUE SE LES AUMENTARA EL SUELDO"); printf("\ n\ nNOMBRE SUELDO NUEVO SUELDO VIEJO"); for( i=0; i<k; i++) if (x[i].anti > 36) { fac = x[i].anti/36; sn = x[i].sueldo + x[i].sueldo*fac*5/100; printf("\ n\ n%s\ t\ t %.2f\ t %.2f",x[i].nom, sn, x[i].sueldo); } }
73
Lenguaje C
Paso de Estructuras a Funciones.-
2001
Las estructuras pueden ser pasadas como argumentos a funciones pasando miembros de una estructura individual, pasando todas la estructura, o pasando un apuntador a la estructura. Cuando se pasan estructuras o miembros individuales de estructura a una funcin, se pasan en llamada por valor. Por tanto, los miembros de la estructura no podrn ser modificados por la funcin. Para pasar una estructura en llamada por referencia, se pasa la direccin de la variable de estructura. Los arreglos de estructuras, al igual que todo arreglo, son
automticamente pasados por referencia. Un arreglo puede ser pasado en llamada por valor mediante el uso de una estructura. Para pasar un arreglo por valor, se recurre a una estrategia de originar una estructura con el arreglo como miembro. Dado que las estructuras se pasan por valor, el arreglo ser pasado por valor.
74