Sie sind auf Seite 1von 44

Universidad Tecnolgica La Salle

Len, Nicaragua

Lenguaje de Programacin II
Unidad I: Estructuras y Uniones

Docente: Ing. Carolina Robelo


carolina.robelo@ulsa.edu.ni

Objetivos Generales
Manipular y procesar las diferentes instrucciones de un
lenguaje estructurado.
Conocer los pasos del diseo y desarrollo de programas
orientados a objetos que resuelvan problemas de
ingeniera.
Aplicar los tpicos de la programacin orientada a objetos
en un lenguaje de programacin, que sirvan de base para
el desarrollo de software.

Plan Temtico

Medios Didcticos
DEV C/C++
Visual Studio 2010+
Gua de Estudios
Classroom Cdigo: ht3ecin

SISTEMA DE EVALUACION

Clases Prcticas
Laboratorios
Pruebas
Examen Parcial
+ Asistencia y Participacin

Laboratorios y Clases Prcticas


Pruebas
Proyecto
Examen Parcial
+ Asistencia y Participacin

20
20
20
40
100
20
25
25
30
100

Bibliografa
Joyanes Aguilar, Luis. Programacion en C:
Metodologia, Algoritmos y Estructuras de Datos.
Segunda Edicin. Editorial McGraw-Hill, 2005.
Kernighan Brian, R. (1991). El lenguaje
programacin C. Mxico. Ed. Pearson Educacin.

ULSA- Lenguaje De Programacion II


Ing. Carolina Robelo

de

Prueba Diagnostica
Desarrolle un programa que tenga la siguiente entrada:
Primero, el usuario ingresa un nmero entero n, que indica
cuntas palabras ingresar a continuacin;
Despus el usuario ingresa n palabras.
La salida del programa debe mostrar la palabra ms larga y la ms
corta que fueron ingresadas por el usuario.

ESTRUCTURAS

Diferencia entre Arreglos y Estructuras


Que es una estructura?

Un arreglo, que es una estructura de datos cuyos elementos son todos del
mismo tipo.
Una estructura de datos cuyos elementos individuales pueden ser de
distinto tipo
Enteros
Coma flotante
A los elementos individuales de una
Caracteres
estructura se les denomina miembros.
Punteros
Arrays y otras estructuras

DEFINICIN DE UNA ESTRUCTURA


Una estructura debe ser definida en trminos de sus miembros individuales
struct nombre-estructura
{
miembro 1;
miembro 2;

miembro m;
} ;

Una vez que la composicin de la estructura ha sido


definida, las variables individuales de este tipo de
estructura pueden declararse como sigue:

Struct nombre-estructura variable1, variable2,


variable n;
ULSA- Lenguaje De Programacion II
Ing. Carolina Robelo

DEFINICIN DE UNA ESTRUCTURA


Supongamos que el taller de mecnica del Tcnico La Salle desea
almacenar los datos de los vehculos a los que se le realiza inspeccin
mecnica.
struct datos-vehiculo {
char marca[20] ;
char estilo[15] ;
int anio;
float motor;
char fecha-insp[8];
} veh1, veh2, veh3;

Declaracin tpica de estructura.

Es posible combinar la declaracin de la


composicin de la estructura con la de las
variables de estructura, como se muestra.
Otra forma de declarar las variables de la estructura:
struct datos-vehiculo veh1, veh2, veh3;

ULSA- Lenguaje De Programacion II


Ing. Carolina Robelo

DEFINICIN DE UNA ESTRUCTURA


Una variable de estructura puede ser definida como miembro de
otra estructura.
Supongamos que el Taller de Mecanica del Tecnico La Salle requiere un
programa para manejar la informacion de sus clientes.
struct
{ int
int
int
};

fecha
mes;
dia;
anio;

La segunda estructura (cuenta) contiene ahora


otra estructura (fecha) como uno de sus
miembros.

struct cuenta
La declaracin de fecha debe preceder a la
{
int num_cuenta;
declaracin de cuenta.
char tipo_cuenta;
char nombre[80];
float saldo;
struct fecha ultimopago;
} antiguocliente, nuevocliente

ULSA- Lenguaje De Programacion II


Ing. Carolina Robelo

ESTRUCTURAS
A los miembros de una variable de estructura se le pueden
asignar valores iniciales de la misma forma que a los arrays.

Los valores iniciales deben aparecer en el orden en que


