utp pti_s10_estructuras y uniones

16
Programación Programación (L109) Sesión: 10 Ing. José C. Benítez P. Estructuras y Uniones

Upload: jcbenitezp

Post on 13-Jun-2015

848 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Utp pti_s10_estructuras y uniones

ProgramaciónProgramación

(L109)

Sesión: 10

Ing. José C. Benítez P.

Estructuras y Uniones

Page 2: Utp pti_s10_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

Page 3: Utp pti_s10_estructuras y uniones

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.

Page 4: Utp pti_s10_estructuras y uniones

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.

Page 5: Utp pti_s10_estructuras y uniones

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;

Page 6: Utp pti_s10_estructuras y uniones

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;

Page 7: Utp pti_s10_estructuras y uniones

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;

Page 8: Utp pti_s10_estructuras y uniones

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();

}

Page 9: Utp pti_s10_estructuras y uniones

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");

}

Page 10: Utp pti_s10_estructuras y uniones

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;

Page 11: Utp pti_s10_estructuras y uniones

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];

Page 12: Utp pti_s10_estructuras y uniones

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();

}

Page 13: Utp pti_s10_estructuras y uniones

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.

Page 14: Utp pti_s10_estructuras y uniones

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”).

Page 15: Utp pti_s10_estructuras y uniones

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.

Page 16: Utp pti_s10_estructuras y uniones

Sesión 10. Estructuras y uniones

Programación

Programación - Prof. Ing. Jose C. Benitez P. 16

http://utpprogc.blogspot.com