Departamento de Informática Universidad Técnica Federico Santa María Registros (struct) Programación Prof. Teddy Alfaro Olave Idea de estructura tipo registro • Consideremos que deseamos mantener la informacion de una persona. Estos datos podrían ser: su edad, su estatura, su peso, su nombre, sexo M o F, etc. • Una estructura nos permite agrupar en un conjuntos a todos estos tipos de datos: – – – – Edad un entero Estatura y peso, flotantes Nombres un string (char [ ]) Sexo: un carácter Estructura PERSONA que contiene 5 elementos Estructuras • Recordemos que los arreglos son un conjunto de datos de un mismo tipo. Una estructura es un conjunto de datos que no son necesariamente del mismo tipo • No hay limitaciones en el tipo ni cantidad de variables que pueda contener una estructura ,la única salvedad es que una estructura no puede contenerse a sí misma como miembro . Partes de una estructura Nombre de la estructura PERSONA –Edad un entero –Estatura un flotante –Peso un flotante –Nombres un string (char [ ]) –Sexo: un carácter Campos de la estructura (5 campos) 1 TDE • Arreglo: conjunto de elementos de un mismo tipo • Estructura (Registro): conjunto de datos de que pueden ser de distinto tipo. 5 elementos Arreglo: 1 1 1 1 1 Todos los elementos son del mismo tipo: enteros 5 campos Estructura ‘h’ 1.10 “hola” char float 10 1 string int int Otra manera de declarar • Podemos declarar la estructura y definir la variables al mismo tiempo. struct persona{ int edad; float estatura, peso; char nombre[50]; char sexo; } gente1, gente2; Declaración de una estructura • La palabra reservada para esta tarea es struct, un nombre indentificador y entre llaves sus campos con sus determinados tipos struct persona{ int edad; float estatura, peso; char nombre[50]; char sexo; }; struct persona gente1, gente2; Inicialización de una estructura • Al igual que los arrglos las estructuras pueden ser inicializadas al declararla struct persona{ int edad; float estatura, peso; char nombre[50]; char sexo; } gente1 = { 27, 1.70, 68, “Samanta Diaz”, ‘F’} 2 Ejemplo Acceso a los elementos • Para dirigirnos a un campo de una estructura existe un operador que relaciona al nombre al nombre de ella con un campo determinado, este operador es el punto. • Su sintaxis es Nombre_estructurea.nombre_campo • Ejemplo gente1.edad=30; struct persona{ int edad; float estatura, peso; char nombre[50]; char sexo; }; gente1.peso=80.5; Ejemplo • Desarrollar un programa que utilice la definición del tipo alumno que se muestra abajo, permita llenar los datos y calcular su promedio de notas, e informar por pantalla si aprobó o no. struct alumno { char nombre [50]; char rol[12]; int examen1, examen2, examen3; float promedio; } struct alumno { char nombre [50]; char rol[12]; int exa1, exa2, ex3; float prom; }; void main( ) { struct persona empleado; printf(“ingrese nombre”); scanf(“%s”,empleado.nombre); printf(“ingrese edad”); scanf(“%d”,&empleado.edad); printf(“ingrese estatura”); scanf(“%f”,&empleado.estatura); printf(“ingrese peso”); scanf(“%f”,&empleado.peso); printf(“ingrese sexo (M o F)”); scanf(“%c”,&empleado.sexo); printf(“ingrese nombre”); } void main( ) { struct alumno alum_prg; printf(“ingrese nombre”); scanf(“%s”,alum_prg.nombre); printf(“ingrese rol”); scanf(“%s”,alum_prg.rol); printf(“ingrese los 3 examenes”); scanf(“%d %d %d”, &alum_prg.exa1, &alum_prg.exa2, &alum_prg.exa3); alum_prg.prom=(alum_prg.exa1+ alum_prg.exa2+ alum_prg.exa3)/3; if(alum_prg.prom>=55) printf(“aprobado”); else printf(“reprobado”); } 3 Un arreglo dentro de una estructura • Dentro de una estructura podemos tener no solo datos simples, sino tipo de datos estructurados e incluso otras estructuras Struct coord{ int x, y; }; Struct datos{ float velocidad; int eventos[20]; struct coord posicion; }; Usos de las estructuras • Tenemos la siguiente estructura: struct vehiculo { int char int float }; num_serie; marca[30]; anio; costo; • Suponga, que estamos interesados en guardar la información varios autos (unos 50), no sólo la de uno. Ante esto podríamos crear 50 variables y llenarlas con información. Pero si analizamos, tenemos 50 variables que pueden conformar una colección de datos de un mismo tipo, definición de: ARREGLO De esta manera se llega a un Arreglo de Estructuras: struct vehiculo inventario[50]; struct coord{ int x, y; }; struct datos{ float velocidad; int eventos[20]; struct coord posicion; }; int main( ){ struct datos movil; int i; movil.velocidad=1.45; movil.posicion.x=3; movil.posicion.y=7; for(i=0; i<20; i++) movil.eventos[i]=i; } Arreglo de estructuras struct vehiculo { int num_serie; char marca[30]; int anio; float costo; }; struct vehiculo stock[50]; int i; int main(int argc, char *argv[]){ for (i=1;i<50;i++) { printf("Ingrese nº serie marca año y costo del vehiculo"); scanf("%d", &stock[i].num_serie); scanf("%s", stock[i].marca); scanf("%d",&stock[i].anio); scanf("%f", &stock[i].costo); } for(i=1;i<50;i++) printf("%d %s %d %f", stock[i].num_serie, stock[i].marca, stock[i].anio, stock[i].costo); return 0; } Num_serie 0 Marca Año costo Num_serie 1 Marca Año costo Num_serie 2 Marca Año costo ... Num_serie 49 Marca Año costo 4 Ejercicio • Una librería desea almacenar sus productos en un arreglos de registros. Cada registro debe incluir los campos título, autor, SDBN (código), precio y stock. Diseñe un programa C que permita realizar las siguientes operaciones: – Ingresar una partida de 100 libros – Encontrar un libro a partir de un código ISBN ingresado por el usuario, mostrando el título, autor, precio y stock correspondiente. Ejercicio struct alumno { char nombre[30]; Se requiere almacenar la información de un char rol[12]; curso de a=10 alumnos al arreglo de registros nota[n]; int que se muestra en un costado. A cada alumno float promedio; } curso[a]; se le deben ingresar las n=3 notas, y luego calcular su promedio. Se pide desarrollar un programa pascal que: - permita el ingreso de todos los datos del alumno, las 3 notas, y se le calcule promedio - Mostrar por pantalla, nombre promedio, y además mostrar el promedio del curso. 5