sern asignados a sus correspondientes miembros de la
estructura, encerrados entre llaves y separados por comas.
La forma general es :
tipo-almacenamiento struct nombre variable =
{valor 1, valor 2, ., valor m};

ULSA- Lenguaje De Programacion II


Ing. Carolina Robelo

Estructuras
Ejemplo: Asignacin de valores iniciales a los miembros de una
variable estructura.
struct fecha {
int mes;
int dia;
int anio;
};
struct cuenta {
int num_cuenta;
char tipo_cuenta;
char nombre [80];
float saldo;
struct fecha ultimopago;
} ;
static struct cuenta cliente = {12345, 'R', Juan Perez", 586.30,
5, 24, 90};
ULSA- Lenguaje De Programacion II
Ing. Carolina Robelo

Estructuras

Tambin es posible definir un array de estructuras; esto es, un array


en el que cada elemento sea una estructura.
struct fecha {
int mes;
int da;
int anio;
};

Tenemos un array y una estructura incluidas dentro de


otra estructura, que es a su vez un elemento de un
array.
Por supuesto, tambin se puede definir cliente en una
declaracin separada

struct cuenta {
int num_cuenta;
char tipo_cuenta;
char nombre[80];
float saldo;
struct fecha ultimopago;
} cliente[100];
ULSA- Lenguaje De Programacion II
Ing. Carolina Robelo

struct cuenta cliente [100];

Estructuras
Cada estructura, con respecto a las definiciones de miembros,
es una entidad autnoma. As, el mismo nombre de miembro
puede usarse en diferentes estructuras para representar
diferentes datos.
En otras palabras, el mbito de un nombre de miembro est
confinado a la estructura particular dentro de la cual ha sido
struct primera {
definido.
float a;
int b;
char c;

} ;
struct segunda {
char a;
float b, c;
} ;
ULSA- Lenguaje De Programacion II
Ing. Carolina Robelo

Procesamiento de una Estructura


Los miembros de una estructura se procesan generalmente de
modo individual, como entidades separadas.
Un miembro de una estructura puede ser accedido escribiendo:
variable.miembro
struct fecha {
int mes;
int dia;
int anio;
};

En este ejemplo cliente es una variable de la


estructura cuenta. Si queremos acceder al nmero de
cuenta del cliente, debemos escribir:

struct cuenta {
int num_cuenta;
char tipo_cuenta;
char nombre[80];
float saldo;
struct fecha ultimopago;
} cliente;
ULSA- Lenguaje De Programacion II
Ing. Carolina Robelo

cliente.num_cuenta

Procesamiento de una Estructura


Ejemplo: Expresiones que involucran a la variable de estructura

cliente y a sus miembros


struct fecha {
int mes;
int dia;
int anio;
};
struct cuenta {
int num_cuenta;
char tipo_cuenta;
char nombre[80];
float saldo;
struct fecha ultimopago;
} cliente;

ULSA- Lenguaje De Programacion II


Ing. Carolina Robelo

++cliente.saldo
cliente.saldo++
--cliente.num_cuenta
&cliente
&cliente.num_cuenta

Procesamiento de una Estructura


struct fecha {
int mes;
int dia;
int anio;
};
struct cuenta {
int num_cuenta;
char tipo_cuenta;
char nombre[80];
float saldo;
struct fecha ultimopago;
} cliente[100];

En este ejemplo cliente es un array que puede


contener hasta 100 elementos.
Para acceder al nmero de cuenta por ejemplo
del cliente 14:
cliente[13].num_cuenta

ULSA- Lenguaje De Programacion II


Ing. Carolina Robelo

Procesamiento de una Estructura


Los miembros de una estructura pueden procesarse de la
misma manera que las variables ordinarias de este mismo
tipo. Los miembros de una estructura:
Pueden aparecer en expresiones
Pueden pasarse y ser devueltos por funciones
Se pueden tratar como variables ordinarias.
Los miembros complejos de estructuras se procesan de la
misma manera que los datos ordinarios del mismo tipo.
Por ejemplo, un miembro de estructura que es un array
puede procesarse del mismo modo que un array ordinario,
y con las mismas restricciones.
ULSA- Lenguaje De Programacion II
Ing. Carolina Robelo

Procesamiento de una Estructura


