La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Estructuras Estructuras En la creación de soluciones para algunos problemas surge la necesidad de agrupar datos de diferente tipo o de manejar datos que.

Presentaciones similares


Presentación del tema: "Estructuras Estructuras En la creación de soluciones para algunos problemas surge la necesidad de agrupar datos de diferente tipo o de manejar datos que."— Transcripción de la presentación:

1 Estructuras Estructuras En la creación de soluciones para algunos problemas surge la necesidad de agrupar datos de diferente tipo o de manejar datos que serian muy difícil de describir en los tipos de datos primitivos. En estos casos se deben aprovechar las características que hacen al lenguaje C especial, por ejemplo el uso de estructuras.

2 Estructuras Estructuras Una estructura es una colección de una o más variables de iguales o diferentes tipos, agrupadas bajo un solo nombre. Es decir, es un tipo de dato compuesto que permite almacenar un conjunto de datos de diferente tipo que pueden ser tratadas como una unidad. En C una estructura (struct), es una estructura de datos cuyos elementos individuales pueden ser de distinto tipo.

3 Estructuras Estructuras Las estructuras pueden contener tipos de datos simples y tipos de datos compuestos. Los tipos de datos simples (o primitivos) son: carácter, números enteros o números de punto flotante. Los tipos de datos compuestos son: los arreglos y las estructuras.

4 Estructuras Estructuras Así, una estructura puede contener elementos enteros, flotantes y caracteres. Apuntadores, arreglos y otras estructuras pueden ser también incluidas como elementos dentro de una estructura. A los elementos individuales de una estructura se le denomina miembros.

5 Estructuras Definición de una STRUCT
La declaración de estructuras es algo más complicada que la declaración de arreglos, ya que una estructura debe ser definida en términos de sus miembros individuales. En general, la composición de una estructura puede ser definida como: struct nombreEstructura{ miembro 1; miembro 2; miembro m; } ; En esta declaración, struct es una palabra reservada requerida; nombreEstructura es un nombre que identifica estructuras de este tipo (estructuras que tengan esta composición); y miembro 1, miembro 2, . ., miembro m son declaraciones de miembros individuales.

6 Estructuras Los nombres de los miembros dentro de una estructura deben ser todos diferentes, pero el nombre de un miembro puede ser el mismo que el de una variable definida fuera de la estructura. Sin embargo, no se puede inicializarse a un miembro dentro de la declaración del tipo de la estructura. Una vez que la composición de la estructura ha sido definida, las variables individuales de este tipo de estructura pueden declararse como sigue: struct nombreEstructura variable; donde struct es la palabra reservada requerida, nombreEstructura es el nombre que aparece en la declaración de estructura y variable es una variable de estructura del tipo nombreEstructura.

7 Estructuras Ejemplo: struct cuenta { int numCuenta; char tipoCuenta; char nombre [8O] ; float saldo; } ; Ahora podemos declarar las variables antiguocliente y nuevocliente: struct cuenta antiguocliente, nuevocliente;

8 Estructuras Es posible combinar la declaración de la composición de la estructura con la de las variables de estructura, como se muestra a continuación. struct nombreEstructura { miembro 1; miembro 2; … miembro m; }variable 1, variable 2, …, variable n; nombreEstrucura es opcional en esta situación.

9 Estructuras Una variable de estructura puede ser definida como miembro de otra estructura. En tales situaciones, la declaración de la estructura interna debe aparecer antes que la declaración de la estructura externa. struct fecha { int mes; int dia; int anio; } ; struct cuenta { int numCuenta; char tipoCuenta; char nombre [80]; float saldo; struct fecha ultimoPago; } antiguoCliente, nuevoCliente;

10 Estructuras Inicialización de Estructuras A los miembros de una variable de estructura se le pueden asignar valores iniciales de la misma forma que a los arreglos. Los valores iniciales deben aparecer en el orden en que serán asignados a sus correspondientes miembros de la estructura, encerrados entre llaves y separados por comas. La forma general es: struct nombreEstructura variable = {valor 1, valor 2, …, valor m}; donde valor 1 refiere al valor del primer miembro, valor 2 al valor del segundo, y así sucesivamente. Para el ejemplo anterior: static struct cuenta cliente = {12345, 'R', "José R. García" , , 5, 24, 1990};

11 Estructuras Procesamiento de Estructuras Los miembros de una estructura se procesan generalmente de modo individual, como entidades separadas. Por tanto, tenemos que ser capaces de acceder a los miembros individuales de la estructura. Un miembro de una estructura puede ser accedido escribiendo variable.miembro donde variable se refiere el nombre de una variable de tipo estructura y miembro el nombre de un miembro dentro de la estructura. El punto (.) que separa el nombre de la variable del nombre del miembro es un operador; es un miembro del grupo de mayor prioridad, y su asociatividad es de izquierda a derecha.

