Professional Documents
Culture Documents
ESTRUCTURAS DE DATOS
OBJETIVOS
DATO
Edad: 22
Promedio: 7.5
-> entero
-> real
INFORMACIN
Empleado
Horas
Juan, Perez
160
Pedro, Rodriguez
155
Juan, Perez
$320
Luis, Pozo
120
Pedro, Rodriguez
$310
Luis, Pozo
$240
Datos de entrada(ingresados x
teclado)
Procesamiento:
Calcular salarios
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
NOMBRE
CONJUNTO DE VALORES
OPERACIONES
Enteros
Reales
Lgicos
Verdadero o Falso(1 o 0)
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
ALMACENANDO DATOS
TIPO DE DATO
#bytes
Representacin interna
En ANSI C
ENTEROS
2
4
8
int
long
REALES
8
16
Mantisa x base(exponente)
387.53 -> 38753 x 10-2
00000000100101110110000111111110
float
double
CARACTERES
ASCII
11000000 -> A
char
DECLARACION DE
VARIABLES
Tipo de dato y
Nombre de variable(identificador)
Ejemplo:
int a, b;
float c;
int a;
char c;
100
101
102
103
104
4 bytes,
dir: 100
1 byte,
dir: 104
DIRECCIONES DE
MEMORIA
Las variables
Ejemplo:
int a;
a = 3;
printf(Valor:%d Dir: %d, a, &a);
Un puntero
1000
1001
1002
1003
&a es
1000
DECLARACION DE
PUNTEROS int *p;
Un tipo de dato
1000 pt
Un identificador que siempre va antecedido del operador *
char *pc;
1000
1001
1002
1003
1004
1005
int *pt, x;
x = 3;
pt = &x;
pt almacena la
direccin de x, se
dice que pt apunta
ax
CONSULTANDO CONTENIDO
Ejemplo:
Ejercicio
c = A
printf(%c, *pc1);
*pc1 = N
printf(%c,c);
Es equivalente a :
c = N
Imprime N pues c ya
cambio
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;
1000
-42
17
22
1004
163
22
1008
1000
1004
1000
1004
0
p1
1012
1004
0
1004
p2
Es equivalente a
escribir
x = y;
PASO DE PARAMETROS
Y retornan un valor
Por valor
Por referencia
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
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
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
TIPOS DE DATOS
COMPUESTOS
En ocasiones se necesitan
tipos de datos mas complejos,
y estructurados
En C, tenemos:
TIPO
FORMATO
DECLARACION
Bytes
ARREGLOS
int arrEj[10];
10*2 = 20
2 + 100 =
102
}Reg;
UNIONES
}Un;
100
ARREGLOS
Conjunto de elementos
int A[100];
El tipo de los elementos, el identificador y
El numero de elementos (dimensin)
... 99
OPERACIONES
Tipo de dato:
Conjunto de valores y
operaciones definidas solo
para esos valores
Consulta de un elemento
Modificacin de un elemento
REPRESENTACION
INTERNA
El computador internamente
1000
1008
Lista[1]
1016
Lista[2]
Lista[0]
Lista[3]
Lista[4]
RESERVA DE MEMORIA
DINAMICA
La declaracin de una variable
a no apunta a
otra variable,
tiene memoria
propia, solo para
el
En C se usan
Punteros y
#include <stdlib.h>
void *malloc(size_t size);
ARREGLOS DINAMICOS
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..
int *a;
Cuando
se libera
para una
variable
a = malloc...;
free(a);
Ejercicio
ARITMETICA DE
PUNTEROS
Los operadores + y
int x;
int *p;
p = &x;
102
108
104
p2
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);
}
Ejercicio
1000
1
Lista[0]
1008
1.1
1016
1.2
p se mueve 2
desfases
p retrocede un
desfase
Da el total de
desfases entre p1 y
p2
Lista[1]
Lista[2]
p1
PASO DE ARREGLOS A
FUNCIONES
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;
Ejercicio
ARREGLOS
BIDIMENSIONALES
int A[3][3];
A[3] es un arreglo de tres elementos
Cada elemento es otro arreglo de 3 elementos enteros
int A[3][3];
Ejercicio
A[0]
A[1]
A[2]
ESTRUCTURAS o
REGISTROS
Es un grupo de componentes. Cada componente
Ejemplo:
USANDO ESTRUCTURAS
snombre
primer
o
ultimo
inici
al
Ejercicio
UNIONES
En una estructura
En una unin
UNIONES
Tdato tipo;
int valor_entero;
float valor_real;
};
};
ValorPolimorfico a;
ValorPolimorfico a;
printf(Tipo de dato:);
a.valor_entero = 9;
a.tipo = GetInteger();
a.valor_real = 8.9;
AMBITO DE VARIABLES