Professional Documents
Culture Documents
ESTRUCTURAS DE DATOS
OBJETIVOS
DATO
Informacin en bruto, sin ningn significado Dado un enunciado, evento o accin, los datos
Permiten representar sus actores o participantes Analizndolos, se podr obtener resultados deseados
Edad: 22
Promedio: 7.5
-> entero
-> real
INFORMACIN
Es el resultado deseado luego de procesar los datos Los datos, al ser procesados, se convierten en informacin til o resultados.
Pedro, Rodriguez
Luis, Pozo Valor por hora = $2
155
120
$320
$310 $240
Para representar nmeros, usamos el sistema decimal Para representar palabras, usamos el abecedario
La computadora:
Usa conjuntos de 1s y 0s El dato mas pequeo en el computador es
Un 1 o un 0 -> bit
TIPOS DE DATOS
RECORDAR
El Sr. Vera de 63 aos tiene cedula No. 0908815533, y paga $120 de impuestos
Caracteres
Y EN LA COMPUTADORA?
1000 1001 En la computadora 1002 Cada byte es un casillero y tiene una direccin en memoria 1003 Los datos (nmeros y letras) se almacena en estos
casilleros
Depende de su tipo y del hardware de la computadora Un entero puede ocupar casillas de hasta 4 bytes Un doble siempre ocupara mas, por su mayor precisin
ALMACENANDO DATOS
TIPO DE DATO #bytes Representacin interna En ANSI C
ENTEROS
2 4 8 8 16 1
Positivos: conjunto de bits 38 -> 00100110 Negativos:Complemento a Dos -38 -> 11011001 Mantisa x base(exponente) 387.53 -> 38753 x 10-2 00000000100101110110000111111110 ASCII 11000000 -> A
int long
REALES
CARACTERES
DECLARACION DE VARIABLES
Al declarar una variable se le asigna espacio en memoria y una direccin para dicho espacio
Tipo de dato y
Nombre de variable(identificador)
Ejemplo:
int a, b; float c; int a; char c;
Especifica cuanta memoria debe reservarse y Como se van a interpretar dichos datos
f = a + b
DIRECCIONES DE MEMORIA
Las variables
Ejemplo:
&a es 1000
Un puntero
DECLARACION DE PUNTEROS
int *p;
Un tipo de dato
El puntero solo podr almacenar direcciones de memoria de variables del tipo especificado Se pueden definir punteros de cualquier tipo:
float *pf; char *pc;
1000 1001 1002 1003 1004 1005
CONSULTANDO CONTENIDO
A travs del puntero se puede llegar a conocer todo sobre la variable Ejemplo:
char c, *pc1, *pc2; pc1 = &c;
Si quiero conocer el contenido al que apunta un puntero, uso el operador *, sobre dicho puntero Es equivalente a :
c = A Pc1=&c printf(%c, *pc1); *pc1 = N printf(%c,c);
printf(%c, c); Es equivalente a : c = N Imprime N pues c ya cambio
Ejercicio
EJERCICIO EN CLASE
int x,y; int *p1,*p2; x = -42; y = 163; p1 = &x; p2 = &y; *p1 = 17; *p2 = x+5; *p1 = *p2; p1 = p2; p1 = NULL; p2 = NULL;
Es equivalente a escribir x = y; Esto indica que p1 ahora apunta a la misma variable que p2
1000
1004 1008 1012
y p1
p2
PASO DE PARAMETROS
Por valor
Por referencia
Recibe una copia Similar a cuando va al hacer algn tramite y le piden al cdula
No entrega la cdula verdadera Entrega una copia La verdadera estar segura, aunque quemen y destruyan la copia
x = 5 printf(%d\n,x); funct(x); printf(%d\n,x); void funct(int y){ y = y+1; printf(%d\n,y); }
Se imprime 5, el valor de x no cambia aunque la funcin haya intentado modificarla
Ejemplo:
No hay copias Si algo se le hace al parmetro, se le esta haciendo a la variable Para esto, se usan punteros La funcin trabaja con un puntero a la variable enviada
Ejemplo:
Ejercicio
TIPO ARREGLOS
FORMATO DECLARACION
Bytes
int arrEj[10];
Variables que almacenen mas de un valor Variables que representen informacin de la vida real Estarn formados a partir de tipos de datos simples
}Reg;
UNIONES
100
En C, tenemos:
}Un;
ARREGLOS
Conjunto de elementos
A
0 1 2 3 4
... 99
En C, siempre el ndice mas pequeo es el 0: limite inferior El limite superior, es 1 menos que la dimensin
OPERACIONES
Tipo de dato: Conjunto de valores y operaciones definidas solo para esos valores
Consulta de un elemento
Modificacin de un elemento
A[i] = 0;
REPRESENTACION INTERNA
1000
1008
1016
El computador internamente
No almacena la direccin de todos los elementos del 1024 arreglo Solo almacena la direccin del primer elemento 1032 El resto lo calcula as:
&Lista[i] -> &Lista[0] + (i*sizeof(Lista[0]))
Siempre reserva memoria Aunque la variable no se use, ya se reservo memoria para ella: ESTATICA
En C se usan
int *a; //No se reserva nada .. /*Cuando se desee, se reserva*/ a = malloc(sizeof(int)); //La variable normalmente *a = 3;
ARREGLOS DINAMICOS
Donde no hayamos predefinido cuantos elementos max. tendremos Queremos usar arreglos dinmicos
Y LIBERA..
Al pedir memoria dinmicamente Se debe liberar dentro del programa En C se libera usando la funcin free
Ejercicio
ARITMETICA DE PUNTEROS
Los operadores + y
102
108
104
EJERCICIO EN CLASE
main(){ double Lista[3]; double *p,*p1,*p2; int k; Lista[0] = 1; Lista[1] = 1.1; Lista[2] = 1.2; p = Lista; p = p + 2; printf(%d, *p); p = p - 1; printf(%d, *p); p1 = Lista+2; p2 = &Lista[0]; k = p1-p2; printf(%d, k); }
p2
1000 1 1008
Lista[0]
Lista[1]
1.1
1016 1.2
p se mueve 2 desfases
Lista[2]
p1
p retrocede un desfase
Da el total de desfases entre p1 y p2
Ejercicio
Necesitare tambin el tamao del arreglo? Si es as, tambin debe incluirse como parmetro
float CalcPromedio(float A[], int size); float funct(float B[]);
En prototipos y cabecera
En el cuerpo de la funcin
float CalcPromedio(float A[], int size){
.. A[i] = 3;
Ejercicio
ARREGLOS BIDIMENSIONALES
La programacin ofrece innumerables opciones Un elemento de un arreglo, puede ser otro arreglo
int A[3][3]; A[3] es un arreglo de tres elementos Cada elemento es otro arreglo de 3 elementos enteros
(0,0) (0,1) (0,2) (1,0) (1,1) (1,2)
A[0] A[1] A[2]
A[0][0] A[0]1] A[0][2] A[1][0] A[1][1] A[1][2] A[2][0] A[2][1] A[2][2]
int A[3][3];
Ejercicio
ESTRUCTURAS o REGISTROS
Ejemplo:
Es la declaracin del nuevo tipo de dato: NombreCompleto Con este tipo de dato, podremos crear variables: NombreCompleto snombre, enombre;
USANDO ESTRUCTURAS
Tiene la misma forma que la del nuevo tipo de dato Cada miembro/campo ocupa memoria Para acceder a un campo, se indica,
Los registros de tipo NombreCompleto, tendrn la misma estructura Cada dato tiene diferente tamao y espacio en memoria Cada dato representa una informacin diferente
snombre
ultimo
primero
inicial
Ejercicio
UNIONES
Permite que una variable se interprete de varias formas distintas, dependiendo de la necesidad
En una estructura
En una unin
UNIONES
typedef union ValorPolimorfico{
int valor_entero; float valor_real; };
typedef enum {Entero, Real} Tdato; typedef union ValorPolimorifco{ int valor_entero; float valor_real;
Tdato tipo;
};
printf(Tipo de dato:);
a.tipo = GetInteger(); if a.tipo == Entero then a.valor_entero = 9;
AMBITO DE VARIABLES
Son variables con mbito local Solo son validas en ese ambiente,