12 Estructuras Para el ejemplo de los clientes struct fecha { int mes; int dia; int anio; } ; struct cuenta { int numCuenta; char tipoCuenta; char nombre [80]; float saldo; struct fecha ultimoPago; } cliente; Si queremos acceder al número de cuenta del cliente, debemos escribir cliente.numCuenta

13 Estructuras Se pueden escribir expresiones más complejas usando repetidamente el operador punto. Por ejemplo, si un miembro de una estructura es a su vez otra estructura, entonces el miembro de la estructura más interna puede ser accedido escribiendo variable.miembro.submiembro donde miembro refiere el nombre del miembro dentro de la estructura externa y submiembro el nombre del miembro dentro de la estructura interna. Análogamente, si un miembro de una estructura es un arreglo, entonces un elemento individual del arreglo puede ser accedido escribiendo variable.miembro[expresión] donde expresión es un valor no negativo que indica el elemento del arreglo.

14 Estructuras El último miembro de cliente es cliente.ultimoPago, que es una estructura de tipo fecha. Por tanto, para acceder al mes del último pago debemos escribir: cliente.ultimoPago.mes Análogamente, el tercer miembro de cliente es el arreglo de caracteres cliente.nombre. El tercer carácter dentro de este arreglo puede ser accedido escribiendo: cliente.nombre[2]

15 Estructuras Paso de estructuras a funciones Se pueden pasar los miembros individuales, o las estructuras completas a una función. Los miembros individuales de una estructura o bien una estructura completa se pueden pasar a una función como argumentos en la llamada a la función, y un miembro de una estructura o una estructura completa puede ser devuelto mediante la instrucción return. Para hacer esto, cada miembro de la estructura se trata como una variable ordinaria.

16 Estructuras struct fecha { int mes; int dia; int anio; } ; struct cuenta { int numCuenta; char tipoCuenta; char nombre [80]; float saldo; struct fecha ultimoPago; } cliente; Si queremos pasarle a una función una variable tipo estructura void miFuncion(struct cuenta miCliente) Si queremos que la función devuelva una variable tipo estructura struct cuenta miFuncion( )

17 Estructuras Ejemplo: Representando puntos con estructuras…

18 Estructuras Ejemplo: Función que recibe una variable de tipo estructura.

19 Estructuras Función que devuelve una variable tipo estructura

20 Estructuras

21 Estructuras Ejemplo: Representando puntos con estructuras…

22 Estructuras Función que recibe y devuelve variables tipo estructura

23 Estructuras Ejercicios:
Utilizar estructuras en C para representar puntos en 3D. Es decir P(x,y,z), con esta nueva estructura, modificar los ejemplos para el manejo de puntos (ahora en 3D). Utilizar estructuras para representar los siguientes datos de los alumnos: Nombre Edad Fecha de cumpleaños (día, mes) Utilizando esta estructura, pedir los datos del alumno (nombre y fecha de cumpleaños) y calcular su edad usando la fecha actual y guardando el dato en la estructura. Modificar el programa para que pida los datos de 5 alumnos y los guarde en un arreglo, para después poder buscar alguno por su nombre e imprimir sus datos.**

24 Estructuras Arreglos de Estructuras struct cuenta cliente[100];
También es posible definir un arreglo de estructuras; esto es, un arreglo en el que cada elemento sea una estructura. struct fecha { int mes; int dia; int anio; } ; struct cuenta { int num_cuenta; char tipo_cuenta; char nombre [80]; float saldo; struct fecha ultimopago; } cliente[100]; O bien: struct cuenta cliente[100];

