FUNDAMENTOS DE PROGRAMACIÓN Sabino Miranda Jiménez Universidad Autónoma del Estado de México (UAEM) [email protected] UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO Estructuras en C Una estructura es Una colección de una o más variables Mismo tipo o diferentes tipos Agrupas por un mismo nombre Ventajas: Ayudan a organizar los datos Se tratan como una sola unidad UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO Ejemplo de estructura de datos Registro de un empleado Empleado Nombre Domicilio NoSeguridadSocial Salario Nombre Nombre Apellido_Paterno Apellido Materno UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO Ejemplo de estructura de datos La graficación de un punto Punto Coordenada_X Cooredenada_Y En C se utiliza la siguiente forma para declarar la estructura struct punto{ int x; int y; } UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO Ejemplo de estructura de datos en C struct punto { int x; int y; }; Etiqueta o nombre de la estructura Miembros o Elementos La declaración struct define un tipo de dato. Se pueden definir variables al terminar la llave derecha struct { … } x,y,z; Si no se declaran variables no reserva espacio, sólo es la declaración. La etiqueta se usa para declaraciones posteriores de variables UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO Declaración de variables de tipo estructura struct punto punto1,punto2; Inicialización por medio de asignación struct punto punto1={10,20}; Inicialización por medio de los miembros de la estructura. Operador punto “.” punto1.x=10; punto1.y=20; UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO Anidamiento de estructuras Rectángulo Punto1 Punto2 Punto3 Punto4 struct rect { struct punto p1; struct punto p2; struct punto p3; struct punto p4; }; UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO Ejemplo en C #include <stdio.h> struct punto { int x; int y; }; int main() { struct punto pt1 ={10,20}; struct punto pt2; pt2.x=20; pt2.y=30; printf("Punto1(x,y)= (%d,%d)\n",pt1.x,pt1.y); printf("Punto2(x,y)= (%d,%d)\n”, pt2.x,pt2.y); return 0; } UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO Salida Punto1(x,y)= (10,20) Punto2(x,y)= (20,30) UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO Ejemplo de estructura anidada en C #include <stdio.h> #include <conio.h> struct punto { int x; int y; }; struct rect { struct punto pt1; struct punto pt2; struct punto pt3; struct punto pt4; }; punto(x,y) punto(x,y) UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO Ejemplo de estructura anidada en C int main() { struct rect rec ={10,20,1,2,10,11,5,6}; printf("Coordenadas Punto3(x,y)= (%d,%d)\n",rec.pt3.x,rec.pt3.y); rec.pt3.x=1000; rec.pt3.y=2000; printf("Coordenadas Punto3(x,y)= (%d,%d)\n",rec.pt3.x,rec.pt3.y) return 0; } UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO Salida Coordenadas Punto3(x,y)= (10,11) Coordenadas Punto3(x,y)= (1000,2000) UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO Propiedades de las estructuras en C Dado que las estructuras se definen como un tipo de dato más, se aplican las propiedades de los tipos de datos como: Parámetro de función • Por valor • Por referencia Arreglo de estructuras Apuntadores a estructuras Retorno de tipo de dato a estructura UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO Ejemplo: estructuras & funciones #include <stdio.h> #include <conio.h> struct punto { int x; int y; }; void imprimePunto(struct punto p) { printf("Coordenadas Punto(x,y)= (%d,%d)\n",p.x,p.y); } UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO Ejemplo: estructuras & funciones int main() { struct punto pt1 ={10,20}; struct punto pt2; pt2.x=20; pt2.y=30; printf("Punto1\n"); imprimePunto(pt1); printf("Punto2\n"); imprimePunto(pt2); getche(); return 0; } UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO Salida Punto1 Coordenadas Punto(x,y)= (1,2) Punto2 Coordenadas Punto(x,y)= (5,10) UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO Ejemplo: Arreglos de estructuras (1) #include <stdio.h> struct punto { int x, y; }; struct rect { struct punto pts[4]; }; UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO Ejemplo: Arreglos de estructuras (2) void imprimePunto(struct punto p); // Prototipo void imprimeRectArr(struct rect r); // Prototipo int main() { struct rect rec ={10,20,1,2,10,11,5,6}; imprimeRectArr(rec); rec.pts[2].x=1000; rec.pts[2].y=2000; printf("\n\nRectángulo modificado\n"); imprimeRectArr(rec); getche(); return 0; } UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO Ejemplo: Arreglos de estructuras (3) void imprimePunto(struct punto p) { printf(" (%d,%d)\n",p.x,p.y); } void imprimeRectArr(struct rect r) { for(int i=0; i<4;i++) { printf("Punto %d=",i+1); imprimePunto(r.pts[i]); } } UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO Salida Punto 1= (10,20) Punto 2= (1,2) Punto 3= (10,11) Punto 4= (5,6) Rectángulo modificado Punto 1= (10,20) Punto 2= (1,2) Punto 3= (1000,2000) Punto 4= (5,6) UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO Ejemplo: Retorno de estructuras (1) #include <stdio.h> #include <conio.h> struct punto { int x; int y; }; void imprimePunto(struct punto p); // Prototipo struct punto muevePunto(struct punto p, int inc); // Prototipo UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO Ejemplo: Retorno de estructuras (2) int main() { struct punto pt1 ={1,2}; struct punto pt2; printf("Punto1\n"); imprimePunto(pt1); pt2 = muevePunto(pt1,5); printf("Punto2\n"); imprimePunto(pt2); return 0; } UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO Ejemplo: Retorno de estructuras (3) void imprimePunto(struct punto p) { printf("Coordenadas Punto(x,y)= (%d,%d)\n", p.x, p.y); } struct punto muevePunto(struct punto p, int inc) { p.x = p.x+ inc; p.y = p.y+ inc; return p; } UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO Salida Punto1 Coordenadas Punto(x,y)= (1,2) Punto2 Coordenadas Punto(x,y)= (6,7) UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO Ejercicio. Realizar un programa que determine el área de un rectángulo dado por los cuatro puntos que lo definen. El usuario captura los puntos del rectángulo en parejas (x,y). Recuerde que para determinar la distancia entre dos puntos se usa la siguiente fórmula. UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO Definición de sinónimos para tipos de Datos En C, se cuenta con un keyword para definir sinónimos de los tipos de datos: typedef typedef tipo_dato nombre_sinonimo; Ejemplo: usar Entero en lugar del tipo de dato int typedef int Entero; Entero num; num=45; typedef struct rect{ … } Rectangulo; Rectangulo r ; // equivale a struct rect r UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO Estructuras en C: variables mixtas struct trabajador { char nombre[100]; int edad; char puesto[100]; }; UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO Ejemplo: Arreglos de estructuras UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO Ejemplo: Arreglos de estructuras (1) #include <stdio.h> typedef struct trabajador { char nombre[100]; int edad; char puesto[100]; } Empleado; void LeeRegistro(Empleado* noms, int tam); void imprimeDatos(Empleado* noms, int tam); UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO Ejemplo: Arreglos de estructuras (2) int main() { Empleado nombres[10]; LeeRegistro(nombres,3); imprimeDatos(nombres,3); return 0; } UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO Ejemplo: Arreglos de estructuras (3) void LeeRegistro(Empleado* noms, int tam) { int ed; for(int i=0;i<tam;i++) { printf("\nRegistro No %d", i+1); printf("\nNombre:"); gets(noms[i].nombre); printf("Edad:"); scanf("%d",&noms[i].edad); fflush(stdin); // descartar el <ENTER> capturado por scanf //getchar(); // alternativa para linux printf("Puesto:"); gets(noms[i].puesto); } } UNIVERSIDAD AUTÓNOMA DEL ESTADO DE MÉXICO Ejemplo: Arreglos de estructuras (4) void imprimeDatos(Empleado* noms, int tam) { int i; for(i=0; i<tam; i++) { printf("\nRegistro No %d", i+1); printf("\nNombre: %s",noms[i].nombre ); printf("\nEdad: %d",noms[i].edad); } } Ejercicio • Crear un archivo con los datos capturados para el empleado • Cada línea del archivo representa los datos de un empleado. El archivo tiene el siguiente formato nombre|edad|puesto Ejemplo de salida Juan|32|Programador María|25|administrativo Pedro|38|Analista