Fund. de Programación - Tema 3

download Fund. de Programación - Tema 3

of 32

Transcript of Fund. de Programación - Tema 3

  • 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(&reg_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.