25 Estructuras Inicialización de Arreglos de Estructuras Un arreglo de estructuras puede tener asignados valores iniciales como cualquier otro arreglo. Recordar que cada elemento del arreglo es una estructura a la que debe asignarse su correspondiente conjunto de valores iniciales. struct datos{ char nombre [8O] ; int mes; int dia; int anio; } ; struct datos personas[] = { "Ana", 12, 30, 1973, “Jose”, 5, 13, 1966, "Lidia” , 7,15, 1972, “Raul”,11, 1, 1929 ,”Rosa",2, 4, 1977, "Sara”, 12, 29, 1963};

26 Estructuras Inicialización de Arreglos de Estructuras Algunos programadores prefieren incluir cada conjunto de constantes dentro de un par de llaves para separar más claramente los elementos individuales del arreglo. Esto está permitido. Así, la declaración del arreglo se puede escribir: struct datos personas[ ] = { {"Ana", 12, 30, 1973}, {“Jose”, 5, 13, 1966}, {"Lidia” , 7,15, 1972}, {“Raul”,11, 1, 1929}, {”Rosa",2, 4, 1977}, {"Sara”, 12, 29, 1963} };

27 Estructuras El uso del operador punto puede extenderse a arreglos de estructuras escribiendo: arreglo[expresión].miembro donde arreglo refiere el nombre del arreglo y arreglo[expresión].miembro es un elemento individual del arreglo (una variable de estructura). Por tanto, arreglo[expresión] referirá un miembro específico dentro de una estructura particular. Para el ejemplo: struct cuenta cliente[100]; Si queremos acceder al número de cuenta del cliente 14, debemos escribir cliente[13].num_cuenta. Análogamente, se puede acceder al saldo de este cliente escribiendo cliente [13].saldo

28 Estructuras Tipos de dato definidos por usuario (typedef) La característica typedef permite a los usuarios definir nuevos tipos de datos que sean equivalentes a los tipos de datos existentes. Una vez que el tipo de datos definido por el usuario ha sido establecido, entonces las nuevas variables, arreglos, estructuras, etc., pueden ser declaradas en términos de este nuevo tipo de datos. Un nuevo tipo de datos se define como: typedef tipo nuevo-tipo; donde tipo refiere un tipo de datos existente (bien un tipo de datos estándar o bien un tipo de datos previamente definido por el usuario) y nuevo-tipo el nuevo tipo de datos definido por el usuario. Sin embargo, debe quedar claro que el nuevo tipo será nuevo solo en el nombre.

29 Estructuras Tipos de dato definidos por usuario (typedef) Ejemplo: typedef int edad; En esta declaración edad es un tipo de datos definido por el usuario equivalente al tipo int. Entonces, la declaración de variable: edad amigo1, amigo2; es equivalente a escribir: int amigo1, amigo2; En otras palabras, amigo1 y amigo2 se consideran variables de tipo edad, pero son realmente variables de tipo entero.

30 Estructuras La característica typedef es particularmente útil cuando se definen estructuras, ya que se elimina la necesidad de escribir repetidamente struct nombreEstructura cuando se referencia una estructura. Además, el nombre dado al tipo de estructura definido por el usuario sugiere a menudo el propósito de la estructura dentro de un programa. El tipo de estructura definida por el usuario se puede escribir como: typedef struct { miembro 1; miembro 2; … miembro m; } nuevo-tipo; donde nuevo-tipo es el tipo de estructura definida por el usuario. Las variables de estructura pueden definirse en términos del nuevo tipo de datos.

31 Estructuras Para nuestro ejemplo: typedef struct { int num_cuenta; char tipo_cuenta; char nombre [8O] ; float saldo; } registro; registro antiguocliente, nuevocliente; La primera declaración define registro como un tipo de datos definido por el usuario. La segunda declaración define antiguocliente y nuevocliente como variables de estructura de tipo registro.

32 Estructuras La característica typedef puede ser utilizada repetidamente para definir un tipo de datos en términos de otros tipos de datos definidos por el usuario. typedef struct { int mes; int dia; int anio; } fecha; int num_cuenta; char tipo_cuenta; char nombre [8O] ; float saldo; fecha ultimopago; } registro; registro cliente [100];

33 Estructuras Paso de estructuras a funciones Una estructura completa se puede transferir a una función pasando un apuntador a la estructura como un argumento. Esto es similar al procedimiento usado para transferir un arreglo a una función. Sin embargo, debemos usar una notación de apuntadores explícita para representar que se pasa una estructura como un argumento.

34 Estructuras Paso por valor (miembro por miembro) float ajustar(char nombre [] , int num_cuenta, float saldo); … cliente.saldo = ajustar(cliente.nombre, cliente.num_cuenta, cliente.saldo); Paso por referencia (estructura completa) void aj ustar (registro *pt); ajustar (&cliente) ; void ajustar (registro *pt) { pt->nombre = “Jose”; pt->num_cuenta = 9999; pt->tipo_cuenta 'R'; pt->saldo = 99.99; return¡ }

35 Estructuras Paso de estructuras a funciones Un apuntador a una estructura puede ser devuelto desde una función a la parte del programa que hizo la llamada. Esta característica puede ser útil cuando se pasen varias estructuras a una función y sólo una de ellas es devuelta. typedef struct { char *nombre; int num_cuenta; char tipo_cuenta; float saldo; } registro; registro *buscar (registro tabla [], int ncuenta);

36 Estructuras registro *buscar (registro tabla [N], int ncuenta) {
Paso de estructuras a funciones registro *buscar (registro tabla [N], int ncuenta) { int cont; for (cont = 0; cont < N; ++cont) { if (tabla[cont] .num_cuenta==ncuenta){ return(&tabla[cont]); } return(NULL);

37 Estructuras


Descargar ppt "Estructuras Estructuras En la creación de soluciones para algunos problemas surge la necesidad de agrupar datos de diferente tipo o de manejar datos que."

Presentaciones similares


Anuncios Google