7/29/2019 Fund. de Programacin - Tema 3
1/32
23-ene-13
Santiago, Rep. Dom.
Leccin 3: Estructuras y Uniones
FUNDAMENTOS DE PROGRAMACIN
Pontificia Universidad Catlica Madre y Maestra
Vicerrectora Acadmica
Facultad Ciencias de las Ingenieras
Ingeniera en Sistemas y Computacin - ISC
7/29/2019 Fund. de Programacin - Tema 3
2/32
ESTRUCTURAS Y UNIONESFundamentos de Programacin
7/29/2019 Fund. de Programacin - Tema 3
3/32
Estructuras
Estructuras y Uniones
EstructuraColeccin de uno o ms tipos de elementos, los cuales pueden ser detipos de datos diferentes.
Declaracin. Debe ser declarada antes de ser usada.
struct {
; ;......
;}
7/29/2019 Fund. de Programacin - Tema 3
4/32
Estructuras
Estructuras y Uniones
Definicin(variables tipo struct)Al igual que otras variables, las estructuras deben ser definidas luego deser declaradas para poder ser usadas.
Hay dos formas de definir.1. Listndolas inmediatamente despus de las llaves dedeclaracin.
struct info_libros
{ char titulo[60];char autor[30];char editorial[30];int anyo;
} libro1,libro2,libro3;
7/29/2019 Fund. de Programacin - Tema 3
5/32
Estructuras
Estructuras y Uniones
2. Listando el tipo de la estructura creada seguida porlas variables correspondientes, en cualquier partedel programa, antes de ser usadas.
struct info_libros{ char titulo[60];char autor[30];char editorial[30];int anyo;
} ;
struct info_libros libro1,libro2,libro3;
7/29/2019 Fund. de Programacin - Tema 3
6/32
Estructuras
Estructuras y Uniones
Declaracin con typedef. A travs de sta instruccin podemos definir un
tipo de dato equivalente a uno ya existente. Es valido para cualquier tipode datos, no slo para el tipo de datos estructura.
Sintaxis:
typedef struct { ; ;...... ;
} nuevo-tipo;
typedef tipo nuevo-tipo;donde: tipo: se refiere al tipo de datos ya existente.
nuevo-tipo: nuevo dato creado a partir deltipo ya existente.
En el caso
de estructura
7/29/2019 Fund. de Programacin - Tema 3
7/32
Estructuras
Estructuras y Uniones
2. Ej con typedef:
typedef struct{ char titulo[60];
char autor[30];char editorial[30];int anyo;
} info_libros;
info_libros libro1,libro2,libro3;
Eliminamos la palabra struct al inicio.
Se mueve el nombre de la
estructura despus de las
llaves, ahora es un tipo
de datos. En este casoLlamado info_libros.
7/29/2019 Fund. de Programacin - Tema 3
8/32
Estructuras
Estructuras y Uniones
InicializacinPodemos asignar valores iniciales a una estructura al definirlas o dentrodel programa(asignar valores).
1. Asignacin: libro3=libro1; libro4=libro1;libro3=libro3=libro4=libro1;
7/29/2019 Fund. de Programacin - Tema 3
9/32
Estructuras
Estructuras y Uniones
2. Inicializacin:
struct info_libros{ char titulo[60];
char autor[30];char editorial[30];int anyo;
} libro1={Programacion en C,LuisJoyanes,McGrawHill,2000};
libro1={ Programacion en C,LuisJoyanes,McGrawHill,
2000 };
7/29/2019 Fund. de Programacin - Tema 3
10/32
Estructuras
Estructuras y Uniones
Asignacin de Valores.
Acceso a una estructura a travs del Operador punto(.),este operados nos da acceso directo al miembro
correspondiente.
SINTAXIS:Para datos numricos caracter:
.=dato;Para cadena de datos :Ej. strcpy(libro1.autor,PapoLucas);
7/29/2019 Fund. de Programacin - Tema 3
11/32
Estructuras
Estructuras y Uniones
Ejemplo:
struct info_libros libro5;
printf(\n Digite titulo:);gets(libro5.titulo);
printf(\n Digite Autor:);gets(libro5.autor);
printf(\n Digite Editorial:);
gets(libro5.editorial);printf(\n Digite ao:);
scanf(%d,&libro5.anyo);
7/29/2019 Fund. de Programacin - Tema 3
12/32
Estructuras
Estructuras y Uniones
Acceso a travs del operador puntero ()
Primero debe definirse una variable tipo puntero paraapuntar a la estructura. Luego podemos apuntardirectamente al miembro dado.
SINTAXIS: =dato;
7/29/2019 Fund. de Programacin - Tema 3
13/32
Estructuras
Estructuras y Uniones
ptr_est = &mejor;strcpy(ptr_estnombre,PepeTrueno);ptr_estnum_estudiante = 4322;ptr_estnota =8.5;
struct estudiantes{ char nombre[41];
int num_estudiante;int anyo_de_matricula;float nota;
};struct estudiantes *ptr_est;struct estudiantes mejor;
Nota: Antes de acceder, debemos haber reservadomemoria, a travs p.e. de la funcin malloc().
7/29/2019 Fund. de Programacin - Tema 3
14/32
Estructuras
Estructuras y Uniones
Arreglos de EstructurasPermiten almacenar diversos valores de diferentes tiposde datos. Son prcticos para almacenar archivos deempleados, inventarios y otros datos que se adapten alformato de estructura.
Declaracin Arreglos de Estructurasstruct info_libros libros[100];
Acceso e inicializacinstrcpy(libros[0].titulo,C++ a su alcance);strcpy(libros[0].autor,LuisJoyanes);strcpy(libros[0].editorial,McGrawHill);libros[0].anyo = 1999;
7/29/2019 Fund. de Programacin - Tema 3
15/32
Estructuras
Estructuras y Uniones
Declaracin e inicializacin
struct info_libro libro[3] = {Programacin en C,LuisJoyanes,McGrawHill,1999, Estructura de Datos,LuisJoyanes,McGrawHill,1999, C++ a su Alcance,LuisJoyanes,
McGrawHill,2000 };
7/29/2019 Fund. de Programacin - Tema 3
16/32
Estructuras
Estructuras y Uniones
Paso de Estructura a una Funcin
En una funcin se pueden pasar comoparmetros los miembros de una estructura, ya
sea de forma individual o la estructura completa.
As tambin un miembro de una estructura
puede ser devuelto en un instruccin return,
en ese caso el miembro se trata de forma
individual.
7/29/2019 Fund. de Programacin - Tema 3
17/32
Estructuras
Estructuras y Uniones
El siguiente programa hace el uso pase de parmetrosde tipo estructura en una funcin. Se hacen los pase porvalor y referencia.
Se tienen dos funciones una para la entrada de datos ySe pasan los parmetros por referencia o direccin enmemoria(tipo *).
La segunda funcin se usa para la salida de datos y la
Estructura se pasa como parmetro por valor.
7/29/2019 Fund. de Programacin - Tema 3
18/32
Estructuras
Estructuras y Uniones
Ej. Uso de Estructura.
#include #include
/*definir la estructura */
struct info_persona{
char nombre[20];char calle[20];char ciudad[20];char provincia[20];char codigopostal[6];
};
7/29/2019 Fund. de Programacin - Tema 3
19/32
Estructuras y Uniones/* prototipo de funciones: definicion de las funciones */
void entrada( struct info_persona *pp);
void salida( struct info_persona p);
main(){
struct info_persona reg_dat;
entrada(®_dat); // pase por referencia
salida(reg_dat); // pase por valor
printf("\n Pulsar cualquier techa para continuar \n");getchar();
}
7/29/2019 Fund. de Programacin - Tema 3
20/32
Estructuras y Uniones
void entrada( struct info_persona *pp){
puts("\n Entrada de Datos de la persona \n");
printf("\n Nombre: "); gets(pp->nombre);printf("\n Calle: "); gets(pp->calle);printf("\n Ciudad: "); gets(pp->ciudad);printf("\n Provincia: "); gets(pp->provincia);
printf("\n Codigo Postal: "); gets(pp->codigopostal);}
7/29/2019 Fund. de Programacin - Tema 3
21/32
Estructuras y Uniones
void salida( struct info_persona p){puts("\n\n Informacion digitada de la persona \n");
puts(p.nombre);puts(p.calle);puts(p.ciudad);puts(p.provincia);puts(p.codigopostal);
}
7/29/2019 Fund. de Programacin - Tema 3
22/32
Estructuras continuacin
Estructuras y Uniones
Estructura AnidadasEs cuando una estructura contiene a una o mas estructuras comomiembro de ella.
Ej.
struct info_dir{ char direccion[30];
char ciudad[20];char provincia[20];
int cod_postal;} ;
7/29/2019 Fund. de Programacin - Tema 3
23/32
Estructuras y Uniones
Ej.struct info_dir
{ char direccion[30];char ciudad[20];char provincia[20];int cod_postal;
} ;
struct empleado{ char nombre_emp[30];
struct info_dir direccion_emp;double salario;
} ;
struct clientes{ char nombre_cli[30];
struct info_dir direccion_cli;double saldo;
} ;
7/29/2019 Fund. de Programacin - Tema 3
24/32
Estructuras y Uniones
Ejercicio 9.1 Pag 305. Se desea una estructura PersonaEmpleadoque contenga como miembros los datos de una persona que a su vez tenga
los datos de la fecha de nacimiento.
#include #include
/* definir las estructuras */
struct fecha{
unsigned int dia,mes,anyo;};
struct persona
{char nombre[20];unsigned int edad;int altura;int peso;struct fecha fec;
};
7/29/2019 Fund. de Programacin - Tema 3
25/32
Estructuras y Unionesstruct persona_empleado{
struct persona unapersona;
unsigned int salario;unsigned int horas_semana;
};
/* prototipo de funciones: definicion de las funciones */
void entrada(struct persona_empleado *pp);void salida(struct persona_empleado up);
main(){ struct persona_empleado pp; // definir una variable pp
entrada(&pp); // entrada de los datos
salida(pp); // Salida de los datos
printf("\n\n\n Pulsar cualquier tecla para continuar \n");getchar();
}
7/29/2019 Fund. de Programacin - Tema 3
26/32
Estructuras y Uniones
void entrada( struct persona_empleado *pp)
{fflush(stdin);puts("\n Entrada de Datos de la persona \n");
printf("\n Nombre: "); gets(pp->unapersona.nombre);printf("\n Edad: "); scanf("%d",&pp->unapersona.edad);
printf("\n Altura: "); scanf("%d",&pp->unapersona.altura);printf("\n Peso: "); scanf("%d",&pp->unapersona.peso);
printf("\n\n Fecha de Nacimiento(dia,mes,anyo) separado por espacio");
scanf("%d %d %d",&pp->unapersona.fec.dia,&pp->unapersona.fec.mes,
&pp->unapersona.fec.anyo);
printf("\n\n Salario: "); scanf("%d",&pp->salario);printf("\n Numero de Horas: "); scanf("%d",&pp->horas_semana);
}
7/29/2019 Fund. de Programacin - Tema 3
27/32
Estructuras y Uniones
void salida( struct persona_empleado up)
{puts("\n\n Datos de un Empleado \n");
printf("\n Nombre: %s ",up.unapersona.nombre);printf("\n Edad: %d ",up.unapersona.edad);printf("\n Fecha de Nacimiento: %d-%d-%d ",up.unapersona.fec.dia,
up.unapersona.fec.mes,up.unapersona.fec.anyo);
printf("\n Altura: %d ",up.unapersona.altura);printf("\n Peso: %d ",up.unapersona.peso);printf("\n Horas de la Sem: %d ",up.horas_semana);
}
7/29/2019 Fund. de Programacin - Tema 3
28/32
Estructuras y UnionesEjercicios
Realice un programa que permita al usuario capturar los datos de unacantidad N de clientes y que muestre al final su total facturado.
La estructura cliente contendr las siguientes caractersticas:- Nombre: char[50].
- Cant. Unidades: int.- Precio Unitario: float.- Estado: eEstado.
7/29/2019 Fund. de Programacin - Tema 3
29/32
Estructuras y UnionesEjercicios
Realice una aplicacin que permita a un usuario capturar los datos deuna cantidad n de personas a travs de una funcin y los muestre porpantalla a travs de otra funcin para dicho fin.
La estructura persona deber tener:
* ID (int).* Nombre (char[50]).* Apellido (char[50]).* Sexo (char).* Salario (double).
7/29/2019 Fund. de Programacin - Tema 3
30/32
Estructuras y UnionesEjercicios
Realice un programa que permita capturar una cantidad N de discoscompactos. Luego, permitir mostrar la cantidad de discos por perodo(mensual, trimestral, cuatrimestral, semestral).
Utilizar la siguiente estructura para los discos:
- Ttulo texto (50)- Artista texto (50)- Gnero texto (20)- Fecha fecha- No_Canciones nmero entero- Precio nmero con decimales
La estructura fecha tendr las siguientes caractersticas:int dia;enum_Meses mes;int anyo;
7/29/2019 Fund. de Programacin - Tema 3
31/32
Estructuras y UnionesEjercicios
Se le preguntar al usuario por qu perodo desea cuantificar los discos,utilizando un enum para los perodos. Al final, tambin se debernimprimir todos los discos compactos introducidos.
7/29/2019 Fund. de Programacin - Tema 3
32/32
Estructuras y UnionesEjercicios
Realice un programa que permita registrar existencias de artculos enalmacenes. El usuario podr especificar la cantidad mxima dealmacenes, artculos y artculos distintos por almacn.
Se le mostrar al usuario un men para que pueda (1) registrar un
nuevo almacn, (2) registrar un nuevo artculo y (3) establecer nuevaexistencia.
Al registrar una existencia, se debern mostrar los almacenes y artculospara que el usuario pueda seleccionar.
Si el usuario especifica salir, se mostrarn las existencias registradas decada artculo, con su almacn.
Se crear una funcin para capturar un almacn y una para capturar unartculo.