Estructura IWI-131 Programación Paralelo 1 Estructura: Colección de variables que se referencia bajo el mismo nombre. Arreglos: Colección de variables de un mismo tipo que se referencia utilizando un nombre en común. 8: Estructuras Una estructura es un nuevo tipo de dato. La idea es tratar a un grupo de variables como una sola unidad. nombre, peso, edad, estatura: persona José Miguel Herrera M. Estudiante de Ingeniería Civil Informática - UTFSM Estudiante de Magister en Ciencias de la Informática - UTFSM procesador, memoria, t.video: computador punto X, punto Y: Declaración de una estructura struct datos { char nombre[20]; Y char direccion[20]; (x,y) int codigo; }; X a: struct punto { int x; int y; } miembros de la estructura struct datos a, b[3]; /* b es un arreglo de estructuras */ nombre: .... direccion: .... Para hacer referencia: a.nombre[20] = ”Arturo”; a.direccion[20] = ”calle2”; codigo a.codigo = 13330 3 Declaración de una estructura 4 Declaración de una estructura struct datos Son equivalentes { char nombre[20]; struct datos char direccion[20]; { char nombre[20]; int codigo; char direccion[20]; }; struct datos a, b[3]; /* b es un arreglo de estructuras */ 0 b: nombre: direccion: codigo 2 Declaración de una estructura Una declaración es un nuevo tipo de dato: struct nombre_estructura { tipo miembro_1; tipo miembro_2; . tipo miembro_n; } punto 1 .... .... nombre: direccion: int codigo; }; 2 .... .... codigo b[1].nombre[20] = ”Arturo”; b[1].direccion[20] = ”Calle2”; b[1].codigo = 13330; nombre: direccion: struct datos a, b[3]; .... .... struct datos { char nombre[20]; char direccion[20 ]; int codigo; } datos a, b[3]; codigo 5 6 1 Declaración de una estructura Estructuras anidadas struct fecha{ Utilizando typedef int dia; typedef struct direc int mes; { int anio; char nombre[30]; }; char calle[40]; struct persona{ char ciudad[20]; char nombre[20]; char estado[3]; struct fecha nacimiento; unsigned int codigo; }; } sdirec; struct persona p; sdirec info_direc; ¿ Como haríamos referencia ? sdirec info_direc2 = {"Vicente", "calle 2000", "Chile", "LA", 12345}; 7 Paso por referencia de un miembro Paso por valor de un miembro void f1(int x){ 8 /* declaración de la función */ void f1(int *x){ ......... } } void main(void){ void main(void){ struct ejemplo{ struct ejemplo{ int paso1; int codigo; } a; int paso1; int codigo; } a; a.codigo = 700; f1( a.codigo ); /* declaración de la función */ ......... a.codigo = 700; f1( &a.codigo ); /* llamada a la función */ printf( ”Valor es %d”, a.codigo); } /* llamada a la función */ printf( ”Valor es %d”, a.codigo); 9 Paso por valor de estructuras } 10 Ejemplo struct vector { Mediante 2 puntos, definir un rectángulo en un plano int x,y,z; }; struct vector suma(struct vector v1, struct vector v2){ (x1, y1) v1.x += v2.x; v1.y += v2.y; v1.z += v2.z; return (v1); } (x2, y2) void main(void){ struct vector v1, v2, v3; ... v3 = suma(v1,v2); } 11 12 2 Ejemplo Ejemplo 3 #include <stdio.h> Implementar una función que calcule la distancia del origen (0,0) al punto (x1, y1). struct persona{ int edad; char nombre[]; }; (x1, y1) int main(void){ struct persona p1; strcpy(p1.nombre, "Juan"); p1.edad = 10; (x2, y2) scanf(”%s”, p1.persona ) scanf(”%d”, &p1.edad ) printf("%s\n", p1.nombre ); printf("%d", p1.edad ); return 0; 13 Ejemplo } 14 Ejemplo Ejemplo (se mostrará en clases) Realizar un programa que permita ingresar 30 datos de alumnos de un curso. Para cada alumno es necesario tener la siguiente información: nombre, rol, año nacimiento, las notas de 3 certámenes, promedio final y estado (R o A si reprobó o aprobó, respectivamente). Los últimos dos son calculados por el programa. 15 El programa debe mostrar los datos del alumno, el promedio de los 3 certámenes y si aprobó o reprobó. 16 3