Ejemplo: A continuacin se muestran varios grupos de
instrucciones que acceden a miembros individuales de
estructura. Todos los miembros de la estructura se definen
conforme a la declaraciones anteriores.
cliente.saldo=0;
cliente.ultimopago.mes = 12;
printf("Nombre: %s\n", cliente.nombre);
if (cliente.tipo_cuenta == 'P')
printf ("Cuenta preferente No.: %d\n",
cliente.num_cuenta);
e1se
printf (Cuenta regular No.: %d\n,
cliente.num_cuenta);
ULSA- Lenguaje De Programacion II
Ing. Carolina Robelo

Tamano de una Estructura


Puede obtenerse mediante el uso del operador sizeof: Determina el
numero de bytes asociados con una variable de estructura.
#include <stdio.h>
main( ) /* determinar el tamao de una estructura */
{
Struct fecha{
Int mes;
Int dia;
Int anio;
};
struct cuenta {
int num_cuenta;
char tipo_cuenta;
char nombre[80];
float saldo;
struct fecha ultimopago;
} cliente;

printf ("%d\n", sizeof cliente);


printf("%d", sizeof (struct cuenta));
}
ULSA- Lenguaje De Programacion II
Ing. Carolina Robelo

Tipo de Datos Definidos por el usuario


Typedef: Permite a los usuarios definir nuevos tipos de datos que
sean equivalentes a los tipos de datos existentes. Una vez que el
tipo de datos definido por el usuario ha sido establecido,
entonces las nuevas variables, arrays, estructuras etc, pueden
ser declaradas en trminos de este nuevo tipo de datos.
Ejemplo:
typedef tipo nuevo-tipo;
typedef int edad;
edad varon, hembra;
ULSA- Lenguaje De Programacion II
Ing. Carolina Robelo

int varon, hembra;

Tipo de Datos Definidos por el usuario


La caracterstica typedef es particularmente til cuando se definen
estructuras, ya que se elimina la necesidad de escribir repetidamente
struct cuando se referencia una estructura.
typedef struct {
miembro 1;
miembro 2;
miembro m;
} nuevo-tipo;
Donde nuevo-tipo es el tipo de estructura definida por el
usuario.
Las variables de estructura pueden definirse en trminos del
nuevo tipo de datos.
ULSA- Lenguaje De Programacion II
Ing. Carolina Robelo

Tipo de Datos Definidos por el usuario


typedef struct {
int num_cuenta;
char tipo_cuenta;
char nombre [80];
float saldo;
} registro;
registro anteriorcliente, nuevocliente;

La primera declaracin define registro como un tipo de datos


definido por el usuario.
La segunda declaracin define anteriorcliente y nuevocliente como
variables de estructura de tipo registro.
ULSA- Lenguaje De Programacion II
Ing. Carolina Robelo

PASO DE ESTRUCTURAS A UNA FUNCIN


Hay varias maneras de pasar informacin de una estructura a o
desde una funcin.
Se pueden transferir los miembros individuales, o
Transferir las estructuras completas.
Los miembros individuales de una estructura se pueden pasar a
una funcin como argumentos en la llamada a la funcin, y un
miembro de una estructura puede ser devuelto mediante la
instruccin return. Para hacer esto, cada miembro de la
estructura se trata como una variable ordinaria.

ULSA- Lenguaje De Programacion II


Ing. Carolina Robelo

Ejemplo de paso de estructuras a o desde una funcion


float ajustar(char nombre[]; int num_cuenta, float saldo); /* Prototipo de funcion */
main ()
{
typedef struct { /* declaracion de estructura */
int mes;
int dia;
int anio;
} fecha;
struct {
/* declaracion de estructura */
int num_cuenta;
char tipo_cuenta;
char nombre[80];
float saldo;
fecha ultimopago;
} cliente;
cliente.saldo = ajustar(cliente.nombre, cliente.num_cuenta, cliente.saldo);
}

float ajustar(char nombre[], int num_cuenta, float saldo) {


float nuevosaldo;
/* declaracin de variable local */
Nuevosaldo = .. ;
/* ajustar el valor de saldo */
Return(nuevosaldo);
}
ULSA- Lenguaje De Programacion II
Ing. Carolina Robelo

UNIONES
Las uniones, como las estructuras, contienen miembros cuyos tipos
de datos pueden ser diferentes. Sin embargo, los miembros que
componen una unin comparten el mismo rea de almacenamiento
dentro de la memoria de la computadora, mientras que cada
miembro dentro de la estructura tiene asignada su propia rea de
almacenamiento.
As, las uniones se usan para ahorrar memoria.
Son tiles para aplicaciones que involucren mltiples
miembros donde no se necesita asignar valores a todos los
miembros a la vez.

