Unidad 10 - GEOCITIES.ws

Anuncio
Unidad 10
TIPOS DE DATOS DEFINIDOS POR EL USUARIO
Objetivos
n
n
n
n
Saber definir y utilizar tipos
de datos complejos, struct,
union, enum.
Saber acceder a un campo
de una variable struct y union.
Saber elegir un tipo de dato
struct para un problema dado.
Saber utilizar arrays de
estructuras para resolver un
problema dado.
n
n
n
n
n
Saber pasar estructuras a
funciones.
Saber definir estructuras
jerárquicas.
Conocer los campos de bits.
Integrar
los
conceptos
metodológicos
conocidos
con los nuevos tipos de
datos.
Conocer las ventajas de
definir nuestros propios tipos
de datos.
2
1
Contenidos
n
n
INTRODUCCIÓN
ESTRUCTURAS
q
q
q
q
q
q
q
q
q
q
n
UNIONES
q
Definición de un tipo estructurado
Declaración de variables de tipo
estructura
Inicialización de variables
estructuradas
Asignación de variables
estructuradas
Acceso a elementos individuales de
la estructura
Punteros a estructuras
Arrays de estructuras
Paso de estructura a funciones
Funciones que devuelven
estructuras o punteros a
estructuras
Estructuras autoreferenciadas
q
n
ENUMERACIONES
q
q
n
n
Declaración de una unión
Declaración de variables
Declaración de plantilla
Declaración de variables
CAMPOS DE BITS
EL ESPECIFICADOR typedef Y
LOS TIPOS DEFINIDOS POR EL
PROGRAMADOR
3
ESTRUCTURAS
n
Definición: tipo abstracto de datos
compuesto
por elementos con nombres, de igual o distintos
tipos de datos, llamados miembros o componentes
y referenciados bajo un mismo identificador.
Declaración de una estructura
[<Mod_Alm>] struct [nombre_estructura]
{
tipo nombre_objeto 1;
tipo nombre_objeto 2;
•Son definiciones de plantillas, no reservan
.......
espacio en memoria.
.......
•Si se omite nombre_estructura, se toma como
anónima y las variables de este tipo deben
tipo nombre_objeto n;
crearse a continuación de la declaración, no
} [var1][,var2];
podrán pasarse como parámetros.
•Miembros únicos dentro de la estructura.
4
2
Declaración de variables
n
n
Después de haber realizado la declaración de
la plantilla.
struct nombre_estructura VAR 1, VAR N;
En la declaración de la plantilla.
struct [nombre_estructura]
{
•Se recomienda que las plantillas sean
.......
globales.
• El nombre_estructura comenzará por T
.......
para mejorar la legibilidad del código.
} VAR 1, VAR N; • Se lee y escribe cada miembro por
separado.
5
Inicialización
struct Tf_naci{
int dia;
int mes;
int anno;
};
struct Tdir {
char nombre [30];
char calle [30];
char ciudad [20];
char estado;
unsigned long int DNI;
int codigo;
struct Tf_naci nacimiento;
};
La estructura anterior nos servirá para crear una variable de tipo Tdir e inicializarla.
struct Tdir direccion={ ”PEPE”, “SIERPES”, ”SEVILLA”,
‘D’, 30401326, 41001,2,12,2005 };
6
3
Asignación
Se puede asignar directamente
una variable struct a otra del
mismo tipo .
Ejemplo: siendo direc y direccion
variables Tdir, es válido en C:
direc = direccion;
7
Referencia a elementos de una estructura
n
“Selector de componente directo” ‘.’
Nombre_variable . nombre_objeto_miembro
q
Ejemplos: direc.codigo
printf(“%d”,direcc.codigo);
gets (direcc.calle);
int codigo_postal =direcc.codigo;
q
acceso a miembros de estructuras de estructuras
variable.miembro.submiembro
Ejemplo:
printf("\n %s, fecha: %d/%d/%d", dir.nombre , dir.nacimiento.dia,
dir.nacimiento.mes, dir.nacimiento.anno);
q
acceso a miembros arrays
variable.miembro_array[indice]
Ejemplo:
ver ejemplo diapositiva 9
PEPE, fecha: 2/12/2005
direccion.ciudad[i]=toupper(direccion.ciudad[i]);
n
“Selector de componente indirecto” ‘->’
(Para punteros)
8
4
Inicialización
struct Tf_naci{
int dia;
int mes;
int anno;
};
struct Tdir {
char nombre [30];
char calle [30];
char ciudad [20];
char *estado;
unsigned long int DNI;
int codigo;
struct Tf_naci nacimiento;
};
La estructura anterior nos servirá para crear una variable de tipo Tdir e inicializarla.
char aux=‘D’;
struct Tdir dir={ ”PEPE”, “SIERPES”, ”SEVILLA”,
&aux, 30401326, 41001,2,12,2005 };
9
Punteros a estructuras
n Declaración
Formato:
struct tipo_estructura * Nombre_puntero_structura;
Ejemplo:
struct Ttrab trabajador, *Ptrabajador = NULL;
……… // durante este proceso carga valor en trabajador
Ptrabajador=&trabajador; //
•Recuerda que un puntero debe tener un
dirección existente o NULL
10
5
Punteros a estructuras
n
Referencia a elementos de una variable estructurada puntero.
Formato:
Nombre_Puntero_Estructura
->Nombre_Elemento
Ejemplos (basados en diapositiva 9):
struct Tdir *ptvar, var= direccion; //declaración
Ptvar=&direccion;
ptvar->nacimiento.mes
// ptvar->miembro.submiembro
ptvar->ciudad[0] // ptvar->miembro[exp. índice]
*var.nombre || *var.estado //*var.ptmiembro (modificando diapositiva 9)
ptvar->estado // ptvar->ptmiembro
++ptvar //incrementa dirección ptvar- sólo en arrays de estructuras
++ptvar->codigo || ++(ptvar->codigo) // suma 1contenido de codigo
++*ptvar->estado //incrementa en 1 el contenido de estado
Ver Ropa_str.cpp
11
Array de estructuras
n
Declaración.
struct nombre_tipo_estructura nombre_array [N] [={
n
}];
Ejemplos de acceso para:
struct Tdir direccion[n];
direccion[i];
direccion[i].nombre;
direccion[i].nombre[j];
12
6
Paso de estructura a funciones.
A.- Pasar elementos individuales.
n
Por valor .
Por referencia.
Por dirección.
§
§
§
§
§
pasando la dirección del componente de
la variable estructurada
pasando un puntero al componente de la
variable estructurada
Ver página 381
13
Paso de estructura a funciones.
n
B.- Paso de variables completas.
§
§
§
Por valor .
Por referencia .
Por dirección.
§
§
pasando la dirección de la variable
estructurada
pasando un puntero a una variable
estructurada
Ver página 385
14
7
Uniones
n
Definición: Está formada por un conjunto de objetos
de igual o distinto tipo de dato, que se referencian bajo
un mismo nombre.
q
q
q
n
Ver ejem. pag. 395
Ropa.cpp
Sus elementos comparten la misma zona de memoria, por lo
que sólo uno estará activo.
La cantidad de bytes que ocupe el tipo union será el tamaño
del componente más largo.
Se suelen utilizar cuando se desea almacenar varios
elementos de forma excluyente, es decir, no ambos a la vez
Declaración de un tipo unión
union NombreUnion
{
tipo NombreMiembro 1;
......
tipo NombreMiembro n;
}[var];
•Son definiciones de plantillas, no reservan
espacio en memoria.
•Si se omite NombreUnion, se llama
anónima. Las variables de este tipo deben
crearse a continuación de la declaración y
no podrán pasarse como parámetros.
•Miembros únicos dentro de la unión. 15
Enumeraciones
n
Definición: Es un conjunto de constantes enteras con
nombre, que se referencian bajo un identificador
común.
q
n
La definición de un tipo enumerado especifica todos los
valores posibles que una variable de ese tipo puede tomar.
Declaración de un tipo enum
enum NombreEnumeración
{
nombre1 [= valor1],
....................
nombreN [= valorN],
}[var];
•La lista de nombres son constantes
enumeración o enumeradores.
•Los valores son opcionales, pero en
ausencia de inicializadores explícitos,
toman valores enteros 0, 1, 2, ..., etc.
•Si algún enumerador tiene asignado
un valor, toma dicho valor, en caso
contrario, adquiere el valor entero
siguiente del enumerador anterior.
•Los inicializadores pueden tomar
valores positivos, negativos y
expresiones.
16
8
Ejemplos
n
enum Marca {Seat, Renault=Seat-1, Peugeot=
Renault+5};
q
n
enum Marca { Seat = 1, Renault, Peugeot};
q
n
Seat vale 0, Renault –1 y Peugeot 4.
Seat vale 1, Renault 2 y Peugeot vale 3.
Varios identificadores pueden tomar el mismo valor,
pero cada identificador sólo puede usarse en un tipo
enumerado.
q
q
q
Por ejemplo:
enum color {naranja, rojo = 1, naranja, encarnado = 1};
enum fruta {kiwi, fresa, naranja, pera}; //error naranja está
definido en el enum anterior
• Ocupan 2 bytes en memoria, que es
lo que ocupa un entero.
17
Las teorías son estructuras de ideas que explican e interpretan los hechos.
Stephen Jay Gould
18
9
Descargar