Anda di halaman 1dari 7

TIPO DE DATO ABSTRACTO (TDA)

2010

Preparado por : Ing. Isabel B. Marko

Pagina : 1

TIPO DE DATO ABSTRACTO


Es un tipo de dato que existe como producto de una necesidad y se concentra en propiedades
esenciales del tipo de dato ignorando los detalles de implementacin.

ESTRUCTURA
Una estructura es una coleccin de variables a las cuales se hace referencia bajo un nico
nombre. Las variables que forman la estructura se denominan elementos o miembros de la
estructura.
Una estructura forma una plantilla y podemos crear varias variables de estructuras
Formato general
struct nombre tipo estructura
{
tipo nombre_elemento1;
tipo nombre_elemento2;
} variables_estructuras;
Donde nombre tipo estructura y variables_estructuras pueden omitirse pero no
simultneamente.
Ej.
struct alumno
{
int legajo;
char nombre[30];
char titulo[30];
};
Lo anterior es una sentencia de identificacin de tipo donde se ha definido la forma y no se
ha declarado ninguna variable.
Para declarar una variable estructura con la forma de alumno se coloca
struct alumno dato;
La variable es dato y ocupa en memoria :
4byte
para legajo ( en mbito windows)
30byte
para nombre
30byte
para titulo
62 byte
en total
Se puede declarar todo junto
struct alumno
{
int legajo;
char nombre[30];
char titulo[30];
} dato, otro, nuevo;
Para acceder a un elemento o miembro se utiliza el operador punto (.)
Nombre variable struct . nombre del campo

Preparado por : Ing. Isabel B. Marko

Pagina : 2

Ej
dato.legajo = 1456;
o asignar una cadena
dato.titulo =bachiller;
Si se quiere acceder a los caracteres individuales del nombre se puede poner
for(int t=0; dato.nombre[t]; t++)
printf( %c , dato.nombre[t]);
Inicializacin
struct fecha d = {13, 8, 2001};
Vector de estructuras
Si se desea trabajar con un vector de estructuras se debe definir primero la estructura y luego
el vector.
Ej con la estructura anterior es
struct alumno info[50];
para acceder a uno de sus elementos se coloca primero el vector con el indice como cualquier
vector y luego el elemnto correspondiente
cin >> info[i].legajo;
Si quiero comparar la inicial del nombre por ejemplo con una letra sera
if ( info[i].nombre[0] == A)
Punteros de estructuras
Se declara
struct dir{
char direccion [30];
char localidad [20];
} dato;
struct dir *puntero;
declara un puntero de estructura y se inicializa con

puntero = & dato;

Cuando se trabaja con notacin de punteros se reemplaza el punto por ->


o sea

direccin variable struct -> nombre del campo

pone la direccin de dato en el puntero, y para acceder a los campos se coloca


dato.direccion

(*puntero). direccion

o puntero->direccion

Una estructura como parte de otra


Ejemplo 1:
struct d {
char apellido [20];
char nombre [20];
};
Preparado por : Ing. Isabel B. Marko

Pagina : 3

struct nn{
int legajo;
struct d al ;
int nota ;
};
struct nn alumnos;

y se referencia alumnos.al.apellido;

Ejemplo 2:
struct fecha
{ int dia;
int mes;
};
entonces
struct {

o todo junto

int cuenta;
char nombre[30];
struct fecha ultima;
}cliente, *pc;
pc = &cliente;
} cliente , *pc= & cliente;

Para acceder al nombre sera


cliente.nombre
pc->nombre
o (*pc).nombre
Si se quiere acceder a la tercer letra del nombre
cliente.nombre[2]
pc->nombre[2]
(*pc).nombre[2]
Asignacin de estructuras
Si dos variables estructuras son del mismo tipo es posible asignarlas una en la otra
Ej.
struct{
int x;
float y;
} uno,dos;
entonces
uno.x=111;
uno.y = 23.22;
dos = uno;
Paso de elementos de estructuras a funciones
Pasaje por valor
struct {
char x;
int y;
char s[30];
float z;
} muestra;
Llamadas
Declaracin
func1 ( muestra.x) pasa el valor de x,
func1( char );
func2 ( muestra.y) pasa el valor de y,
func1(int);
func3 ( muestra.s) pasa la direccion de comienzo de la cadena s func1(char*);
Preparado por : Ing. Isabel B. Marko

Pagina : 4

Pasaje por direccin