ULSA- Lenguaje De Programacion II


Ing. Carolina Robelo

UNIONES
En trminos generales, la composicin de una unin puede
definirse como: union marca {
miembro 1;
miembro 2;

miembro m;
} ;

Las variables de unin individuales pueden ser declaradas como


tipo-almacenamiento union marca
variable 1, variable 2, . , variable n;

ULSA- Lenguaje De Programacion II


Ing. Carolina Robelo

UNIONES
Las dos declaraciones pueden ser combinadas, como se hizo
con las estructuras. As, se puede escribir:
union marca {
miembro 1;
miembro 2;
miembro m;
} variable 1, variable 2, . , variable n;

ULSA- Lenguaje De Programacion II


Ing. Carolina Robelo

UNIONES
Una unin puede ser un miembro de una estructura y una
estructura puede ser un miembro de una unin. Adems, las
estructuras y las uniones pueden ser mezcladas libremente con
los arrays.
Ejemplo: Un programa en C contiene las siguientes
declaraciones.

Otra forma para declarar las variables de estructura camisa y blusa es combinar
las dos declaraciones.
ULSA- Lenguaje De Programacion II
Ing. Carolina Robelo

UNIONES

Un miembro individual de una unin puede ser accedido de la


misma manera que un miembro de una estructura, usando los
operadores .y ->.
As, si variable es una variable de unin, entonces
variable.miembro refiere al miembro de la unin.
Anlogamente, si ptvar es una variable puntero que apunta a una
unin, entonces ptvar->miembro refiere al miembro de esa
unin.

ULSA- Lenguaje De Programacion II


Ing. Carolina Robelo

Ejemplo de UNIONES
#include <stdio.h>
main ()
{
union id {
char color;
int talla;
} ;
struct {
char fabricante[20];
float coste;
union id descripcion;
} camisa, blusa;
printf ("%d\n", sizeof (union id));

La ejecucin del programa produce la siguiente


salida:

Cada lnea de salida tendra un valor con


sentido de acuerdo con la instruccin de
asignacin que precede a cada instruccin
printf.

/ * asignar un valor a color * /


camisa.descripcion.color = B;
printf (" %c %d\n", camisa. descripcion.color, camisa.descripcion.talla);
/ * asignar un valor a talla * /
camisa.descripcion.talla = 12;
printf (" %c %d\n", camisa. descripcion.color, camisa.descripcion.talla) ;
}
ULSA- Lenguaje De Programacion II
Ing. Carolina Robelo

UNIONES
Una variable de unin puede ser inicializada. Recordar, sin
embargo, que slo uno de los miembros de una unin
puede tener un valor asignado en cada momento. La
mayora de los compiladores aceptarn un valor inicial para
uno solo de los miembros de la unin y asignarn este valor
al primer miembro dentro de la unin.

ULSA- Lenguaje De Programacion II


Ing. Carolina Robelo

UNIONES

En todos los otros aspectos, las uniones se procesan de la misma


manera y con las mismas restricciones que las estructuras.

As, un miembro individual de una unin puede ser procesado como


si fuera una variable ordinaria del mismo tipo de datos, y los
punteros a uniones pueden ser pasados a o desde funciones (por
referencia).

Adems, la mayora de los compiladores de C permiten asignar una


unin completa a otra unin, siempre que ambas uniones tengan la
misma composicin. Estos compiladores permiten tambin que
uniones completas sean pasadas a o desde funciones (por valor)
ULSA- Lenguaje De Programacion II
Ing. Carolina Robelo

Ejercicios
1. Definir una estructura llamada complejo que conste de dos miembros en
coma flotante llamados real e imaginario.
2. Declarar las variables x1, x2 y x3 como estructuras del tipo complejo, descrita
en el problema anterior.
3. Combinar la definicin y la declaracin de la estructura descritas en los
Problemas anteriores en una sola declaracin.
4. Crea un tipo de dato (estructura) definido por el usuario llamado registro,
que contenga los siguientes tres miembros:
a) una cantidad entera llamada ganados
b) una cantidad entera llamada perdidos
C) una cantidad en coma flotante llamada porcentaje
ULSA- Lenguaje De Programacion II
Ing. Carolina Robelo

