utp pti_s10_estructuras y uniones
TRANSCRIPT
ProgramaciónProgramación
(L109)
Sesión: 10
Ing. José C. Benítez P.
Estructuras y Uniones
Sesión 10. Temas
Estructuras y Uniones
� Introducción
� Concepto y declaración de
una Estructura
� Estructuras anidadas.
Programación - Prof. Ing. Jose C. Benitez P. 2
� Estructuras anidadas.
� Arrays de Estructuras
Arreglos, Estructuras y Uniones. Introducción
� En la creación de aplicaciones para algunos
problemas surge la necesidad de agrupar datos de
diferente tipo o de manejar datos que serian muy
difícil de describir con los tipos de datos
primitivos, en este caso debemos aprovecharnos
Programación - Prof. Ing. Jose C. Benitez P. 3
primitivos, en este caso debemos aprovecharnos
de las características que hacen al lenguaje C
especial, es decir se debe usar estructuras,
uniones y punteros.
Arreglos, Estructuras y Uniones. Introducción
� Conociendo el uso de arrays en C, aprender como
se usan estructuras y uniones será sencillo.
� Una estructura es un array que tiene la capacidad
de almacenar variables con distintos tipos y
Programación - Prof. Ing. Jose C. Benitez P. 4
de almacenar variables con distintos tipos y
nombres.
� Una unión es similar a una estructura, pero solo
podrá tener un valor a la vez.
Estructuras. Concepto y declaración
� Una estructura contiene varios tipos de datos.
� La forma de definir una estructura es haciendo
uso de la palabra clave struct.
� Ejemplo de la declaración de una estructura:
struct mystruct
{
int numero;
double peso;
char nombre[25];
} variable;
Programación - Prof. Ing. Jose C. Benitez P. 5
} variable;
� "variable" es una instancia de "mystruct"
y no es necesario ponerla aquí.
� Se podría omitir de la declaración de
"mystruct" y más tarde declararla
usando:
struct mystruct
{
int numero;
double peso;
char nombre[25];
}; struct mystruct variable;
Estructuras. Concepto y declaración
� También es una práctica muy común
asignarle un alias o sinónimo al nombre de la
estructura, para evitar el tener que poner
"struct mystruct" cada vez.
� C nos permite la posibilidad de hacer esto
usando la palabra clave typedef, lo que crea typedef struct
struct mystruct
{
int numero;
double peso;
char nombre[25];
} variable;
Programación - Prof. Ing. Jose C. Benitez P. 6
usando la palabra clave typedef, lo que crea
un alias a un tipo:
typedef struct
{
int numero;
double peso;
char nombre[25];
} Mystruct; La estructura misma no tiene nombre (por
la ausencia de nombre en la primera linea),
pero tiene de alias "Mystruct".
Entonces se puede usar así:Mystruct variable;
Estructuras. Concepto y declaración
typedef struct
{
int numero;
double peso;
� Note que es una convención, y una
buena costumbre usar mayúscula en la
primera letra de un sinónimo de tipo.
� De todos modos lo importante es darle
algún identificador para poder hacer
Programación - Prof. Ing. Jose C. Benitez P. 7
double peso;
char nombre[25];
} Mystruct;
algún identificador para poder hacer
referencia a la estructura: podríamos
tener una estructura de datos recursiva
de algún tipo. Mystruct variable;
Estructuras. Concepto
� Ejemplo 1:
#include <stdio.h>
#include <string.h>
/* definimos una estructura para cds */
struct cd
{
char titulo[30];
char artista[25];
float precio;
int canciones;
} Cd1 = {"Canciones Bebe", "Pinocho", 12.50, 16};
void main(void) {
struct cd Cd2;
strcpy(Cd2.titulo, "New Age“);
strcpy(Cd2.artista, "Old Man“);
Cd2.precio = 15.00;
Programación - Prof. Ing. Jose C. Benitez P. 8
Cd2.precio = 15.00;
Cd2.canciones = 12;
printf("\n Cd 1");
printf("\n Titulo: %s ", Cd1.titulo);
printf("\n Artista: %s ", Cd1.artista);
printf("\n Total Canciones: %d ", Cd1.canciones);
printf("\n Precio Cd: %f ", Cd1.precio);
printf(“\n\n Cd 2");
printf("\n Titulo: %s ", Cd2.titulo);
printf("\n Artista: %s ", Cd2.artista);
printf("\n Total Canciones: %d ", Cd2.canciones);
printf("\n Precio Cd: %.2f ", Cd2.precio);
getchar();
}
Estructuras. Concepto
� Ejemplo 2:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void main()
{
struct
{
Programación - Prof. Ing. Jose C. Benitez P. 9
{
char nombre[20];
int edad;
float estatura;
} persona;
printf("\nHola! Voy a hacerte unas preguntas:");
printf("\nComo te llamas? : ");
scanf("%s",persona.nombre); // gets(persona.nombre);
printf("\nCuantos anhos tienes? : ");
scanf_s("%d", &persona.edad );
printf("\nCuanto mides? : ");
scanf_s("%f", &persona.estatura );
printf( "Te llamas %s tienes %d anhos y mides %.2f\n", persona.nombre, persona.edad, persona.estatura);
system("PAUSE");
}
Estructuras Anidadas. Concepto y declaración
� Las estructuras se usan como
cualquier otro tipo de variables
normales y corrientes, pero
almacenadas dentro de un
grupo.
� Además, una estructura puede
struct
{
int edad;
char* nombre;
struct
{
int numero;
char* direccion;
int telefono;
Programación - Prof. Ing. Jose C. Benitez P. 10
� Además, una estructura puede
contener a otra como en el
ejemplo:
� Para acceder a la dirección, por
ejemplo, habría que escribir
persona.vivienda.direccion;
int telefono;
} vivienda;
} persona;
Arrays de Estructuras. Concepto y declaración
� Se ha creado 10 personas con
los mismos datos.
� Para acceder, por ejemplo al
número 3 habría que escribir:
persona[2].nombre;
struct
{
int edad;
char* nombre;
struct
{
int numero;
char* direccion;
int telefono;
Programación - Prof. Ing. Jose C. Benitez P. 11
persona[2].nombre; int telefono;
} vivienda;
} persona[20];
Arrays de Estructuras. Ejemplo#include <stdio.h>
int main(){
int npersonas;
int i = 1;
struct {
int edad;
float estatura;
char* nombre;
} persona[9];
printf( "Hola! Voy a hacerte unas preguntas:");
Programación - Prof. Ing. Jose C. Benitez P. 12
printf( "Hola! Voy a hacerte unas preguntas:");
printf( "Cuantas personas participaran?" );
scanf( "%i", &npersonas );
for( i = 0; i < 10 ; i++ )
{
printf( "\nComo te llamas? : "); scanf( "%s", &persona[i].nombre );
printf( "\nCuantos anios tienes? : "); scanf( "%d", &persona[i].edad );
printf( "\nCuanto mides? : "); scanf( "%f", &persona[i].estatura );
printf( "Te llamas %s tienes %d anios y mides %.2f", &persona[i].nombre, persona[i].edad, persona[i].estatura );
}
return 0;
getchar();
}
Tarea (T10)
Hacer un programa en C utilizando estructuras. (Utilizar enciclopedias):
1. Registrar y mostrar los datos mas importantes de su familia. Como mínimo
5 variables. Los datos deben ser reales.
2. Registrar y mostrar los datos mas importantes de su clase. Como mínimo 5
variables. Hallar el promedio de edad. Hallar el peso promedio. Hallar la
talla promedio. Los datos deben ser reales.
3. Registrar y mostrar los datos mas importantes de América Latina. Como
mínimo 5 variables. Hallar la población y la extensión promedio. Hallar el
Programación - Prof. Ing. Jose C. Benitez P. 13
mínimo 5 variables. Hallar la población y la extensión promedio. Hallar el
PBI promedio. Los datos deben ser reales.
4. Registrar y mostrar los datos mas importantes de su Curso de
Programación C. Como mínimo 5 variables. Hallar el promedio de notas, la
edad media y la talla promedio. Los datos deben ser reales.
5. Registrar y mostrar los datos mas importantes de una empresa. Considerar
los siguientes variables: Código, Apellidos, Nombres, Fecha de Ingreso,
Sexo, SI es casado o no, Numero de hijos, Grado de Instrucción, Edad,
Talla. Hacer un reporte estadístico de los empleados considerando la
media, la moda y la desviación estándar de cada variable.
Tarea (T10)
6. Un programa que pida el nombre, el apellido y la edad de una persona, los
almacene en un “struct” y luego muestre los tres datos en una misma línea,
separados por comas.
7. Un programa que pida datos de 8 personas: nombre, dia de nacimiento, mes de
nacimiento, y año de nacimiento (que se deben almacenar en una tabla de
structs).
Después deberá repetir lo siguiente: preguntar un número de mes y mostrar en
pantalla los datos de las personas que cumplan los años durante ese mes.
Terminará de repetirse cuando se teclee 0 como número de mes.
Programación - Prof. Ing. Jose C. Benitez P. 14
Terminará de repetirse cuando se teclee 0 como número de mes.
8. Un programa que sea capaz de almacenar los datos de 50 personas: nombre,
dirección, teléfono, edad (usando una tabla de structs). Deberá ir pidiendo los
datos uno por uno, hasta que un nombre se introduzca vacío (se pulse Intro sin
teclear nada). Entonces deberá aparecer un menú que permita:
� Mostrar la lista de todos los nombres.
� Mostrar las personas de una cierta edad.
� Mostrar las personas cuya inicial sea la que el usuario indique.
� Salir del programa
(lógicamente, este menú debe repetirse hasta que se escoja la opción de “salir”).
Presentación
�Todos los códigos fuentes deben ser presentados en un
solo archivo de texto, cuyo nombre lleve las iniciales del
curso, sus Apellidos, guion bajo y luego el numero de la
tarea. Ejemplo:
PRG_BenitezPalacios_T10.txt
� Los códigos deben estar comentados bloque a bloque.
15Programación - Prof. Ing. Jose C. Benitez P.
� Los códigos deben estar comentados bloque a bloque.
� La presentación de esta Tarea es obligatoria y tiene 03
puntos de bonificación en la Tercera Practica Calificada.
Plazo de entrega: Lunes 30/01/12
Las Tareas que no cumplan las indicaciones no serán
recepcionados por el profesor.
Sesión 10. Estructuras y uniones
Programación
Programación - Prof. Ing. Jose C. Benitez P. 16
http://utpprogc.blogspot.com