Pasar la direccin de un elemento individual de la estructura para lograr el paso por direccin
(punteros) se coloca
Llamadas
func1 (& muestra.x) pasa la direccion de x,
func2 (& muestra.y) pasa la direccion de y,
func3 ( muestra.s)

Declaracin
func1(char *);
func1(int*),
func1(char*);

EJEMPLOS
//hallar la suma de dos complejos
struct c{
float re,im;
};
void main()
{
struct c x,y,s;
cout << ingrese dos reales";
cin >> x.re >> x.im;
cin >>y.re >> y.im;
s.re = x.re+ y.re;
s.im = x.im+ y.im;
cout << "la suma real es " << s.re;
cout << "la suma imaginaria es " << s.im;
}

// hallar la suma de dos complejos con funcin por valor


struct c{
float re,im;
};
struct c suma ( struct c , struct c);
void main()
{
struct c x,y,s;
cout << "ingrese dos reales";
cin >> x.re >> x.im;
cin >> y.re >> y.im;
s = suma ( x,y);
cout << "la suma real es " << s.re;
cout << "la suma imaginaria es " << s.im;
}
struct c suma ( struct c a, struct c b)
{
struct c z;
z.re = a.re +b.re;
z.im = a.im + b.im;
return z;
}
// hallar la suma de dos complejos con funcin por direccin (punteros)
struct c{
float re,im;
};
void suma ( struct c *, struct c *, struct c *);
void main()
{
struct c x,y,s;
cout << "ingrese dos reales";
cin >>x.re >> &x.im;
Preparado por : Ing. Isabel B. Marko
Pagina : 5

cin >>y.re >> y.im;


suma ( &x,&y,&s);
cout << "la suma real es "<< s.re;
cout << "la suma imaginaria es " <<

s.im;
}
void suma ( struct c *a, struct c *b, struct c *z)
{
z->re = a->re + b->re;
z->im = a->im + b->im;
}

UNION
Es una tipo de dato que puede contener en distintos momentos , objetos (o campos) de
distintos tipos y tamaos.
Este tipo de dato comparte muchas caractersticas sintcticas y funcionales con el tipo struct.
La diferencia es que solo uno de sus miembros puede ser almacenado a la vez.
El tamao de una unin es el tamao del elemento ms largo.
union tipo {
int x;
float y;
char z;
char cad[10];
};
union tipo uni; // uni es la variable del tipo unin
En este caso el tamao de uni es 10 byte (es el campo ms grande)
EJEMPLO
Dado el siguiente tipo y declaracin de variable:
union vigila {
char guardia[25];
char empleado [35];
} ;
struct pers {
int edad;
vigila guaremp;
};

pers empresa;
Qu cantidad de memoria (bytes ) es reservada para la variable: empresa ?
Es reservada 39 bytes, formada por guaremp (35 byte) y edad (4byte, en entorno
windows).

ENUMERACION
Es una lista de descripciones. Se usa para proveer identificadores mnemnicos a un conjunto
de valores enteros. Es un conjunto de constantes enteras con nombre, que identifican los
valores posibles que una variable de ese tipo puede tomar.
enum . { enum1, enum2, enum3,..enumn};
Ej.
Preparado por : Ing. Isabel B. Marko

Pagina : 6

enum Bolean { FALSE, TRUE};


Bolean es la etiqueta
enum dias { domingo, lunes, martes, mircoles, jueves, viernes, sbado} dd;
dias es la etiqueta
domingo, lunes, martes, etc. Son enumeradores constantes, que se asigna a cada uno un
entero fijo.
En ausencia de inicializacin explicita, se le asignan los enteros a partir de 0(cero).
domingo = 0, lunes =1 ........................sbado =6
Se puede tener inicializacin explicita, con enteros positivos y negativos y pueden duplicarse.
enum Nombre { enum1 = exp1_cte1, enum2=exp2_cte2, ..enumn=expn_cten};
enum dias { domingo = 1, lunes, martes =4, mircoles, jueves =-1, viernes, sbado} dd;
La inicializacin queda:
domingo = 1
lunes =2,
martes = 4
mircoles = 5
jueves = -1
viernes = 0
sbado =1

TYPEDEF
Es una redefinicin de un tipo de dato
typedef Nombre TipoDato NuevoNombre TipoDato

Ej. 1

typedef int entero


entero a;
Ej. 2
typedef struct {
int real;
int imaginario;
} complejo;
complejo C;

Preparado por : Ing. Isabel B. Marko

Pagina : 7

Anda mungkin juga menyukai