Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Tipos de Datos
Tipos de Datos
ESTRUCTURAS DE DATOS
OBJETIVOS
Manejo correcto y apropiado de punteros y reserva
de memoria dinmica
Reconocer el tipo de dato void y void * en C como
DATO
Informacin en bruto, sin ningn significado Dado un enunciado, evento o accin, los datos
INFORMACIN
Es el resultado deseado luego de procesar los datos Los datos, al ser procesados, se convierten en
Horas 160
Pedro, Rodriguez
Luis, Pozo Valor por hora = $2
155
120
$320
$310 $240
Un 1 o un 0 -> bit
TIPOS DE DATOS
Los datos se clasifican en TIPOS Son los diferentes dominios existentes. Ejemplo: Edad, Ao de Nacimiento, Numero de multas
RECORDAR
Un tipo de dato es el conjunto de valores Al que puede pertenecer una constante Que puede asumir una variable o expresin Que puede ser generado por una funcin De una constante, variable o expresin Se puede deducir su tipo de dato Ya sea de su forma o de su declaracin Sin necesidad que se ejecute ningn proceso Las operaciones entre datos Necesitan participantes (argumentos) de determinado tipo Producen resultados de otro o el mismo tipo
El Sr. Vera de 63 aos tiene cedula No. 0908815533, y paga $120 de impuestos
Y EN LA COMPUTADORA?
Solo vienen integrados los tipos de datos bsicos 1000 En la computadora
1001 1002 Cada byte es un casillero y tiene una direccin en memoria 1003
casilleros
Cuantas casilleros ocupa un dato?
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
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
8 16 1
CARACTERES
Una declaracin de variables en C incluye Tipo de dato y Nombre de variable(identificador) Ejemplo: int a;
int a, b; float c;
char c;
Para que se declaran variables? 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 1000 Se pueden definir punteros de cualquier1001 tipo: 3
1000 pt
operador *
CONSULTANDO CONTENIDO
Si un puntero apunta a una variable
A travs del puntero se puede llegar a conocer todo sobre la variable char c, *pc1, *pc2; Ejemplo:
pc1 = &c;
Si quiero conocer el contenido al que apunta un puntero, uso el Es equivalente a : operador *, sobre dicho puntero printf(%c, c);
c = A printf(%c, *pc1); *pc1 = N 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
Las funciones son porciones de cdigo
Ejemplo:
funct(x); printf(%d\n,x);
enviada
No hay copias Si algo se le hace al parmetro, se le esta haciendo a la variable Para esto, se usan punteros = 5 La funcin x trabaja con un puntero Se a imprime la variable enviada 6, el valor de x cambi
Sabe
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 Finito, Ordenado y Homogneo,
Un arreglo esttico se declara int A[100]; El tipo de los elementos, el identificador y El numero de elementos (dimensin) A Cada elemento del arreglo tiene un ndice En C, siempre el ndice mas pequeo es el 0: limite inferior 0 1 2 3 El limite superior, es 1 menos que la dimensin
... 99
seguidos
OPERACIONES
Tipo de dato: Conjunto de valores y operaciones definidas solo para esos valores
un tipo de dato
Faltan las operaciones para actuar sobre l
Consulta de un elemento
Modificacin de un elemento
A[i] = 0;
REPRESENTACION INTERNA
Cuantos bytes ocupa un tipo de dato o
variable?
1000
1008
1016
El computador internamente No almacena la direccin de todos los elementos 1024 del 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
En ocasiones deseamos usar arreglos Donde no hayamos predefinido cuantos elementos max. tendremos Queremos usar arreglos dinmicos Se declara el arreglo potencial:
int *arreglo;
int *arreglo, n; printf(Ingrese el tamao del arreglo:); n = GetInteger(); arreglo = malloc(sizeof(int)*n); printf(Ahora tiene %d elementos para trabajar\n,n); ... }
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 Se pueden usar con punteros Pero el significado de la operacin cambia un poco
ejemplo
La suma indica que p se mueva 2 enteros mas adelante Cada entero equivale a 4 bytes 100 + 2*4 = 108
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
cuenta
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
}
.. A[i] = 3;
ARREGLOS BIDIMENSIONALES
int A[3][3];
(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]
Ejercicio
ESTRUCTURAS o REGISTROS
Es un grupo de componentes. Cada componente
Ejemplo:
NombreCompleto
Con este tipo de dato, podremos crear variables:
USANDO ESTRUCTURAS
snombre
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.Inicial = L; snombre
primero
inicial
ultimo
Ejercicio
UNIONES
Permite que una variable se interprete de varias formas
En una unin
UNIONES
typedef enum {Entero, Real} Tdato; typedef union ValorPolimorifco{
ValorPolimorfico a; printf(Tipo de dato:); a.tipo = GetInteger(); if a.tipo == Entero then a.valor_entero = 9; elseif a.tipo == Real then a.valor_real = 8.9;
AMBITO DE VARIABLES
Los parmetros y variables, dentro de una funcin,
Son variables con mbito local Solo son validas en ese ambiente,