Sie sind auf Seite 1von 34

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
una herramienta de potencial importancia
Diferenciar entre arreglos y estructuras
Utilizar correctamente las estructuras, punteros a
estructuras, arreglos de estructuras, etc.
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
Analicemos el siguiente hecho:
El estudiante de nombre Pedro Velez de 22 aos, tiene un promedio de 7.5
Podemos tomar los siguientes datos
Nombre: Pedro Velez -> Conjunto de Caracteres
Edad: 22 -> entero
Promedio: 7.5 -> real
INFORMACIN
Es el resultado deseado luego de procesar los datos
Los datos, al ser procesados, se convierten en
informacin til o resultados.



Procesamiento:
Calcular salarios
Juan, Perez $320
Pedro, Rodriguez $310
Luis, Pozo $240
Datos de salida(se muestran
en el monitor)
Datos de entrada(ingresados x
teclado)
Juan, Perez
Pedro, Rodriguez
Luis, Pozo
160
155
120
Empleado Horas
Valor por hora = $2
Cmo representar los datos?
Los seres humanos:
Usamos lenguaje natural o smbolos
Ejemplo:
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
El conjunto de 8 bits -> 1 byte
TIPOS DE DATOS
Los datos se clasifican en TIPOS
Son los diferentes dominios existentes. Ejemplo:
Edad, Ao de Nacimiento, Numero de multas
Tienen dominio numrico
Nombre, Direccin, Num. Cedula,
Caen en el dominio de la informacin tipo texto
Y las operaciones permitidas para dicho dominio
Un conjunto de valores y operaciones
definidas solo para esos valores
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
TIPOS DE DATOS BASICOS
NOMBRE CONJUNTO DE VALORES OPERACIONES
Enteros Negativos y positivos sin decimal Sumar, restar, dividir, multiplicar,
residuo
Reales Negativos y positivos, con decimal Sumar, restar, dividir, multiplicar
Lgicos Verdadero o Falso(1 o 0) And, Or, Not
Caracteres Letras, nmeros, especiales, juntos
forman una cadena
Sumar carcter + entero restar,
multiplicar por entero
Los podemos distinguir fcilmente, estn en el diario vivir:
El Sr. Vera de 63 aos tiene cedula No. 0908815533, y paga $120 de
impuestos
Son tipos de datos simples
Que permiten representar informacin numrica, caracteres, etc.
Y EN LA COMPUTADORA?
Solo vienen integrados los tipos de datos bsicos
En la computadora
Cada byte es un casillero y tiene una direccin en memoria
Los datos (nmeros y letras) se almacena en estos
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
PERO, un carcter SIEMPRE ocupara casillas de 1 byte
1000
1001
1002
1003
ALMACENANDO DATOS
TIPO DE DATO #bytes Representacin interna En ANSI C
ENTEROS 2
4
8
Positivos: conjunto de bits
38 -> 00100110
Negativos:Complemento a Dos
-38 -> 11011001
int
long
REALES 8
16
Mantisa x base
(exponente)
387.53 -> 38753 x 10
-2
00000000100101110110000111111110
float
double
CARACTERES 1 ASCII
11000000 -> A
char
DECLARACION DE VARIABLES
Una declaracin de variables en C incluye
Tipo de dato y
Nombre de variable(identificador)
Ejemplo:
int a, b;
float c;
Para que se declaran variables?
Especifica cuanta memoria debe reservarse y
Como se van a interpretar dichos datos
f = a + b
Es una suma de enteros, que al final se convierte a real
Al declarar una variable se
le asigna espacio en
memoria y una direccin
para dicho espacio

int a;
4 bytes,
dir: 100
1 byte,
dir: 104
100
101
102
103
104
char c;
DIRECCIONES DE MEMORIA
1000
1001
1002
1003
&a es
1000
Las variables
Tienen direcciones de memoria
Si deseamos conocer dicha direccin
En lenguaje C
Se usa el operador & de direccin
Ejemplo:
int a;
a = 3;
printf(Valor:%d Dir: %d, a, &a);
Un puntero
Es una variable que puede almacenar direccin de
memoria
DECLARACION DE PUNTEROS
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;
Un identificador que siempre va antecedido del
operador *
pt almacena la
direccin de x, se dice
que pt apunta a x
x
pt
int *p;
1000
1001
1002
1003
1004
1005
1000
int *pt, x;
x = 3;
pt = &x;
3
CONSULTANDO CONTENIDO
Si un puntero apunta a una variable
A travs del puntero se puede llegar a conocer todo sobre la variable
Ejemplo:

c = A
printf(%c, *pc1);
*pc1 = N
printf(%c,c);
Es equivalente a :
printf(%c, c);
Es equivalente a :
c = N
Imprime N pues c ya
cambio
char c, *pc1, *pc2;
pc1 = &c;
Si quiero conocer la direccin, uso directamente el puntero

printf(%d, pc1); //Imprimo la dir. Almacenada por pc1
pc2 = pc1; //pc2 almacena la misma dir. que pc1
Si quiero conocer el contenido al que apunta un puntero, uso el
operador *, sobre dicho puntero
Ejercicio
EJERCICIO EN CLASE
*p1 = *p2;
int x,y;
int *p1,*p2;
x = -42;
y = 163;
p1 = &x;
p2 = &y;
*p1 = 17;
*p2 = x+5;
1000
1004
Es equivalente a escribir
x = y;
p1 = p2;
Esto indica que p1
ahora apunta a la
misma variable que p2
1004
p1 = NULL;
p2 = NULL;
Esto es equivalente a encerar el
puntero, y decir que no apunta a ninguna
variable
1000
1004
1008
1012
x
y
p1
p2
-42
22
1000
1004
17 22
0
0
163
1004
PASO DE PARAMETROS
Las funciones son porciones de cdigo
Ejecutan una tarea especifica
Usualmente toman datos de entrada->parmetros
Y retornan un valor
Los parmetros se pueden enviar de dos formas:
Por valor
Por referencia
PASO POR VALOR
La funcin no recibe la variable enviada
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
Ejemplo:
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
PASO POR REFERENCIA
Aqu si la funcin recibe exactamente la variable
enviada
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
Sabe todo sobre esa variable y se pude acceder a travs de *
Ejemplo:


x = 5
printf(%d\n,x);
funct(&x);
printf(%d\n,x);

void funct(int *py){
*py = *py+1;
printf(%d\n,*py);
}
Se imprime 6, el valor de x cambi
dentro de la funcin
Ejercicio
TIPOS DE DATOS COMPUESTOS
En ocasiones se necesitan
tipos de datos mas
complejos, y estructurados
Variables que almacenen mas
de un valor
Variables que representen
informacin de la vida real
Estarn formados a partir de
tipos de datos simples
En C, tenemos:
TIPO FORMATO
DECLARACION
Bytes
ARREGLOS
int arrEj[10]; 10*2 = 20
ESTRUCTURAS
typedef struct TReg{
int ID;
char Texto[100];
}Reg;
2 + 100 =
102
UNIONES
typedef union TUn{
int ID;
char Texto[100];
}Un;
100
ARREGLOS
Conjunto de elementos
Finito, Ordenado y Homogneo,
Todos sus elementos son del mismo tipo
Un arreglo esttico se declara
int A[100];
El tipo de los elementos, el identificador y
El numero de elementos (dimensin)
Cada elemento del arreglo tiene un ndice
En C, siempre el ndice mas pequeo es el 0: limite inferior
El limite superior, es 1 menos que la dimensin
Si el arreglo tiene 100 elementos, el ndice mas alto es el 99
Y si un entero ocupa 4 bytes, el arreglo ocupa 400 bytes seguidos
0 1 2 3 4
...
A
99
OPERACIONES
No basta con la declaracin, para ser tratado como
un tipo de dato
Faltan las operaciones para actuar sobre l
Consulta de un elemento
//Consulto el contenido de los elementos 4 y 5 de A
printf(%d %d,A[4], A[5]);
Modificacin de un elemento
A[3] = 2; //Almaceno un valor en el elemento 3 de A
for(i = 0; i < 100; i++)
A[i] = 0;
Tipo de dato:
Conjunto de valores y operaciones
definidas solo para esos valores
REPRESENTACION INTERNA
Cuantos bytes ocupa un tipo de dato o variable?
En C lo indica el operador sizeof
Ejemplo:
int a;
printf(%d %d, sizeof(int), sizeof(a));
El computador internamente
No almacena la direccin de todos los elementos del
arreglo
Solo almacena la direccin del primer elemento
El resto lo calcula as:
1000
1008
1016
1024
1032
Lista[0]
Lista[1]
Lista[2]
Lista[3]
Lista[4]
&Lista[i] -> &Lista[0] + (i*sizeof(Lista[0]))
RESERVA DE MEMORIA
DINAMICA
La declaracin de una variable
Siempre reserva memoria
Aunque la variable no se use, ya se reservo memoria para ella: ESTATICA
Si deseamos reservar memoria, pero no en la declaracin
Si no, a voluntad dentro del programa
La reserva seria dinmica
En C se usan
Punteros y
Las funciones de librera
#include <stdlib.h>
void *malloc(size_t size);
int *a; //No se reserva nada
..
/*Cuando se desee, se reserva*/
a = malloc(sizeof(int));
//La variable normalmente
*a = 3;
a no apunta a otra
variable, tiene
memoria propia,
solo para el
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;
Dentro del programa, se pide memoria cuando se necesite:
arreglo = malloc(sizeof(int)*20);