Ejercicios
5. Definir una estructura del tipo hms que contenga tres miembros enteros,
llamados hora, minuto y segundo, respectivamente.
Despus definir una unin con dos miembros, cada uno de ellos una
estructura del tipo hms. Llamar a los miembros de la unin local y hogar,
respectivamente.
Declarar una variable de la union llamada hora.

ULSA- Lenguaje De Programacion II


Ing. Carolina Robelo

Actividad en Clase
Realizar un programa en C que lea en un array de estructuras los datos de los N
alumnos de la clase de Lenguaje de Programacin II y que imprima los datos
del alumno con mayor y menor nota.
Crear una estructura con los los datos de un alumno (nombre, sexo, edad,
carrera)
Solicitar los datos.
Mostrarlo en pantalla.

ULSA- Lenguaje De Programacion II


Ing. Carolina Robelo

Actividad en Clase
Escribir un programa que encuentre un registro de alumno que corresponda
con un numero de carnet especificado. Que el usuario tenga la opcin de
realizar las bsquedas que desee, si no desea seguir buscando que tenga la
opcin de salir.
Definir un tipo de datos estructura llamado registro cuyos miembros
serian los datos de un alumno Nombre (arreglo tipo char de 50
caracteres), Carnet y Nota tipo enteros.
Declarar una variable alumno (array donde N=5) de la estructura registro
e inicializar los miembros de la estructura.
Crear una funcin que busque los datos de un alumno en la estructura a
partir de un nmero de carnet introducido por el usuario.
Mostrar en pantalla la informacin del alumno.
ULSA- Lenguaje De Programacion II
Ing. Carolina Robelo

Actividad en Clase
Recordar:
Una estructura se puede pasar a una funcin:
Envindole los miembros individuales como argumentos.
Envindole la estructura completa (en este caso se debe pasar un
puntero a la estructura como argumento)

Trabajo en Casa
El Tecnico La Salle requiere un Sistema de Facturacion de clientes muy simple.
Necesita que se almacenen los siguientes datos:
Nombre del cliente
Direccin con calle, ciudad y estado, nmero de cuenta, estado de la cuenta (al
da, atrasada o moroso), saldo previo, nuevo saldo y fecha de pago.
El sistema debe permitir introducir cada registro en la computadora, y actualizarlo
tan pronto como sea introducido, para reflejar los pagos actuales. Entonces se
mostrarn todos los registros actualizados con el estado actual de cada cuenta. El
estado de la cuenta se basar en el ltimo pago realizado y el saldo previo del
cliente.

Actividad en Clase
El estado de cada cuenta ser determinado de la siguiente manera:
Si el pago actual es mayor que cero pero menor que el diez por ciento
del saldo previo, la cuenta ser atrasada.
Si hay un saldo previo y el pago actual es cero, la cuenta ser moroso.
En otro caso, la cuenta estar al da.

ULSA- Lenguaje De Programacion II


Ing. Carolina Robelo

Actividad en Clase
La estrategia global ser la siguiente:
1. Especificar el nmero de cuentas de clientes (nmero de
estructuras) a procesar.
2. Para cada cliente, leer los siguientes elementos:
Nombre
Calle
Ciudad
Nmero de cuenta
saldo anterior
Pago actual
Fecha de pago
ULSA- Lenguaje De Programacion II
Ing. Carolina Robelo

Actividad en Clase

3. Cada vez que se lee un registro en la computadora, actualizarlo de la siguiente


manera:
a) Comparar el pago actual con el saldo anterior y determinar el estado apropiado
de la cuenta.
b) Calcular el nuevo saldo restando el pago actual del saldo anterior (un saldo
negativo indicara un crdito).
4. Una vez que todos los registros han sido introducidos y procesados, escribir la
siguiente informacin para cada registro:
Nombre
Calle
Ciudad
Numero de cuenta
Saldo Anterior
Pago Actual
Nuevo saldo
Estado de la cuenta
ULSA- Lenguaje De Programacion II
Ing. Carolina Robelo

Actividad en Clase
Declaracion de las estructuras a utilizar
struct fecha {
int mes;
int dia;
int anio;
} ;
struct cuenta {
char nombre [80] ;
char calle[80];
char ciudad[80];
int num_cuenta;
int tipo_cuenta;
float anteriorsaldo;
float nuevosaldo;
float pago;
struct fecha ultimopago;
} cliente [100];
ULSA- Lenguaje De Programacion II
Ing. Carolina Robelo

Das könnte Ihnen auch gefallen