Para indicar el nuevo tamao se puede
usar una constante o una variable,o
cualquier expresin
main(){
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
int *a;
a = malloc...;

free(a);
Cuando se
libera para
una
variable
Ejercicio
ARITMETICA DE PUNTEROS
Los operadores + y
Se pueden usar con punteros
Pero el significado de la operacin cambia un poco
Si un entero ocupa 4 bytes, tomemos este
ejemplo
int x;
int *p;
p = &x;
Si la direccin de x es un valor 100 y decimos
p = p+2;
Que direccin almacena pi?
102 108 104
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);
}
1000
1008
1016
Lista[0]
Lista[1]
Lista[2]
p
p2
p1
p se mueve 2
desfases
p retrocede un
desfase
Da el total de desfases
entre p1 y p2
1
1.1
1.2
Ejercicio
PASO DE ARREGLOS A FUNCIONES
Al pasar un arreglo a una funcin debe tomarse en
cuenta
Necesitare tambin el tamao del arreglo?
Si es as, tambin debe incluirse como parmetro
En prototipos y cabecera
float CalcPromedio(float A[], int size);
float funct(float B[]);
En el cuerpo de la funcin
float CalcPromedio(float A[], int size){
..
A[i] = 3;
}
Siempre recuerde que
El paso de arreglos, es un paso por referencia
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)
(2,0) (2,1) (2,2)
A[0]
A[1]
A[2]
A[0][0]
A[1][0]
A[2][0]
A[0]1]
A[1][1]
A[2][1]
A[0][2]
A[1][2]
A[2][2]
int A[3][3];
Ejercicio
ESTRUCTURAS o REGISTROS
Es un grupo de componentes. Cada componente
Tiene su propio identificador, y
Se conoce como elemento o campo de la estructura
Ejemplo:


Es la declaracin del nuevo tipo de dato: NombreCompleto
Con este tipo de dato, podremos crear variables:
NombreCompleto snombre, enombre;

typedef struct TNombreCompleto{
char Primero[10];
char Inicial;
char Ultimo[10];
}NombreCompleto;
USANDO ESTRUCTURAS
snombre es una variable de tipo NombreCompleto
Tiene la misma forma que la del nuevo tipo de dato
Cada miembro/campo ocupa memoria
Para acceder a un campo, se indica,
La variable seguida de un punto y del nombre del campo. Ejemplo
snombre.Inicial = L;
primero inicial
ultimo
snombre
Los registros de tipo
NombreCompleto, tendrn la
misma estructura
Cada dato tiene diferente
tamao y espacio en
memoria
Cada dato representa una
informacin diferente
Ejercicio
UNIONES
Permite que una variable se interprete de varias formas
distintas, dependiendo de la necesidad
En una estructura
Siempre es vlido referirse a cualquier miembro de la misma
Si hay n miembros, hay n cajones de memoria
En una unin
Solo trabajaremos con un miembro a la vez
Hay un solo cajn de memoria, capaz de almacenar al mas grande de
los miembros
Si el elemento escogido es mas pequeo, sobrara espacio
UNIONES
typedef union ValorPolimorifco{
int valor_entero;
float valor_real;
};

ValorPolimorfico a;
a.valor_entero = 9;
a.valor_real = 8.9;
typedef union ValorPolimorifco{
int valor_entero;
float valor_real;
Tdato tipo;
};

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;
typedef enum {Entero, Real} Tdato;
AMBITO DE VARIABLES
Los parmetros y variables, dentro de una funcin,
Son variables con mbito local
Solo son validas en ese ambiente,
Las variables tambin pueden tener un mbito global
Empiezan a existir desde su declaracin, y
Son liberadas con el alcance de un archivo: variables externas
Para darle privacidad a una variable
Para que no pueda ser vista por otros archivos,
Se la declara static, con mbito global para archivo nicamente

Das könnte Ihnen auch gefallen